### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java,v retrieving revision 1.120 diff -u -r1.120 MethodVerifier15.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java 6 Nov 2010 12:24:51 -0000 1.120 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java 29 Nov 2010 10:51:48 -0000 @@ -10,8 +10,14 @@ *******************************************************************************/ package org.eclipse.jdt.internal.compiler.lookup; + +import org.eclipse.jdt.internal.compiler.ast.ASTNode; +import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration; +import org.eclipse.jdt.internal.compiler.ast.Argument; import org.eclipse.jdt.internal.compiler.ast.TypeParameter; import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; +import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; +import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities; import org.eclipse.jdt.internal.compiler.util.HashtableOfObject; import org.eclipse.jdt.internal.compiler.util.SimpleSet; @@ -398,6 +404,33 @@ return false; } + +void reportRawReferences() { + char[][] methodSelectors = this.currentMethods.keyTable; + nextSelector : for (int s = methodSelectors.length; --s >= 0;) { + if (methodSelectors[s] == null) continue nextSelector; + MethodBinding[] current = (MethodBinding[]) this.currentMethods.get(methodSelectors[s]); + for (int i = 0, length = current.length; i < length; i++) { + MethodBinding currentMethod = current[i]; + if ((currentMethod.modifiers & (ExtraCompilerModifiers.AccImplementing | ExtraCompilerModifiers.AccOverriding)) == 0) { + AbstractMethodDeclaration methodDecl = currentMethod.sourceMethod(); + if (methodDecl == null) return; + TypeBinding [] parameterTypes = currentMethod.parameters; + Argument[] arguments = methodDecl.arguments; + + for (int j = 0, size = currentMethod.parameters.length; j < size; j++) { + TypeBinding parameterType = parameterTypes[j]; + Argument arg = arguments[j]; + if (parameterType.leafComponentType().isRawType() + && (arg.type.bits & ASTNode.IgnoreRawTypeCheck) == 0 + && methodDecl.scope.compilerOptions().getSeverity(CompilerOptions.RawTypeReference) != ProblemSeverities.Ignore) { + methodDecl.scope.problemReporter().rawTypeReference(arg.type, parameterType); + } + } + } + } + } +} void checkMethods() { boolean mustImplementAbstractMethods = mustImplementAbstractMethods(); boolean skipInheritedMethods = mustImplementAbstractMethods && canSkipInheritedMethods(); // have a single concrete superclass so only check overridden methods @@ -903,6 +936,8 @@ this.type.detectAnnotationCycle(); super.verify(); + + reportRawReferences(); for (int i = this.type.typeVariables.length; --i >= 0;) { TypeVariableBinding var = this.type.typeVariables[i]; Index: compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java,v retrieving revision 1.182 diff -u -r1.182 SourceTypeBinding.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java 27 Oct 2010 02:55:30 -0000 1.182 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java 29 Nov 2010 10:51:48 -0000 @@ -1377,7 +1377,12 @@ if (arg.annotations != null) { method.tagBits |= TagBits.HasParameterAnnotations; } + boolean ignoreRawTypeCheck = (arg.type.bits & ASTNode.IgnoreRawTypeCheck) != 0; + arg.type.bits |= ASTNode.IgnoreRawTypeCheck; TypeBinding parameterType = arg.type.resolveType(methodDecl.scope, true /* check bounds*/); + if (!ignoreRawTypeCheck) + arg.type.bits &= ~ASTNode.IgnoreRawTypeCheck; + if (parameterType == null) { foundArgProblem = true; } else if (parameterType == TypeBinding.VOID) { #P org.eclipse.jdt.core.tests.compiler Index: src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java,v retrieving revision 1.4 diff -u -r1.4 GenericsRegressionTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java 24 Nov 2010 04:51:13 -0000 1.4 +++ src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java 29 Nov 2010 10:51:50 -0000 @@ -536,4 +536,25 @@ }, ""); // no specific success output string } +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=322817 +public void test322817() { + this.runNegativeTest( + new String[] { + "X.java", + "interface Adaptable {\n" + + " public Object getAdapter(Class clazz); \n" + + "}\n" + + "public class X implements Adaptable {\n" + + " public Object getAdapter(Class clazz) {\n" + + " return null;\n" + + " }\n" + + "}\n" + }, + "----------\n" + + "1. WARNING in X.java (at line 2)\n" + + " public Object getAdapter(Class clazz); \n" + + " ^^^^^\n" + + "Class is a raw type. References to generic type Class should be parameterized\n" + + "----------\n"); +} } \ No newline at end of file