### Eclipse Workspace Patch 1.0 #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.76 diff -u -r1.76 ParameterizedTypeBinding.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java 17 Feb 2006 16:09:56 -0000 1.76 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java 2 Mar 2006 14:19:01 -0000 @@ -125,7 +125,6 @@ if ((this.tagBits & TagBits.HasTypeVariable) == 0) return; if (actualType == TypeBinding.NULL) return; - if (this.arguments == null) return; if (!(actualType instanceof ReferenceBinding)) return; TypeBinding formalEquivalent, actualEquivalent; switch (constraint) { @@ -142,6 +141,13 @@ actualEquivalent = actualType; break; } + // collect through enclosing type + ReferenceBinding formalEnclosingType = formalEquivalent.enclosingType(); + if (formalEnclosingType != null) { + formalEnclosingType.collectSubstitutes(scope, actualEquivalent.enclosingType(), substitutes, constraint); + } + // collect through type arguments + if (this.arguments == null) return; TypeBinding[] formalArguments; switch (formalEquivalent.kind()) { case Binding.GENERIC_TYPE : @@ -570,10 +576,12 @@ // this.methods = null; this.modifiers = someType.modifiers; // only set AccGenericSignature if parameterized or have enclosing type required signature - if (someArguments != null) + if (someArguments != null) { this.modifiers |= ExtraCompilerModifiers.AccGenericSignature; - else if (this.enclosingType != null) + } else if (this.enclosingType != null) { this.modifiers |= (this.enclosingType.modifiers & ExtraCompilerModifiers.AccGenericSignature); + this.tagBits |= this.enclosingType.tagBits & TagBits.HasTypeVariable; + } if (someArguments != null) { this.arguments = someArguments; for (int i = 0, length = someArguments.length; i < length; i++) {