DfaUtil#computeValue: fixed for parenthesized expressions

GitOrigin-RevId: bebef77858634361021675458cf533f4f76eeb49
This commit is contained in:
Tagir Valeev
2019-12-17 05:32:13 +00:00
committed by intellij-monorepo-bot
parent 745a58a701
commit 5cd808158d
3 changed files with 9 additions and 4 deletions
@@ -332,11 +332,11 @@ public class DfaUtil {
public static Object computeValue(PsiExpression expression) {
PsiExpression expressionToAnalyze = PsiUtil.skipParenthesizedExprDown(expression);
if (expressionToAnalyze == null) return null;
Object computed = ExpressionUtils.computeConstantExpression(expression);
Object computed = ExpressionUtils.computeConstantExpression(expressionToAnalyze);
if (computed != null) return computed;
CommonDataflow.DataflowResult dataflowResult = CommonDataflow.getDataflowResult(expression);
CommonDataflow.DataflowResult dataflowResult = CommonDataflow.getDataflowResult(expressionToAnalyze);
if (dataflowResult != null) {
return ContainerUtil.getOnlyItem(dataflowResult.getExpressionValues(expression));
return ContainerUtil.getOnlyItem(dataflowResult.getExpressionValues(expressionToAnalyze));
}
return null;
}
@@ -93,7 +93,7 @@ public class JavaCodeInsightSanityTest extends LightJavaCodeInsightFixtureTestCa
enableInspections();
Function<PsiFile, Generator<? extends MadTestingAction>> fileActions =
file -> Generator.sampledFrom(new InvokeIntention(file, new JavaParenthesesPolicy()), new StripTestDataMarkup(file));
PropertyChecker
PropertyChecker.customized().rechecking("5qDXmg/9q6a4EFrGDYcIAgXGA9YE1g3EBn4SEQQFFwMFAQkACQrQA+MECALLBQUDbAwEABEJAToHBUYFAmcHA2QFBwU7CQE3BgEpCQAjAwMpBgEaCQUUChEBARAGAAABBQMABgI/AgLbAwMAFQgEYQkCPAUBcwkAYQIAAZUEAUMEAnNeAgMSBwVoAwNzIRgKCAEIChAEBQAAAi8JBRMCAR4BAS8DACEJBBkCCQMHAwUSDgMIBOEIIApnAQEuAAU5BgE2AwQBLwQFCQACCwkCBgYDBQgDFwcFBggFCuYIBScdDi0mFQAIAA8EBAYDBeYDGAYNAAXeBEUKDCBLCQkWCAcAIQgaAgcQAAgF+QMNGhQAAgkAZQBP1QUVDwAAAQRdRwYFHgYDNgIFCAIBHgcDHQcFEwgDAgABxgQhBwEAAgILBQAGBAAJBwAEjAgA9QPXA+sEKOUDBJbMBBQUjHcCLV9gD4cFSjkbXSMHCgAvBg8WAQMD0hQGAwUAGQsABfIG0AQDANoFi0gGAQA0BwQAHA0CgQYFIgMHBAMBAAQCCQUABQMCBD0BNA4LCQUJBQIVNgECBRUFAAAFDwUBABUCBA0GCQG3CQMolQADskTaA4wTCgQDe+IDxgMNjwUGBJEGA1sAADcFLAtYaEUCIlgEBAExTgUgJgE6CwQDKgAIIwoFDgwEAs0GrEYbASBYf25lCDZoCEAOBgEiLgMpAAQdHQYTBQwGBOMELQJ2AkkzCwYYEAsEDO4I5QYzHAAD+AUnAQBePlICNQsFBBQCD9wE2gYOCoMLB1oTDAQ3DAkEBjQIMwYbDgkEAwM6BTVZIQYFASA2Bg8dCAIEA8IFBgHQAz1TBwIBBQsDAQABAAIOAgMABAQpDgMrCQIFIQYBAQUGChcIAQMMBQQCEgIABQECDAACAwMECAcBAwURBQKkLQ4MAAMEwgQ2EwcEBwkDYA0KEQkAABsRAgYFFPMDCQXEAwIHBgMFAQQEBgUCAgYBGAgABQcBCQcABxEFAAoCAwQEAegDQQMtCB0DuV0CDQMgqQJJFwFvDnMOYgwFBVEIAggQAAMsBQMRBAENDgMDBAQUBREABwUEAwEIAQkAAAQn+gQbABEJdSspAR0KDQh4Gg4JUi4uBQMQAz4rBBAACGg1AhMXFwgbGg8EAHsfGkcuHBEjHQcPAAFCJgsJCCEJEwgC6gP7A8ADBATeBEMCCB+vHA4BBecDJlAWAQMFmUtCEAIXJQsEBCkNAQgABAADBgIAOQYOIgADAQIZ4gN+BQsDBQtFCQcFtiIDDgoVCQeIMDUUBXUFQgkcSSwACwUcAAIDJQkIBC8GCAAWAwEIDwQBBAsKARUDBAgRAwIFCQoBBQMDDgUBAwEnHwsIDwEFASAKLAUCAgUaFBkLGAMFCwEDDAcAAwUQIQEADgAFAAgRAQIBBAAEADEmBOkHFgkDAgsSAxsJBQQsAQEEB27XCxcCAQDsCAA=")
.checkScenarios(actionsOnJavaFiles(fileActions));
}
@@ -178,5 +178,10 @@ public class ConditionCoveredByFurtherCondition {
static class Holder {
static final Object x = new Object();
}
void testChainInstanceof(String arg) {
if ((<error descr="Inconvertible types; cannot cast 'java.lang.String' to 'java.lang.Integer'">arg instanceof Integer</error>) || <error descr="Inconvertible types; cannot cast 'java.lang.String' to 'java.lang.Long'">arg instanceof Long</error>) {}
if (<error descr="Inconvertible types; cannot cast 'java.lang.String' to 'java.lang.Integer'">arg instanceof Integer</error> || <error descr="Inconvertible types; cannot cast 'java.lang.String' to 'java.lang.Long'">arg instanceof Long</error>) {}
}
}
enum X {A, B, C}