Index: compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java =================================================================== RCS file: /home/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java,v retrieving revision 1.119.2.2 diff -u -r1.119.2.2 ClassScope.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java 12 Jul 2005 13:34:20 -0000 1.119.2.2 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java 19 Jul 2005 11:21:55 -0000 @@ -692,7 +692,7 @@ } while ((currentType = currentType.superclass()) != null && (currentType.tagBits & HasNoMemberTypes) == 0); } // Perform deferred bound checks for parameterized type references (only done after hierarchy is connected) - private void checkParameterizedTypeBounds() { + public void checkParameterizedTypeBounds() { TypeReference superclass = referenceContext.superclass; if (superclass != null) { superclass.checkBounds(this); @@ -709,6 +709,13 @@ typeParameters[i].checkBounds(this); } } + // propagate to member types + SourceTypeBinding sourceType = referenceContext.binding; + ReferenceBinding[] memberTypes = sourceType.memberTypes; + if (memberTypes != null && memberTypes != NoMemberTypes) { + for (int i = 0, size = memberTypes.length; i < size; i++) + ((SourceTypeBinding) memberTypes[i]).scope.checkParameterizedTypeBounds(); + } } private void connectMemberTypes() { @@ -935,8 +942,6 @@ if (noProblems && sourceType.isHierarchyInconsistent()) problemReporter().hierarchyHasProblems(sourceType); } - // Perform deferred bound checks for parameterized type references (only done after hierarchy is connected) - checkParameterizedTypeBounds(); connectMemberTypes(); try { checkForInheritedMemberTypes(sourceType); Index: compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java =================================================================== RCS file: /home/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java,v retrieving revision 1.86.2.1 diff -u -r1.86.2.1 CompilationUnitScope.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java 28 Jun 2005 21:27:26 -0000 1.86.2.1 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java 19 Jul 2005 11:21:55 -0000 @@ -179,6 +179,10 @@ System.arraycopy(resolvedImports, 0, resolvedImports = new ImportBinding[index], 0, index); imports = resolvedImports; } +void checkParameterizedTypeBounds() { + for (int i = 0, length = topLevelTypes.length; i < length; i++) + topLevelTypes[i].scope.checkParameterizedTypeBounds(); +} /* * INTERNAL USE-ONLY * Innerclasses get their name computed as they are generated, since some may not Index: compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java =================================================================== RCS file: /home/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java,v retrieving revision 1.55.2.1 diff -u -r1.55.2.1 LookupEnvironment.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java 28 Jun 2005 21:27:26 -0000 1.55.2.1 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java 19 Jul 2005 11:21:56 -0000 @@ -197,7 +197,9 @@ stepCompleted = CONNECT_TYPE_HIERARCHY; for (int i = this.lastCompletedUnitIndex + 1; i <= this.lastUnitIndex; i++) { - (this.unitBeingCompleted = this.units[i]).scope.buildFieldsAndMethods(); + CompilationUnitScope unitScope = (this.unitBeingCompleted = this.units[i]).scope; + unitScope.checkParameterizedTypeBounds(); + unitScope.buildFieldsAndMethods(); this.units[i] = null; // release unnecessary reference to the parsed unit } stepCompleted = BUILD_FIELDS_AND_METHODS;