private static GuardedByExpression bind(JCTree.JCExpression exp, BinderContext context) {
    GuardedByExpression expr = BINDER.visit(exp, context);
    checkGuardedBy(expr != null, String.valueOf(exp));
    checkGuardedBy(expr.kind() != Kind.TYPE_LITERAL, "Raw type literal: %s", exp);
    return expr;
  }
@Test
  public void explicitThisOuterClass() {
    assertThat(
            bind(
                "Inner",
                "this.lock",
                forSourceLines(
                    "threadsafety/Test.java",
                    "package threadsafety;",
                    "class Outer {",
                    "  Object lock;",
                    "  class Inner {",
                    "    int x;",
                    "  }",
                    "}")))
        .isEqualTo("(SELECT (SELECT (THIS) outer$threadsafety.Outer) lock)");
  }