mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
ensure enum constants resolved inside enum class
EA-83687 - assert: PsiEnumConstantImpl.resolveMethodGenerics
This commit is contained in:
@@ -16,7 +16,6 @@
|
||||
package com.intellij.psi;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.RecursionGuard;
|
||||
import com.intellij.openapi.util.RecursionManager;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
@@ -24,7 +23,9 @@ import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.impl.source.resolve.graphInference.PsiPolyExpressionUtil;
|
||||
import com.intellij.psi.infos.MethodCandidateInfo;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.util.*;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.Producer;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
@@ -861,7 +862,7 @@ public class LambdaUtil {
|
||||
}
|
||||
PsiClass anEnum = JavaPsiFacade.getElementFactory(call.getProject()).createEnum(enumName);
|
||||
anEnum.add(resolveMethod);
|
||||
return (PsiCall)anEnum.add(copyCall);
|
||||
return (PsiCall)anEnum.add(call);
|
||||
}
|
||||
return copyCall;
|
||||
}
|
||||
|
||||
@@ -468,7 +468,8 @@ public class RedundantCastUtil {
|
||||
PsiTypeCastExpression returnExpression,
|
||||
int returnExprIdx,
|
||||
Function<PsiExpression, PsiTypeCastExpression> computeCastExpression) {
|
||||
final PsiCall newCall = (PsiCall)expression.copy();
|
||||
final PsiCall newCall = LambdaUtil.copyTopLevelCall(expression);
|
||||
if (newCall == null) return;
|
||||
final PsiExpressionList newArgsList = newCall.getArgumentList();
|
||||
LOG.assertTrue(newArgsList != null);
|
||||
final PsiExpression[] newArgs = newArgsList.getExpressions();
|
||||
@@ -551,7 +552,8 @@ public class RedundantCastUtil {
|
||||
if (grandGrandPa instanceof PsiCall) {
|
||||
PsiMethod resolve = ((PsiCall)grandGrandPa).resolveMethod();
|
||||
if (resolve != null) {
|
||||
PsiCall expression = (PsiCall)grandGrandPa.copy();
|
||||
PsiCall expression = LambdaUtil.copyTopLevelCall((PsiCall)grandGrandPa);
|
||||
if (expression == null) return false;
|
||||
PsiExpressionList argumentList = expression.getArgumentList();
|
||||
LOG.assertTrue(argumentList != null);
|
||||
PsiExpression toReplace = argumentList.getExpressions()[idx];
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
import java.util.function.Function;
|
||||
|
||||
interface Demo {
|
||||
|
||||
enum X {
|
||||
|
||||
A( key -> (<warning descr="Casting 'key.toString()' to 'String' is redundant">String</warning>) key.toString());
|
||||
|
||||
X(Function<String, Object> function) {
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -79,7 +79,7 @@ public class LambdaRedundantCastTest extends LightDaemonAnalyzerTestCase {
|
||||
|
||||
public void testInvalidResolveWithoutCast() { doTest();}
|
||||
public void testCastInConditionalBranch() { doTest();}
|
||||
|
||||
public void testCastInsideLambdaReturnExpressionPassedToEnumConstant() { doTest(); }
|
||||
public void testRejectReturnTypeChange() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user