Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 21101 Details for
Bug 93408
ITypeBinding#isEqualTo(..) does not resolve type variables
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed patch
patch94398_org.eclipse.jdt.core.txt (text/plain), 11.68 KB, created by
Jerome Lanneluc
on 2005-05-13 10:01:04 EDT
(
hide
)
Description:
Proposed patch
Filename:
MIME Type:
Creator:
Jerome Lanneluc
Created:
2005-05-13 10:01:04 EDT
Size:
11.68 KB
patch
obsolete
>Index: dom/org/eclipse/jdt/core/dom/BindingComparator.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BindingComparator.java,v >retrieving revision 1.17 >diff -u -r1.17 BindingComparator.java >--- dom/org/eclipse/jdt/core/dom/BindingComparator.java 28 Apr 2005 11:54:57 -0000 1.17 >+++ dom/org/eclipse/jdt/core/dom/BindingComparator.java 13 May 2005 13:16:02 -0000 >@@ -10,6 +10,8 @@ > *******************************************************************************/ > package org.eclipse.jdt.core.dom; > >+import java.util.HashSet; >+ > import org.eclipse.jdt.core.compiler.CharOperation; > import org.eclipse.jdt.internal.compiler.env.IConstants; > import org.eclipse.jdt.internal.compiler.lookup.Binding; >@@ -61,21 +63,21 @@ > * @param declaringElement2 > * @return true if both parameters are equals, false otherwise > */ >- static boolean isEqual(Binding declaringElement, Binding declaringElement2, boolean checkTypeVariables) { >+ static boolean isEqual(Binding declaringElement, Binding declaringElement2, HashSet visitedTypes) { > if (declaringElement instanceof org.eclipse.jdt.internal.compiler.lookup.TypeBinding) { > if (!(declaringElement2 instanceof org.eclipse.jdt.internal.compiler.lookup.TypeBinding)){ > return false; > } > return isEqual((org.eclipse.jdt.internal.compiler.lookup.TypeBinding) declaringElement, > (org.eclipse.jdt.internal.compiler.lookup.TypeBinding) declaringElement2, >- checkTypeVariables); >+ visitedTypes); > } else if (declaringElement instanceof org.eclipse.jdt.internal.compiler.lookup.MethodBinding) { > if (!(declaringElement2 instanceof org.eclipse.jdt.internal.compiler.lookup.MethodBinding)) { > return false; > } > return isEqual((org.eclipse.jdt.internal.compiler.lookup.MethodBinding) declaringElement, > (org.eclipse.jdt.internal.compiler.lookup.MethodBinding) declaringElement2, >- checkTypeVariables); >+ visitedTypes); > } else if (declaringElement instanceof VariableBinding) { > if (!(declaringElement2 instanceof VariableBinding)) { > return false; >@@ -104,23 +106,19 @@ > > static boolean isEqual(org.eclipse.jdt.internal.compiler.lookup.MethodBinding methodBinding, > org.eclipse.jdt.internal.compiler.lookup.MethodBinding methodBinding2) { >- return isEqual(methodBinding, methodBinding2, true); >+ return isEqual(methodBinding, methodBinding2, new HashSet()); > } > > static boolean isEqual(org.eclipse.jdt.internal.compiler.lookup.MethodBinding methodBinding, > org.eclipse.jdt.internal.compiler.lookup.MethodBinding methodBinding2, >- boolean checkTypeVariables) { >- if (checkTypeVariables) { >- if (!isEqual(methodBinding.typeVariables, methodBinding2.typeVariables, true) >- || !isEqual(methodBinding.parameters, methodBinding2.parameters, true)) { >- return false; >- } >- } >+ HashSet visitedTypes) { > return (methodBinding == null && methodBinding2 == null) > || (CharOperation.equals(methodBinding.selector, methodBinding2.selector) >- && isEqual(methodBinding.returnType, methodBinding2.returnType, checkTypeVariables) >- && isEqual(methodBinding.thrownExceptions, methodBinding2.thrownExceptions, checkTypeVariables) >- && isEqual(methodBinding.declaringClass, methodBinding2.declaringClass, true)); >+ && isEqual(methodBinding.returnType, methodBinding2.returnType, visitedTypes) >+ && isEqual(methodBinding.thrownExceptions, methodBinding2.thrownExceptions, visitedTypes) >+ && isEqual(methodBinding.declaringClass, methodBinding2.declaringClass, visitedTypes) >+ && isEqual(methodBinding.typeVariables, methodBinding2.typeVariables, visitedTypes) >+ && isEqual(methodBinding.parameters, methodBinding2.parameters, visitedTypes)); > } > > static boolean isEqual(VariableBinding variableBinding, VariableBinding variableBinding2) { >@@ -131,10 +129,11 @@ > } > > static boolean isEqual(FieldBinding fieldBinding, FieldBinding fieldBinding2) { >+ HashSet visitedTypes = new HashSet(); > return (fieldBinding.modifiers & CompilerModifiers.AccJustFlag) == (fieldBinding2.modifiers & CompilerModifiers.AccJustFlag) > && CharOperation.equals(fieldBinding.name, fieldBinding2.name) >- && isEqual(fieldBinding.type, fieldBinding2.type, true) >- && isEqual(fieldBinding.declaringClass, fieldBinding2.declaringClass, true); >+ && isEqual(fieldBinding.type, fieldBinding2.type, visitedTypes) >+ && isEqual(fieldBinding.declaringClass, fieldBinding2.declaringClass, visitedTypes); > } > > /** >@@ -143,14 +142,14 @@ > * @return true if both parameters are equals, false otherwise > */ > static boolean isEqual(org.eclipse.jdt.internal.compiler.lookup.TypeBinding[] bindings, org.eclipse.jdt.internal.compiler.lookup.TypeBinding[] otherBindings) { >- return isEqual(bindings, otherBindings, true); >+ return isEqual(bindings, otherBindings, new HashSet()); > } > /** > * @param bindings > * @param otherBindings > * @return true if both parameters are equals, false otherwise > */ >- static boolean isEqual(org.eclipse.jdt.internal.compiler.lookup.TypeBinding[] bindings, org.eclipse.jdt.internal.compiler.lookup.TypeBinding[] otherBindings, boolean checkTypeVariables) { >+ static boolean isEqual(org.eclipse.jdt.internal.compiler.lookup.TypeBinding[] bindings, org.eclipse.jdt.internal.compiler.lookup.TypeBinding[] otherBindings, HashSet visitedTypes) { > if (bindings == null) { > return otherBindings == null; > } else if (otherBindings == null) { >@@ -162,7 +161,7 @@ > return false; > } > for (int i = 0; i < length; i++) { >- if (!isEqual(bindings[i], otherBindings[i], checkTypeVariables)) { >+ if (!isEqual(bindings[i], otherBindings[i], visitedTypes)) { > return false; > } > } >@@ -170,11 +169,14 @@ > } > } > // TODO (olivier) should optimize to use switch(binding.kind()) & modifier bitmask comparisons >- static boolean isEqual(org.eclipse.jdt.internal.compiler.lookup.TypeBinding typeBinding, org.eclipse.jdt.internal.compiler.lookup.TypeBinding typeBinding2, boolean checkTypeVariables) { >+ static boolean isEqual(org.eclipse.jdt.internal.compiler.lookup.TypeBinding typeBinding, org.eclipse.jdt.internal.compiler.lookup.TypeBinding typeBinding2, HashSet visitedTypes) { > if (typeBinding == typeBinding2) > return true; > if (typeBinding == null || typeBinding2 == null) > return false; >+ >+ if (visitedTypes.contains(typeBinding)) return true; >+ visitedTypes.add(typeBinding); > > switch (typeBinding.kind()) { > case Binding.BASE_TYPE : >@@ -188,7 +190,7 @@ > return false; > } > return typeBinding.dimensions() == typeBinding2.dimensions() >- && isEqual(typeBinding.leafComponentType(), typeBinding2.leafComponentType(), checkTypeVariables); >+ && isEqual(typeBinding.leafComponentType(), typeBinding2.leafComponentType(), visitedTypes); > > case Binding.PARAMETERIZED_TYPE : > if (!typeBinding2.isParameterizedType()) { >@@ -196,14 +198,10 @@ > } > ParameterizedTypeBinding parameterizedTypeBinding = (ParameterizedTypeBinding) typeBinding; > ParameterizedTypeBinding parameterizedTypeBinding2 = (ParameterizedTypeBinding) typeBinding2; >- if (checkTypeVariables) { >- if (!isEqual(parameterizedTypeBinding.arguments, parameterizedTypeBinding2.arguments, false)) { >- return false; >- } >- } > return CharOperation.equals(parameterizedTypeBinding.compoundName, parameterizedTypeBinding2.compoundName) > && (parameterizedTypeBinding.modifiers & (CompilerModifiers.AccJustFlag | IConstants.AccInterface | IConstants.AccEnum | IConstants.AccAnnotation)) >- == (parameterizedTypeBinding2.modifiers & (CompilerModifiers.AccJustFlag | IConstants.AccInterface | IConstants.AccEnum | IConstants.AccAnnotation)); >+ == (parameterizedTypeBinding2.modifiers & (CompilerModifiers.AccJustFlag | IConstants.AccInterface | IConstants.AccEnum | IConstants.AccAnnotation)) >+ && isEqual(parameterizedTypeBinding.arguments, parameterizedTypeBinding2.arguments, visitedTypes); > > case Binding.WILDCARD_TYPE : > if (!typeBinding2.isWildcard()) { >@@ -211,7 +209,7 @@ > } > WildcardBinding wildcardBinding = (WildcardBinding) typeBinding; > WildcardBinding wildcardBinding2 = (WildcardBinding) typeBinding2; >- return isEqual(wildcardBinding.bound, wildcardBinding2.bound, checkTypeVariables) >+ return isEqual(wildcardBinding.bound, wildcardBinding2.bound, visitedTypes) > && wildcardBinding.boundKind == wildcardBinding2.boundKind; > > case Binding.TYPE_PARAMETER : >@@ -225,19 +223,15 @@ > CaptureBinding captureBinding = (CaptureBinding) typeBinding; > CaptureBinding captureBinding2 = (CaptureBinding) typeBinding2; > return captureBinding.position == captureBinding2.position >- && isEqual(captureBinding.wildcard, captureBinding2.wildcard, checkTypeVariables) >- && isEqual(captureBinding.sourceType, captureBinding2.sourceType, true); >+ && isEqual(captureBinding.wildcard, captureBinding2.wildcard, visitedTypes) >+ && isEqual(captureBinding.sourceType, captureBinding2.sourceType, visitedTypes); > } > TypeVariableBinding typeVariableBinding = (TypeVariableBinding) typeBinding; > TypeVariableBinding typeVariableBinding2 = (TypeVariableBinding) typeBinding2; >- if (checkTypeVariables) { >- return CharOperation.equals(typeVariableBinding.sourceName, typeVariableBinding2.sourceName) >- && isEqual(typeVariableBinding.declaringElement, typeVariableBinding2.declaringElement, false) >- && isEqual(typeVariableBinding.superclass(), typeVariableBinding2.superclass(), true) >- && isEqual(typeVariableBinding.superInterfaces(), typeVariableBinding2.superInterfaces(), true); >- } else { >- return CharOperation.equals(typeVariableBinding.sourceName, typeVariableBinding2.sourceName); >- } >+ return CharOperation.equals(typeVariableBinding.sourceName, typeVariableBinding2.sourceName) >+ && isEqual(typeVariableBinding.declaringElement, typeVariableBinding2.declaringElement, visitedTypes) >+ && isEqual(typeVariableBinding.superclass(), typeVariableBinding2.superclass(), visitedTypes) >+ && isEqual(typeVariableBinding.superInterfaces(), typeVariableBinding2.superInterfaces(), visitedTypes); > > case Binding.GENERIC_TYPE : > if (!typeBinding2.isGenericType()) { >@@ -245,14 +239,10 @@ > } > ReferenceBinding referenceBinding = (ReferenceBinding) typeBinding; > ReferenceBinding referenceBinding2 = (ReferenceBinding) typeBinding2; >- if (checkTypeVariables) { >- if (!isEqual(referenceBinding.typeVariables(), referenceBinding2.typeVariables(), true)) { >- return false; >- } >- } > return CharOperation.equals(referenceBinding.compoundName, referenceBinding2.compoundName) > && (referenceBinding.modifiers & (CompilerModifiers.AccJustFlag | IConstants.AccInterface | IConstants.AccEnum | IConstants.AccAnnotation)) >- == (referenceBinding2.modifiers & (CompilerModifiers.AccJustFlag | IConstants.AccInterface | IConstants.AccEnum | IConstants.AccAnnotation)); >+ == (referenceBinding2.modifiers & (CompilerModifiers.AccJustFlag | IConstants.AccInterface | IConstants.AccEnum | IConstants.AccAnnotation)) >+ && isEqual(referenceBinding.typeVariables(), referenceBinding2.typeVariables(), visitedTypes); > > case Binding.RAW_TYPE : > default : >@@ -276,6 +266,6 @@ > * @return true if both parameters are equals, false otherwise > */ > static boolean isEqual(org.eclipse.jdt.internal.compiler.lookup.TypeBinding typeBinding, org.eclipse.jdt.internal.compiler.lookup.TypeBinding typeBinding2) { >- return isEqual(typeBinding, typeBinding2, true); >+ return isEqual(typeBinding, typeBinding2, new HashSet()); > } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 93408
: 21101 |
21102