java: adjusted "Cannot resolve method" message (IDEA-206898)

GitOrigin-RevId: 40fc7d00d6bcc4792dc097dde63dd40d08864068
This commit is contained in:
Anna Kozlova
2019-07-10 20:46:46 +02:00
committed by intellij-monorepo-bot
parent 154e2f757f
commit cf944efffb
28 changed files with 46 additions and 46 deletions

View File

@@ -30,6 +30,7 @@ import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession;
import com.intellij.psi.infos.CandidateInfo;
import com.intellij.psi.infos.MethodCandidateInfo;
import com.intellij.psi.util.*;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.ui.ColorUtil;
import com.intellij.util.JavaPsiConstructorUtil;
import com.intellij.util.ObjectUtils;
@@ -714,15 +715,16 @@ public class HighlightMethodUtil {
description = HighlightUtil.staticContextProblemDescription(element);
}
else if (candidates.length == 0) {
PsiClass qualifierClass = RefactoringChangeUtil.getQualifierClass(referenceToMethod);
String qualifier = qualifierClass != null ? qualifierClass.getName() : null;
description = qualifier != null ? JavaErrorMessages.message("ambiguous.method.call.no.match", referenceToMethod.getReferenceName(), qualifier)
: JavaErrorMessages.message("cannot.resolve.method", referenceToMethod.getReferenceName() + buildArgTypesList(list));
highlightInfoType = HighlightInfoType.WRONG_REF;
}
else {
String methodName = referenceToMethod.getReferenceName() + buildArgTypesList(list);
description = JavaErrorMessages.message("cannot.resolve.method", methodName);
if (candidates.length == 0) {
highlightInfoType = HighlightInfoType.WRONG_REF;
}
else {
return null;
}
return null;
}
String toolTip = XmlStringUtil.escapeString(description);

View File

@@ -161,6 +161,7 @@ method.call.expected=Method call expected
ambiguous.method.call=Ambiguous method call: both ''{0}'' and ''{1}'' match
ambiguous.reference=Reference to ''{0}'' is ambiguous, both ''{1}'' and ''{2}'' match
cannot.resolve.method=Cannot resolve method ''{0}''
ambiguous.method.call.no.match=Cannot resolve method ''{0}'' in ''{1}''
missing.method.body=Missing method body, or declare abstract
abstract.method.in.non.abstract.class=Abstract method in non-abstract class
missing.return.type=Invalid method declaration; return type required

View File

@@ -48,10 +48,10 @@ public class a12 {
++<error descr="Variable expected">5</error>;
<error descr="Variable expected">5</error> += 5;
<error descr="Cannot resolve method 'foo123Unresolved(?)'">foo123Unresolved</error>(<error descr="Expression expected">String</error>);
<error descr="Cannot resolve method 'foo123Unresolved(?)'">foo123Unresolved</error>(<error descr="Cannot resolve symbol 'xxxx'">xxxx</error>);
<error descr="Cannot resolve method 'foo123Unresolved' in 'a12'">foo123Unresolved</error>(<error descr="Expression expected">String</error>);
<error descr="Cannot resolve method 'foo123Unresolved' in 'a12'">foo123Unresolved</error>(<error descr="Cannot resolve symbol 'xxxx'">xxxx</error>);
<error descr="Cannot resolve method 'xxxxxx(?)'">xxxxxx</error>(<error descr="Cannot resolve symbol 'xxxxxx'">xxxxxx</error>);
<error descr="Cannot resolve method 'xxxxxx' in 'a12'">xxxxxx</error>(<error descr="Cannot resolve symbol 'xxxxxx'">xxxxxx</error>);
// incomplete code should not cause 'expr expected'
Object<error descr="';' expected"> </error>

View File

@@ -4,9 +4,9 @@ public class Main {
public static void main(String[] args) {
pkg.sub.Test obj = new pkg.sub.Test();
obj.m1();
obj.<error descr="Cannot resolve method 'm2()'">m2</error>();
obj.<error descr="Cannot resolve method 'm2' in 'Test'">m2</error>();
pkg.sub.Test.s1();
pkg.sub.Test.<error descr="Cannot resolve method 's2()'">s2</error>();
pkg.sub.Test.<error descr="Cannot resolve method 's2' in 'Test'">s2</error>();
}
}

View File

@@ -4,6 +4,6 @@ class Example {
public void run() {}
public void m2() {}
};
r.<error descr="Cannot resolve method 'm2()'">m2</error>();
r.<error descr="Cannot resolve method 'm2' in 'Runnable'">m2</error>();
}
}

View File

@@ -6,7 +6,7 @@ class Main1 {
public static void main(String[] args) {
List x = null;
foo(x).iterator().next().<error descr="Cannot resolve method 'iterator()'">iterator</error>();
foo(x).iterator().next().<error descr="Cannot resolve method 'iterator' in 'Object'">iterator</error>();
}
}
@@ -16,7 +16,7 @@ class Main {
public static void main(String[] args) {
List x = null;
<error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">String s = foo(x).get(0);</error>
foo(x).iterator().next().<error descr="Cannot resolve method 'toLowerCase()'">toLowerCase</error>();
foo(x).iterator().next().<error descr="Cannot resolve method 'toLowerCase' in 'Object'">toLowerCase</error>();
}
}

View File

@@ -3,8 +3,8 @@ import java.util.*;
class Main {
void foo(List<Integer> list) {
bar(list, <error descr="Failed to resolve argument">i -> i.intValue()</error>, i -> i.<error descr="Cannot resolve method 'unknown()'">unknown</error>());
bar1(list, <error descr="Failed to resolve argument">i -> i.intValue()</error>, i -> i.<error descr="Cannot resolve method 'unknown()'">unknown</error>());
bar(list, <error descr="Failed to resolve argument">i -> i.intValue()</error>, i -> i.<error descr="Cannot resolve method 'unknown' in 'Integer'">unknown</error>());
bar1(list, <error descr="Failed to resolve argument">i -> i.intValue()</error>, i -> i.<error descr="Cannot resolve method 'unknown' in 'Integer'">unknown</error>());
}
<U, S_IN, S_OUT, R> R bar(List<S_IN> list,

View File

@@ -48,7 +48,7 @@ class Test2 {
{
Class c = D.class;
D<String> d = new D<>(s -> s.<error descr="Cannot resolve method 'isEmpty()'">isEmpty</error>(), c);
D<String> d1 = D.create(s -> s.<error descr="Cannot resolve method 'isEmpty()'">isEmpty</error>(), c);
D<String> d = new D<>(s -> s.<error descr="Cannot resolve method 'isEmpty' in 'Object'">isEmpty</error>(), c);
D<String> d1 = D.create(s -> s.<error descr="Cannot resolve method 'isEmpty' in 'Object'">isEmpty</error>(), c);
}
}

View File

@@ -23,7 +23,7 @@ class C {
interface II extends I {
default void m() {
I.super.m();
<error descr="Unqualified super reference is not allowed in extension method">super.<error descr="Cannot resolve method 'm()'">m</error></error>();
<error descr="Unqualified super reference is not allowed in extension method">super.<error descr="Cannot resolve method 'm' in 'Object'">m</error></error>();
System.out.println(<error descr="'C.I' is not an enclosing class">I.super</error>.i);
System.out.println(<error descr="Unqualified super reference is not allowed in extension method">super.<error descr="Cannot resolve symbol 'i'">i</error></error>);

View File

@@ -14,7 +14,7 @@ class MySymbol<T extends String> {
void findUsages(MySymbol s) {
s.processSameSymbols(symbol -> {
String definition = symbol.<error descr="Cannot resolve method 'locateDefinition()'">locateDefinition</error>();
String definition = symbol.<error descr="Cannot resolve method 'locateDefinition' in 'Object'">locateDefinition</error>();
});
}
}

View File

@@ -1,6 +1,6 @@
class MyTest {
void m(String[] refInfos){
refInfos = <error descr="Cannot resolve method 'unresolved(java.lang.String[], <lambda expression>)'">unresolved</error>(refInfos, refInfo -> {
refInfos = <error descr="Cannot resolve method 'unresolved' in 'MyTest'">unresolved</error>(refInfos, refInfo -> {
refInfo = n<error descr="'n(java.lang.String)' in 'MyTest' cannot be applied to '(<lambda parameter>)'">(refInfo)</error>;
return refInfo;
});

View File

@@ -1,6 +1,6 @@
import static a.A.foo;
class Test {
{
foo(<error descr="Cannot resolve method 'unresolvedMethodCall()'">unresolvedMethodCall</error>());
foo(<error descr="Cannot resolve method 'unresolvedMethodCall' in 'Test'">unresolvedMethodCall</error>());
}
}

View File

@@ -2,6 +2,6 @@ package p;
class Sample {
public static void main(String[] args) {
ChildClass.<error descr="Cannot resolve method 'foo()'">foo</error>();
ChildClass.<error descr="Cannot resolve method 'foo' in 'ChildClass'">foo</error>();
}
}

View File

@@ -5,6 +5,6 @@ import java.util.concurrent.*;
abstract class B extends A {
void foo() throws Exception {
call().<error descr="Cannot resolve method 'stream()'">stream</error>();
call().<error descr="Cannot resolve method 'stream' in 'Collection'">stream</error>();
}
}

View File

@@ -1,6 +1,6 @@
package p;
public abstract class B extends A {
public String getOrDefault(Object key, String defaultValue) {
return super.<error descr="Cannot resolve method 'getOrDefault(java.lang.Object, java.lang.String)'">getOrDefault</error>(key, defaultValue);
return super.<error descr="Cannot resolve method 'getOrDefault' in 'A'">getOrDefault</error>(key, defaultValue);
}
}

View File

@@ -1,7 +1,7 @@
package p;
abstract class B extends A {
{
<error descr="Cannot resolve method 'filter(null)'">filter</error>(null);
<error descr="Cannot resolve method 'filter' in 'B'">filter</error>(null);
}
}

View File

@@ -1,6 +1,6 @@
package p;
abstract class B extends A implements java.util.Comparator {
{
<error descr="Cannot resolve method 'reversed()'">reversed</error>();
<error descr="Cannot resolve method 'reversed' in 'B'">reversed</error>();
}
}

View File

@@ -2,6 +2,6 @@ package p;
abstract class B {
void foo(A<?> a)
{
a.get().<error descr="Cannot resolve method 'reversed()'">reversed</error>();
a.get().<error descr="Cannot resolve method 'reversed' in 'Comparator'">reversed</error>();
}
}

View File

@@ -18,7 +18,7 @@ public class Finally {
typePattern = parseTypePattern();
} catch (FileNotFoundException followsFailure) {
if (o != null) {
typePattern = followsFailure.<error descr="Cannot resolve method 'getParsingResult()'">getParsingResult</error>();
typePattern = followsFailure.<error descr="Cannot resolve method 'getParsingResult' in 'FileNotFoundException'">getParsingResult</error>();
} else {
throw followsFailure;
}

View File

@@ -1,7 +1,7 @@
class Test {
public static void test() {
for(int i = <error descr="Cannot resolve method 'launchMissiles()'">launchMissiles</error>(); (<warning descr="Condition is always false">fa<caret>lse</warning>);) {
for(int i = <error descr="Cannot resolve method 'launchMissiles' in 'Test'">launchMissiles</error>(); (<warning descr="Condition is always false">fa<caret>lse</warning>);) {
System.out.println("Hello");
}
int i = 1;

View File

@@ -22,7 +22,7 @@ public class LongRangeKnownMethods {
if(<warning descr="Condition 'Integer.bitCount(i) == -1' is always 'false'">Integer.bitCount(i) == -1</warning>) {
System.out.println("Impossible");
}
if(Long.<error descr="Cannot resolve method 'numberOfLeadingZeroes(long)'">numberOfLeadingZeroes</error>(l) <= 64) {
if(Long.<error descr="Cannot resolve method 'numberOfLeadingZeroes' in 'Long'">numberOfLeadingZeroes</error>(l) <= 64) {
System.out.println("Always");
}
}

View File

@@ -83,7 +83,7 @@ public class MutabilityJdk {
<error descr="Variable 'list' might not have been initialized">final List<String> list</error>;
IncompleteCode() {
list = (IncompleteCode)((<error descr="Expression expected">)</error><error descr="')' expected"><error descr="';' expected">b</error></error>ar()<error descr="';' expected"><error descr="Unexpected token">)</error></error><error descr="Unexpected token">.</error><error descr="Cannot resolve method 'baz()'">baz</error>();
list = (IncompleteCode)((<error descr="Expression expected">)</error><error descr="')' expected"><error descr="';' expected">b</error></error>ar()<error descr="';' expected"><error descr="Unexpected token">)</error></error><error descr="Unexpected token">.</error><error descr="Cannot resolve method 'baz' in 'IncompleteCode'">baz</error>();
}
static native Object bar();

View File

@@ -27,7 +27,7 @@ public class <error descr="Default method 'remove' is not overridden. It would c
}
public <T extends Iterator<String>> T typedIterator() {
return (T) <error descr="Cannot resolve method 'iterator()'">iterator</error>();
return (T) <error descr="Cannot resolve method 'iterator' in 'DefaultMethods'">iterator</error>();
}
{

View File

@@ -213,7 +213,7 @@ public class B extends A {
class Class3 {
{
new B().m1();
new B().<error descr="Cannot resolve method 'm2()'">m2</error>();
new B().<error descr="Cannot resolve method 'm2' in 'B'">m2</error>();
}
}

View File

@@ -23,11 +23,7 @@ import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.project.IntelliJProjectConfiguration
import com.intellij.psi.JavaPsiFacade
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiClassType
import com.intellij.psi.PsiMethod
import com.intellij.psi.PsiReferenceExpression
import com.intellij.psi.*
import com.intellij.psi.impl.JavaPsiFacadeEx
import com.intellij.psi.impl.source.PsiFileImpl
import com.intellij.psi.search.GlobalSearchScope
@@ -37,6 +33,7 @@ import com.intellij.psi.stubs.StubTreeLoader
import com.intellij.testFramework.IdeaTestUtil
import com.intellij.testFramework.PsiTestUtil
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
/**
* @author peter
*/
@@ -192,7 +189,7 @@ class ResolveInLibrariesTest extends JavaCodeInsightFixtureTestCase {
myFixture.configureFromExistingVirtualFile(myFixture.addFileToProject("TestCase.java", """
class TestCase {
public static void main( String[] args ) {
new B().<error descr="Cannot resolve method 'a()'">a</error>(); // should not work, because the A in lib1 has no method a
new B().<error descr="Cannot resolve method 'a' in 'B'">a</error>(); // should not work, because the A in lib1 has no method a
new B().a2(); // should work, because the A with this method is in lib1
}
}

View File

@@ -3,6 +3,6 @@ import static <error descr="Cannot resolve symbol 'foo'">foo</error>.bar.Goo.abs
class Simple {
void f0o() {
<error descr="Cannot resolve method 'abs(double)'">abs</error>(1.0);
<error descr="Cannot resolve method 'abs' in 'Simple'">abs</error>(1.0);
}
}

View File

@@ -16,7 +16,7 @@ public class ConstantOnRHS
}
class C {
void t() {
<error descr="Cannot resolve method 'method(java.lang.String, ?, ?)'">method</error>(String.format("", <error descr="Expression expected">StringBuffer</error>)<error descr="',' or ')' expected">"</error>" +<EOLError descr="Expression expected"></EOLError>
<error descr="Cannot resolve method 'method' in 'C'">method</error>(String.format("", <error descr="Expression expected">StringBuffer</error>)<error descr="',' or ')' expected">"</error>" +<EOLError descr="Expression expected"></EOLError>
<<error descr="')' expected"><error descr="Expression expected">/</error></error><error descr="Cannot resolve symbol 'plugin'">plugin</error>><error descr="Illegal line end in string literal">" +</error><EOLError descr="';' expected"></EOLError>
""<error descr="';' expected"><error descr="Unexpected token">)</error></error>;
}

View File

@@ -71,8 +71,8 @@ public class UnnecessaryParenthesesInspection
private float pageHeight; // in cm.
public void foo() {
final float width = <error descr="Cannot resolve method 'getSize()'">getSize</error>().width; // actual width in dots
final float height = <error descr="Cannot resolve method 'getSize()'">getSize</error>().height; // actual height in dots
final float width = <error descr="Cannot resolve method 'getSize' in 'ParenBug'">getSize</error>().width; // actual width in dots
final float height = <error descr="Cannot resolve method 'getSize' in 'ParenBug'">getSize</error>().height; // actual height in dots
// to determine the ratio, do the following:
final float ratio;