Index: pkg/analyzer/test/dart/element/builder_test.dart |
diff --git a/pkg/analyzer/test/dart/element/builder_test.dart b/pkg/analyzer/test/dart/element/builder_test.dart |
index def1d9da312209d729c0d3c5d0cc70ff166793ae..42d7c90d284e18d631f887abf94aba33e5396db0 100644 |
--- a/pkg/analyzer/test/dart/element/builder_test.dart |
+++ b/pkg/analyzer/test/dart/element/builder_test.dart |
@@ -17,6 +17,8 @@ import 'package:analyzer/src/generated/resolver.dart'; |
import 'package:analyzer/src/generated/source.dart'; |
import 'package:analyzer/src/generated/testing/ast_test_factory.dart'; |
import 'package:analyzer/src/generated/testing/element_factory.dart'; |
+import 'package:analyzer/src/generated/testing/element_search.dart'; |
+import 'package:analyzer/src/generated/testing/node_search.dart'; |
import 'package:analyzer/src/generated/testing/token_factory.dart'; |
import 'package:analyzer/src/generated/utilities_dart.dart'; |
import 'package:test/test.dart'; |
@@ -79,26 +81,52 @@ class C { |
expect(method.parameters[1].displayName, 'b'); |
expect(method.parameters[1].initializer, isNull); |
} |
- expect(method.functions, isEmpty); |
+ expect( |
+ findDeclaredIdentifiersByName(compilationUnit, 'v') |
+ .single |
+ .staticElement, |
+ isNull); |
+ expect( |
+ findDeclaredIdentifiersByName(compilationUnit, 'localFunction') |
+ .single |
+ .staticElement, |
+ isNull); |
} |
void test_api_topLevelFunction_blockBody() { |
- FunctionElement function = buildElementsForText(r''' |
+ FunctionElement topLevelFunction = buildElementsForText(r''' |
void topLevelFunction() { |
int v = 0; |
localFunction() {} |
} |
''').functions[0]; |
- expect(function.functions, isEmpty); |
+ expect(topLevelFunction, isNotNull); |
+ expect(topLevelFunction.name, 'topLevelFunction'); |
+ expect( |
+ findDeclaredIdentifiersByName(compilationUnit, 'v') |
+ .single |
+ .staticElement, |
+ isNull); |
+ expect( |
+ findDeclaredIdentifiersByName(compilationUnit, 'localFunction') |
+ .single |
+ .staticElement, |
+ isNull); |
} |
void test_api_topLevelFunction_expressionBody() { |
- FunctionElement function = buildElementsForText(r''' |
+ FunctionElement topLevelFunction = buildElementsForText(r''' |
topLevelFunction() => () { |
int localVar = 0; |
}; |
''').functions[0]; |
- expect(function.functions, isEmpty); |
+ expect(topLevelFunction, isNotNull); |
+ expect(topLevelFunction.name, 'topLevelFunction'); |
+ expect( |
+ findDeclaredIdentifiersByName(compilationUnit, 'localVar') |
+ .single |
+ .staticElement, |
+ isNull); |
} |
void test_api_topLevelFunction_parameters() { |
@@ -364,10 +392,12 @@ class C { |
} |
void test_visitFunctionExpression_inBlockBody() { |
- List<FunctionElement> functions = |
- buildElementsForText('f() { return () => 42; }').functions[0].functions; |
- expect(functions, hasLength(1)); |
- FunctionElement function = functions[0]; |
+ buildElementsForText('f() { return () => 42; }'); |
+ FunctionDeclaration f = compilationUnit.declarations[0]; |
+ BlockFunctionBody fBody = f.functionExpression.body; |
+ ReturnStatement returnStatement = fBody.block.statements[0]; |
+ FunctionExpression closure = returnStatement.expression; |
+ FunctionElement function = closure.element; |
expect(function, isNotNull); |
expect(function.hasImplicitReturnType, isTrue); |
expect(function.isSynthetic, isFalse); |
@@ -375,10 +405,11 @@ class C { |
} |
void test_visitFunctionExpression_inExpressionBody() { |
- List<FunctionElement> functions = |
- buildElementsForText('f() => () => 42;').functions[0].functions; |
- expect(functions, hasLength(1)); |
- FunctionElement function = functions[0]; |
+ buildElementsForText('f() => () => 42;'); |
+ FunctionDeclaration f = compilationUnit.declarations[0]; |
+ ExpressionFunctionBody fBody = f.functionExpression.body; |
+ FunctionExpression closure = fBody.expression; |
+ FunctionElement function = closure.element; |
expect(function, isNotNull); |
expect(function.hasImplicitReturnType, isTrue); |
expect(function.isSynthetic, isFalse); |
@@ -821,7 +852,7 @@ class C { |
AstTestFactory.variableDeclaration2(variableName, null); |
Statement statement = |
AstTestFactory.variableDeclarationStatement2(null, [variable]); |
- Expression initializer = AstTestFactory.functionExpression2( |
+ FunctionExpression initializer = AstTestFactory.functionExpression2( |
AstTestFactory.formalParameterList(), |
AstTestFactory.blockFunctionBody2([statement])); |
String fieldName = "f"; |
@@ -838,8 +869,7 @@ class C { |
FunctionElement initializerElement = fieldElement.initializer; |
expect(initializerElement, isNotNull); |
expect(initializerElement.hasImplicitReturnType, isTrue); |
- List<FunctionElement> functionElements = initializerElement.functions; |
- expect(functionElements, hasLength(1)); |
+ expect(initializer.element, new isInstanceOf<FunctionElement>()); |
LocalVariableElement variableElement = variable.element; |
expect(variableElement.hasImplicitType, isTrue); |
expect(variableElement.isConst, isFalse); |
@@ -1011,31 +1041,27 @@ main() { |
.accept(new ApiElementBuilder(holder, compilationUnitElement)); |
main = holder.functions.single as FunctionElementImpl; |
} |
- expect(main.functions, isEmpty); |
// Build local elements in body. |
ElementHolder holder = new ElementHolder(); |
FunctionBody mainBody = mainAst.functionExpression.body; |
mainBody.accept(new LocalElementBuilder(holder, compilationUnitElement)); |
- main.functions = holder.functions; |
+ main.encloseElements(holder.functions); |
main.encloseElements(holder.localVariables); |
+ var f1 = findLocalFunction(code, 'f1() {'); |
+ var f2 = findLocalFunction(code, 'f2() {'); |
var v1 = findLocalVariable(code, 'v1;'); |
var v2 = findLocalVariable(code, 'v2;'); |
var v3 = findLocalVariable(code, 'v3;'); |
expect(v1.enclosingElement, main); |
- expect(main.functions, hasLength(1)); |
{ |
- FunctionElement f1 = main.functions[0]; |
expect(f1.name, 'f1'); |
expect(v2.enclosingElement, f1); |
- expect(f1.functions, hasLength(1)); |
{ |
- FunctionElement f2 = f1.functions[0]; |
expect(f2.name, 'f2'); |
expect(v3.enclosingElement, f2); |
- expect(f2.functions, isEmpty); |
} |
} |
} |
@@ -1111,9 +1137,11 @@ main() { |
ElementHolder holder = new ElementHolder(); |
FunctionBody mainBody = mainAst.functionExpression.body; |
mainBody.accept(new LocalElementBuilder(holder, compilationUnitElement)); |
- main.functions = holder.functions; |
- expect(main.functions, hasLength(1)); |
- FunctionElement f = main.functions[0]; |
+ |
+ List<FunctionElement> functions = holder.functions; |
+ main.encloseElements(functions); |
+ |
+ FunctionElement f = findElementsByName(unit, 'f').single; |
expect(f.parameters, hasLength(1)); |
expect(f.parameters[0].initializer, isNotNull); |
} |
@@ -1425,7 +1453,6 @@ class C { |
expect(elementC, isNotNull); |
MethodElement methodM = elementC.methods[0]; |
expect(methodM, isNotNull); |
- expect(methodM.functions, isEmpty); |
} |
void test_visitClassDeclaration_minimal() { |
@@ -1636,7 +1663,6 @@ class C { |
expect(constructor.isExternal, isTrue); |
expect(constructor.isFactory, isFalse); |
expect(constructor.name, ""); |
- expect(constructor.functions, hasLength(0)); |
expect(constructor.parameters, hasLength(0)); |
} |
@@ -1660,7 +1686,6 @@ class C { |
expect(constructor.isExternal, isFalse); |
expect(constructor.isFactory, isTrue); |
expect(constructor.name, ""); |
- expect(constructor.functions, hasLength(0)); |
expect(constructor.parameters, hasLength(0)); |
} |
@@ -1690,7 +1715,6 @@ class C { |
expect(constructor.isExternal, isFalse); |
expect(constructor.isFactory, isFalse); |
expect(constructor.name, ""); |
- expect(constructor.functions, hasLength(0)); |
expect(constructor.parameters, hasLength(0)); |
} |
@@ -1715,7 +1739,6 @@ class C { |
expect(constructor.isExternal, isFalse); |
expect(constructor.isFactory, isFalse); |
expect(constructor.name, constructorName); |
- expect(constructor.functions, hasLength(0)); |
expect(constructor.parameters, hasLength(0)); |
expect(constructorDeclaration.name.staticElement, same(constructor)); |
expect(constructorDeclaration.element, same(constructor)); |
@@ -1741,7 +1764,6 @@ class C { |
expect(constructor.isExternal, isFalse); |
expect(constructor.isFactory, isFalse); |
expect(constructor.name, ""); |
- expect(constructor.functions, hasLength(0)); |
expect(constructor.parameters, hasLength(0)); |
expect(constructorDeclaration.element, same(constructor)); |
} |
@@ -2030,7 +2052,6 @@ class C { |
expect(method, isNotNull); |
expect(method.hasImplicitReturnType, isTrue); |
expect(method.name, methodName); |
- expect(method.functions, hasLength(0)); |
expect(method.parameters, hasLength(0)); |
expect(method.typeParameters, hasLength(0)); |
expect(method.isAbstract, isTrue); |
@@ -2097,7 +2118,6 @@ class A { |
expect(method, isNotNull); |
expect(method.hasImplicitReturnType, isTrue); |
expect(method.name, methodName); |
- expect(method.functions, hasLength(0)); |
expect(method.parameters, hasLength(0)); |
expect(method.typeParameters, hasLength(0)); |
expect(method.isAbstract, isFalse); |
@@ -2141,7 +2161,6 @@ class A { |
expect(getter.isSynthetic, isFalse); |
expect(getter.name, methodName); |
expect(getter.variable, field); |
- expect(getter.functions, hasLength(0)); |
expect(getter.parameters, hasLength(0)); |
} |
@@ -2174,7 +2193,6 @@ class A { |
expect(getter.isSynthetic, isFalse); |
expect(getter.name, methodName); |
expect(getter.variable, field); |
- expect(getter.functions, hasLength(0)); |
expect(getter.parameters, hasLength(0)); |
} |
@@ -2208,7 +2226,6 @@ class A { |
expect(getter.isSynthetic, isFalse); |
expect(getter.name, methodName); |
expect(getter.variable, field); |
- expect(getter.functions, hasLength(0)); |
expect(getter.parameters, hasLength(0)); |
} |
@@ -2237,7 +2254,6 @@ class A { |
expect(method.documentationComment, '/// aaa'); |
expect(method.hasImplicitReturnType, isFalse); |
expect(method.name, methodName); |
- expect(method.functions, hasLength(0)); |
expect(method.parameters, hasLength(0)); |
expect(method.typeParameters, hasLength(0)); |
expect(method.isAbstract, isFalse); |
@@ -2266,7 +2282,6 @@ class A { |
expect(method, isNotNull); |
expect(method.hasImplicitReturnType, isTrue); |
expect(method.name, methodName); |
- expect(method.functions, hasLength(0)); |
expect(method.parameters, hasLength(1)); |
expect(method.typeParameters, hasLength(0)); |
expect(method.isAbstract, isFalse); |
@@ -2312,7 +2327,6 @@ class A { |
expect(setter.name, "$methodName="); |
expect(setter.displayName, methodName); |
expect(setter.variable, field); |
- expect(setter.functions, hasLength(0)); |
expect(setter.parameters, hasLength(0)); |
} |
@@ -2346,7 +2360,6 @@ class A { |
expect(setter.name, "$methodName="); |
expect(setter.displayName, methodName); |
expect(setter.variable, field); |
- expect(setter.functions, hasLength(0)); |
expect(setter.parameters, hasLength(0)); |
} |
@@ -2381,7 +2394,6 @@ class A { |
expect(setter.name, "$methodName="); |
expect(setter.displayName, methodName); |
expect(setter.variable, field); |
- expect(setter.functions, hasLength(0)); |
expect(setter.parameters, hasLength(0)); |
} |
@@ -2403,7 +2415,6 @@ class A { |
expect(method, isNotNull); |
expect(method.hasImplicitReturnType, isTrue); |
expect(method.name, methodName); |
- expect(method.functions, hasLength(0)); |
expect(method.parameters, hasLength(0)); |
expect(method.typeParameters, hasLength(0)); |
expect(method.isAbstract, isFalse); |
@@ -2432,7 +2443,6 @@ class A { |
expect(method, isNotNull); |
expect(method.hasImplicitReturnType, isTrue); |
expect(method.name, methodName); |
- expect(method.functions, hasLength(0)); |
expect(method.parameters, hasLength(0)); |
expect(method.typeParameters, hasLength(1)); |
expect(method.isAbstract, isFalse); |
@@ -2596,11 +2606,15 @@ abstract class _BaseTest extends ParserTestCase { |
return EngineTestCase.findSimpleIdentifier(compilationUnit, code, prefix); |
} |
- LocalVariableElement findLocalVariable(String code, String prefix) { |
+ LabelElement findLabel(String code, String prefix) { |
return findIdentifier(code, prefix).staticElement; |
} |
- LabelElement findLabel(String code, String prefix) { |
+ FunctionElement findLocalFunction(String code, String prefix) { |
+ return findIdentifier(code, prefix).staticElement; |
+ } |
+ |
+ LocalVariableElement findLocalVariable(String code, String prefix) { |
return findIdentifier(code, prefix).staticElement; |
} |