mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-07 22:09:38 +07:00
java inline variable: keep anonymous class on diamond expansion (IDEA-225616)
GitOrigin-RevId: e1d0cf134358b4bec7339416e8b5b7776bbf85d4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c066f2bb2f
commit
5e9ef5eb3c
@@ -398,14 +398,12 @@ public class InlineUtil {
|
||||
if (!result.equals(inferenceResult)) {
|
||||
final String inferredTypeText = StringUtil.join(inferenceResult.getTypes(),
|
||||
psiType -> psiType.getCanonicalText(), ", ");
|
||||
final PsiExpressionList argumentList = ((PsiNewExpression)initializer).getArgumentList();
|
||||
if (argumentList != null) {
|
||||
final PsiJavaCodeReferenceElement classReference = ((PsiNewExpression)initializer).getClassOrAnonymousClassReference();
|
||||
LOG.assertTrue(classReference != null);
|
||||
final PsiExpression expression = JavaPsiFacade.getElementFactory(initializer.getProject())
|
||||
.createExpressionFromText("new " + classReference.getReferenceName() + "<" + inferredTypeText + ">" + argumentList.getText(), initializer);
|
||||
return ref.replace(expression);
|
||||
}
|
||||
final PsiJavaCodeReferenceElement classReference = ((PsiNewExpression)initializer).getClassOrAnonymousClassReference();
|
||||
final PsiNewExpression expandedDiamond = (PsiNewExpression)JavaPsiFacade.getElementFactory(initializer.getProject())
|
||||
.createExpressionFromText("new " + Objects.requireNonNull(classReference).getReferenceName() + "<" + inferredTypeText + ">()", initializer);
|
||||
PsiNewExpression newExpression = (PsiNewExpression)initializer.copy();
|
||||
Objects.requireNonNull(newExpression.getClassOrAnonymousClassReference()).replace(Objects.requireNonNull(expandedDiamond.getClassReference()));
|
||||
return ref.replace(newExpression);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
interface I<T> {
|
||||
void m(T t);
|
||||
}
|
||||
|
||||
class MyTest {
|
||||
{
|
||||
I<String> i = new I<>() {
|
||||
public void m(String s) {}
|
||||
};
|
||||
|
||||
<caret>i.m("");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
interface I<T> {
|
||||
void m(T t);
|
||||
}
|
||||
|
||||
class MyTest {
|
||||
{
|
||||
|
||||
new I<String>() {
|
||||
public void m(String s) {}
|
||||
}.m("");
|
||||
}
|
||||
}
|
||||
@@ -220,6 +220,7 @@ public class InlineLocalTest extends LightJavaCodeInsightTestCase {
|
||||
public void testCastAroundLambda() { doTest(true, LanguageLevel.JDK_1_8); }
|
||||
public void testNoCastAroundLambda() { doTest(true, LanguageLevel.JDK_1_8); }
|
||||
public void testNoCastWithVar() { doTest(true, LanguageLevel.JDK_10); }
|
||||
public void testDiamondInAnonymousClass() { doTest(true, LanguageLevel.JDK_11); }
|
||||
|
||||
public void testUncheckedCast() {
|
||||
doTest(true);
|
||||
|
||||
Reference in New Issue
Block a user