### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core.tests.compiler Index: src/org/eclipse/jdt/core/tests/compiler/regression/AmbiguousMethodTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AmbiguousMethodTest.java,v retrieving revision 1.28 diff -u -r1.28 AmbiguousMethodTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/AmbiguousMethodTest.java 20 Nov 2006 12:32:55 -0000 1.28 +++ src/org/eclipse/jdt/core/tests/compiler/regression/AmbiguousMethodTest.java 23 Nov 2006 14:03:58 -0000 @@ -1511,7 +1511,7 @@ } // https://bugs.eclipse.org/bugs/show_bug.cgi?id=163370 -public void _test044() { +public void test044() { this.runConformTest( new String[] { "X.java", #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java,v retrieving revision 1.86 diff -u -r1.86 ParameterizedTypeBinding.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java 9 Oct 2006 11:21:52 -0000 1.86 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java 23 Nov 2006 14:04:08 -0000 @@ -1058,4 +1058,31 @@ } return Binding.NO_TYPE_VARIABLES; } + +boolean uses(TypeBinding variable) { + int argsNb = this.arguments.length; + for (int i = 0; i < argsNb; i++) { + if (this.arguments[i] == variable || this.arguments[i].uses(variable)) { + return true; + } + } + return false; +} +TypeBinding clearedOf(TypeBinding variable) { + if (uses(variable)) { + int argsNb; + TypeBinding[] newArguments = new TypeBinding[argsNb = this.arguments.length]; + TypeBinding current; + for (int i = 0; i < argsNb; i++) { + if ((current = this.arguments[i]) instanceof TypeVariableBinding && + current.uses(variable)) { + return new RawTypeBinding(this.type, this.enclosingType, this.environment); + } + newArguments[i] = this.arguments[i].clearedOf(variable); + } + return new ParameterizedTypeBinding(this.type, newArguments, + this.enclosingType, this.environment); + } + return this; +} } Index: compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java,v retrieving revision 1.77 diff -u -r1.77 TypeBinding.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java 9 Nov 2006 14:21:27 -0000 1.77 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java 23 Nov 2006 14:04:08 -0000 @@ -963,4 +963,11 @@ public TypeVariableBinding[] typeVariables() { return Binding.NO_TYPE_VARIABLES; } + +boolean uses(TypeBinding variable) { + return false; +} +TypeBinding clearedOf(TypeBinding variable) { + return this; +} } Index: compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java,v retrieving revision 1.53 diff -u -r1.53 ParameterizedGenericMethodBinding.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java 18 Oct 2006 13:25:23 -0000 1.53 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java 23 Nov 2006 14:04:03 -0000 @@ -461,11 +461,18 @@ boolean isStatic = this.isStatic(); for (int i = 0; i < length; i++) { newArguments[i] = isStatic ? - originalVariables[i].upperBound() : // do not rawify for statics + upperBound(originalVariables[i]) : // do not rawify for statics environment.convertToRawType(originalVariables[i].upperBound()); } this.tiebreakMethod = this.environment.createParameterizedGenericMethod(this.originalMethod, newArguments); } return this.tiebreakMethod; - } + } + TypeBinding upperBound(TypeVariableBinding original) { + TypeBinding result = original.firstBound; + if (result == null ) { + return original.superclass; // java/lang/Object + } + return result.clearedOf(original); + } } Index: compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java,v retrieving revision 1.54 diff -u -r1.54 TypeVariableBinding.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java 25 Jun 2006 21:33:33 -0000 1.54 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java 23 Nov 2006 14:04:08 -0000 @@ -440,5 +440,8 @@ return this.firstBound; } return this.superclass; // java/lang/Object - } + } +boolean uses(TypeBinding variable) { + return CharOperation.equals(((TypeVariableBinding)variable).sourceName, this.sourceName); +} }