don't warn about unimplemented Iterator.remove for type parameters
authorAnna Kozlova <anna.kozlova@jetbrains.com>
Wed, 28 Oct 2015 12:30:45 +0000 (13:30 +0100)
committerAnna Kozlova <anna.kozlova@jetbrains.com>
Wed, 28 Oct 2015 15:05:02 +0000 (16:05 +0100)
java/java-analysis-impl/src/com/intellij/codeInspection/java15api/Java15APIUsageInspectionBase.java
java/java-tests/testData/inspection/usage1.5/defaultMethods/src/Test.java
java/java-tests/testSrc/com/intellij/codeInspection/JavaAPIUsagesInspectionTest.java

index 6977028bfe7a8d80ae52ee62c1195abcfeb0d46c..1d9fd85aeee0f40a7e52b15e68f2315a66f9de59 100644 (file)
@@ -206,7 +206,7 @@ public class Java15APIUsageInspectionBase extends BaseJavaBatchLocalInspectionTo
 
     @Override public void visitClass(PsiClass aClass) {
       // Don't go into classes (anonymous, locals).
-      if (!aClass.hasModifierProperty(PsiModifier.ABSTRACT)) {
+      if (!aClass.hasModifierProperty(PsiModifier.ABSTRACT) && !(aClass instanceof PsiTypeParameter)) {
         final Module module = ModuleUtilCore.findModuleForPsiElement(aClass);
         final LanguageLevel effectiveLanguageLevel = module != null ? getEffectiveLanguageLevel(module) : null;
         if (effectiveLanguageLevel != null && !effectiveLanguageLevel.isAtLeast(LanguageLevel.JDK_1_8)) {
index df38656b66c98497a73ea9da45ea3d41dc03cf20..f44797702a6312f45069a4b4036ad662e309c86b 100644 (file)
@@ -25,5 +25,9 @@ public class Test implements Iterator<String> {
     @Override
     public void remove() {}
   }
+
+  public <T extends Iterator<String>> T typedIterator() {
+    return (T) iterator();
+  }
 }
 
index a0082bf33277cee77c9c6c4751c813db8d80e4cb..981fb7fe67ebde13f3eab1ff53dd236a5e832322 100644 (file)
@@ -40,12 +40,7 @@ public class JavaAPIUsagesInspectionTest extends InspectionTestCase {
   }
 
   public void testConstructor() throws Exception {
-    IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_4, new Runnable() {
-      @Override
-      public void run() {
-        doTest();
-      }
-    });
+    IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_4, this::doTest);
   }
 
   public void testIgnored() throws Exception {
@@ -53,39 +48,19 @@ public class JavaAPIUsagesInspectionTest extends InspectionTestCase {
   }
 
   public void testAnnotation() throws Exception {
-    IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, new Runnable() {
-      @Override
-      public void run() {
-        doTest();
-      }
-    });
+    IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, this::doTest);
   }
 
   public void testDefaultMethods() throws Exception {
-    IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, new Runnable() {
-      @Override
-      public void run() {
-        doTest();
-      }
-    });
+    IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, this::doTest);
   }
 
   public void testOverrideAnnotation() throws Exception {
-    IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, new Runnable() {
-      @Override
-      public void run() {
-        doTest();
-      }
-    });
+    IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, this::doTest);
   }
 
   public void testRawInheritFromNewlyGenerified() throws Exception {
-    IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, new Runnable() {
-      @Override
-      public void run() {
-        doTest();
-      }
-    });
+    IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, JavaAPIUsagesInspectionTest.this::doTest);
   }
 
   @Override