mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 09:19:13 +07:00
DFA Optional.orElse handling improved (splitting states)
This commit is contained in:
+6
-4
@@ -287,10 +287,12 @@ public class StandardInstructionVisitor extends InstructionVisitor {
|
||||
result = argValues[0];
|
||||
break;
|
||||
case UNSURE:
|
||||
Nullness nullness =
|
||||
memState.isNotNull(argValues[0]) ? Nullness.NOT_NULL : memState.isNull(argValues[0]) ? Nullness.NULLABLE : Nullness.UNKNOWN;
|
||||
result = runner.getFactory().createTypeValue(instruction.getResultType(), nullness);
|
||||
break;
|
||||
DfaMemoryState falseState = memState.createCopy();
|
||||
memState.push(runner.getFactory().createTypeValue(instruction.getResultType(), Nullness.NOT_NULL));
|
||||
memState.applyIsPresentCheck(true, qualifier);
|
||||
falseState.push(argValues[0]);
|
||||
falseState.applyIsPresentCheck(false, qualifier);
|
||||
return Arrays.asList(memState, falseState);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -42,4 +42,11 @@ class OptionalOrElse {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
void isPresentCheck(Optional<String> opt) {
|
||||
String result = opt.orElse(null);
|
||||
if(<warning descr="Condition 'result == null && opt.isPresent()' is always 'false'">result == null && <warning descr="Condition 'opt.isPresent()' is always 'false' when reached">opt.isPresent()</warning></warning>) {
|
||||
System.out.println("Impossible");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user