new api usage inspection: fix highlighted range for anonymous classes (IDEA-203798)

convert old-style test to highlighted test case
This commit is contained in:
Anna.Kozlova
2018-12-07 18:25:54 +01:00
parent e88d00ed63
commit 7996ebc0e9
18 changed files with 98 additions and 119 deletions
@@ -260,7 +260,7 @@ public class Java15APIUsageInspection extends AbstractBaseJavaLocalInspectionToo
if (!methods.isEmpty()) {
PsiElement element2Highlight = aClass.getNameIdentifier();
if (element2Highlight == null) {
element2Highlight = aClass;
element2Highlight = aClass instanceof PsiAnonymousClass ? ((PsiAnonymousClass)aClass).getBaseClassReference() : aClass;
}
myHolder.registerProblem(element2Highlight,
methods.size() == 1 ? InspectionsBundle.message("inspection.1.8.problem.single.descriptor", methods.get(0).getName(), getJdkName(effectiveLanguageLevel))
@@ -0,0 +1,5 @@
public class Annotation {
@<error descr="Usage of API documented as @since 1.7+">SafeVarargs</error>
public final void a(java.util.List<String>... ls) {}
}
@@ -0,0 +1,5 @@
public class Constructor {
void foo() {
throw new <error descr="Usage of API documented as @since 1.5+">IllegalArgumentException</error> ("", new RuntimeException());
}
}
@@ -0,0 +1,46 @@
import java.util.Iterator;
public class <error descr="Default method 'remove' is not overridden. It would cause compilation problems with JDK 6">DefaultMethods</error> implements Iterator<String> {
@Override
public boolean hasNext() {
return false;
}
@Override
public String next() {
return null;
}
static class T implements Iterator<String> {
@Override
public boolean hasNext() {
return false;
}
@Override
public String next() {
return null;
}
@Override
public void remove() {}
}
public <T extends Iterator<String>> T typedIterator() {
return (T) <error descr="Cannot resolve method 'iterator()'">iterator</error>();
}
{
Iterator<String> it=new <error descr="Default method 'remove' is not overridden. It would cause compilation problems with JDK 6">Iterator<String></error>(){
@Override
public boolean hasNext(){
return false;
}
@Override
public String next(){
return null;
}
};
}
}
@@ -1,5 +1,5 @@
import java.awt.geom.GeneralPath;
public class Test {
public class Ignored {
void foo() {
GeneralPath path = new GeneralPath();
path.moveTo(0,0);
@@ -0,0 +1,9 @@
import java.util.Map;
public abstract class OverrideAnnotation implements Map<String, String> {
@<error descr="Usage of API documented as @since 1.8+">Override</error>
public String getOrDefault(Object key, String defaultValue) {
return null;
}
}
@@ -1,4 +1,4 @@
class Test {
class RawInheritFromNewlyGenerified {
private AbstractCCM<String> myModel;
}
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<problems>
<problem>
<file>Test.java</file>
<line>3</line>
<description>Usage of API documented as @since 1.7</description>
</problem>
</problems>
@@ -1,5 +0,0 @@
public class Test {
@SafeVarargs
public final void a(List<String>... ls) {}
}
@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<problems>
<problem>
<file>Test.java</file>
<line>3</line>
<description>Usage of API documented as @since 1.5</description>
</problem>
</problems>
@@ -1,5 +0,0 @@
public class Test {
void foo() {
throw new IllegalArgumentException ("", new RuntimeException());
}
}
@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<problems>
<problem>
<file>Test.java</file>
<line>3</line>
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Usages of API documented as @since 1.5 (1.6|1.7)</problem_class>
<description>Default method 'remove' is not overridden. It would cause compilation problems with JDK 6</description>
</problem>
</problems>
@@ -1,33 +0,0 @@
import java.util.Iterator;
public class Test implements Iterator<String> {
@Override
public boolean hasNext() {
return false;
}
@Override
public String next() {
return null;
}
static class T implements Iterator<String> {
@Override
public boolean hasNext() {
return false;
}
@Override
public String next() {
return null;
}
@Override
public void remove() {}
}
public <T extends Iterator<String>> T typedIterator() {
return (T) iterator();
}
}
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<problems></problems>
@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<problems>
<problem>
<file>Test.java</file>
<line>4</line>
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Usages of API documented as @since 1.5 (1.6|1.7)</problem_class>
<description>Usage of API documented as @since 1.8+</description>
</problem>
</problems>
@@ -1,9 +0,0 @@
import java.util.Map;
public abstract class Test implements Map<String, String> {
@Override
public String getOrDefault(Object key, String defaultValue) {
return null;
}
}
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<problems/>
@@ -17,45 +17,52 @@
package com.intellij.java.codeInspection;
import com.intellij.JavaTestUtil;
import com.intellij.codeInspection.ex.LocalInspectionToolWrapper;
import com.intellij.codeInspection.java15api.Java15APIUsageInspection;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.testFramework.IdeaTestUtil;
import com.intellij.testFramework.InspectionTestCase;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import org.jetbrains.annotations.NotNull;
public class JavaAPIUsagesInspectionTest extends InspectionTestCase {
public class JavaAPIUsagesInspectionTest extends LightCodeInsightFixtureTestCase {
@Override
protected String getTestDataPath() {
return JavaTestUtil.getJavaTestDataPath() + "/inspection";
return JavaTestUtil.getJavaTestDataPath() + "/inspection/usage1.5/";
}
private void doTest() {
final Java15APIUsageInspection usageInspection = new Java15APIUsageInspection();
doTest("usage1.5/" + getTestName(true), new LocalInspectionToolWrapper(usageInspection), "java 1.5");
@Override
protected void setUp() throws Exception {
super.setUp();
myFixture.enableInspections(new Java15APIUsageInspection());
}
@NotNull
@Override
protected LightProjectDescriptor getProjectDescriptor() {
return JAVA_8;
}
public void testConstructor() {
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_4, this::doTest);
IdeaTestUtil.setModuleLanguageLevel(myFixture.getModule(), LanguageLevel.JDK_1_4);
myFixture.testHighlighting(getTestName(false) + ".java");
}
public void testIgnored() {
doTest();
myFixture.addClass("package java.awt.geom; public class GeneralPath {public void moveTo(int x, int y){}}");
doTest();
}
public void testAnnotation() {
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, this::doTest);
}
public void testDefaultMethods() {
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, this::doTest);
}
public void testOverrideAnnotation() {
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, this::doTest);
}
public void testAnnotation() { doTest(); }
public void testDefaultMethods() { doTest(); }
public void testOverrideAnnotation() { doTest(); }
public void testRawInheritFromNewlyGenerified() {
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, this::doTest);
myFixture.addClass("package javax.swing; public class AbstractListModel<K> {}");
doTest();
}
private void doTest() {
IdeaTestUtil.setModuleLanguageLevel(myFixture.getModule(), LanguageLevel.JDK_1_6);
myFixture.testHighlighting(getTestName(false) + ".java");
}
//generate apiXXX.txt