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

Unified Diff: editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/resolver/InheritanceManagerTest.java

Issue 296193008: Generate proper override warnings when conflicting members are inherited. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 7 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:
View side-by-side diff with in-line comments
Download patch
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 11b097ba4d2f20470f4e9045e63d085c06274570..e115c712926001093d9293602b85395ba5f6e9ea 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
@@ -16,6 +16,7 @@ package com.google.dart.engine.internal.resolver;
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.ExecutableElement;
import com.google.dart.engine.element.MethodElement;
import com.google.dart.engine.element.ParameterElement;
import com.google.dart.engine.element.PropertyAccessorElement;
@@ -43,6 +44,7 @@ import static com.google.dart.engine.element.ElementFactory.library;
import static com.google.dart.engine.element.ElementFactory.methodElement;
import static com.google.dart.engine.element.ElementFactory.setterElement;
+import java.util.ArrayList;
import java.util.HashSet;
public class InheritanceManagerTest extends EngineTestCase {
@@ -1110,6 +1112,63 @@ public class InheritanceManagerTest extends EngineTestCase {
assertNoErrors(classA);
}
+ public void test_lookupOverrides_noParentClasses() throws Exception {
+ ClassElementImpl classA = classElement("A");
+ String methodName = "m";
+ MethodElementImpl methodM = methodElement(methodName, typeProvider.getIntType());
+ classA.setMethods(new MethodElement[] {methodM});
+ assertSizeOfList(0, inheritanceManager.lookupOverrides(classA, methodName));
+ assertNoErrors(classA);
+ }
+
+ public void test_lookupOverrides_overrideBaseClass() throws Exception {
+ ClassElementImpl classA = classElement("A");
+ String methodName = "m";
+ MethodElementImpl methodMinA = methodElement(methodName, typeProvider.getIntType());
+ classA.setMethods(new MethodElement[] {methodMinA});
+ ClassElementImpl classB = classElement("B", classA.getType());
+ MethodElementImpl methodMinB = methodElement(methodName, typeProvider.getIntType());
+ classB.setMethods(new MethodElement[] {methodMinB});
+ ArrayList<ExecutableElement> overrides = inheritanceManager.lookupOverrides(classB, methodName);
+ assertEqualsIgnoreOrder(new Object[] {methodMinA}, overrides.toArray());
+ assertNoErrors(classA);
+ assertNoErrors(classB);
+ }
+
+ public void test_lookupOverrides_overrideInterface() throws Exception {
+ ClassElementImpl classA = classElement("A");
+ String methodName = "m";
+ MethodElementImpl methodMinA = methodElement(methodName, typeProvider.getIntType());
+ classA.setMethods(new MethodElement[] {methodMinA});
+ ClassElementImpl classB = classElement("B");
+ classB.setInterfaces(new InterfaceType[] {classA.getType()});
+ MethodElementImpl methodMinB = methodElement(methodName, typeProvider.getIntType());
+ classB.setMethods(new MethodElement[] {methodMinB});
+ ArrayList<ExecutableElement> overrides = inheritanceManager.lookupOverrides(classB, methodName);
+ assertEqualsIgnoreOrder(new Object[] {methodMinA}, overrides.toArray());
+ assertNoErrors(classA);
+ assertNoErrors(classB);
+ }
+
+ public void test_lookupOverrides_overrideTwoInterfaces() throws Exception {
+ ClassElementImpl classA = classElement("A");
+ String methodName = "m";
+ MethodElementImpl methodMinA = methodElement(methodName, typeProvider.getIntType());
+ classA.setMethods(new MethodElement[] {methodMinA});
+ ClassElementImpl classB = classElement("B");
+ MethodElementImpl methodMinB = methodElement(methodName, typeProvider.getDoubleType());
+ classB.setMethods(new MethodElement[] {methodMinB});
+ ClassElementImpl classC = classElement("C");
+ classC.setInterfaces(new InterfaceType[] {classA.getType(), classB.getType()});
+ MethodElementImpl methodMinC = methodElement(methodName, typeProvider.getNumType());
+ classC.setMethods(new MethodElement[] {methodMinC});
+ ArrayList<ExecutableElement> overrides = inheritanceManager.lookupOverrides(classC, methodName);
+ assertEqualsIgnoreOrder(new Object[] {methodMinA, methodMinB}, overrides.toArray());
+ assertNoErrors(classA);
+ assertNoErrors(classB);
+ assertNoErrors(classC);
+ }
+
private void assertErrors(ClassElement classElt, ErrorCode... expectedErrorCodes) {
GatheringErrorListener errorListener = new GatheringErrorListener();
HashSet<AnalysisError> actualErrors = inheritanceManager.getErrors(classElt);

Powered by Google App Engine
This is Rietveld 408576698