mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
method handle api: fix unboxing procedure (IDEA-216386)
GitOrigin-RevId: 5c470feb24984e06add5aa62bfada43b96ae4964
This commit is contained in:
committed by
intellij-monorepo-bot
parent
715448dd8b
commit
824db4c08b
+5
-19
@@ -16,10 +16,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.impl.JavaConstantExpressionEvaluator;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiTypesUtil;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.ArrayUtilRt;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
@@ -166,8 +163,10 @@ public class JavaReflectionReferenceUtil {
|
||||
if (resolved instanceof PsiField) {
|
||||
final PsiField field = (PsiField)resolved;
|
||||
if (field.hasModifierProperty(PsiModifier.FINAL) && field.hasModifierProperty(PsiModifier.STATIC)) {
|
||||
final PsiPrimitiveType unboxedType = tryUnbox(field.getContainingClass(), (PsiClassType)type);
|
||||
if (unboxedType != null) {
|
||||
final PsiType[] classTypeArguments = ((PsiClassType)type).getParameters();
|
||||
final PsiPrimitiveType unboxedType = classTypeArguments.length == 1
|
||||
? PsiPrimitiveType.getUnboxedType(classTypeArguments[0]) : null;
|
||||
if (unboxedType != null && field.getContainingClass() == PsiUtil.resolveClassInClassTypeOnly(classTypeArguments[0])) {
|
||||
return ReflectiveType.create(unboxedType, true);
|
||||
}
|
||||
}
|
||||
@@ -301,19 +300,6 @@ public class JavaReflectionReferenceUtil {
|
||||
return assignment != null ? assignment.getRExpression() : null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiPrimitiveType tryUnbox(@Nullable PsiClass psiClass, @NotNull PsiClassType originalType) {
|
||||
if (psiClass != null && TypeConversionUtil.isPrimitiveWrapper(psiClass.getQualifiedName())) {
|
||||
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(psiClass.getProject());
|
||||
final PsiClassType classType = factory.createType(psiClass, PsiSubstitutor.EMPTY, originalType.getLanguageLevel());
|
||||
final PsiPrimitiveType unboxedType = PsiPrimitiveType.getUnboxedType(classType);
|
||||
if (unboxedType != null) {
|
||||
return unboxedType;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static PsiClass findClass(@NotNull String qualifiedName, @NotNull PsiElement context) {
|
||||
final Project project = context.getProject();
|
||||
return JavaPsiFacade.getInstance(project).findClass(qualifiedName, GlobalSearchScope.allScope(project));
|
||||
|
||||
@@ -5,6 +5,7 @@ class Main {
|
||||
MethodHandles.Lookup l = MethodHandles.lookup();
|
||||
|
||||
l.findStatic(Test.class, "method1", MethodType.methodType(void.class));
|
||||
l.findStatic(Test.class, "method1", MethodType.methodType(Void.TYPE));
|
||||
l.findStatic(Test.class, "method2", MethodType.methodType(String.class, String.class));
|
||||
l.findStatic(Test.class, "method3", MethodType.methodType(String.class, String.class, String[].class));
|
||||
|
||||
|
||||
+3
-3
@@ -25,10 +25,10 @@ import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
|
||||
*/
|
||||
class JavaLangInvokeHandleSignatureTest : LightJavaCodeInsightFixtureTestCase() {
|
||||
|
||||
override fun getBasePath() = JavaTestUtil.getRelativeJavaTestDataPath() + "/inspection/invokeHandleSignature"
|
||||
override fun getBasePath() = "${JavaTestUtil.getRelativeJavaTestDataPath()}/inspection/invokeHandleSignature"
|
||||
|
||||
override fun getProjectDescriptor(): LightProjectDescriptor {
|
||||
return LightJavaCodeInsightFixtureTestCase.JAVA_9
|
||||
return JAVA_9
|
||||
}
|
||||
|
||||
override fun setUp() {
|
||||
@@ -53,6 +53,6 @@ class JavaLangInvokeHandleSignatureTest : LightJavaCodeInsightFixtureTestCase()
|
||||
fun testSpecial() = doTest()
|
||||
|
||||
private fun doTest() {
|
||||
myFixture.testHighlighting(getTestName(false) + ".java")
|
||||
myFixture.testHighlighting("${getTestName(false)}.java")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user