Index: compiler/org/eclipse/jdt/core/compiler/IProblem.java =================================================================== RCS file: /home/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java,v retrieving revision 1.150.2.2 diff -u -r1.150.2.2 IProblem.java --- compiler/org/eclipse/jdt/core/compiler/IProblem.java 5 Jul 2005 14:57:48 -0000 1.150.2.2 +++ compiler/org/eclipse/jdt/core/compiler/IProblem.java 6 Jul 2005 14:27:55 -0000 @@ -851,6 +851,8 @@ int JavadocInvalidParamTagName = Javadoc + Internal + 519; /** @since 3.1 */ int JavadocInvalidParamTagTypeParameter = Javadoc + Internal + 469; + /** @since 3.1 */ + int JavadocNonStaticTypeFromStaticInvocation = Javadoc + Internal + 468; /** * Generics Index: compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java =================================================================== RCS file: /home/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java,v retrieving revision 1.33 diff -u -r1.33 Javadoc.java --- compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java 17 May 2005 17:18:17 -0000 1.33 +++ compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java 6 Jul 2005 14:27:56 -0000 @@ -270,6 +270,12 @@ scope.problemReporter().javadocInvalidValueReference(alloc.sourceStart, alloc.sourceEnd, modifiers); } } + + // Verify that there's no type variable reference + // (javadoc does not accept them and this is not a referenced bug or requested enhancement) + if (reference.resolvedType != null && reference.resolvedType.isTypeVariable()) { + scope.problemReporter().javadocInvalidReference(reference.sourceStart, reference.sourceEnd); + } } /* @@ -402,14 +408,15 @@ if (paramBindind.isTypeVariable()) { // Verify duplicated tags boolean duplicate = false; - for (int j = 0; j < maxBindings && !duplicate; j++) { + for (int j = 0; j < i && !duplicate; j++) { if (bindings[j] == param.resolvedType) { scope.problemReporter().javadocDuplicatedParamTag(param.token, param.sourceStart, param.sourceEnd, modifiers); duplicate = true; } } if (!duplicate) { - bindings[maxBindings++] = (TypeVariableBinding) param.resolvedType; + bindings[i] = (TypeVariableBinding) param.resolvedType; + maxBindings++; } } else { scope.problemReporter().javadocUndeclaredParamTagName(param.token, param.sourceStart, param.sourceEnd, modifiers); @@ -418,19 +425,26 @@ } // Look for undocumented type parameters - if (reportMissing) { - for (int i = 0; i < typeParametersLength; i++) { - TypeParameter parameter = parameters[i]; - boolean found = false; - for (int j = 0; j < maxBindings && !found; j++) { - if (parameter.binding == bindings[j]) { - found = true; - } - } - if (!found) { - scope.problemReporter().javadocMissingParamTag(parameter.name, parameter.sourceStart, parameter.sourceEnd, modifiers); + for (int i = 0; i < typeParametersLength; i++) { + TypeParameter parameter = parameters[i]; + boolean found = false; + for (int j = 0; j < paramTypeParamLength && !found; j++) { + if (parameter.binding == bindings[j]) { + found = true; + bindings[j] = null; } } + if (!found && reportMissing) { + scope.problemReporter().javadocMissingParamTag(parameter.name, parameter.sourceStart, parameter.sourceEnd, modifiers); + } + } + + // Report invalid param + for (int i=0; i