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

Unified Diff: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java

Issue 25592002: Private methods from different libraries cannot collide. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 3 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
« no previous file with comments | « no previous file | editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/resolver/NonErrorResolverTest.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « no previous file | editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/resolver/NonErrorResolverTest.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698