mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-dfa] IDEA-277611 Enhance enum support in Java DFA (this in enum classes support)
GitOrigin-RevId: 078ff8adc32f123e3d8a4c874a028b3fc6a257a3
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5bdf9bb98a
commit
603075c16e
+7
-1
@@ -4,6 +4,8 @@ package com.intellij.codeInspection.dataFlow.jvm.descriptors;
|
||||
import com.intellij.codeInsight.Nullability;
|
||||
import com.intellij.codeInspection.dataFlow.Mutability;
|
||||
import com.intellij.codeInspection.dataFlow.MutationSignature;
|
||||
import com.intellij.codeInspection.dataFlow.TypeConstraint;
|
||||
import com.intellij.codeInspection.dataFlow.TypeConstraints;
|
||||
import com.intellij.codeInspection.dataFlow.types.DfType;
|
||||
import com.intellij.codeInspection.dataFlow.types.DfTypes;
|
||||
import com.intellij.codeInspection.dataFlow.value.DfaValueFactory;
|
||||
@@ -81,10 +83,14 @@ public final class ThisDescriptor extends PsiVarDescriptor {
|
||||
if (context != null) {
|
||||
PsiMethod method = ObjectUtils.tryCast(context.getParent(), PsiMethod.class);
|
||||
if (method != null && myQualifier.equals(method.getContainingClass())) {
|
||||
if (myQualifier instanceof PsiEnumConstantInitializer) {
|
||||
PsiEnumConstant constant = ((PsiEnumConstantInitializer)myQualifier).getEnumConstant();
|
||||
return DfTypes.referenceConstant(constant, TypeConstraints.exactClass(myQualifier));
|
||||
}
|
||||
if (!method.isConstructor() && MutationSignature.fromMethod(method).preservesThis()) {
|
||||
return dfType.meet(Mutability.UNMODIFIABLE_VIEW.asDfType());
|
||||
}
|
||||
else if (method.isConstructor()) {
|
||||
if (method.isConstructor()) {
|
||||
return dfType.meet(DfTypes.LOCAL_OBJECT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
public class ThisInEnumSubclass {
|
||||
enum MyEnum {
|
||||
A, B, C {
|
||||
void test() {
|
||||
if (<warning descr="Condition 'this == C' is always 'true'">this == C</warning>) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -712,4 +712,5 @@ public class DataFlowInspectionTest extends DataFlowInspectionTestCase {
|
||||
public void testTempVarsInContracts() { doTest(); }
|
||||
public void testNestedUnrolledLoopNotComplex() { doTest(); }
|
||||
public void testEnumOrdinal() { doTest(); }
|
||||
public void testThisInEnumSubclass() { doTest(); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user