+- ApexFile[@DefiningType = "Foo", @RealLoc = true]
   +- UserClass[@DefiningType = "Foo", @Image = "Foo", @InterfaceNames = (), @Nested = false, @RealLoc = true, @SimpleName = "Foo", @SuperClassName = ""]
      +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 1, @Override = false, @Private = false, @Protected = false, @Public = true, @RealLoc = true, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
      +- Field[@DefiningType = "Foo", @Image = "x", @Name = "x", @RealLoc = true, @Type = "Integer", @Value = null]
      |  +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 0, @Override = false, @Private = false, @Protected = false, @Public = false, @RealLoc = false, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
      +- Field[@DefiningType = "Foo", @Image = "profileUrl", @Name = "profileUrl", @RealLoc = true, @Type = "String", @Value = null]
      |  +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 0, @Override = false, @Private = false, @Protected = false, @Public = false, @RealLoc = false, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
      +- FieldDeclarationStatements[@DefiningType = "Foo", @RealLoc = true, @TypeArguments = (), @TypeName = "Integer"]
      |  +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 0, @Override = false, @Private = false, @Protected = false, @Public = false, @RealLoc = false, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
      |  +- FieldDeclaration[@DefiningType = "Foo", @Image = "x", @Name = "x", @RealLoc = true]
      |     +- VariableExpression[@DefiningType = "Foo", @Image = "anIntegerField", @RealLoc = true]
      |     |  +- ReferenceExpression[@DefiningType = "Foo", @Image = "", @RealLoc = false, @ReferenceType = ReferenceType.LOAD, @SObjectType = false, @SafeNav = true]
      |     |     +- VariableExpression[@DefiningType = "Foo", @Image = "anObject", @RealLoc = true]
      |     |        +- EmptyReferenceExpression[@DefiningType = null, @RealLoc = false]
      |     +- VariableExpression[@DefiningType = "Foo", @Image = "x", @RealLoc = true]
      |        +- EmptyReferenceExpression[@DefiningType = null, @RealLoc = false]
      +- FieldDeclarationStatements[@DefiningType = "Foo", @RealLoc = true, @TypeArguments = (), @TypeName = "String"]
      |  +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 0, @Override = false, @Private = false, @Protected = false, @Public = false, @RealLoc = false, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
      |  +- FieldDeclaration[@DefiningType = "Foo", @Image = "profileUrl", @Name = "profileUrl", @RealLoc = true]
      |     +- MethodCallExpression[@DefiningType = "Foo", @FullMethodName = "toExternalForm", @InputParametersSize = 0, @MethodName = "toExternalForm", @RealLoc = true]
      |     |  +- ReferenceExpression[@DefiningType = "Foo", @Image = "", @RealLoc = false, @ReferenceType = ReferenceType.METHOD, @SObjectType = false, @SafeNav = true]
      |     |     +- MethodCallExpression[@DefiningType = "Foo", @FullMethodName = "user.getProfileUrl", @InputParametersSize = 0, @MethodName = "getProfileUrl", @RealLoc = true]
      |     |        +- ReferenceExpression[@DefiningType = "Foo", @Image = "user", @RealLoc = true, @ReferenceType = ReferenceType.METHOD, @SObjectType = false, @SafeNav = false]
      |     +- VariableExpression[@DefiningType = "Foo", @Image = "profileUrl", @RealLoc = true]
      |        +- EmptyReferenceExpression[@DefiningType = null, @RealLoc = false]
      +- Method[@Arity = 1, @CanonicalName = "bar1", @Constructor = false, @DefiningType = "Foo", @Image = "bar1", @RealLoc = true, @ReturnType = "void", @StaticInitializer = false]
      |  +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 1, @Override = false, @Private = false, @Protected = false, @Public = true, @RealLoc = true, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
      |  +- Parameter[@DefiningType = "Foo", @Image = "a", @RealLoc = true, @Type = "Object"]
      |  |  +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 0, @Override = false, @Private = false, @Protected = false, @Public = false, @RealLoc = false, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
      |  +- BlockStatement[@CurlyBrace = true, @DefiningType = "Foo", @RealLoc = true]
      |     +- ExpressionStatement[@DefiningType = "Foo", @RealLoc = true]
      |     |  +- VariableExpression[@DefiningType = "Foo", @Image = "b", @RealLoc = true]
      |     |     +- ReferenceExpression[@DefiningType = "Foo", @Image = "", @RealLoc = false, @ReferenceType = ReferenceType.LOAD, @SObjectType = false, @SafeNav = true]
      |     |        +- VariableExpression[@DefiningType = "Foo", @Image = "a", @RealLoc = true]
      |     |           +- EmptyReferenceExpression[@DefiningType = null, @RealLoc = false]
      |     +- ExpressionStatement[@DefiningType = "Foo", @RealLoc = true]
      |        +- MethodCallExpression[@DefiningType = "Foo", @FullMethodName = "c1", @InputParametersSize = 0, @MethodName = "c1", @RealLoc = true]
      |           +- ReferenceExpression[@DefiningType = "Foo", @Image = "", @RealLoc = false, @ReferenceType = ReferenceType.METHOD, @SObjectType = false, @SafeNav = true]
      |              +- CastExpression[@DefiningType = "Foo", @RealLoc = true]
      |                 +- VariableExpression[@DefiningType = "Foo", @Image = "b1", @RealLoc = true]
      |                    +- ReferenceExpression[@DefiningType = "Foo", @Image = "", @RealLoc = false, @ReferenceType = ReferenceType.LOAD, @SObjectType = false, @SafeNav = true]
      |                       +- VariableExpression[@DefiningType = "Foo", @Image = "a1", @RealLoc = true]
      |                          +- EmptyReferenceExpression[@DefiningType = null, @RealLoc = false]
      +- Method[@Arity = 2, @CanonicalName = "bar2", @Constructor = false, @DefiningType = "Foo", @Image = "bar2", @RealLoc = true, @ReturnType = "void", @StaticInitializer = false]
      |  +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 1, @Override = false, @Private = false, @Protected = false, @Public = true, @RealLoc = true, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
      |  +- Parameter[@DefiningType = "Foo", @Image = "a", @RealLoc = true, @Type = "Object[]"]
      |  |  +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 0, @Override = false, @Private = false, @Protected = false, @Public = false, @RealLoc = false, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
      |  +- Parameter[@DefiningType = "Foo", @Image = "x", @RealLoc = true, @Type = "int"]
      |  |  +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 0, @Override = false, @Private = false, @Protected = false, @Public = false, @RealLoc = false, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
      |  +- BlockStatement[@CurlyBrace = true, @DefiningType = "Foo", @RealLoc = true]
      |     +- ExpressionStatement[@DefiningType = "Foo", @RealLoc = true]
      |     |  +- VariableExpression[@DefiningType = "Foo", @Image = "aField", @RealLoc = true]
      |     |     +- ReferenceExpression[@DefiningType = "Foo", @Image = "", @RealLoc = false, @ReferenceType = ReferenceType.LOAD, @SObjectType = false, @SafeNav = false]
      |     |        +- MethodCallExpression[@DefiningType = "Foo", @FullMethodName = "aMethod", @InputParametersSize = 0, @MethodName = "aMethod", @RealLoc = true]
      |     |           +- ReferenceExpression[@DefiningType = "Foo", @Image = "", @RealLoc = false, @ReferenceType = ReferenceType.METHOD, @SObjectType = false, @SafeNav = true]
      |     |              +- ArrayLoadExpression[@DefiningType = "Foo", @RealLoc = true]
      |     |                 +- VariableExpression[@DefiningType = "Foo", @Image = "a", @RealLoc = true]
      |     |                 |  +- EmptyReferenceExpression[@DefiningType = null, @RealLoc = false]
      |     |                 +- VariableExpression[@DefiningType = "Foo", @Image = "x", @RealLoc = true]
      |     |                    +- EmptyReferenceExpression[@DefiningType = null, @RealLoc = false]
      |     +- ExpressionStatement[@DefiningType = "Foo", @RealLoc = true]
      |        +- VariableExpression[@DefiningType = "Foo", @Image = "aField", @RealLoc = true]
      |           +- ReferenceExpression[@DefiningType = "Foo", @Image = "", @RealLoc = false, @ReferenceType = ReferenceType.LOAD, @SObjectType = false, @SafeNav = true]
      |              +- MethodCallExpression[@DefiningType = "Foo", @FullMethodName = "aMethod", @InputParametersSize = 0, @MethodName = "aMethod", @RealLoc = true]
      |                 +- ReferenceExpression[@DefiningType = "Foo", @Image = "", @RealLoc = false, @ReferenceType = ReferenceType.METHOD, @SObjectType = false, @SafeNav = false]
      |                    +- ArrayLoadExpression[@DefiningType = "Foo", @RealLoc = true]
      |                       +- VariableExpression[@DefiningType = "Foo", @Image = "a", @RealLoc = true]
      |                       |  +- EmptyReferenceExpression[@DefiningType = null, @RealLoc = false]
      |                       +- VariableExpression[@DefiningType = "Foo", @Image = "x", @RealLoc = true]
      |                          +- EmptyReferenceExpression[@DefiningType = null, @RealLoc = false]
      +- Method[@Arity = 1, @CanonicalName = "getName", @Constructor = false, @DefiningType = "Foo", @Image = "getName", @RealLoc = true, @ReturnType = "String", @StaticInitializer = false]
         +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 1, @Override = false, @Private = false, @Protected = false, @Public = true, @RealLoc = true, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
         +- Parameter[@DefiningType = "Foo", @Image = "accId", @RealLoc = true, @Type = "int"]
         |  +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 0, @Override = false, @Private = false, @Protected = false, @Public = false, @RealLoc = false, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
         +- BlockStatement[@CurlyBrace = true, @DefiningType = "Foo", @RealLoc = true]
            +- VariableDeclarationStatements[@DefiningType = "Foo", @RealLoc = true]
            |  +- ModifierNode[@Abstract = false, @DefiningType = "Foo", @DeprecatedTestMethod = false, @Final = false, @Global = false, @InheritedSharing = false, @Modifiers = 0, @Override = false, @Private = false, @Protected = false, @Public = false, @RealLoc = false, @Static = false, @Test = false, @TestOrTestSetup = false, @Transient = false, @Virtual = false, @WebService = false, @WithSharing = false, @WithoutSharing = false]
            |  +- VariableDeclaration[@DefiningType = "Foo", @Image = "s", @RealLoc = true, @Type = "String"]
            |     +- VariableExpression[@DefiningType = "Foo", @Image = "BillingCity", @RealLoc = true]
            |     |  +- ReferenceExpression[@DefiningType = "Foo", @Image = "", @RealLoc = false, @ReferenceType = ReferenceType.LOAD, @SObjectType = false, @SafeNav = true]
            |     |     +- VariableExpression[@DefiningType = "Foo", @Image = "Account", @RealLoc = true]
            |     |        +- ReferenceExpression[@DefiningType = "Foo", @Image = "contact", @RealLoc = true, @ReferenceType = ReferenceType.LOAD, @SObjectType = false, @SafeNav = false]
            |     +- VariableExpression[@DefiningType = "Foo", @Image = "s", @RealLoc = true]
            |        +- EmptyReferenceExpression[@DefiningType = null, @RealLoc = false]
            +- ReturnStatement[@DefiningType = "Foo", @RealLoc = true]
               +- VariableExpression[@DefiningType = "Foo", @Image = "Name", @RealLoc = true]
                  +- ReferenceExpression[@DefiningType = "Foo", @Image = "", @RealLoc = false, @ReferenceType = ReferenceType.LOAD, @SObjectType = false, @SafeNav = true]
                     +- SoqlExpression[@CanonicalQuery = "SELECT Name FROM Account WHERE Id = :tmpVar1", @DefiningType = "Foo", @Query = "SELECT Name FROM Account WHERE Id = :accId", @RealLoc = true]
                        +- BindExpressions[@DefiningType = "Foo", @RealLoc = true]
                           +- VariableExpression[@DefiningType = "Foo", @Image = "accId", @RealLoc = true]
                              +- EmptyReferenceExpression[@DefiningType = null, @RealLoc = false]
