| Index: editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/resolver/InheritanceManagerTest.java
|
| diff --git a/editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/resolver/InheritanceManagerTest.java b/editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/resolver/InheritanceManagerTest.java
|
| index cb14b98d4bfd3de7376930f7f550003a841e9893..2eb5586b1fd4e042009980b47855ccb7962f2ad0 100644
|
| --- a/editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/resolver/InheritanceManagerTest.java
|
| +++ b/editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/resolver/InheritanceManagerTest.java
|
| @@ -17,6 +17,7 @@ import com.google.dart.engine.EngineTestCase;
|
| import com.google.dart.engine.context.AnalysisContextFactory;
|
| import com.google.dart.engine.element.ClassElement;
|
| import com.google.dart.engine.element.MethodElement;
|
| +import com.google.dart.engine.element.ParameterElement;
|
| import com.google.dart.engine.element.PropertyAccessorElement;
|
| import com.google.dart.engine.error.AnalysisError;
|
| import com.google.dart.engine.error.ErrorCode;
|
| @@ -28,10 +29,13 @@ import com.google.dart.engine.internal.element.ClassElementImpl;
|
| import com.google.dart.engine.internal.element.CompilationUnitElementImpl;
|
| import com.google.dart.engine.internal.element.LibraryElementImpl;
|
| import com.google.dart.engine.internal.element.MethodElementImpl;
|
| +import com.google.dart.engine.internal.element.ParameterElementImpl;
|
| import com.google.dart.engine.source.FileBasedSource;
|
| import com.google.dart.engine.type.InterfaceType;
|
| +import com.google.dart.engine.utilities.dart.ParameterKind;
|
| import com.google.dart.engine.utilities.io.FileUtilities2;
|
|
|
| +import static com.google.dart.engine.ast.ASTFactory.identifier;
|
| import static com.google.dart.engine.element.ElementFactory.classElement;
|
| import static com.google.dart.engine.element.ElementFactory.getterElement;
|
| import static com.google.dart.engine.element.ElementFactory.library;
|
| @@ -70,6 +74,8 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| }
|
|
|
| public void test_getMapOfMembersInheritedFromClasses_accessor_extends() throws Exception {
|
| + // class A { int get g; }
|
| + // class B extends A {}
|
| ClassElementImpl classA = classElement("A");
|
| String getterName = "g";
|
| PropertyAccessorElement getterG = getterElement(getterName, false, typeProvider.getIntType());
|
| @@ -88,6 +94,8 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| }
|
|
|
| public void test_getMapOfMembersInheritedFromClasses_accessor_implements() throws Exception {
|
| + // class A { int get g; }
|
| + // class B implements A {}
|
| ClassElementImpl classA = classElement("A");
|
| String getterName = "g";
|
| PropertyAccessorElement getterG = getterElement(getterName, false, typeProvider.getIntType());
|
| @@ -107,6 +115,8 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| }
|
|
|
| public void test_getMapOfMembersInheritedFromClasses_accessor_with() throws Exception {
|
| + // class A { int get g; }
|
| + // class B extends Object with A {}
|
| ClassElementImpl classA = classElement("A");
|
| String getterName = "g";
|
| PropertyAccessorElement getterG = getterElement(getterName, false, typeProvider.getIntType());
|
| @@ -125,7 +135,18 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| assertNoErrors(classB);
|
| }
|
|
|
| + public void test_getMapOfMembersInheritedFromClasses_implicitExtends() throws Exception {
|
| + // class A {}
|
| + ClassElementImpl classA = classElement("A");
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromClasses(classA);
|
| + assertEquals(numOfMembersInObject, mapA.getSize());
|
| + assertNoErrors(classA);
|
| + }
|
| +
|
| public void test_getMapOfMembersInheritedFromClasses_method_extends() throws Exception {
|
| + // class A { int g(); }
|
| + // class B extends A {}
|
| ClassElementImpl classA = classElement("A");
|
| String methodName = "m";
|
| MethodElement methodM = methodElement(methodName, typeProvider.getIntType());
|
| @@ -145,6 +166,8 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| }
|
|
|
| public void test_getMapOfMembersInheritedFromClasses_method_implements() throws Exception {
|
| + // class A { int g(); }
|
| + // class B implements A {}
|
| ClassElementImpl classA = classElement("A");
|
| String methodName = "m";
|
| MethodElement methodM = methodElement(methodName, typeProvider.getIntType());
|
| @@ -164,6 +187,8 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| }
|
|
|
| public void test_getMapOfMembersInheritedFromClasses_method_with() throws Exception {
|
| + // class A { int g(); }
|
| + // class B extends Object with A {}
|
| ClassElementImpl classA = classElement("A");
|
| String methodName = "m";
|
| MethodElement methodM = methodElement(methodName, typeProvider.getIntType());
|
| @@ -183,6 +208,8 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| }
|
|
|
| public void test_getMapOfMembersInheritedFromInterfaces_accessor_extends() throws Exception {
|
| + // class A { int get g; }
|
| + // class B extends A {}
|
| ClassElementImpl classA = classElement("A");
|
| String getterName = "g";
|
| PropertyAccessorElement getterG = getterElement(getterName, false, typeProvider.getIntType());
|
| @@ -201,6 +228,8 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| }
|
|
|
| public void test_getMapOfMembersInheritedFromInterfaces_accessor_implements() throws Exception {
|
| + // class A { int get g; }
|
| + // class B implements A {}
|
| ClassElementImpl classA = classElement("A");
|
| String getterName = "g";
|
| PropertyAccessorElement getterG = getterElement(getterName, false, typeProvider.getIntType());
|
| @@ -220,6 +249,8 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| }
|
|
|
| public void test_getMapOfMembersInheritedFromInterfaces_accessor_with() throws Exception {
|
| + // class A { int get g; }
|
| + // class B extends Object with A {}
|
| ClassElementImpl classA = classElement("A");
|
| String getterName = "g";
|
| PropertyAccessorElement getterG = getterElement(getterName, false, typeProvider.getIntType());
|
| @@ -238,7 +269,150 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| assertNoErrors(classB);
|
| }
|
|
|
| + public void test_getMapOfMembersInheritedFromInterfaces_implicitExtends() throws Exception {
|
| + // class A {}
|
| + ClassElementImpl classA = classElement("A");
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
|
| + assertEquals(numOfMembersInObject, mapA.getSize());
|
| + assertNoErrors(classA);
|
| + }
|
| +
|
| + public void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_getter_method()
|
| + throws Exception {
|
| + // class I1 { int m(); }
|
| + // class I2 { int get m; }
|
| + // class A implements I2, I1 {}
|
| + ClassElementImpl classI1 = classElement("I1");
|
| + String methodName = "m";
|
| + MethodElement methodM = methodElement(methodName, typeProvider.getIntType());
|
| + classI1.setMethods(new MethodElement[] {methodM});
|
| +
|
| + ClassElementImpl classI2 = classElement("I2");
|
| + PropertyAccessorElement getter = getterElement(methodName, false, typeProvider.getIntType());
|
| + classI2.setAccessors(new PropertyAccessorElement[] {getter});
|
| +
|
| + ClassElementImpl classA = classElement("A");
|
| + classA.setInterfaces(new InterfaceType[] {classI2.getType(), classI1.getType()});
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
|
| + assertEquals(numOfMembersInObject, mapA.getSize());
|
| + assertNull(mapA.get(methodName));
|
| + assertErrors(classA, StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD);
|
| + }
|
| +
|
| + public void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_int_str()
|
| + throws Exception {
|
| + // class I1 { int m(); }
|
| + // class I2 { String m(); }
|
| + // class A implements I1, I2 {}
|
| + ClassElementImpl classI1 = classElement("I1");
|
| + String methodName = "m";
|
| + MethodElement methodM1 = methodElement(methodName, null, typeProvider.getIntType());
|
| + classI1.setMethods(new MethodElement[] {methodM1});
|
| +
|
| + ClassElementImpl classI2 = classElement("I2");
|
| + MethodElement methodM2 = methodElement(methodName, null, typeProvider.getStringType());
|
| + classI2.setMethods(new MethodElement[] {methodM2});
|
| +
|
| + ClassElementImpl classA = classElement("A");
|
| + classA.setInterfaces(new InterfaceType[] {classI1.getType(), classI2.getType()});
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
|
| + assertEquals(numOfMembersInObject, mapA.getSize());
|
| + assertNull(mapA.get(methodName));
|
| + assertErrors(classA, StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE);
|
| + }
|
| +
|
| + public void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_method_getter()
|
| + throws Exception {
|
| + // class I1 { int m(); }
|
| + // class I2 { int get m; }
|
| + // class A implements I1, I2 {}
|
| + ClassElementImpl classI1 = classElement("I1");
|
| + String methodName = "m";
|
| + MethodElement methodM = methodElement(methodName, typeProvider.getIntType());
|
| + classI1.setMethods(new MethodElement[] {methodM});
|
| +
|
| + ClassElementImpl classI2 = classElement("I2");
|
| + PropertyAccessorElement getter = getterElement(methodName, false, typeProvider.getIntType());
|
| + classI2.setAccessors(new PropertyAccessorElement[] {getter});
|
| +
|
| + ClassElementImpl classA = classElement("A");
|
| + classA.setInterfaces(new InterfaceType[] {classI1.getType(), classI2.getType()});
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
|
| + assertEquals(numOfMembersInObject, mapA.getSize());
|
| + assertNull(mapA.get(methodName));
|
| + assertErrors(classA, StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD);
|
| + }
|
| +
|
| + public void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_numOfRequiredParams()
|
| + throws Exception {
|
| + // class I1 { dynamic m(int, [int]); }
|
| + // class I2 { dynamic m(int, int, int); }
|
| + // class A implements I1, I2 {}
|
| + ClassElementImpl classI1 = classElement("I1");
|
| + String methodName = "m";
|
| + MethodElementImpl methodM1 = methodElement(methodName, typeProvider.getDynamicType());
|
| + ParameterElementImpl parameter1 = new ParameterElementImpl(identifier("a1"));
|
| + parameter1.setType(typeProvider.getIntType());
|
| + parameter1.setParameterKind(ParameterKind.REQUIRED);
|
| + ParameterElementImpl parameter2 = new ParameterElementImpl(identifier("a2"));
|
| + parameter2.setType(typeProvider.getIntType());
|
| + parameter2.setParameterKind(ParameterKind.POSITIONAL);
|
| + methodM1.setParameters(new ParameterElement[] {parameter1, parameter2});
|
| + classI1.setMethods(new MethodElement[] {methodM1});
|
| +
|
| + ClassElementImpl classI2 = classElement("I2");
|
| + MethodElementImpl methodM2 = methodElement(methodName, typeProvider.getDynamicType());
|
| + ParameterElementImpl parameter3 = new ParameterElementImpl(identifier("a3"));
|
| + parameter3.setType(typeProvider.getIntType());
|
| + parameter3.setParameterKind(ParameterKind.REQUIRED);
|
| + ParameterElementImpl parameter4 = new ParameterElementImpl(identifier("a4"));
|
| + parameter4.setType(typeProvider.getIntType());
|
| + parameter4.setParameterKind(ParameterKind.REQUIRED);
|
| + ParameterElementImpl parameter5 = new ParameterElementImpl(identifier("a5"));
|
| + parameter5.setType(typeProvider.getIntType());
|
| + parameter5.setParameterKind(ParameterKind.REQUIRED);
|
| + methodM2.setParameters(new ParameterElement[] {parameter3, parameter4, parameter5});
|
| + classI2.setMethods(new MethodElement[] {methodM2});
|
| +
|
| + ClassElementImpl classA = classElement("A");
|
| + classA.setInterfaces(new InterfaceType[] {classI1.getType(), classI2.getType()});
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
|
| + assertEquals(numOfMembersInObject, mapA.getSize());
|
| + assertNull(mapA.get(methodName));
|
| + assertErrors(classA, StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE);
|
| + }
|
| +
|
| + public void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_str_int()
|
| + throws Exception {
|
| + // class I1 { int m(); }
|
| + // class I2 { String m(); }
|
| + // class A implements I2, I1 {}
|
| + ClassElementImpl classI1 = classElement("I1");
|
| + String methodName = "m";
|
| + MethodElement methodM1 = methodElement(methodName, null, typeProvider.getStringType());
|
| + classI1.setMethods(new MethodElement[] {methodM1});
|
| +
|
| + ClassElementImpl classI2 = classElement("I2");
|
| + MethodElement methodM2 = methodElement(methodName, null, typeProvider.getIntType());
|
| + classI2.setMethods(new MethodElement[] {methodM2});
|
| +
|
| + ClassElementImpl classA = classElement("A");
|
| + classA.setInterfaces(new InterfaceType[] {classI2.getType(), classI1.getType()});
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
|
| + assertEquals(numOfMembersInObject, mapA.getSize());
|
| + assertNull(mapA.get(methodName));
|
| + assertErrors(classA, StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE);
|
| + }
|
| +
|
| public void test_getMapOfMembersInheritedFromInterfaces_method_extends() throws Exception {
|
| + // class A { int g(); }
|
| + // class B extends A {}
|
| ClassElementImpl classA = classElement("A");
|
| String methodName = "m";
|
| MethodElement methodM = methodElement(methodName, typeProvider.getIntType());
|
| @@ -257,6 +431,8 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| }
|
|
|
| public void test_getMapOfMembersInheritedFromInterfaces_method_implements() throws Exception {
|
| + // class A { int g(); }
|
| + // class B implements A {}
|
| ClassElementImpl classA = classElement("A");
|
| String methodName = "m";
|
| MethodElement methodM = methodElement(methodName, typeProvider.getIntType());
|
| @@ -276,6 +452,8 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| }
|
|
|
| public void test_getMapOfMembersInheritedFromInterfaces_method_with() throws Exception {
|
| + // class A { int g(); }
|
| + // class B extends Object with A {}
|
| ClassElementImpl classA = classElement("A");
|
| String methodName = "m";
|
| MethodElement methodM = methodElement(methodName, typeProvider.getIntType());
|
| @@ -294,6 +472,230 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| assertNoErrors(classB);
|
| }
|
|
|
| + public void test_getMapOfMembersInheritedFromInterfaces_union_differentNames() throws Exception {
|
| + // class I1 { int m1(); }
|
| + // class I2 { int m2(); }
|
| + // class A implements I1, I2 {}
|
| + ClassElementImpl classI1 = classElement("I1");
|
| + String methodName1 = "m1";
|
| + MethodElement methodM1 = methodElement(methodName1, typeProvider.getIntType());
|
| + classI1.setMethods(new MethodElement[] {methodM1});
|
| +
|
| + ClassElementImpl classI2 = classElement("I2");
|
| + String methodName2 = "m2";
|
| + MethodElement methodM2 = methodElement(methodName2, typeProvider.getIntType());
|
| + classI2.setMethods(new MethodElement[] {methodM2});
|
| +
|
| + ClassElementImpl classA = classElement("A");
|
| + classA.setInterfaces(new InterfaceType[] {classI1.getType(), classI2.getType()});
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
|
| +
|
| + assertEquals(numOfMembersInObject + 2, mapA.getSize());
|
| + assertSame(methodM1, mapA.get(methodName1));
|
| + assertSame(methodM2, mapA.get(methodName2));
|
| + assertNoErrors(classA);
|
| + }
|
| +
|
| + public void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_threeMethods()
|
| + throws Exception {
|
| + // 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 = classElement("A");
|
| + ClassElementImpl classB = classElement("B", classA.getType());
|
| + ClassElementImpl classC = classElement("C", classB.getType());
|
| +
|
| + ClassElementImpl classI1 = classElement("I1");
|
| + String methodName = "m";
|
| + MethodElementImpl methodM1 = methodElement(methodName, typeProvider.getDynamicType());
|
| + ParameterElementImpl parameter1 = new ParameterElementImpl(identifier("a0"));
|
| + parameter1.setType(classA.getType());
|
| + parameter1.setParameterKind(ParameterKind.REQUIRED);
|
| + methodM1.setParameters(new ParameterElement[] {parameter1});
|
| + classI1.setMethods(new MethodElement[] {methodM1});
|
| +
|
| + ClassElementImpl classI2 = classElement("I2");
|
| + MethodElementImpl methodM2 = methodElement(methodName, typeProvider.getDynamicType());
|
| + ParameterElementImpl parameter2 = new ParameterElementImpl(identifier("a0"));
|
| + parameter2.setType(classB.getType());
|
| + parameter2.setParameterKind(ParameterKind.REQUIRED);
|
| + methodM2.setParameters(new ParameterElement[] {parameter2});
|
| + classI2.setMethods(new MethodElement[] {methodM2});
|
| +
|
| + ClassElementImpl classI3 = classElement("I3");
|
| + MethodElementImpl methodM3 = methodElement(methodName, typeProvider.getDynamicType());
|
| + ParameterElementImpl parameter3 = new ParameterElementImpl(identifier("a0"));
|
| + parameter3.setType(classC.getType());
|
| + parameter3.setParameterKind(ParameterKind.REQUIRED);
|
| + methodM3.setParameters(new ParameterElement[] {parameter3});
|
| + classI3.setMethods(new MethodElement[] {methodM3});
|
| +
|
| + ClassElementImpl classD = classElement("D");
|
| + classD.setInterfaces(new InterfaceType[] {
|
| + classI1.getType(), classI2.getType(), classI3.getType()});
|
| +
|
| + MemberMap mapD = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classD);
|
| + assertEquals(numOfMembersInObject + 1, mapD.getSize());
|
| + MethodElement syntheticMethod = methodElement(
|
| + methodName,
|
| + typeProvider.getDynamicType(),
|
| + typeProvider.getDynamicType());
|
| + assertEquals(syntheticMethod.getType(), mapD.get(methodName).getType());
|
| + assertNoErrors(classD);
|
| + }
|
| +
|
| + public void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_twoMethods()
|
| + throws Exception {
|
| + // class I1 { dynamic m(int); }
|
| + // class I2 { dynamic m(num); }
|
| + // class A implements I1, I2 {}
|
| + ClassElementImpl classI1 = classElement("I1");
|
| + String methodName = "m";
|
| + MethodElementImpl methodM1 = methodElement(methodName, typeProvider.getDynamicType());
|
| + ParameterElementImpl parameter1 = new ParameterElementImpl(identifier("a0"));
|
| + parameter1.setType(typeProvider.getIntType());
|
| + parameter1.setParameterKind(ParameterKind.REQUIRED);
|
| + methodM1.setParameters(new ParameterElement[] {parameter1});
|
| + classI1.setMethods(new MethodElement[] {methodM1});
|
| +
|
| + ClassElementImpl classI2 = classElement("I2");
|
| + MethodElementImpl methodM2 = methodElement(methodName, typeProvider.getDynamicType());
|
| + ParameterElementImpl parameter2 = new ParameterElementImpl(identifier("a0"));
|
| + parameter2.setType(typeProvider.getNumType());
|
| + parameter2.setParameterKind(ParameterKind.REQUIRED);
|
| + methodM2.setParameters(new ParameterElement[] {parameter2});
|
| + classI2.setMethods(new MethodElement[] {methodM2});
|
| +
|
| + ClassElementImpl classA = classElement("A");
|
| + classA.setInterfaces(new InterfaceType[] {classI1.getType(), classI2.getType()});
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
|
| + assertEquals(numOfMembersInObject + 1, mapA.getSize());
|
| + MethodElement syntheticMethod = methodElement(
|
| + methodName,
|
| + typeProvider.getDynamicType(),
|
| + typeProvider.getDynamicType());
|
| + assertEquals(syntheticMethod.getType(), mapA.get(methodName).getType());
|
| + assertNoErrors(classA);
|
| + }
|
| +
|
| + public void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_fourMethods()
|
| + throws Exception {
|
| + // 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 = classElement("I1");
|
| + String methodName = "m";
|
| + MethodElement methodM1 = methodElement(methodName, typeProvider.getIntType());
|
| + classI1.setMethods(new MethodElement[] {methodM1});
|
| +
|
| + ClassElementImpl classI2 = classElement("I2");
|
| + MethodElement methodM2 = methodElement(methodName, typeProvider.getIntType());
|
| + classI2.setMethods(new MethodElement[] {methodM2});
|
| +
|
| + ClassElementImpl classI3 = classElement("I3");
|
| + MethodElementImpl methodM3 = methodElement(methodName, typeProvider.getIntType());
|
| + ParameterElementImpl parameter1 = new ParameterElementImpl(identifier("a1"));
|
| + parameter1.setType(typeProvider.getIntType());
|
| + parameter1.setParameterKind(ParameterKind.POSITIONAL);
|
| + methodM3.setParameters(new ParameterElement[] {parameter1});
|
| + classI3.setMethods(new MethodElement[] {methodM3});
|
| +
|
| + ClassElementImpl classI4 = classElement("I4");
|
| + MethodElementImpl methodM4 = methodElement(methodName, typeProvider.getIntType());
|
| + ParameterElementImpl parameter2 = new ParameterElementImpl(identifier("a2"));
|
| + parameter2.setType(typeProvider.getIntType());
|
| + parameter2.setParameterKind(ParameterKind.POSITIONAL);
|
| + ParameterElementImpl parameter3 = new ParameterElementImpl(identifier("a3"));
|
| + parameter3.setType(typeProvider.getIntType());
|
| + parameter3.setParameterKind(ParameterKind.POSITIONAL);
|
| + methodM4.setParameters(new ParameterElement[] {parameter2, parameter3});
|
| + classI4.setMethods(new MethodElement[] {methodM4});
|
| +
|
| + ClassElementImpl classA = classElement("A");
|
| + classA.setInterfaces(new InterfaceType[] {
|
| + classI1.getType(), classI2.getType(), classI3.getType(), classI4.getType()});
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
|
| + assertEquals(numOfMembersInObject + 1, mapA.getSize());
|
| + assertSame(methodM4, mapA.get(methodName));
|
| + assertNoErrors(classA);
|
| + }
|
| +
|
| + public void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_threeMethods()
|
| + throws Exception {
|
| + // class I1 { int m(); }
|
| + // class I2 { int m([int]); }
|
| + // class I3 { int m([int, int]); }
|
| + // class A implements I1, I2, I3 {}
|
| + ClassElementImpl classI1 = classElement("I1");
|
| + String methodName = "m";
|
| + MethodElementImpl methodM1 = methodElement(methodName, typeProvider.getIntType());
|
| + classI1.setMethods(new MethodElement[] {methodM1});
|
| +
|
| + ClassElementImpl classI2 = classElement("I2");
|
| + MethodElementImpl methodM2 = methodElement(methodName, typeProvider.getIntType());
|
| + ParameterElementImpl parameter1 = new ParameterElementImpl(identifier("a1"));
|
| + parameter1.setType(typeProvider.getIntType());
|
| + parameter1.setParameterKind(ParameterKind.POSITIONAL);
|
| + methodM1.setParameters(new ParameterElement[] {parameter1});
|
| + classI2.setMethods(new MethodElement[] {methodM2});
|
| +
|
| + ClassElementImpl classI3 = classElement("I3");
|
| + MethodElementImpl methodM3 = methodElement(methodName, typeProvider.getIntType());
|
| + ParameterElementImpl parameter2 = new ParameterElementImpl(identifier("a2"));
|
| + parameter2.setType(typeProvider.getIntType());
|
| + parameter2.setParameterKind(ParameterKind.POSITIONAL);
|
| + ParameterElementImpl parameter3 = new ParameterElementImpl(identifier("a3"));
|
| + parameter3.setType(typeProvider.getIntType());
|
| + parameter3.setParameterKind(ParameterKind.POSITIONAL);
|
| + methodM3.setParameters(new ParameterElement[] {parameter2, parameter3});
|
| + classI3.setMethods(new MethodElement[] {methodM3});
|
| +
|
| + ClassElementImpl classA = classElement("A");
|
| + classA.setInterfaces(new InterfaceType[] {
|
| + classI1.getType(), classI2.getType(), classI3.getType()});
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
|
| + assertEquals(numOfMembersInObject + 1, mapA.getSize());
|
| + assertSame(methodM3, mapA.get(methodName));
|
| + assertNoErrors(classA);
|
| + }
|
| +
|
| + public void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_twoMethods()
|
| + throws Exception {
|
| + // class I1 { int m(); }
|
| + // class I2 { int m([int]); }
|
| + // class A implements I1, I2 {}
|
| + ClassElementImpl classI1 = classElement("I1");
|
| + String methodName = "m";
|
| + MethodElement methodM1 = methodElement(methodName, typeProvider.getIntType());
|
| + classI1.setMethods(new MethodElement[] {methodM1});
|
| +
|
| + ClassElementImpl classI2 = classElement("I2");
|
| + MethodElementImpl methodM2 = methodElement(methodName, typeProvider.getIntType());
|
| + ParameterElementImpl parameter1 = new ParameterElementImpl(identifier("a1"));
|
| + parameter1.setType(typeProvider.getIntType());
|
| + parameter1.setParameterKind(ParameterKind.POSITIONAL);
|
| + methodM2.setParameters(new ParameterElement[] {parameter1});
|
| + classI2.setMethods(new MethodElement[] {methodM2});
|
| +
|
| + ClassElementImpl classA = classElement("A");
|
| + classA.setInterfaces(new InterfaceType[] {classI1.getType(), classI2.getType()});
|
| +
|
| + MemberMap mapA = inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
|
| + assertEquals(numOfMembersInObject + 1, mapA.getSize());
|
| + assertSame(methodM2, mapA.get(methodName));
|
| + assertNoErrors(classA);
|
| + }
|
| +
|
| public void test_lookupInheritance_interface_getter() throws Exception {
|
| ClassElementImpl classA = classElement("A");
|
| String getterName = "g";
|
| @@ -364,64 +766,6 @@ public class InheritanceManagerTest extends EngineTestCase {
|
| assertNoErrors(classB);
|
| }
|
|
|
| - public void test_lookupInheritance_interfaces_STWC_inconsistentMethodInheritance()
|
| - throws Exception {
|
| - ClassElementImpl classI1 = classElement("I1");
|
| - String methodName = "m";
|
| - MethodElement methodM1 = methodElement(methodName, null, typeProvider.getIntType());
|
| - classI1.setMethods(new MethodElement[] {methodM1});
|
| -
|
| - ClassElementImpl classI2 = classElement("I2");
|
| - MethodElement methodM2 = methodElement(methodName, null, typeProvider.getStringType());
|
| - classI2.setMethods(new MethodElement[] {methodM2});
|
| -
|
| - ClassElementImpl classA = classElement("A");
|
| - classA.setInterfaces(new InterfaceType[] {classI1.getType(), classI2.getType()});
|
| - assertNull(inheritanceManager.lookupInheritance(classA, methodName));
|
| - assertNoErrors(classI1);
|
| - assertNoErrors(classI2);
|
| - assertErrors(classA, StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE);
|
| - }
|
| -
|
| - public void test_lookupInheritance_interfaces_SWC_inconsistentMethodInheritance()
|
| - throws Exception {
|
| - ClassElementImpl classI1 = classElement("I1");
|
| - String methodName = "m";
|
| - MethodElement methodM = methodElement(methodName, typeProvider.getIntType());
|
| - classI1.setMethods(new MethodElement[] {methodM});
|
| -
|
| - ClassElementImpl classI2 = classElement("I2");
|
| - PropertyAccessorElement getter = getterElement(methodName, false, typeProvider.getIntType());
|
| - classI2.setAccessors(new PropertyAccessorElement[] {getter});
|
| -
|
| - ClassElementImpl classA = classElement("A");
|
| - classA.setInterfaces(new InterfaceType[] {classI1.getType(), classI2.getType()});
|
| - assertNull(inheritanceManager.lookupInheritance(classA, methodName));
|
| - assertNoErrors(classI1);
|
| - assertNoErrors(classI2);
|
| - assertErrors(classA, StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD);
|
| - }
|
| -
|
| - public void test_lookupInheritance_interfaces_union1() throws Exception {
|
| - ClassElementImpl classI1 = classElement("I1");
|
| - String methodName1 = "m1";
|
| - MethodElement methodM1 = methodElement(methodName1, typeProvider.getIntType());
|
| - classI1.setMethods(new MethodElement[] {methodM1});
|
| -
|
| - ClassElementImpl classI2 = classElement("I2");
|
| - String methodName2 = "m2";
|
| - MethodElement methodM2 = methodElement(methodName2, typeProvider.getIntType());
|
| - classI2.setMethods(new MethodElement[] {methodM2});
|
| -
|
| - ClassElementImpl classA = classElement("A");
|
| - classA.setInterfaces(new InterfaceType[] {classI1.getType(), classI2.getType()});
|
| - assertSame(methodM1, inheritanceManager.lookupInheritance(classA, methodName1));
|
| - assertSame(methodM2, inheritanceManager.lookupInheritance(classA, methodName2));
|
| - assertNoErrors(classI1);
|
| - assertNoErrors(classI2);
|
| - assertNoErrors(classA);
|
| - }
|
| -
|
| public void test_lookupInheritance_interfaces_union2() throws Exception {
|
| ClassElementImpl classI1 = classElement("I1");
|
| String methodName1 = "m1";
|
|
|