| Index: pkg/analyzer/test/generated/resolver_test.dart
|
| diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
|
| index cc31a717a30896098a256fd1cbae8f60a3b82c95..ebb09c9ccb4526effdc63f298ce42e2854315ce5 100644
|
| --- a/pkg/analyzer/test/generated/resolver_test.dart
|
| +++ b/pkg/analyzer/test/generated/resolver_test.dart
|
| @@ -12,6 +12,7 @@ import 'package:analyzer/dart/ast/visitor.dart';
|
| import 'package:analyzer/dart/element/element.dart';
|
| import 'package:analyzer/dart/element/type.dart';
|
| import 'package:analyzer/file_system/memory_file_system.dart';
|
| +import 'package:analyzer/src/dart/element/builder.dart';
|
| import 'package:analyzer/src/dart/element/element.dart';
|
| import 'package:analyzer/src/dart/element/type.dart';
|
| import 'package:analyzer/src/error/codes.dart';
|
| @@ -28,6 +29,7 @@ import 'package:test/test.dart';
|
| import 'package:test_reflective_loader/test_reflective_loader.dart';
|
|
|
| import 'analysis_context_factory.dart';
|
| +import 'parser_test.dart';
|
| import 'resolver_test_case.dart';
|
| import 'test_support.dart';
|
|
|
| @@ -2591,6 +2593,107 @@ class TypeResolverVisitorTest {
|
| nameScope: libraryScope);
|
| }
|
|
|
| + void test_modeApi() {
|
| + CompilationUnit unit = ParserTestCase.parseCompilationUnit(r'''
|
| +class C extends A with A implements A {
|
| + A f = new A();
|
| + A m() {
|
| + A v1;
|
| + }
|
| +}
|
| +A f([A p = const A()]) {
|
| + A v2;
|
| +}
|
| +A V = new A();
|
| +''');
|
| + var unitElement = new CompilationUnitElementImpl('/test.dart');
|
| + ClassElementImpl A = ElementFactory.classElement2('A');
|
| +
|
| + // Build API elements.
|
| + {
|
| + var holder = new ElementHolder();
|
| + unit.accept(new ApiElementBuilder(holder, unitElement));
|
| + }
|
| +
|
| + // Resolve API types.
|
| + {
|
| + MemoryResourceProvider resourceProvider = new MemoryResourceProvider();
|
| + InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(
|
| + resourceProvider: resourceProvider);
|
| + var source = resourceProvider.getFile('/test.dart').createSource();
|
| + var libraryElement = new LibraryElementImpl.forNode(context, null)
|
| + ..definingCompilationUnit = unitElement;
|
| + var libraryScope = new LibraryScope(libraryElement);
|
| + var visitor = new TypeResolverVisitor(
|
| + libraryElement, source, _typeProvider, _listener,
|
| + nameScope: libraryScope, mode: TypeResolverMode.api);
|
| + libraryScope.define(A);
|
| + unit.accept(visitor);
|
| + }
|
| +
|
| + // Top-level: C
|
| + {
|
| + var c = unit.declarations[0] as ClassDeclaration;
|
| +
|
| + // The extends/with/implements types are resolved.
|
| + expect(c.extendsClause.superclass.toString(), 'A');
|
| + expect(c.withClause.mixinTypes[0].type.toString(), 'A');
|
| + expect(c.implementsClause.interfaces[0].type.toString(), 'A');
|
| +
|
| + {
|
| + var fd = c.members[0] as FieldDeclaration;
|
| + // The field type is resolved.
|
| + expect(fd.fields.type.type.toString(), 'A');
|
| + // The type in the initializer is not resolved.
|
| + var f = fd.fields.variables[0];
|
| + var fi = f.initializer as InstanceCreationExpression;
|
| + expect(fi.constructorName.type.type, isNull);
|
| + }
|
| +
|
| + {
|
| + var m = c.members[1] as MethodDeclaration;
|
| + // The return type is resolved.
|
| + expect(m.returnType.type.toString(), 'A');
|
| + // The local variable type is not resolved.
|
| + var body = m.body as BlockFunctionBody;
|
| + var vd = body.block.statements.single as VariableDeclarationStatement;
|
| + expect(vd.variables.type.type, isNull);
|
| + }
|
| + }
|
| +
|
| + // Top-level: f
|
| + {
|
| + var f = unit.declarations[1] as FunctionDeclaration;
|
| + FunctionExpression fe = f.functionExpression;
|
| + // The return type is resolved.
|
| + expect(f.returnType.type.toString(), 'A');
|
| + // The parameter type is resolved.
|
| + var pd = fe.parameters.parameters[0] as DefaultFormalParameter;
|
| + var p = pd.parameter as SimpleFormalParameter;
|
| + expect(p.type.type.toString(), 'A');
|
| + // The parameter default is not resolved.
|
| + {
|
| + var pde = pd.defaultValue as InstanceCreationExpression;
|
| + expect(pde.constructorName.type.type, isNull);
|
| + }
|
| + // The local variable type is not resolved.
|
| + var body = fe.body as BlockFunctionBody;
|
| + var vd = body.block.statements.single as VariableDeclarationStatement;
|
| + expect(vd.variables.type.type, isNull);
|
| + }
|
| +
|
| + // Top-level: V
|
| + {
|
| + var vd = unit.declarations[2] as TopLevelVariableDeclaration;
|
| + // The type is resolved.
|
| + expect(vd.variables.type.toString(), 'A');
|
| + // The initializer is not resolved.
|
| + VariableDeclaration v = vd.variables.variables[0];
|
| + var vi = v.initializer as InstanceCreationExpression;
|
| + expect(vi.constructorName.type.type, isNull);
|
| + }
|
| + }
|
| +
|
| void test_visitCatchClause_exception() {
|
| // catch (e)
|
| CatchClause clause = AstFactory.catchClause("e");
|
|
|