Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Unified Diff: pkg/analyzer/test/generated/resolver_test.dart

Issue 184893003: New analyzer snapshot. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
Download patch
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 878187ab5c30a553d2eb44b57d3e53776e6d8f39..c388ffa54132306e9463b383623248963067a35e 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -17,6 +17,7 @@ import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/utilities_dart.dart';
import 'package:analyzer/src/generated/java_engine_io.dart';
import 'package:analyzer/src/generated/sdk.dart' show DartSdk;
import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk;
@@ -1695,6 +1696,20 @@ class NonErrorResolverTest extends ResolverTestCase {
verify([source]);
}
+ void test_extraPositionalArguments_implicitConstructor() {
+ Source source = addSource(EngineTestCase.createSource([
+ "class A<E extends num> {",
+ " A(E x, E y);",
+ "}",
+ "class B<E extends num> = A<E>;",
+ "void main() {",
+ " B<int> x = new B<int>(0,0);",
+ "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void test_extraPositionalArguments_typedef_local() {
Source source = addSource(EngineTestCase.createSource([
"typedef A(p1, p2);",
@@ -2941,6 +2956,52 @@ class NonErrorResolverTest extends ResolverTestCase {
verify([source]);
}
+ void test_nonAbstractClassInheritsAbstractMemberOne_mixin_getter() {
+ // 17034
+ Source source = addSource(EngineTestCase.createSource([
+ "class A {",
+ " var a;",
+ "}",
+ "abstract class M {",
+ " get a;",
+ "}",
+ "class B extends A with M {}",
+ "class C extends B {}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_nonAbstractClassInheritsAbstractMemberOne_mixin_method() {
+ Source source = addSource(EngineTestCase.createSource([
+ "class A {",
+ " m() {}",
+ "}",
+ "abstract class M {",
+ " m();",
+ "}",
+ "class B extends A with M {}",
+ "class C extends B {}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_nonAbstractClassInheritsAbstractMemberOne_mixin_setter() {
+ Source source = addSource(EngineTestCase.createSource([
+ "class A {",
+ " var a;",
+ "}",
+ "abstract class M {",
+ " set a(dynamic v);",
+ "}",
+ "class B extends A with M {}",
+ "class C extends B {}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_accessor() {
Source source = addSource(EngineTestCase.createSource([
"abstract class A {",
@@ -3469,6 +3530,73 @@ class NonErrorResolverTest extends ResolverTestCase {
assertNoErrors(source);
}
+ void test_proxy_annotation_superclass() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library L;",
+ "class B extends A {",
+ " m() {",
+ " n();",
+ " var x = g;",
+ " s = 1;",
+ " var y = this + this;",
+ " }",
+ "}",
+ "@proxy",
+ "class A {}"]));
+ resolve(source);
+ assertNoErrors(source);
+ }
+
+ void test_proxy_annotation_superclass_mixin() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library L;",
+ "class B extends Object with A {",
+ " m() {",
+ " n();",
+ " var x = g;",
+ " s = 1;",
+ " var y = this + this;",
+ " }",
+ "}",
+ "@proxy",
+ "class A {}"]));
+ resolve(source);
+ assertNoErrors(source);
+ }
+
+ void test_proxy_annotation_superinterface() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library L;",
+ "class B implements A {",
+ " m() {",
+ " n();",
+ " var x = g;",
+ " s = 1;",
+ " var y = this + this;",
+ " }",
+ "}",
+ "@proxy",
+ "class A {}"]));
+ resolve(source);
+ assertNoErrors(source);
+ }
+
+ void test_proxy_annotation_superinterface_infiniteLoop() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library L;",
+ "class C implements A {",
+ " m() {",
+ " n();",
+ " var x = g;",
+ " s = 1;",
+ " var y = this + this;",
+ " }",
+ "}",
+ "class B implements A{}",
+ "class A implements B{}"]));
+ resolve(source);
+ }
+
void test_recursiveConstructorRedirect() {
Source source = addSource(EngineTestCase.createSource([
"class A {",
@@ -4672,6 +4800,10 @@ class NonErrorResolverTest extends ResolverTestCase {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_extraPositionalArguments_function);
});
+ _ut.test('test_extraPositionalArguments_implicitConstructor', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_extraPositionalArguments_implicitConstructor);
+ });
_ut.test('test_extraPositionalArguments_typedef_local', () {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_extraPositionalArguments_typedef_local);
@@ -5132,6 +5264,18 @@ class NonErrorResolverTest extends ResolverTestCase {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_newWithUndefinedConstructorDefault);
});
+ _ut.test('test_nonAbstractClassInheritsAbstractMemberOne_mixin_getter', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_mixin_getter);
+ });
+ _ut.test('test_nonAbstractClassInheritsAbstractMemberOne_mixin_method', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_mixin_method);
+ });
+ _ut.test('test_nonAbstractClassInheritsAbstractMemberOne_mixin_setter', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_mixin_setter);
+ });
_ut.test('test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_accessor', () {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_accessor);
@@ -5312,6 +5456,22 @@ class NonErrorResolverTest extends ResolverTestCase {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_proxy_annotation_simple);
});
+ _ut.test('test_proxy_annotation_superclass', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_proxy_annotation_superclass);
+ });
+ _ut.test('test_proxy_annotation_superclass_mixin', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_proxy_annotation_superclass_mixin);
+ });
+ _ut.test('test_proxy_annotation_superinterface', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_proxy_annotation_superinterface);
+ });
+ _ut.test('test_proxy_annotation_superinterface_infiniteLoop', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_proxy_annotation_superinterface_infiniteLoop);
+ });
_ut.test('test_recursiveConstructorRedirect', () {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_recursiveConstructorRedirect);
@@ -5654,7 +5814,7 @@ class LibraryTest extends EngineTestCase {
Library _library5;
void setUp() {
- _sourceFactory = new SourceFactory.con2([new FileUriResolver()]);
+ _sourceFactory = new SourceFactory([new FileUriResolver()]);
_analysisContext = new AnalysisContextImpl();
_analysisContext.sourceFactory = _sourceFactory;
_errorListener = new GatheringErrorListener();
@@ -5725,7 +5885,7 @@ class LibraryTest extends EngineTestCase {
JUnitTestCase.assertSame(element, _library5.libraryElement);
}
- Library library(String definingCompilationUnitPath) => new Library(_analysisContext, _errorListener, new FileBasedSource.con1(_sourceFactory.contentCache, FileUtilities2.createFile(definingCompilationUnitPath)));
+ Library library(String definingCompilationUnitPath) => new Library(_analysisContext, _errorListener, new FileBasedSource.con1(FileUtilities2.createFile(definingCompilationUnitPath)));
static dartSuite() {
_ut.group('LibraryTest', () {
@@ -6969,6 +7129,13 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
verify([source]);
}
+ void test_wrongNumberOfTypeArguments_classAlias() {
+ Source source = addSource(EngineTestCase.createSource(["class A {}", "class B<F extends num> = A<F>;"]));
+ resolve(source);
+ assertErrors(source, [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+ verify([source]);
+ }
+
void test_wrongNumberOfTypeArguments_tooFew() {
Source source = addSource(EngineTestCase.createSource(["class A<E, F> {}", "A<A> a = null;"]));
resolve(source);
@@ -7409,6 +7576,10 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
final __test = new StaticTypeWarningCodeTest();
runJUnitTest(__test, __test.test_unqualifiedReferenceToNonLocalStaticMember_setter);
});
+ _ut.test('test_wrongNumberOfTypeArguments_classAlias', () {
+ final __test = new StaticTypeWarningCodeTest();
+ runJUnitTest(__test, __test.test_wrongNumberOfTypeArguments_classAlias);
+ });
_ut.test('test_wrongNumberOfTypeArguments_tooFew', () {
final __test = new StaticTypeWarningCodeTest();
runJUnitTest(__test, __test.test_wrongNumberOfTypeArguments_tooFew);
@@ -8017,6 +8188,51 @@ class HintCodeTest extends ResolverTestCase {
verify([source]);
}
+ void test_overrideOnNonOverridingGetter_invalid() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library dart.core;",
+ "const override = null;",
+ "class A {",
+ "}",
+ "class B extends A {",
+ " @override",
+ " int get m => 1;",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER]);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingMethod_invalid() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library dart.core;",
+ "const override = null;",
+ "class A {",
+ "}",
+ "class B extends A {",
+ " @override",
+ " int m() => 1;",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD]);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingSetter_invalid() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library dart.core;",
+ "const override = null;",
+ "class A {",
+ "}",
+ "class B extends A {",
+ " @override",
+ " set m(int x) {}",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER]);
+ verify([source]);
+ }
+
void test_typeCheck_type_is_Null() {
Source source = addSource(EngineTestCase.createSource(["m(i) {", " bool b = i is Null;", "}"]));
resolve(source);
@@ -8541,6 +8757,18 @@ class HintCodeTest extends ResolverTestCase {
final __test = new HintCodeTest();
runJUnitTest(__test, __test.test_missingReturn_method);
});
+ _ut.test('test_overrideOnNonOverridingGetter_invalid', () {
+ final __test = new HintCodeTest();
+ runJUnitTest(__test, __test.test_overrideOnNonOverridingGetter_invalid);
+ });
+ _ut.test('test_overrideOnNonOverridingMethod_invalid', () {
+ final __test = new HintCodeTest();
+ runJUnitTest(__test, __test.test_overrideOnNonOverridingMethod_invalid);
+ });
+ _ut.test('test_overrideOnNonOverridingSetter_invalid', () {
+ final __test = new HintCodeTest();
+ runJUnitTest(__test, __test.test_overrideOnNonOverridingSetter_invalid);
+ });
_ut.test('test_typeCheck_type_is_Null', () {
final __test = new HintCodeTest();
runJUnitTest(__test, __test.test_typeCheck_type_is_Null);
@@ -8732,10 +8960,10 @@ class TypeResolverVisitorTest extends EngineTestCase {
void setUp() {
_listener = new GatheringErrorListener();
- SourceFactory factory = new SourceFactory.con2([new FileUriResolver()]);
+ SourceFactory factory = new SourceFactory([new FileUriResolver()]);
AnalysisContextImpl context = new AnalysisContextImpl();
context.sourceFactory = factory;
- Source librarySource = new FileBasedSource.con1(factory.contentCache, FileUtilities2.createFile("/lib.dart"));
+ Source librarySource = new FileBasedSource.con1(FileUtilities2.createFile("/lib.dart"));
_library = new Library(context, _listener, librarySource);
LibraryElementImpl element = new LibraryElementImpl(context, ASTFactory.libraryIdentifier2(["lib"]));
element.definingCompilationUnit = new CompilationUnitElementImpl("lib.dart");
@@ -9052,11 +9280,6 @@ class TypeResolverVisitorTest extends EngineTestCase {
class ResolverTestCase extends EngineTestCase {
/**
- * The source factory used to create [Source].
- */
- SourceFactory _sourceFactory;
-
- /**
* The analysis context used to parse the compilation units being resolved.
*/
AnalysisContextImpl _analysisContext;
@@ -9127,8 +9350,8 @@ class ResolverTestCase extends EngineTestCase {
* @return the source object representing the cached file
*/
Source cacheSource(String filePath, String contents) {
- Source source = new FileBasedSource.con1(_sourceFactory.contentCache, FileUtilities2.createFile(filePath));
- _sourceFactory.setContents(source, contents);
+ Source source = new FileBasedSource.con1(FileUtilities2.createFile(filePath));
+ _analysisContext.setContents(source, contents);
return source;
}
@@ -9170,8 +9393,6 @@ class ResolverTestCase extends EngineTestCase {
AnalysisContext get analysisContext => _analysisContext;
- SourceFactory get sourceFactory => _sourceFactory;
-
/**
* Return a type provider that can be used to test the results of resolution.
*
@@ -9186,7 +9407,6 @@ class ResolverTestCase extends EngineTestCase {
*/
void reset() {
_analysisContext = AnalysisContextFactory.contextWithCore();
- _sourceFactory = _analysisContext.sourceFactory;
}
/**
@@ -9234,8 +9454,8 @@ class ResolverTestCase extends EngineTestCase {
* @return the source that was created
*/
FileBasedSource createSource2(String fileName) {
- FileBasedSource source = new FileBasedSource.con1(_sourceFactory.contentCache, FileUtilities2.createFile(fileName));
- _sourceFactory.setContents(source, "");
+ FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile(fileName));
+ _analysisContext.setContents(source, "");
return source;
}
@@ -9358,6 +9578,8 @@ class InheritanceManagerTest extends EngineTestCase {
}
void test_getMapOfMembersInheritedFromClasses_accessor_extends() {
+ // class A { int get g; }
+ // class B extends A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String getterName = "g";
PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, false, _typeProvider.intType);
@@ -9373,6 +9595,8 @@ class InheritanceManagerTest extends EngineTestCase {
}
void test_getMapOfMembersInheritedFromClasses_accessor_implements() {
+ // class A { int get g; }
+ // class B implements A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String getterName = "g";
PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, false, _typeProvider.intType);
@@ -9389,6 +9613,8 @@ class InheritanceManagerTest extends EngineTestCase {
}
void test_getMapOfMembersInheritedFromClasses_accessor_with() {
+ // class A { int get g; }
+ // class B extends Object with A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String getterName = "g";
PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, false, _typeProvider.intType);
@@ -9404,7 +9630,17 @@ class InheritanceManagerTest extends EngineTestCase {
assertNoErrors(classB);
}
+ void test_getMapOfMembersInheritedFromClasses_implicitExtends() {
+ // class A {}
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
+ assertNoErrors(classA);
+ }
+
void test_getMapOfMembersInheritedFromClasses_method_extends() {
+ // class A { int g(); }
+ // class B extends A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String methodName = "m";
MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
@@ -9421,6 +9657,8 @@ class InheritanceManagerTest extends EngineTestCase {
}
void test_getMapOfMembersInheritedFromClasses_method_implements() {
+ // class A { int g(); }
+ // class B implements A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String methodName = "m";
MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
@@ -9437,6 +9675,8 @@ class InheritanceManagerTest extends EngineTestCase {
}
void test_getMapOfMembersInheritedFromClasses_method_with() {
+ // class A { int g(); }
+ // class B extends Object with A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String methodName = "m";
MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
@@ -9453,6 +9693,8 @@ class InheritanceManagerTest extends EngineTestCase {
}
void test_getMapOfMembersInheritedFromInterfaces_accessor_extends() {
+ // class A { int get g; }
+ // class B extends A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String getterName = "g";
PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, false, _typeProvider.intType);
@@ -9468,6 +9710,8 @@ class InheritanceManagerTest extends EngineTestCase {
}
void test_getMapOfMembersInheritedFromInterfaces_accessor_implements() {
+ // class A { int get g; }
+ // class B implements A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String getterName = "g";
PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, false, _typeProvider.intType);
@@ -9484,6 +9728,8 @@ class InheritanceManagerTest extends EngineTestCase {
}
void test_getMapOfMembersInheritedFromInterfaces_accessor_with() {
+ // class A { int get g; }
+ // class B extends Object with A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String getterName = "g";
PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, false, _typeProvider.intType);
@@ -9499,7 +9745,129 @@ class InheritanceManagerTest extends EngineTestCase {
assertNoErrors(classB);
}
+ void test_getMapOfMembersInheritedFromInterfaces_implicitExtends() {
+ // class A {}
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
+ assertNoErrors(classA);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_getter_method() {
+ // class I1 { int m(); }
+ // class I2 { int get m; }
+ // class A implements I2, I1 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String methodName = "m";
+ MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
+ classI1.methods = <MethodElement> [methodM];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ PropertyAccessorElement getter = ElementFactory.getterElement(methodName, false, _typeProvider.intType);
+ classI2.accessors = <PropertyAccessorElement> [getter];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI2.type, classI1.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
+ JUnitTestCase.assertNull(mapA.get(methodName));
+ assertErrors(classA, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_int_str() {
+ // class I1 { int m(); }
+ // class I2 { String m(); }
+ // class A implements I1, I2 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String methodName = "m";
+ MethodElement methodM1 = ElementFactory.methodElement(methodName, null, [_typeProvider.intType]);
+ classI1.methods = <MethodElement> [methodM1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ MethodElement methodM2 = ElementFactory.methodElement(methodName, null, [_typeProvider.stringType]);
+ classI2.methods = <MethodElement> [methodM2];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI1.type, classI2.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
+ JUnitTestCase.assertNull(mapA.get(methodName));
+ assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_method_getter() {
+ // class I1 { int m(); }
+ // class I2 { int get m; }
+ // class A implements I1, I2 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String methodName = "m";
+ MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
+ classI1.methods = <MethodElement> [methodM];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ PropertyAccessorElement getter = ElementFactory.getterElement(methodName, false, _typeProvider.intType);
+ classI2.accessors = <PropertyAccessorElement> [getter];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI1.type, classI2.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
+ JUnitTestCase.assertNull(mapA.get(methodName));
+ assertErrors(classA, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_numOfRequiredParams() {
+ // class I1 { dynamic m(int, [int]); }
+ // class I2 { dynamic m(int, int, int); }
+ // class A implements I1, I2 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String methodName = "m";
+ MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeProvider.dynamicType, []);
+ ParameterElementImpl parameter1 = new ParameterElementImpl.con1(ASTFactory.identifier3("a1"));
+ parameter1.type = _typeProvider.intType;
+ parameter1.parameterKind = ParameterKind.REQUIRED;
+ ParameterElementImpl parameter2 = new ParameterElementImpl.con1(ASTFactory.identifier3("a2"));
+ parameter2.type = _typeProvider.intType;
+ parameter2.parameterKind = ParameterKind.POSITIONAL;
+ methodM1.parameters = <ParameterElement> [parameter1, parameter2];
+ classI1.methods = <MethodElement> [methodM1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeProvider.dynamicType, []);
+ ParameterElementImpl parameter3 = new ParameterElementImpl.con1(ASTFactory.identifier3("a3"));
+ parameter3.type = _typeProvider.intType;
+ parameter3.parameterKind = ParameterKind.REQUIRED;
+ ParameterElementImpl parameter4 = new ParameterElementImpl.con1(ASTFactory.identifier3("a4"));
+ parameter4.type = _typeProvider.intType;
+ parameter4.parameterKind = ParameterKind.REQUIRED;
+ ParameterElementImpl parameter5 = new ParameterElementImpl.con1(ASTFactory.identifier3("a5"));
+ parameter5.type = _typeProvider.intType;
+ parameter5.parameterKind = ParameterKind.REQUIRED;
+ methodM2.parameters = <ParameterElement> [parameter3, parameter4, parameter5];
+ classI2.methods = <MethodElement> [methodM2];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI1.type, classI2.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
+ JUnitTestCase.assertNull(mapA.get(methodName));
+ assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_str_int() {
+ // class I1 { int m(); }
+ // class I2 { String m(); }
+ // class A implements I2, I1 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String methodName = "m";
+ MethodElement methodM1 = ElementFactory.methodElement(methodName, null, [_typeProvider.stringType]);
+ classI1.methods = <MethodElement> [methodM1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ MethodElement methodM2 = ElementFactory.methodElement(methodName, null, [_typeProvider.intType]);
+ classI2.methods = <MethodElement> [methodM2];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI2.type, classI1.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject, mapA.size);
+ JUnitTestCase.assertNull(mapA.get(methodName));
+ assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ }
+
void test_getMapOfMembersInheritedFromInterfaces_method_extends() {
+ // class A { int g(); }
+ // class B extends A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String methodName = "m";
MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
@@ -9515,6 +9883,8 @@ class InheritanceManagerTest extends EngineTestCase {
}
void test_getMapOfMembersInheritedFromInterfaces_method_implements() {
+ // class A { int g(); }
+ // class B implements A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String methodName = "m";
MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
@@ -9531,6 +9901,8 @@ class InheritanceManagerTest extends EngineTestCase {
}
void test_getMapOfMembersInheritedFromInterfaces_method_with() {
+ // class A { int g(); }
+ // class B extends Object with A {}
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String methodName = "m";
MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
@@ -9546,6 +9918,294 @@ class InheritanceManagerTest extends EngineTestCase {
assertNoErrors(classB);
}
+ void test_getMapOfMembersInheritedFromInterfaces_union_differentNames() {
+ // class I1 { int m1(); }
+ // class I2 { int m2(); }
+ // class A implements I1, I2 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String methodName1 = "m1";
+ MethodElement methodM1 = ElementFactory.methodElement(methodName1, _typeProvider.intType, []);
+ classI1.methods = <MethodElement> [methodM1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ String methodName2 = "m2";
+ MethodElement methodM2 = ElementFactory.methodElement(methodName2, _typeProvider.intType, []);
+ classI2.methods = <MethodElement> [methodM2];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI1.type, classI2.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject + 2, mapA.size);
+ JUnitTestCase.assertSame(methodM1, mapA.get(methodName1));
+ JUnitTestCase.assertSame(methodM2, mapA.get(methodName2));
+ assertNoErrors(classA);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_getters() {
+ // class I1 { int get g; }
+ // class I2 { num get g; }
+ // class A implements I1, I2 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String accessorName = "g";
+ PropertyAccessorElement getter1 = ElementFactory.getterElement(accessorName, false, _typeProvider.intType);
+ classI1.accessors = <PropertyAccessorElement> [getter1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ PropertyAccessorElement getter2 = ElementFactory.getterElement(accessorName, false, _typeProvider.numType);
+ classI2.accessors = <PropertyAccessorElement> [getter2];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI1.type, classI2.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapA.size);
+ PropertyAccessorElement syntheticAccessor = ElementFactory.getterElement(accessorName, false, _typeProvider.dynamicType);
+ JUnitTestCase.assertEquals(syntheticAccessor.type, mapA.get(accessorName).type);
+ assertNoErrors(classA);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_methods() {
+ // class I1 { dynamic m(int); }
+ // class I2 { dynamic m(num); }
+ // class A implements I1, I2 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String methodName = "m";
+ MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeProvider.dynamicType, []);
+ ParameterElementImpl parameter1 = new ParameterElementImpl.con1(ASTFactory.identifier3("a0"));
+ parameter1.type = _typeProvider.intType;
+ parameter1.parameterKind = ParameterKind.REQUIRED;
+ methodM1.parameters = <ParameterElement> [parameter1];
+ classI1.methods = <MethodElement> [methodM1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeProvider.dynamicType, []);
+ ParameterElementImpl parameter2 = new ParameterElementImpl.con1(ASTFactory.identifier3("a0"));
+ parameter2.type = _typeProvider.numType;
+ parameter2.parameterKind = ParameterKind.REQUIRED;
+ methodM2.parameters = <ParameterElement> [parameter2];
+ classI2.methods = <MethodElement> [methodM2];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI1.type, classI2.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapA.size);
+ MethodElement syntheticMethod = ElementFactory.methodElement(methodName, _typeProvider.dynamicType, [_typeProvider.dynamicType]);
+ JUnitTestCase.assertEquals(syntheticMethod.type, mapA.get(methodName).type);
+ assertNoErrors(classA);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_setters() {
+ // class I1 { set s(int); }
+ // class I2 { set s(num); }
+ // class A implements I1, I2 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String accessorName = "s";
+ PropertyAccessorElement setter1 = ElementFactory.setterElement(accessorName, false, _typeProvider.intType);
+ classI1.accessors = <PropertyAccessorElement> [setter1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ PropertyAccessorElement setter2 = ElementFactory.setterElement(accessorName, false, _typeProvider.numType);
+ classI2.accessors = <PropertyAccessorElement> [setter2];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI1.type, classI2.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapA.size);
+ PropertyAccessorElementImpl syntheticAccessor = ElementFactory.setterElement(accessorName, false, _typeProvider.dynamicType);
+ syntheticAccessor.returnType = _typeProvider.dynamicType;
+ JUnitTestCase.assertEquals(syntheticAccessor.type, mapA.get("${accessorName}=").type);
+ assertNoErrors(classA);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_getters() {
+ // class A {}
+ // class B extends A {}
+ // class C extends B {}
+ // class I1 { A get g; }
+ // class I2 { B get g; }
+ // class I3 { C get g; }
+ // class D implements I1, I2, I3 {}
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
+ ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []);
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String accessorName = "g";
+ PropertyAccessorElement getter1 = ElementFactory.getterElement(accessorName, false, classA.type);
+ classI1.accessors = <PropertyAccessorElement> [getter1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ PropertyAccessorElement getter2 = ElementFactory.getterElement(accessorName, false, classB.type);
+ classI2.accessors = <PropertyAccessorElement> [getter2];
+ ClassElementImpl classI3 = ElementFactory.classElement2("I3", []);
+ PropertyAccessorElement getter3 = ElementFactory.getterElement(accessorName, false, classC.type);
+ classI3.accessors = <PropertyAccessorElement> [getter3];
+ ClassElementImpl classD = ElementFactory.classElement2("D", []);
+ classD.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.type];
+ MemberMap mapD = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classD);
+ JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapD.size);
+ PropertyAccessorElement syntheticAccessor = ElementFactory.getterElement(accessorName, false, _typeProvider.dynamicType);
+ JUnitTestCase.assertEquals(syntheticAccessor.type, mapD.get(accessorName).type);
+ assertNoErrors(classD);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_methods() {
+ // class A {}
+ // class B extends A {}
+ // class C extends B {}
+ // class I1 { dynamic m(A a); }
+ // class I2 { dynamic m(B b); }
+ // class I3 { dynamic m(C c); }
+ // class D implements I1, I2, I3 {}
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
+ ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []);
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String methodName = "m";
+ MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeProvider.dynamicType, []);
+ ParameterElementImpl parameter1 = new ParameterElementImpl.con1(ASTFactory.identifier3("a0"));
+ parameter1.type = classA.type;
+ parameter1.parameterKind = ParameterKind.REQUIRED;
+ methodM1.parameters = <ParameterElement> [parameter1];
+ classI1.methods = <MethodElement> [methodM1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeProvider.dynamicType, []);
+ ParameterElementImpl parameter2 = new ParameterElementImpl.con1(ASTFactory.identifier3("a0"));
+ parameter2.type = classB.type;
+ parameter2.parameterKind = ParameterKind.REQUIRED;
+ methodM2.parameters = <ParameterElement> [parameter2];
+ classI2.methods = <MethodElement> [methodM2];
+ ClassElementImpl classI3 = ElementFactory.classElement2("I3", []);
+ MethodElementImpl methodM3 = ElementFactory.methodElement(methodName, _typeProvider.dynamicType, []);
+ ParameterElementImpl parameter3 = new ParameterElementImpl.con1(ASTFactory.identifier3("a0"));
+ parameter3.type = classC.type;
+ parameter3.parameterKind = ParameterKind.REQUIRED;
+ methodM3.parameters = <ParameterElement> [parameter3];
+ classI3.methods = <MethodElement> [methodM3];
+ ClassElementImpl classD = ElementFactory.classElement2("D", []);
+ classD.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.type];
+ MemberMap mapD = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classD);
+ JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapD.size);
+ MethodElement syntheticMethod = ElementFactory.methodElement(methodName, _typeProvider.dynamicType, [_typeProvider.dynamicType]);
+ JUnitTestCase.assertEquals(syntheticMethod.type, mapD.get(methodName).type);
+ assertNoErrors(classD);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_setters() {
+ // class A {}
+ // class B extends A {}
+ // class C extends B {}
+ // class I1 { set s(A); }
+ // class I2 { set s(B); }
+ // class I3 { set s(C); }
+ // class D implements I1, I2, I3 {}
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
+ ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []);
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String accessorName = "s";
+ PropertyAccessorElement setter1 = ElementFactory.setterElement(accessorName, false, classA.type);
+ classI1.accessors = <PropertyAccessorElement> [setter1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ PropertyAccessorElement setter2 = ElementFactory.setterElement(accessorName, false, classB.type);
+ classI2.accessors = <PropertyAccessorElement> [setter2];
+ ClassElementImpl classI3 = ElementFactory.classElement2("I3", []);
+ PropertyAccessorElement setter3 = ElementFactory.setterElement(accessorName, false, classC.type);
+ classI3.accessors = <PropertyAccessorElement> [setter3];
+ ClassElementImpl classD = ElementFactory.classElement2("D", []);
+ classD.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.type];
+ MemberMap mapD = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classD);
+ JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapD.size);
+ PropertyAccessorElementImpl syntheticAccessor = ElementFactory.setterElement(accessorName, false, _typeProvider.dynamicType);
+ syntheticAccessor.returnType = _typeProvider.dynamicType;
+ JUnitTestCase.assertEquals(syntheticAccessor.type, mapD.get("${accessorName}=").type);
+ assertNoErrors(classD);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_2_methods() {
+ // class I1 { int m(); }
+ // class I2 { int m([int]); }
+ // class A implements I1, I2 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String methodName = "m";
+ MethodElement methodM1 = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
+ classI1.methods = <MethodElement> [methodM1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
+ ParameterElementImpl parameter1 = new ParameterElementImpl.con1(ASTFactory.identifier3("a1"));
+ parameter1.type = _typeProvider.intType;
+ parameter1.parameterKind = ParameterKind.POSITIONAL;
+ methodM2.parameters = <ParameterElement> [parameter1];
+ classI2.methods = <MethodElement> [methodM2];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI1.type, classI2.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapA.size);
+ JUnitTestCase.assertSame(methodM2, mapA.get(methodName));
+ assertNoErrors(classA);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_3_methods() {
+ // class I1 { int m(); }
+ // class I2 { int m([int]); }
+ // class I3 { int m([int, int]); }
+ // class A implements I1, I2, I3 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String methodName = "m";
+ MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
+ classI1.methods = <MethodElement> [methodM1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
+ ParameterElementImpl parameter1 = new ParameterElementImpl.con1(ASTFactory.identifier3("a1"));
+ parameter1.type = _typeProvider.intType;
+ parameter1.parameterKind = ParameterKind.POSITIONAL;
+ methodM1.parameters = <ParameterElement> [parameter1];
+ classI2.methods = <MethodElement> [methodM2];
+ ClassElementImpl classI3 = ElementFactory.classElement2("I3", []);
+ MethodElementImpl methodM3 = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
+ ParameterElementImpl parameter2 = new ParameterElementImpl.con1(ASTFactory.identifier3("a2"));
+ parameter2.type = _typeProvider.intType;
+ parameter2.parameterKind = ParameterKind.POSITIONAL;
+ ParameterElementImpl parameter3 = new ParameterElementImpl.con1(ASTFactory.identifier3("a3"));
+ parameter3.type = _typeProvider.intType;
+ parameter3.parameterKind = ParameterKind.POSITIONAL;
+ methodM3.parameters = <ParameterElement> [parameter2, parameter3];
+ classI3.methods = <MethodElement> [methodM3];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapA.size);
+ JUnitTestCase.assertSame(methodM3, mapA.get(methodName));
+ assertNoErrors(classA);
+ }
+
+ void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_4_methods() {
+ // class I1 { int m(); }
+ // class I2 { int m(); }
+ // class I3 { int m([int]); }
+ // class I4 { int m([int, int]); }
+ // class A implements I1, I2, I3, I4 {}
+ ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
+ String methodName = "m";
+ MethodElement methodM1 = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
+ classI1.methods = <MethodElement> [methodM1];
+ ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
+ MethodElement methodM2 = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
+ classI2.methods = <MethodElement> [methodM2];
+ ClassElementImpl classI3 = ElementFactory.classElement2("I3", []);
+ MethodElementImpl methodM3 = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
+ ParameterElementImpl parameter1 = new ParameterElementImpl.con1(ASTFactory.identifier3("a1"));
+ parameter1.type = _typeProvider.intType;
+ parameter1.parameterKind = ParameterKind.POSITIONAL;
+ methodM3.parameters = <ParameterElement> [parameter1];
+ classI3.methods = <MethodElement> [methodM3];
+ ClassElementImpl classI4 = ElementFactory.classElement2("I4", []);
+ MethodElementImpl methodM4 = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
+ ParameterElementImpl parameter2 = new ParameterElementImpl.con1(ASTFactory.identifier3("a2"));
+ parameter2.type = _typeProvider.intType;
+ parameter2.parameterKind = ParameterKind.POSITIONAL;
+ ParameterElementImpl parameter3 = new ParameterElementImpl.con1(ASTFactory.identifier3("a3"));
+ parameter3.type = _typeProvider.intType;
+ parameter3.parameterKind = ParameterKind.POSITIONAL;
+ methodM4.parameters = <ParameterElement> [parameter2, parameter3];
+ classI4.methods = <MethodElement> [methodM4];
+ ClassElementImpl classA = ElementFactory.classElement2("A", []);
+ classA.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.type, classI4.type];
+ MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
+ JUnitTestCase.assertEquals(_numOfMembersInObject + 1, mapA.size);
+ JUnitTestCase.assertSame(methodM4, mapA.get(methodName));
+ assertNoErrors(classA);
+ }
+
void test_lookupInheritance_interface_getter() {
ClassElementImpl classA = ElementFactory.classElement2("A", []);
String getterName = "g";
@@ -9612,56 +10272,6 @@ class InheritanceManagerTest extends EngineTestCase {
assertNoErrors(classB);
}
- void test_lookupInheritance_interfaces_STWC_inconsistentMethodInheritance() {
- ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
- String methodName = "m";
- MethodElement methodM1 = ElementFactory.methodElement(methodName, null, [_typeProvider.intType]);
- classI1.methods = <MethodElement> [methodM1];
- ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
- MethodElement methodM2 = ElementFactory.methodElement(methodName, null, [_typeProvider.stringType]);
- classI2.methods = <MethodElement> [methodM2];
- ClassElementImpl classA = ElementFactory.classElement2("A", []);
- classA.interfaces = <InterfaceType> [classI1.type, classI2.type];
- JUnitTestCase.assertNull(_inheritanceManager.lookupInheritance(classA, methodName));
- assertNoErrors(classI1);
- assertNoErrors(classI2);
- assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
- }
-
- void test_lookupInheritance_interfaces_SWC_inconsistentMethodInheritance() {
- ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
- String methodName = "m";
- MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvider.intType, []);
- classI1.methods = <MethodElement> [methodM];
- ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
- PropertyAccessorElement getter = ElementFactory.getterElement(methodName, false, _typeProvider.intType);
- classI2.accessors = <PropertyAccessorElement> [getter];
- ClassElementImpl classA = ElementFactory.classElement2("A", []);
- classA.interfaces = <InterfaceType> [classI1.type, classI2.type];
- JUnitTestCase.assertNull(_inheritanceManager.lookupInheritance(classA, methodName));
- assertNoErrors(classI1);
- assertNoErrors(classI2);
- assertErrors(classA, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
- }
-
- void test_lookupInheritance_interfaces_union1() {
- ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
- String methodName1 = "m1";
- MethodElement methodM1 = ElementFactory.methodElement(methodName1, _typeProvider.intType, []);
- classI1.methods = <MethodElement> [methodM1];
- ClassElementImpl classI2 = ElementFactory.classElement2("I2", []);
- String methodName2 = "m2";
- MethodElement methodM2 = ElementFactory.methodElement(methodName2, _typeProvider.intType, []);
- classI2.methods = <MethodElement> [methodM2];
- ClassElementImpl classA = ElementFactory.classElement2("A", []);
- classA.interfaces = <InterfaceType> [classI1.type, classI2.type];
- JUnitTestCase.assertSame(methodM1, _inheritanceManager.lookupInheritance(classA, methodName1));
- JUnitTestCase.assertSame(methodM2, _inheritanceManager.lookupInheritance(classA, methodName2));
- assertNoErrors(classI1);
- assertNoErrors(classI2);
- assertNoErrors(classA);
- }
-
void test_lookupInheritance_interfaces_union2() {
ClassElementImpl classI1 = ElementFactory.classElement2("I1", []);
String methodName1 = "m1";
@@ -9881,7 +10491,7 @@ class InheritanceManagerTest extends EngineTestCase {
*/
InheritanceManager createInheritanceManager() {
AnalysisContextImpl context = AnalysisContextFactory.contextWithCore();
- FileBasedSource source = new FileBasedSource.con1(new ContentCache(), FileUtilities2.createFile("/test.dart"));
+ FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
CompilationUnitElementImpl definingCompilationUnit = new CompilationUnitElementImpl("test.dart");
definingCompilationUnit.source = source;
_definingLibrary = ElementFactory.library(context, "test");
@@ -9893,51 +10503,119 @@ class InheritanceManagerTest extends EngineTestCase {
_ut.group('InheritanceManagerTest', () {
_ut.test('test_getMapOfMembersInheritedFromClasses_accessor_extends', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_accessor_extends);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_accessor_extends);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromClasses_accessor_implements', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_accessor_implements);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromClasses_accessor_with', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_accessor_with);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromClasses_implicitExtends', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_implicitExtends);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromClasses_method_extends', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_method_extends);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromClasses_method_implements', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_method_implements);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromClasses_method_with', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_method_with);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_accessor_extends', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_accessor_extends);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_accessor_implements', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_accessor_implements);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_accessor_with', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_accessor_with);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_implicitExtends', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_implicitExtends);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_getter_method', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_getter_method);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_int_str', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_int_str);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_method_getter', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_method_getter);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_numOfRequiredParams', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_numOfRequiredParams);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_str_int', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_str_int);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_method_extends', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_method_extends);
});
- _ut.test('test_getMapOfMembersInheritedFromClasses_accessor_implements', () {
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_method_implements', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_accessor_implements);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_method_implements);
});
- _ut.test('test_getMapOfMembersInheritedFromClasses_accessor_with', () {
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_method_with', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_accessor_with);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_method_with);
});
- _ut.test('test_getMapOfMembersInheritedFromClasses_method_extends', () {
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_union_differentNames', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_method_extends);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_union_differentNames);
});
- _ut.test('test_getMapOfMembersInheritedFromClasses_method_implements', () {
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_getters', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_method_implements);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_getters);
});
- _ut.test('test_getMapOfMembersInheritedFromClasses_method_with', () {
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_methods', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromClasses_method_with);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_methods);
});
- _ut.test('test_getMapOfMembersInheritedFromInterfaces_accessor_extends', () {
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_setters', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_accessor_extends);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_setters);
});
- _ut.test('test_getMapOfMembersInheritedFromInterfaces_accessor_implements', () {
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_getters', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_accessor_implements);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_getters);
});
- _ut.test('test_getMapOfMembersInheritedFromInterfaces_accessor_with', () {
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_methods', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_accessor_with);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_methods);
});
- _ut.test('test_getMapOfMembersInheritedFromInterfaces_method_extends', () {
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_setters', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_method_extends);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_setters);
});
- _ut.test('test_getMapOfMembersInheritedFromInterfaces_method_implements', () {
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_2_methods', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_method_implements);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_2_methods);
});
- _ut.test('test_getMapOfMembersInheritedFromInterfaces_method_with', () {
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_3_methods', () {
final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_method_with);
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_3_methods);
+ });
+ _ut.test('test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_4_methods', () {
+ final __test = new InheritanceManagerTest();
+ runJUnitTest(__test, __test.test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_4_methods);
});
_ut.test('test_lookupInheritance_interface_getter', () {
final __test = new InheritanceManagerTest();
@@ -9955,14 +10633,6 @@ class InheritanceManagerTest extends EngineTestCase {
final __test = new InheritanceManagerTest();
runJUnitTest(__test, __test.test_lookupInheritance_interface_staticMember);
});
- _ut.test('test_lookupInheritance_interfaces_STWC_inconsistentMethodInheritance', () {
- final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_lookupInheritance_interfaces_STWC_inconsistentMethodInheritance);
- });
- _ut.test('test_lookupInheritance_interfaces_SWC_inconsistentMethodInheritance', () {
- final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_lookupInheritance_interfaces_SWC_inconsistentMethodInheritance);
- });
_ut.test('test_lookupInheritance_interfaces_infiniteLoop', () {
final __test = new InheritanceManagerTest();
runJUnitTest(__test, __test.test_lookupInheritance_interfaces_infiniteLoop);
@@ -9971,10 +10641,6 @@ class InheritanceManagerTest extends EngineTestCase {
final __test = new InheritanceManagerTest();
runJUnitTest(__test, __test.test_lookupInheritance_interfaces_infiniteLoop2);
});
- _ut.test('test_lookupInheritance_interfaces_union1', () {
- final __test = new InheritanceManagerTest();
- runJUnitTest(__test, __test.test_lookupInheritance_interfaces_union1);
- });
_ut.test('test_lookupInheritance_interfaces_union2', () {
final __test = new InheritanceManagerTest();
runJUnitTest(__test, __test.test_lookupInheritance_interfaces_union2);
@@ -15441,10 +16107,9 @@ class ElementResolverTest extends EngineTestCase {
*/
ElementResolver createResolver() {
AnalysisContextImpl context = new AnalysisContextImpl();
- ContentCache contentCache = new ContentCache();
- SourceFactory sourceFactory = new SourceFactory.con1(contentCache, [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
+ SourceFactory sourceFactory = new SourceFactory([new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
context.sourceFactory = sourceFactory;
- FileBasedSource source = new FileBasedSource.con1(contentCache, FileUtilities2.createFile("/test.dart"));
+ FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
CompilationUnitElementImpl definingCompilationUnit = new CompilationUnitElementImpl("test.dart");
definingCompilationUnit.source = source;
_definingLibrary = ElementFactory.library(context, "test");
@@ -17078,6 +17743,24 @@ class StaticWarningCodeTest extends ResolverTestCase {
verify([source]);
}
+ void test_invalidGetterOverrideReturnType_twoInterfaces() {
+ // test from language/override_inheritance_field_test_11.dart
+ Source source = addSource(EngineTestCase.createSource([
+ "abstract class I {",
+ " int get getter => null;",
+ "}",
+ "abstract class J {",
+ " num get getter => null;",
+ "}",
+ "abstract class A implements I, J {}",
+ "class B extends A {",
+ " String get getter => null;",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]);
+ verify([source]);
+ }
+
void test_invalidMethodOverrideNamedParamType() {
Source source = addSource(EngineTestCase.createSource([
"class A {",
@@ -17104,6 +17787,23 @@ class StaticWarningCodeTest extends ResolverTestCase {
verify([source]);
}
+ void test_invalidMethodOverrideNormalParamType_twoInterfaces() {
+ Source source = addSource(EngineTestCase.createSource([
+ "abstract class I {",
+ " m(int n);",
+ "}",
+ "abstract class J {",
+ " m(num n);",
+ "}",
+ "abstract class A implements I, J {}",
+ "class B extends A {",
+ " m(String n) {}",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
+ verify([source]);
+ }
+
void test_invalidMethodOverrideOptionalParamType() {
Source source = addSource(EngineTestCase.createSource([
"class A {",
@@ -17117,6 +17817,23 @@ class StaticWarningCodeTest extends ResolverTestCase {
verify([source]);
}
+ void test_invalidMethodOverrideOptionalParamType_twoInterfaces() {
+ Source source = addSource(EngineTestCase.createSource([
+ "abstract class I {",
+ " m([int n]);",
+ "}",
+ "abstract class J {",
+ " m([num n]);",
+ "}",
+ "abstract class A implements I, J {}",
+ "class B extends A {",
+ " m([String n]) {}",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE]);
+ verify([source]);
+ }
+
void test_invalidMethodOverrideReturnType_interface() {
Source source = addSource(EngineTestCase.createSource([
"class A {",
@@ -17130,7 +17847,7 @@ class StaticWarningCodeTest extends ResolverTestCase {
verify([source]);
}
- void test_invalidMethodOverrideReturnType_interface2() {
+ void test_invalidMethodOverrideReturnType_interface_grandparent() {
Source source = addSource(EngineTestCase.createSource([
"abstract class A {",
" int m();",
@@ -17171,7 +17888,7 @@ class StaticWarningCodeTest extends ResolverTestCase {
verify([source]);
}
- void test_invalidMethodOverrideReturnType_superclass2() {
+ void test_invalidMethodOverrideReturnType_superclass_grandparent() {
Source source = addSource(EngineTestCase.createSource([
"class A {",
" int m() { return 0; }",
@@ -17186,6 +17903,23 @@ class StaticWarningCodeTest extends ResolverTestCase {
verify([source]);
}
+ void test_invalidMethodOverrideReturnType_twoInterfaces() {
+ Source source = addSource(EngineTestCase.createSource([
+ "abstract class I {",
+ " int m();",
+ "}",
+ "abstract class J {",
+ " num m();",
+ "}",
+ "abstract class A implements I, J {}",
+ "class B extends A {",
+ " String m() => '';",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
+ verify([source]);
+ }
+
void test_invalidMethodOverrideReturnType_void() {
Source source = addSource(EngineTestCase.createSource([
"class A {",
@@ -17316,6 +18050,24 @@ class StaticWarningCodeTest extends ResolverTestCase {
verify([source]);
}
+ void test_invalidSetterOverrideNormalParamType_twoInterfaces() {
+ // test from language/override_inheritance_field_test_34.dart
+ Source source = addSource(EngineTestCase.createSource([
+ "abstract class I {",
+ " set setter14(int _) => null;",
+ "}",
+ "abstract class J {",
+ " set setter14(num _) => null;",
+ "}",
+ "abstract class A implements I, J {}",
+ "class B extends A {",
+ " set setter14(String _) => null;",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
+ verify([source]);
+ }
+
void test_listElementTypeNotAssignable() {
Source source = addSource(EngineTestCase.createSource(["var v = <String> [42];"]));
resolve(source);
@@ -17394,7 +18146,9 @@ class StaticWarningCodeTest extends ResolverTestCase {
" }",
"}"]));
resolve(source);
- assertErrors(source, [StaticWarningCode.MIXED_RETURN_TYPES]);
+ assertErrors(source, [
+ StaticWarningCode.MIXED_RETURN_TYPES,
+ StaticWarningCode.MIXED_RETURN_TYPES]);
verify([source]);
}
@@ -17409,7 +18163,9 @@ class StaticWarningCodeTest extends ResolverTestCase {
" }",
"}"]));
resolve(source);
- assertErrors(source, [StaticWarningCode.MIXED_RETURN_TYPES]);
+ assertErrors(source, [
+ StaticWarningCode.MIXED_RETURN_TYPES,
+ StaticWarningCode.MIXED_RETURN_TYPES]);
verify([source]);
}
@@ -17422,7 +18178,9 @@ class StaticWarningCodeTest extends ResolverTestCase {
" return 0;",
"}"]));
resolve(source);
- assertErrors(source, [StaticWarningCode.MIXED_RETURN_TYPES]);
+ assertErrors(source, [
+ StaticWarningCode.MIXED_RETURN_TYPES,
+ StaticWarningCode.MIXED_RETURN_TYPES]);
verify([source]);
}
@@ -17652,6 +18410,23 @@ class StaticWarningCodeTest extends ResolverTestCase {
verify([source]);
}
+ void test_nonAbstractClassInheritsAbstractMemberOne_setter_and_implicitSetter() {
+ // test from language/override_inheritance_abstract_test_14.dart
+ Source source = addSource(EngineTestCase.createSource([
+ "abstract class A {",
+ " set field(_);",
+ "}",
+ "abstract class I {",
+ " var field;",
+ "}",
+ "class B extends A implements I {",
+ " get field => 0;",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ verify([source]);
+ }
+
void test_nonAbstractClassInheritsAbstractMemberOne_setter_fromInterface() {
Source source = addSource(EngineTestCase.createSource([
"class I {",
@@ -18542,6 +19317,10 @@ class StaticWarningCodeTest extends ResolverTestCase {
final __test = new StaticWarningCodeTest();
runJUnitTest(__test, __test.test_invalidGetterOverrideReturnType_implicit);
});
+ _ut.test('test_invalidGetterOverrideReturnType_twoInterfaces', () {
+ final __test = new StaticWarningCodeTest();
+ runJUnitTest(__test, __test.test_invalidGetterOverrideReturnType_twoInterfaces);
+ });
_ut.test('test_invalidMethodOverrideNamedParamType', () {
final __test = new StaticWarningCodeTest();
runJUnitTest(__test, __test.test_invalidMethodOverrideNamedParamType);
@@ -18550,17 +19329,25 @@ class StaticWarningCodeTest extends ResolverTestCase {
final __test = new StaticWarningCodeTest();
runJUnitTest(__test, __test.test_invalidMethodOverrideNormalParamType);
});
+ _ut.test('test_invalidMethodOverrideNormalParamType_twoInterfaces', () {
+ final __test = new StaticWarningCodeTest();
+ runJUnitTest(__test, __test.test_invalidMethodOverrideNormalParamType_twoInterfaces);
+ });
_ut.test('test_invalidMethodOverrideOptionalParamType', () {
final __test = new StaticWarningCodeTest();
runJUnitTest(__test, __test.test_invalidMethodOverrideOptionalParamType);
});
+ _ut.test('test_invalidMethodOverrideOptionalParamType_twoInterfaces', () {
+ final __test = new StaticWarningCodeTest();
+ runJUnitTest(__test, __test.test_invalidMethodOverrideOptionalParamType_twoInterfaces);
+ });
_ut.test('test_invalidMethodOverrideReturnType_interface', () {
final __test = new StaticWarningCodeTest();
runJUnitTest(__test, __test.test_invalidMethodOverrideReturnType_interface);
});
- _ut.test('test_invalidMethodOverrideReturnType_interface2', () {
+ _ut.test('test_invalidMethodOverrideReturnType_interface_grandparent', () {
final __test = new StaticWarningCodeTest();
- runJUnitTest(__test, __test.test_invalidMethodOverrideReturnType_interface2);
+ runJUnitTest(__test, __test.test_invalidMethodOverrideReturnType_interface_grandparent);
});
_ut.test('test_invalidMethodOverrideReturnType_mixin', () {
final __test = new StaticWarningCodeTest();
@@ -18570,9 +19357,13 @@ class StaticWarningCodeTest extends ResolverTestCase {
final __test = new StaticWarningCodeTest();
runJUnitTest(__test, __test.test_invalidMethodOverrideReturnType_superclass);
});
- _ut.test('test_invalidMethodOverrideReturnType_superclass2', () {
+ _ut.test('test_invalidMethodOverrideReturnType_superclass_grandparent', () {
+ final __test = new StaticWarningCodeTest();
+ runJUnitTest(__test, __test.test_invalidMethodOverrideReturnType_superclass_grandparent);
+ });
+ _ut.test('test_invalidMethodOverrideReturnType_twoInterfaces', () {
final __test = new StaticWarningCodeTest();
- runJUnitTest(__test, __test.test_invalidMethodOverrideReturnType_superclass2);
+ runJUnitTest(__test, __test.test_invalidMethodOverrideReturnType_twoInterfaces);
});
_ut.test('test_invalidMethodOverrideReturnType_void', () {
final __test = new StaticWarningCodeTest();
@@ -18614,6 +19405,10 @@ class StaticWarningCodeTest extends ResolverTestCase {
final __test = new StaticWarningCodeTest();
runJUnitTest(__test, __test.test_invalidSetterOverrideNormalParamType);
});
+ _ut.test('test_invalidSetterOverrideNormalParamType_twoInterfaces', () {
+ final __test = new StaticWarningCodeTest();
+ runJUnitTest(__test, __test.test_invalidSetterOverrideNormalParamType_twoInterfaces);
+ });
_ut.test('test_listElementTypeNotAssignable', () {
final __test = new StaticWarningCodeTest();
runJUnitTest(__test, __test.test_listElementTypeNotAssignable);
@@ -18726,6 +19521,10 @@ class StaticWarningCodeTest extends ResolverTestCase {
final __test = new StaticWarningCodeTest();
runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_method_optionalParamCount);
});
+ _ut.test('test_nonAbstractClassInheritsAbstractMemberOne_setter_and_implicitSetter', () {
+ final __test = new StaticWarningCodeTest();
+ runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_setter_and_implicitSetter);
+ });
_ut.test('test_nonAbstractClassInheritsAbstractMemberOne_setter_fromInterface', () {
final __test = new StaticWarningCodeTest();
runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_setter_fromInterface);
@@ -18952,29 +19751,18 @@ class StaticWarningCodeTest extends ResolverTestCase {
class AnalysisContextHelper {
AnalysisContext context;
- SourceFactory _sourceFactory;
-
- ContentCache _cache;
-
/**
* Creates new [AnalysisContext] using [AnalysisContextFactory#contextWithCore].
*/
AnalysisContextHelper() {
context = AnalysisContextFactory.contextWithCore();
- _sourceFactory = context.sourceFactory;
- _cache = _sourceFactory.contentCache;
}
Source addSource(String path, String code) {
- Source source = new FileBasedSource.con1(_cache, FileUtilities2.createFile(path));
- // add source
- {
- _sourceFactory.setContents(source, "");
- ChangeSet changeSet = new ChangeSet();
- changeSet.added(source);
- context.applyChanges(changeSet);
- }
- // update source
+ Source source = new FileBasedSource.con1(FileUtilities2.createFile(path));
+ ChangeSet changeSet = new ChangeSet();
+ changeSet.added(source);
+ context.applyChanges(changeSet);
context.setContents(source, code);
return source;
}
@@ -19229,7 +20017,12 @@ class TestTypeProvider implements TypeProvider {
if (_mapType == null) {
ClassElementImpl mapElement = ElementFactory.classElement2("Map", ["K", "V"]);
_mapType = mapElement.type;
+ Type2 kType = mapElement.typeParameters[0].type;
+ Type2 vType = mapElement.typeParameters[1].type;
mapElement.accessors = <PropertyAccessorElement> [ElementFactory.getterElement("length", false, intType)];
+ mapElement.methods = <MethodElement> [
+ ElementFactory.methodElement("[]", vType, [objectType]),
+ ElementFactory.methodElement("[]=", VoidTypeImpl.instance, [kType, vType])];
propagateTypeArguments(mapElement);
}
return _mapType;
@@ -19505,7 +20298,7 @@ class AnalysisContextFactory {
elementMap[coreSource] = coreLibrary;
elementMap[htmlSource] = htmlLibrary;
(sdkContext as AnalysisContextImpl).recordLibraryElements(elementMap);
- sourceFactory = new SourceFactory.con2([
+ sourceFactory = new SourceFactory([
new DartUriResolver(sdkContext.sourceFactory.dartSdk),
new FileUriResolver()]);
context.sourceFactory = sourceFactory;
@@ -19516,6 +20309,7 @@ class AnalysisContextFactory {
class LibraryImportScopeTest extends ResolverTestCase {
void test_conflictingImports() {
AnalysisContext context = new AnalysisContextImpl();
+ context.sourceFactory = new SourceFactory([]);
String typeNameA = "A";
String typeNameB = "B";
String typeNameC = "C";
@@ -19570,6 +20364,7 @@ class LibraryImportScopeTest extends ResolverTestCase {
void test_creation_nonEmpty() {
AnalysisContext context = new AnalysisContextImpl();
+ context.sourceFactory = new SourceFactory([]);
String importedTypeName = "A";
ClassElement importedType = new ClassElementImpl(ASTFactory.identifier3(importedTypeName));
LibraryElement importedLibrary = createTestLibrary2(context, "imported", []);
@@ -19608,6 +20403,7 @@ class LibraryImportScopeTest extends ResolverTestCase {
void test_nonConflictingImports_sameElement() {
AnalysisContext context = new AnalysisContextImpl();
+ context.sourceFactory = new SourceFactory([]);
String typeNameA = "A";
String typeNameB = "B";
ClassElement typeA = ElementFactory.classElement2(typeNameA, []);
@@ -19628,6 +20424,7 @@ class LibraryImportScopeTest extends ResolverTestCase {
void test_prefixedAndNonPrefixed() {
AnalysisContext context = new AnalysisContextImpl();
+ context.sourceFactory = new SourceFactory([]);
String typeName = "C";
String prefixName = "p";
ClassElement prefixedType = ElementFactory.classElement2(typeName, []);
@@ -20031,6 +20828,7 @@ class LibraryScopeTest extends ResolverTestCase {
void test_creation_nonEmpty() {
AnalysisContext context = new AnalysisContextImpl();
+ context.sourceFactory = new SourceFactory([]);
String importedTypeName = "A";
ClassElement importedType = new ClassElementImpl(ASTFactory.identifier3(importedTypeName));
LibraryElement importedLibrary = createTestLibrary2(context, "imported", []);
@@ -20132,7 +20930,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
InterfaceType superclassType = superclass.type;
ClassElement subclass = ElementFactory.classElement("B", superclassType, []);
Expression node = ASTFactory.asExpression(ASTFactory.thisExpression(), ASTFactory.typeName(subclass, []));
- JUnitTestCase.assertSame(subclass.type, analyze2(node, superclassType));
+ JUnitTestCase.assertSame(subclass.type, analyze3(node, superclassType));
_listener.assertNoErrors();
}
@@ -20280,8 +21078,8 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
FormalParameter p2 = ASTFactory.namedFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
setType(p2, dynamicType);
FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.blockFunctionBody2([]));
- analyze3(p1);
- analyze3(p2);
+ analyze5(p1);
+ analyze5(p2);
Type2 resultType = analyze(node);
Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
expectedNamedTypes["p1"] = dynamicType;
@@ -20296,7 +21094,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
FormalParameter p = ASTFactory.namedFormalParameter(ASTFactory.simpleFormalParameter3("p"), resolvedInteger(0));
setType(p, dynamicType);
FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p]), ASTFactory.expressionFunctionBody(resolvedInteger(0)));
- analyze3(p);
+ analyze5(p);
Type2 resultType = analyze(node);
Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
expectedNamedTypes["p"] = dynamicType;
@@ -20312,8 +21110,8 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
FormalParameter p2 = ASTFactory.simpleFormalParameter3("p2");
setType(p2, dynamicType);
FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.blockFunctionBody2([]));
- analyze3(p1);
- analyze3(p2);
+ analyze5(p1);
+ analyze5(p2);
Type2 resultType = analyze(node);
assertFunctionType(dynamicType, <Type2> [dynamicType, dynamicType], null, null, resultType);
_listener.assertNoErrors();
@@ -20325,7 +21123,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
FormalParameter p = ASTFactory.simpleFormalParameter3("p");
setType(p, dynamicType);
FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p]), ASTFactory.expressionFunctionBody(resolvedInteger(0)));
- analyze3(p);
+ analyze5(p);
Type2 resultType = analyze(node);
assertFunctionType(_typeProvider.intType, <Type2> [dynamicType], null, null, resultType);
_listener.assertNoErrors();
@@ -20339,7 +21137,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
FormalParameter p2 = ASTFactory.namedFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
setType(p2, dynamicType);
FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.blockFunctionBody2([]));
- analyze3(p2);
+ analyze5(p2);
Type2 resultType = analyze(node);
Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
expectedNamedTypes["p2"] = dynamicType;
@@ -20355,7 +21153,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
FormalParameter p2 = ASTFactory.namedFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
setType(p2, dynamicType);
FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.expressionFunctionBody(resolvedInteger(0)));
- analyze3(p2);
+ analyze5(p2);
Type2 resultType = analyze(node);
Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
expectedNamedTypes["p2"] = dynamicType;
@@ -20371,8 +21169,8 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
FormalParameter p2 = ASTFactory.positionalFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
setType(p2, dynamicType);
FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.blockFunctionBody2([]));
- analyze3(p1);
- analyze3(p2);
+ analyze5(p1);
+ analyze5(p2);
Type2 resultType = analyze(node);
assertFunctionType(dynamicType, <Type2> [dynamicType], <Type2> [dynamicType], null, resultType);
_listener.assertNoErrors();
@@ -20386,8 +21184,8 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
FormalParameter p2 = ASTFactory.positionalFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
setType(p2, dynamicType);
FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.expressionFunctionBody(resolvedInteger(0)));
- analyze3(p1);
- analyze3(p2);
+ analyze5(p1);
+ analyze5(p2);
Type2 resultType = analyze(node);
assertFunctionType(_typeProvider.intType, <Type2> [dynamicType], <Type2> [dynamicType], null, resultType);
_listener.assertNoErrors();
@@ -20401,8 +21199,8 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
FormalParameter p2 = ASTFactory.positionalFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
setType(p2, dynamicType);
FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.blockFunctionBody2([]));
- analyze3(p1);
- analyze3(p2);
+ analyze5(p1);
+ analyze5(p2);
Type2 resultType = analyze(node);
assertFunctionType(dynamicType, null, <Type2> [dynamicType, dynamicType], null, resultType);
_listener.assertNoErrors();
@@ -20414,7 +21212,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
FormalParameter p = ASTFactory.positionalFormalParameter(ASTFactory.simpleFormalParameter3("p"), resolvedInteger(0));
setType(p, dynamicType);
FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p]), ASTFactory.expressionFunctionBody(resolvedInteger(0)));
- analyze3(p);
+ analyze5(p);
Type2 resultType = analyze(node);
assertFunctionType(_typeProvider.intType, null, <Type2> [dynamicType], null, resultType);
_listener.assertNoErrors();
@@ -20709,7 +21507,26 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
_listener.assertNoErrors();
}
- void test_visitPropertyAccess_getter() {
+ void test_visitPropertyAccess_propagated_getter() {
+ Type2 boolType = _typeProvider.boolType;
+ PropertyAccessorElementImpl getter = ElementFactory.getterElement("b", false, boolType);
+ PropertyAccess node = ASTFactory.propertyAccess2(ASTFactory.identifier3("a"), "b");
+ node.propertyName.propagatedElement = getter;
+ JUnitTestCase.assertSame(boolType, analyze2(node, false));
+ _listener.assertNoErrors();
+ }
+
+ void test_visitPropertyAccess_propagated_setter() {
+ Type2 boolType = _typeProvider.boolType;
+ FieldElementImpl field = ElementFactory.fieldElement("b", false, false, false, boolType);
+ PropertyAccessorElement setter = field.setter;
+ PropertyAccess node = ASTFactory.propertyAccess2(ASTFactory.identifier3("a"), "b");
+ node.propertyName.propagatedElement = setter;
+ JUnitTestCase.assertSame(boolType, analyze2(node, false));
+ _listener.assertNoErrors();
+ }
+
+ void test_visitPropertyAccess_static_getter() {
Type2 boolType = _typeProvider.boolType;
PropertyAccessorElementImpl getter = ElementFactory.getterElement("b", false, boolType);
PropertyAccess node = ASTFactory.propertyAccess2(ASTFactory.identifier3("a"), "b");
@@ -20718,7 +21535,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
_listener.assertNoErrors();
}
- void test_visitPropertyAccess_setter() {
+ void test_visitPropertyAccess_static_setter() {
Type2 boolType = _typeProvider.boolType;
FieldElementImpl field = ElementFactory.fieldElement("b", false, false, false, boolType);
PropertyAccessorElement setter = field.setter;
@@ -20750,7 +21567,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
InterfaceType superType = ElementFactory.classElement2("A", []).type;
InterfaceType thisType = ElementFactory.classElement("B", superType, []).type;
Expression node = ASTFactory.superExpression();
- JUnitTestCase.assertSame(thisType, analyze2(node, thisType));
+ JUnitTestCase.assertSame(thisType, analyze3(node, thisType));
_listener.assertNoErrors();
}
@@ -20762,7 +21579,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
// this
InterfaceType thisType = ElementFactory.classElement("B", ElementFactory.classElement2("A", []).type, []).type;
Expression node = ASTFactory.thisExpression();
- JUnitTestCase.assertSame(thisType, analyze2(node, thisType));
+ JUnitTestCase.assertSame(thisType, analyze3(node, thisType));
_listener.assertNoErrors();
}
@@ -20787,7 +21604,28 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
* @param node the expression with which the type is associated
* @return the type associated with the expression
*/
- Type2 analyze(Expression node) => analyze2(node, null);
+ Type2 analyze(Expression node) => analyze4(node, null, true);
+
+ /**
+ * Return the type associated with the given expression after the static or propagated type
+ * analyzer has computed a type for it.
+ *
+ * @param node the expression with which the type is associated
+ * @param useStaticType `true` if the static type is being requested, and `false` if
+ * the propagated type is being requested
+ * @return the type associated with the expression
+ */
+ Type2 analyze2(Expression node, bool useStaticType) => analyze4(node, null, useStaticType);
+
+ /**
+ * Return the type associated with the given expression after the static type analyzer has
+ * computed a type for it.
+ *
+ * @param node the expression with which the type is associated
+ * @param thisType the type of 'this'
+ * @return the type associated with the expression
+ */
+ Type2 analyze3(Expression node, InterfaceType thisType) => analyze4(node, thisType, true);
/**
* Return the type associated with the given expression after the static type analyzer has
@@ -20795,16 +21633,22 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
*
* @param node the expression with which the type is associated
* @param thisType the type of 'this'
+ * @param useStaticType `true` if the static type is being requested, and `false` if
+ * the propagated type is being requested
* @return the type associated with the expression
*/
- Type2 analyze2(Expression node, InterfaceType thisType) {
+ Type2 analyze4(Expression node, InterfaceType thisType, bool useStaticType) {
try {
_analyzer.thisType_J2DAccessor = thisType;
} on JavaException catch (exception) {
throw new IllegalArgumentException("Could not set type of 'this'", exception);
}
node.accept(_analyzer);
- return node.staticType;
+ if (useStaticType) {
+ return node.staticType;
+ } else {
+ return node.propagatedType;
+ }
}
/**
@@ -20814,7 +21658,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
* @param node the parameter with which the type is associated
* @return the type associated with the parameter
*/
- Type2 analyze3(FormalParameter node) {
+ Type2 analyze5(FormalParameter node) {
node.accept(_analyzer);
return (node.identifier.staticElement as ParameterElement).type;
}
@@ -20889,9 +21733,9 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
*/
StaticTypeAnalyzer createAnalyzer() {
AnalysisContextImpl context = new AnalysisContextImpl();
- SourceFactory sourceFactory = new SourceFactory.con2([new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
+ SourceFactory sourceFactory = new SourceFactory([new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
context.sourceFactory = sourceFactory;
- FileBasedSource source = new FileBasedSource.con1(sourceFactory.contentCache, FileUtilities2.createFile("/lib.dart"));
+ FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile("/lib.dart"));
CompilationUnitElementImpl definingCompilationUnit = new CompilationUnitElementImpl("lib.dart");
definingCompilationUnit.source = source;
LibraryElementImpl definingLibrary = new LibraryElementImpl(context, null);
@@ -21240,13 +22084,21 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
final __test = new StaticTypeAnalyzerTest();
runJUnitTest(__test, __test.test_visitPrefixedIdentifier_variable);
});
- _ut.test('test_visitPropertyAccess_getter', () {
+ _ut.test('test_visitPropertyAccess_propagated_getter', () {
+ final __test = new StaticTypeAnalyzerTest();
+ runJUnitTest(__test, __test.test_visitPropertyAccess_propagated_getter);
+ });
+ _ut.test('test_visitPropertyAccess_propagated_setter', () {
final __test = new StaticTypeAnalyzerTest();
- runJUnitTest(__test, __test.test_visitPropertyAccess_getter);
+ runJUnitTest(__test, __test.test_visitPropertyAccess_propagated_setter);
});
- _ut.test('test_visitPropertyAccess_setter', () {
+ _ut.test('test_visitPropertyAccess_static_getter', () {
final __test = new StaticTypeAnalyzerTest();
- runJUnitTest(__test, __test.test_visitPropertyAccess_setter);
+ runJUnitTest(__test, __test.test_visitPropertyAccess_static_getter);
+ });
+ _ut.test('test_visitPropertyAccess_static_setter', () {
+ final __test = new StaticTypeAnalyzerTest();
+ runJUnitTest(__test, __test.test_visitPropertyAccess_static_setter);
});
_ut.test('test_visitSimpleStringLiteral', () {
final __test = new StaticTypeAnalyzerTest();
@@ -21535,6 +22387,102 @@ class NonHintCodeTest extends ResolverTestCase {
verify([source]);
}
+ void test_overrideOnNonOverridingGetter_inInterface() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library dart.core;",
+ "const override = null;",
+ "class A {",
+ " int get m => 0;",
+ "}",
+ "class B implements A {",
+ " @override",
+ " int get m => 1;",
+ "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingGetter_inSuperclass() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library dart.core;",
+ "const override = null;",
+ "class A {",
+ " int get m => 0;",
+ "}",
+ "class B extends A {",
+ " @override",
+ " int get m => 1;",
+ "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingMethod_inInterface() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library dart.core;",
+ "const override = null;",
+ "class A {",
+ " int m() => 0;",
+ "}",
+ "class B implements A {",
+ " @override",
+ " int m() => 1;",
+ "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingMethod_inSuperclass() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library dart.core;",
+ "const override = null;",
+ "class A {",
+ " int m() => 0;",
+ "}",
+ "class B extends A {",
+ " @override",
+ " int m() => 1;",
+ "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingSetter_inInterface() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library dart.core;",
+ "const override = null;",
+ "class A {",
+ " set m(int x) {}",
+ "}",
+ "class B implements A {",
+ " @override",
+ " set m(int x) {}",
+ "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingSetter_inSuperclass() {
+ Source source = addSource(EngineTestCase.createSource([
+ "library dart.core;",
+ "const override = null;",
+ "class A {",
+ " set m(int x) {}",
+ "}",
+ "class B extends A {",
+ " @override",
+ " set m(int x) {}",
+ "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void test_proxy_annotation_prefixed() {
Source source = addSource(EngineTestCase.createSource([
"library L;",
@@ -21948,6 +22896,30 @@ class NonHintCodeTest extends ResolverTestCase {
final __test = new NonHintCodeTest();
runJUnitTest(__test, __test.test_overrideEqualsButNotHashCode);
});
+ _ut.test('test_overrideOnNonOverridingGetter_inInterface', () {
+ final __test = new NonHintCodeTest();
+ runJUnitTest(__test, __test.test_overrideOnNonOverridingGetter_inInterface);
+ });
+ _ut.test('test_overrideOnNonOverridingGetter_inSuperclass', () {
+ final __test = new NonHintCodeTest();
+ runJUnitTest(__test, __test.test_overrideOnNonOverridingGetter_inSuperclass);
+ });
+ _ut.test('test_overrideOnNonOverridingMethod_inInterface', () {
+ final __test = new NonHintCodeTest();
+ runJUnitTest(__test, __test.test_overrideOnNonOverridingMethod_inInterface);
+ });
+ _ut.test('test_overrideOnNonOverridingMethod_inSuperclass', () {
+ final __test = new NonHintCodeTest();
+ runJUnitTest(__test, __test.test_overrideOnNonOverridingMethod_inSuperclass);
+ });
+ _ut.test('test_overrideOnNonOverridingSetter_inInterface', () {
+ final __test = new NonHintCodeTest();
+ runJUnitTest(__test, __test.test_overrideOnNonOverridingSetter_inInterface);
+ });
+ _ut.test('test_overrideOnNonOverridingSetter_inSuperclass', () {
+ final __test = new NonHintCodeTest();
+ runJUnitTest(__test, __test.test_overrideOnNonOverridingSetter_inSuperclass);
+ });
_ut.test('test_proxy_annotation_prefixed', () {
final __test = new NonHintCodeTest();
runJUnitTest(__test, __test.test_proxy_annotation_prefixed);
@@ -22108,12 +23080,16 @@ class Scope_EnclosedScopeTest_test_define_normal extends Scope {
class LibraryElementBuilderTest extends EngineTestCase {
/**
- * The source factory used to create [Source].
+ * The analysis context used to analyze sources.
*/
- SourceFactory _sourceFactory;
+ AnalysisContextImpl _context;
void setUp() {
- _sourceFactory = new SourceFactory.con2([new FileUriResolver()]);
+ SourceFactory sourceFactory = new SourceFactory([
+ new DartUriResolver(DirectoryBasedDartSdk.defaultSdk),
+ new FileUriResolver()]);
+ _context = new AnalysisContextImpl();
+ _context.sourceFactory = sourceFactory;
}
void test_accessorsAcrossFiles() {
@@ -22214,8 +23190,8 @@ class LibraryElementBuilderTest extends EngineTestCase {
* @return the source object representing the added file
*/
Source addSource(String filePath, String contents) {
- Source source = new FileBasedSource.con1(_sourceFactory.contentCache, FileUtilities2.createFile(filePath));
- _sourceFactory.setContents(source, contents);
+ Source source = new FileBasedSource.con1(FileUtilities2.createFile(filePath));
+ _context.setContents(source, contents);
return source;
}
@@ -22254,11 +23230,7 @@ class LibraryElementBuilderTest extends EngineTestCase {
* @throws Exception if the element model could not be built
*/
LibraryElement buildLibrary(Source librarySource, List<ErrorCode> expectedErrorCodes) {
- AnalysisContextImpl context = new AnalysisContextImpl();
- context.sourceFactory = new SourceFactory.con2([
- new DartUriResolver(DirectoryBasedDartSdk.defaultSdk),
- new FileUriResolver()]);
- LibraryResolver resolver = new LibraryResolver(context);
+ LibraryResolver resolver = new LibraryResolver(_context);
LibraryElementBuilder builder = new LibraryElementBuilder(resolver);
Library library = resolver.createLibrary(librarySource);
LibraryElement element = builder.buildLibrary(library);
@@ -22556,6 +23528,38 @@ class SimpleResolverTest extends ResolverTestCase {
verify([source]);
}
+ void test_entryPoint_exported() {
+ addSource2("/two.dart", EngineTestCase.createSource(["library two;", "main() {}"]));
+ Source source = addSource2("/one.dart", EngineTestCase.createSource(["library one;", "export 'two.dart';"]));
+ LibraryElement library = resolve(source);
+ JUnitTestCase.assertNotNull(library);
+ FunctionElement main = library.entryPoint;
+ JUnitTestCase.assertNotNull(main);
+ JUnitTestCase.assertNotSame(library, main.library);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_entryPoint_local() {
+ Source source = addSource2("/one.dart", EngineTestCase.createSource(["library one;", "main() {}"]));
+ LibraryElement library = resolve(source);
+ JUnitTestCase.assertNotNull(library);
+ FunctionElement main = library.entryPoint;
+ JUnitTestCase.assertNotNull(main);
+ JUnitTestCase.assertSame(library, main.library);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_entryPoint_none() {
+ Source source = addSource2("/one.dart", EngineTestCase.createSource(["library one;"]));
+ LibraryElement library = resolve(source);
+ JUnitTestCase.assertNotNull(library);
+ JUnitTestCase.assertNull(library.entryPoint);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void test_extractedMethodAsConstant() {
Source source = addSource(EngineTestCase.createSource([
"abstract class Comparable<T> {",
@@ -23203,6 +24207,18 @@ class SimpleResolverTest extends ResolverTestCase {
final __test = new SimpleResolverTest();
runJUnitTest(__test, __test.test_empty);
});
+ _ut.test('test_entryPoint_exported', () {
+ final __test = new SimpleResolverTest();
+ runJUnitTest(__test, __test.test_entryPoint_exported);
+ });
+ _ut.test('test_entryPoint_local', () {
+ final __test = new SimpleResolverTest();
+ runJUnitTest(__test, __test.test_entryPoint_local);
+ });
+ _ut.test('test_entryPoint_none', () {
+ final __test = new SimpleResolverTest();
+ runJUnitTest(__test, __test.test_entryPoint_none);
+ });
_ut.test('test_extractedMethodAsConstant', () {
final __test = new SimpleResolverTest();
runJUnitTest(__test, __test.test_extractedMethodAsConstant);
@@ -23459,7 +24475,7 @@ class SubtypeManagerTest extends EngineTestCase {
void setUp() {
super.setUp();
AnalysisContextImpl context = AnalysisContextFactory.contextWithCore();
- FileBasedSource source = new FileBasedSource.con1(new ContentCache(), FileUtilities2.createFile("/test.dart"));
+ FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
_definingCompilationUnit = new CompilationUnitElementImpl("test.dart");
_definingCompilationUnit.source = source;
LibraryElementImpl definingLibrary = ElementFactory.library(context, "test");

Powered by Google App Engine
This is Rietveld 408576698