mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-30 02:09:59 +07:00
method refs: fix getClass() return type in case of method references
This commit is contained in:
@@ -145,6 +145,10 @@ public class PsiTypesUtil {
|
||||
@NotNull LanguageLevel languageLevel) {
|
||||
//JLS3 15.8.2
|
||||
if (languageLevel.isAtLeast(LanguageLevel.JDK_1_5) && isGetClass(method)) {
|
||||
if (methodExpression instanceof PsiMethodReferenceExpression) {
|
||||
final PsiType qualifierType = PsiMethodReferenceUtil.getQualifierType((PsiMethodReferenceExpression)methodExpression);
|
||||
return qualifierType != null ? createJavaLangClassType(methodExpression, qualifierType, true) : null;
|
||||
}
|
||||
PsiExpression qualifier = methodExpression.getQualifierExpression();
|
||||
PsiType qualifierType = null;
|
||||
final Project project = call.getProject();
|
||||
|
||||
@@ -10,6 +10,6 @@ class GetClassTest {
|
||||
|
||||
void test(int[] iarr, List<String> ls) {
|
||||
GetCl c4 = ls::getClass;
|
||||
GetClReturnTypeProblems c5 = <error descr="Bad return type in method reference: cannot convert java.lang.Class<? extends java.util.List> to java.lang.Class<java.util.List<java.lang.String>>">ls::getClass</error>;
|
||||
GetClReturnTypeProblems c5 = <error descr="Bad return type in method reference: cannot convert java.lang.Class<? extends java.util.List<java.lang.String>> to java.lang.Class<java.util.List<java.lang.String>>">ls::getClass</error>;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.Function;
|
||||
|
||||
class Test {
|
||||
public <T> void some() {
|
||||
Function<AtomicReference<T>, ? extends Class<? extends AtomicReference>> a = AtomicReference<T>::getClass;
|
||||
Function<AtomicReference<T>, ? extends Class<? extends AtomicReference>> b = AtomicReference::getClass;
|
||||
}
|
||||
}
|
||||
@@ -490,6 +490,10 @@ public class NewMethodRefHighlightingTest extends LightDaemonAnalyzerTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testGetClassReturnTypeInMethodRefrence() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
private void doTest() {
|
||||
doTest(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user