From f715cf9ca848bd09f14d74aea3c44d06b1a5c72c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 2 Jul 2014 18:25:51 +0200 Subject: [PATCH] java 1.4 descriptor introduced; ignore removeAll without generics EA-57871 - assert: PsiElementFactoryImpl.createType --- .../SuspiciousMethodCallUtil.java | 12 ++--- .../suspiciousCalls/RemoveAll14.java | 14 ++++++ ...SuspiciousCollectionMethodCalls14Test.java | 44 +++++++++++++++++++ .../LightCodeInsightFixtureTestCase.java | 12 +++++ 4 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 java/java-tests/testData/inspection/suspiciousCalls/RemoveAll14.java create mode 100644 java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCalls14Test.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java index ecf21db51d47..d725158a5201 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java @@ -18,11 +18,9 @@ package com.intellij.codeInspection.miscGenerics; import com.intellij.codeInsight.daemon.impl.analysis.JavaGenericsUtil; import com.intellij.codeInspection.InspectionsBundle; import com.intellij.psi.*; -import com.intellij.psi.impl.PsiImplUtil; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.*; import com.intellij.util.containers.IntArrayList; -import com.sun.corba.se.impl.corba.TCUtility; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -47,10 +45,12 @@ public class SuspiciousMethodCallUtil { PsiMethod contains = MethodSignatureUtil.findMethodBySignature(collectionClass, containsSignature, false); addMethod(contains, 0, patternMethods, indices); - PsiClassType wildcardCollection = javaPsiFacade.getElementFactory().createType(collectionClass, PsiWildcardType.createUnbounded(manager)); - MethodSignature removeAllSignature = MethodSignatureUtil.createMethodSignature("removeAll", new PsiType[] {wildcardCollection}, PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY); - PsiMethod removeAll = MethodSignatureUtil.findMethodBySignature(collectionClass, removeAllSignature, false); - addMethod(removeAll, 0, patternMethods, indices); + if (PsiUtil.isLanguageLevel5OrHigher(collectionClass)) { + PsiClassType wildcardCollection = javaPsiFacade.getElementFactory().createType(collectionClass, PsiWildcardType.createUnbounded(manager)); + MethodSignature removeAllSignature = MethodSignatureUtil.createMethodSignature("removeAll", new PsiType[] {wildcardCollection}, PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY); + PsiMethod removeAll = MethodSignatureUtil.findMethodBySignature(collectionClass, removeAllSignature, false); + addMethod(removeAll, 0, patternMethods, indices); + } } final PsiClass listClass = javaPsiFacade.findClass(CommonClassNames.JAVA_UTIL_LIST, searchScope); diff --git a/java/java-tests/testData/inspection/suspiciousCalls/RemoveAll14.java b/java/java-tests/testData/inspection/suspiciousCalls/RemoveAll14.java new file mode 100644 index 000000000000..f6e2c033b6fc --- /dev/null +++ b/java/java-tests/testData/inspection/suspiciousCalls/RemoveAll14.java @@ -0,0 +1,14 @@ +import java.util.*; + + +class Simple { + public static void main(Set set, Set setO) { + class O {} + + Map someData = new HashMap(); + + set.removeAll(someData.keySet()); + setO.removeAll(someData.keySet()); + + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCalls14Test.java b/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCalls14Test.java new file mode 100644 index 000000000000..2d30216395ac --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCalls14Test.java @@ -0,0 +1,44 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInspection; + +import com.intellij.JavaTestUtil; +import com.intellij.codeInspection.miscGenerics.SuspiciousCollectionsMethodCallsInspection; +import com.intellij.testFramework.LightProjectDescriptor; +import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; +import org.jetbrains.annotations.NotNull; + +public class SuspiciousCollectionMethodCalls14Test extends LightCodeInsightFixtureTestCase { + private final SuspiciousCollectionsMethodCallsInspection myTool = new SuspiciousCollectionsMethodCallsInspection(); + + @Override + protected String getBasePath() { + return JavaTestUtil.getRelativeJavaTestDataPath() + "/inspection/suspiciousCalls"; + } + + private void doTest() throws Exception { + myFixture.enableInspections(myTool); + myFixture.testHighlighting(getTestName(false) + ".java"); + } + + public void testRemoveAll14() throws Exception { doTest(); } + + @NotNull + @Override + protected LightProjectDescriptor getProjectDescriptor() { + return JAVA_1_4; + } +} diff --git a/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java b/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java index 5d986128ee66..3699fe36aff5 100644 --- a/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java +++ b/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java @@ -36,6 +36,18 @@ import java.io.File; * @author peter */ public abstract class LightCodeInsightFixtureTestCase extends UsefulTestCase{ + public static final LightProjectDescriptor JAVA_1_4 = new DefaultLightProjectDescriptor() { + @Override + public void configureModule(Module module, ModifiableRootModel model, ContentEntry contentEntry) { + model.getModuleExtension(LanguageLevelModuleExtension.class).setLanguageLevel(LanguageLevel.JDK_1_6); + } + }; + public static final LightProjectDescriptor JAVA_1_5 = new DefaultLightProjectDescriptor() { + @Override + public void configureModule(Module module, ModifiableRootModel model, ContentEntry contentEntry) { + model.getModuleExtension(LanguageLevelModuleExtension.class).setLanguageLevel(LanguageLevel.JDK_1_6); + } + }; public static final LightProjectDescriptor JAVA_1_6 = new DefaultLightProjectDescriptor() { @Override public void configureModule(Module module, ModifiableRootModel model, ContentEntry contentEntry) {