mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-dfa] Support in DFA some range methods from Character class
GitOrigin-RevId: 9f3c251259dd9f4cdc5a778b844d435d22de1d7b
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d8bf7b1732
commit
65aaff55ed
+32
-1
@@ -197,7 +197,38 @@ public final class HardcodedContracts {
|
||||
singleConditionContract(ContractValue.qualifier(), RelationType.EQ, ContractValue.argument(0), returnFalse())
|
||||
))
|
||||
//for propagation CONSUMED_STREAM
|
||||
.register(ConsumedStreamUtils.getSkipStreamMatchers(), ContractProvider.of(trivialContract(returnThis())));
|
||||
.register(ConsumedStreamUtils.getSkipStreamMatchers(), ContractProvider.of(trivialContract(returnThis())))
|
||||
.register(staticCall(JAVA_LANG_CHARACTER, "isSurrogate").parameterCount(1),
|
||||
ContractProvider.of(
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.LT, ContractValue.constant(Character.MIN_SURROGATE, PsiType.CHAR), returnFalse()),
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.GT, ContractValue.constant(Character.MAX_SURROGATE, PsiType.CHAR), returnFalse()),
|
||||
trivialContract(returnTrue())))
|
||||
.register(staticCall(JAVA_LANG_CHARACTER, "isHighSurrogate").parameterCount(1),
|
||||
ContractProvider.of(
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.LT, ContractValue.constant(Character.MIN_HIGH_SURROGATE, PsiType.CHAR), returnFalse()),
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.GT, ContractValue.constant(Character.MAX_HIGH_SURROGATE, PsiType.CHAR), returnFalse()),
|
||||
trivialContract(returnTrue())))
|
||||
.register(staticCall(JAVA_LANG_CHARACTER, "isLowSurrogate").parameterCount(1),
|
||||
ContractProvider.of(
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.LT, ContractValue.constant(Character.MIN_LOW_SURROGATE, PsiType.CHAR), returnFalse()),
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.GT, ContractValue.constant(Character.MAX_LOW_SURROGATE, PsiType.CHAR), returnFalse()),
|
||||
trivialContract(returnTrue())))
|
||||
.register(staticCall(JAVA_LANG_CHARACTER, "isSupplementaryCodePoint").parameterCount(1),
|
||||
ContractProvider.of(
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.LT, ContractValue.constant(Character.MIN_SUPPLEMENTARY_CODE_POINT, PsiType.INT), returnFalse()),
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.GT, ContractValue.constant(Character.MAX_CODE_POINT, PsiType.INT), returnFalse()),
|
||||
trivialContract(returnTrue())))
|
||||
.register(staticCall(JAVA_LANG_CHARACTER, "isValidCodePoint").parameterCount(1),
|
||||
ContractProvider.of(
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.LT, ContractValue.constant(Character.MIN_CODE_POINT, PsiType.INT), returnFalse()),
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.GT, ContractValue.constant(Character.MAX_CODE_POINT, PsiType.INT), returnFalse()),
|
||||
trivialContract(returnTrue())))
|
||||
.register(staticCall(JAVA_LANG_CHARACTER, "isBmpCodePoint").parameterCount(1),
|
||||
ContractProvider.of(
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.LT, ContractValue.constant(Character.MIN_CODE_POINT, PsiType.INT), returnFalse()),
|
||||
singleConditionContract(ContractValue.argument(0), RelationType.GE, ContractValue.constant(Character.MIN_SUPPLEMENTARY_CODE_POINT, PsiType.INT), returnFalse()),
|
||||
trivialContract(returnTrue())))
|
||||
;
|
||||
|
||||
private static @NotNull ContractProvider getArraycopyContract() {
|
||||
ContractValue src = ContractValue.argument(0);
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
import java.util.*;
|
||||
|
||||
class X {
|
||||
void test(char ch, int codePoint) {
|
||||
if (<warning descr="Condition 'Character.isHighSurrogate(ch) && Character.isLowSurrogate(ch)' is always 'false'">Character.isHighSurrogate(ch) && <warning descr="Condition 'Character.isLowSurrogate(ch)' is always 'false' when reached">Character.isLowSurrogate(ch)</warning></warning>) {
|
||||
|
||||
}
|
||||
if (<warning descr="Condition 'Character.isBmpCodePoint(codePoint) && Character.isSupplementaryCodePoint(codePoint)' is always 'false'">Character.isBmpCodePoint(codePoint) && <warning descr="Condition 'Character.isSupplementaryCodePoint(codePoint)' is always 'false' when reached">Character.isSupplementaryCodePoint(codePoint)</warning></warning>) {
|
||||
|
||||
}
|
||||
if (!Character.isValidCodePoint(codePoint)) {
|
||||
if (<warning descr="Condition 'Character.isBmpCodePoint(codePoint)' is always 'false'">Character.isBmpCodePoint(codePoint)</warning>) {
|
||||
}
|
||||
if (<warning descr="Condition 'Character.isSupplementaryCodePoint(codePoint)' is always 'false'">Character.isSupplementaryCodePoint(codePoint)</warning>) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -183,4 +183,5 @@ public class HardcodedContractsTest extends DataFlowInspectionTestCase {
|
||||
checkHighlighting();
|
||||
}
|
||||
|
||||
public void testCharacterMethods() { checkHighlighting(); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user