java unchecked warning: narrow down highlighting to class/method reference (IDEA-203860)

GitOrigin-RevId: ee686cedeef7aa677445b5054c9e191ce1d15a77
This commit is contained in:
Anna Kozlova
2019-07-15 10:58:50 +02:00
committed by intellij-monorepo-bot
parent c9fe57714a
commit 67839b3676
11 changed files with 29 additions and 22 deletions

View File

@@ -19,6 +19,7 @@ import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.graphInference.PsiPolyExpressionUtil;
import com.intellij.psi.util.*;
import com.intellij.util.ObjectUtils;
import com.intellij.util.ui.JBUI;
import org.intellij.lang.annotations.Pattern;
import org.jdom.Element;
@@ -188,7 +189,16 @@ public class UncheckedWarningLocalInspection extends AbstractBaseJavaLocalInspec
final String referenceName = ((PsiMethodCallExpression)callExpression).getMethodExpression().getReferenceName();
message += ". Reason: '" + rawExpression + "' has raw type, so result of " + referenceName + " is erased";
}
holder.registerProblem(psiElement, message, quickFixes);
PsiElement element2Highlight = null;
if (psiElement instanceof PsiNewExpression) {
element2Highlight = ((PsiNewExpression)psiElement).getClassOrAnonymousClassReference();
}
else if (psiElement instanceof PsiMethodCallExpression) {
element2Highlight = ((PsiMethodCallExpression)psiElement).getMethodExpression();
}
holder.registerProblem(ObjectUtils.notNull(element2Highlight, psiElement), message, quickFixes);
}
};
}
@@ -284,10 +294,7 @@ public class UncheckedWarningLocalInspection extends AbstractBaseJavaLocalInspec
final String description = getUncheckedCallDescription(callExpression, result);
if (description != null) {
if (IGNORE_UNCHECKED_CALL) return;
final PsiExpression element = callExpression instanceof PsiMethodCallExpression
? ((PsiMethodCallExpression)callExpression).getMethodExpression()
: callExpression;
registerProblem(description, null, element, myGenerifyFixes);
registerProblem(description, null, callExpression, myGenerifyFixes);
}
else {
if (IGNORE_UNCHECKED_ASSIGNMENT) return;

View File

@@ -14,14 +14,14 @@ public class DefaultEventSource<<warning descr="Type parameter 'T' is never used
@Override
List<String> getList() {
return <warning descr="Unchecked assignment: 'java.util.List' to 'java.util.List<java.lang.String>'. Reason: 'super' has raw type, so result of getList is erased">super.getList()</warning>;
return <warning descr="Unchecked assignment: 'java.util.List' to 'java.util.List<java.lang.String>'. Reason: 'super' has raw type, so result of getList is erased">super.getList</warning>();
}
void f(DefaultEventSource source){
final Iterator<String> <warning descr="Variable 'keys' is never used">keys</warning> = <warning descr="Unchecked assignment: 'java.util.Iterator' to 'java.util.Iterator<java.lang.String>'. Reason: 'source' has raw type, so result of getKeys is erased">source. getKeys()</warning>;
final Iterator<String> <warning descr="Variable 'keys' is never used">keys</warning> = <warning descr="Unchecked assignment: 'java.util.Iterator' to 'java.util.Iterator<java.lang.String>'. Reason: 'source' has raw type, so result of getKeys is erased">source. getKeys</warning>();
final Iterator<String> <warning descr="Variable 'keys1' is never used">keys1</warning> = <warning descr="Unchecked cast: 'java.util.Iterator' to 'java.util.Iterator<java.lang.String>'. Reason: 'source' has raw type, so result of getKeys is erased">(Iterator<String>)source.getKeys()</warning>;
final Iterator<String> <warning descr="Variable 'keys2' is assigned but never accessed">keys2</warning>;
keys2 = <warning descr="Unchecked assignment: 'java.util.Iterator' to 'java.util.Iterator<java.lang.String>'. Reason: 'source' has raw type, so result of getKeys is erased">source.getKeys()</warning>;
keys2 = <warning descr="Unchecked assignment: 'java.util.Iterator' to 'java.util.Iterator<java.lang.String>'. Reason: 'source' has raw type, so result of getKeys is erased">source.getKeys</warning>();
for (<error descr="Incompatible types. Found: 'java.lang.String', required: 'java.lang.Object'">String <warning descr="Parameter 'o' is never used">o</warning></error> : super.getList()) {}
}

View File

@@ -3,7 +3,7 @@ import java.util.List;
class Test{
static class Model<K>{
Model( Model<? super K> model ){
this( <warning descr="Unchecked assignment: 'java.util.List' to 'java.util.List<Test.Model<K>>'">list( <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<Test.Model<? super java.lang.Object>>'">(ArrayList)model.get()</warning> )</warning> );
this( <warning descr="Unchecked assignment: 'java.util.List' to 'java.util.List<Test.Model<K>>'">list</warning>( <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<Test.Model<? super java.lang.Object>>'">(ArrayList)model.get()</warning> ) );
}
Model( List<Model<K>> list ){
System.out.println(list);
@@ -17,7 +17,7 @@ class Test{
}
}
public static void main(String[] args) {
Model model = <warning descr="Unchecked call to 'Model(List<Model<K>>)' as a member of raw type 'Test.Model'">new Model(new ArrayList())</warning>;
System.out.println(<warning descr="Unchecked call to 'Model(Model<? super K>)' as a member of raw type 'Test.Model'">new Model(model)</warning>);
Model model = new <warning descr="Unchecked call to 'Model(List<Model<K>>)' as a member of raw type 'Test.Model'">Model</warning>(new ArrayList());
System.out.println(new <warning descr="Unchecked call to 'Model(Model<? super K>)' as a member of raw type 'Test.Model'">Model</warning>(model));
}
}

View File

@@ -87,11 +87,11 @@ class e {
class ccc {
static Comparable<? super ccc> f() {
return <warning descr="Unchecked assignment: 'anonymous java.lang.Comparable' to 'java.lang.Comparable<? super ccc>'">new Comparable () {
return new <warning descr="Unchecked assignment: 'anonymous java.lang.Comparable' to 'java.lang.Comparable<? super ccc>'">Comparable</warning> () {
public int compareTo(final Object o) {
return 0;
}
}</warning>;
};
}
}

View File

@@ -1,6 +1,6 @@
class X {
void f(Class<? extends Class> aClass) throws ClassNotFoundException {
Class<String> classOfString = <warning descr="Unchecked assignment: 'capture<? extends java.lang.Class>' to 'java.lang.Class<java.lang.String>'">aClass.cast(Long.class)</warning>;
Class<String> classOfString = <warning descr="Unchecked assignment: 'capture<? extends java.lang.Class>' to 'java.lang.Class<java.lang.String>'">aClass.cast</warning>(Long.class);
System.out.println(classOfString);
}
}

View File

@@ -110,7 +110,7 @@ class Example {
}
public static void main(String[] args) {
List<Boolean> list = <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<java.lang.Boolean>'">new ArrayList()</warning>;
List<Boolean> list = new <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<java.lang.Boolean>'">ArrayList</warning>();
System.out.println(list);
assertThat(new ArrayList<Boolean>(), hasSize(0));
}

View File

@@ -98,11 +98,11 @@ class e {
class ccc {
static Comparable<? super ccc> f() {
return <warning descr="Unchecked assignment: 'anonymous java.lang.Comparable' to 'java.lang.Comparable<? super ccc>'">new Comparable () {
return new <warning descr="Unchecked assignment: 'anonymous java.lang.Comparable' to 'java.lang.Comparable<? super ccc>'">Comparable</warning> () {
public int compareTo(final Object o) {
return 0;
}
}</warning>;
};
}
}

View File

@@ -12,7 +12,7 @@ class Test {
class AB {
List<String> a() {
return <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<java.lang.String>'">new ArrayList()</warning>;
return new <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<java.lang.String>'">ArrayList</warning>();
}
}

View File

@@ -3,11 +3,11 @@ import java.util.function.IntFunction;
class Test {
{
IntFunction<Class<? extends String>[]> var1 = value -> {
return <warning descr="Unchecked assignment: 'java.lang.Class[]' to 'java.lang.Class<? extends java.lang.String>[]'">new Class[value]</warning>;
return new <warning descr="Unchecked assignment: 'java.lang.Class[]' to 'java.lang.Class<? extends java.lang.String>[]'">Class</warning>[value];
};
System.out.println(var1);
IntFunction<Class<? extends String>[]> var2 = value -> <warning descr="Unchecked assignment: 'java.lang.Class[]' to 'java.lang.Class<? extends java.lang.String>[]'">new Class[value]</warning>;
IntFunction<Class<? extends String>[]> var2 = value -> new <warning descr="Unchecked assignment: 'java.lang.Class[]' to 'java.lang.Class<? extends java.lang.String>[]'">Class</warning>[value];
System.out.println(var2);
}
}

View File

@@ -110,7 +110,7 @@ class Example {
}
public static void main(String[] args) {
List<Boolean> list = <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<java.lang.Boolean>'">new ArrayList()</warning>;
List<Boolean> list = new <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<java.lang.Boolean>'">ArrayList</warning>();
System.out.println(list);
assertThat(new ArrayList<Boolean>(), hasSize(0));
}

View File

@@ -6,7 +6,7 @@ class Main {
public static void main(String[] args) {
Collection children = new ArrayList<>();
List<String> actualNodes = <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<java.lang.String>'"><warning descr="Unchecked call to 'ArrayList(Collection<? extends E>)' as a member of raw type 'java.util.ArrayList'">new ArrayList<>(children)</warning></warning>;
List<String> actualNodes = new <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<java.lang.String>'"><warning descr="Unchecked call to 'ArrayList(Collection<? extends E>)' as a member of raw type 'java.util.ArrayList'">ArrayList<></warning></warning>(children);
System.out.println(actualNodes);
}
}