Chromium Code Reviews| Index: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java |
| diff --git a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java |
| index 9f68a8b2a405fd96b25a9cee1e06f6238e797527..f7f1cd5614efcae7941612aa33e5e88a8a8d0edc 100644 |
| --- a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java |
| +++ b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java |
| @@ -1116,7 +1116,9 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> { |
| */ |
| private boolean checkForAllInvalidOverrideErrorCodes(ExecutableElement executableElement, |
| ParameterElement[] parameters, ASTNode[] parameterLocations, SimpleIdentifier errorNameTarget) { |
| + LibraryElement executableElementLibrary = executableElement.getLibrary(); |
|
jwren
2013/10/01 20:38:36
Instead of looking up the library for each member,
|
| String executableElementName = executableElement.getName(); |
| + boolean executableElementPrivate = SimpleIdentifier.isPrivateName(executableElementName); |
| ExecutableElement overriddenExecutable = inheritanceManager.lookupInheritance( |
| enclosingClass, |
| executableElementName); |
| @@ -1138,9 +1140,20 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> { |
| : superclassType.getElement(); |
| while (superclassElement != null && !visitedClasses.contains(superclassElement)) { |
| visitedClasses.add(superclassElement); |
| + LibraryElement superclassLibrary = superclassElement.getLibrary(); |
| + // Check fields. |
| FieldElement[] fieldElts = superclassElement.getFields(); |
| for (FieldElement fieldElt : fieldElts) { |
| - if (fieldElt.getName().equals(executableElementName) && fieldElt.isStatic()) { |
| + // We need the same name. |
| + if (!fieldElt.getName().equals(executableElementName)) { |
| + continue; |
| + } |
| + // Ignore if private in a different library - cannot collide. |
| + if (executableElementPrivate && !executableElementLibrary.equals(superclassLibrary)) { |
| + continue; |
| + } |
| + // instance vs. static |
| + if (fieldElt.isStatic()) { |
| errorReporter.reportError( |
| StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC, |
| errorNameTarget, |
| @@ -1149,9 +1162,19 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> { |
| return true; |
| } |
| } |
| + // Check methods. |
| MethodElement[] methodElements = superclassElement.getMethods(); |
| for (MethodElement methodElement : methodElements) { |
| - if (methodElement.getName().equals(executableElementName) && methodElement.isStatic()) { |
| + // We need the same name. |
| + if (!methodElement.getName().equals(executableElementName)) { |
| + continue; |
| + } |
| + // Ignore if private in a different library - cannot collide. |
| + if (executableElementPrivate && !executableElementLibrary.equals(superclassLibrary)) { |
| + continue; |
| + } |
| + // instance vs. static |
| + if (methodElement.isStatic()) { |
| errorReporter.reportError( |
| StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC, |
| errorNameTarget, |