mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
method reference: ref qualified isExact fixed (IDEA-120370)
This commit is contained in:
@@ -117,20 +117,24 @@ public class CheckedExceptionCompatibilityConstraint extends InputOutputConstrai
|
||||
thrownTypes.addAll(ExceptionUtil.getUnhandledExceptions(body));
|
||||
}
|
||||
} else {
|
||||
|
||||
final PsiMethodReferenceUtil.QualifierResolveResult qualifierResolveResult = PsiMethodReferenceUtil.getQualifierResolveResult((PsiMethodReferenceExpression)myExpression);
|
||||
final PsiSubstitutor psiSubstitutor = qualifierResolveResult.getSubstitutor();
|
||||
final PsiMethod method;
|
||||
if (((PsiMethodReferenceExpression)myExpression).isExact()) {
|
||||
final PsiElement resolve = ((PsiMethodReferenceExpression)myExpression).resolve();
|
||||
if (resolve instanceof PsiMethod) {
|
||||
for (PsiClassType type : ((PsiMethod)resolve).getThrowsList().getReferencedTypes()) {
|
||||
if (!ExceptionUtil.isUncheckedException(type)) {
|
||||
thrownTypes.add(type);
|
||||
}
|
||||
}
|
||||
method = (PsiMethod)resolve;
|
||||
} else {
|
||||
method = null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
PsiSubstitutor psiSubstitutor =
|
||||
PsiMethodReferenceUtil.getQualifierResolveResult((PsiMethodReferenceExpression)myExpression).getSubstitutor();
|
||||
for (PsiType type : interfaceMethod.getThrowsList().getReferencedTypes()) {
|
||||
method = interfaceMethod;
|
||||
}
|
||||
|
||||
if (method != null) {
|
||||
for (PsiType type : method.getThrowsList().getReferencedTypes()) {
|
||||
type = psiSubstitutor.substitute(type);
|
||||
if (type instanceof PsiClassType && !ExceptionUtil.isUncheckedException((PsiClassType)type)) {
|
||||
thrownTypes.add(type);
|
||||
|
||||
@@ -175,9 +175,12 @@ public class PsiMethodReferenceExpressionImpl extends PsiReferenceExpressionBase
|
||||
}
|
||||
}
|
||||
} else if (qualifier instanceof PsiReferenceExpression) {
|
||||
final PsiReferenceParameterList parameterList = ((PsiReferenceExpression)qualifier).getParameterList();
|
||||
if (parameterList == null || parameterList.getTypeParameterElements().length == 0) {
|
||||
return null;
|
||||
final PsiReferenceExpression expression = (PsiReferenceExpression)qualifier;
|
||||
if (qualifierResolveResult.isReferenceTypeQualified()) {
|
||||
final PsiReferenceParameterList parameterList = expression.getParameterList();
|
||||
if (parameterList == null || parameterList.getTypeParameterElements().length == 0) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
public class Tmp {
|
||||
static void doo(Runnable action){}
|
||||
static void doo(Callable<?> action){}
|
||||
|
||||
interface X<T> {
|
||||
void bar();
|
||||
}
|
||||
|
||||
interface Y {
|
||||
void bar();
|
||||
}
|
||||
|
||||
void test(X<String> x1, X x2, Y y) {
|
||||
doo(x1::bar);
|
||||
|
||||
doo(x2::bar);
|
||||
|
||||
doo(y::bar);
|
||||
}
|
||||
}
|
||||
@@ -153,6 +153,10 @@ public class NewMethodRefHighlightingTest extends LightDaemonAnalyzerTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testIDEA120370() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
private void doTest() {
|
||||
doTest(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user