mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
CustomMethodHandlers#substring minor refactoring
GitOrigin-RevId: 341a61975ae09b26d0bf8d45b76b24c8558edbb6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
774de2a61b
commit
507c217a72
+11
-14
@@ -275,22 +275,19 @@ class CustomMethodHandlers {
|
||||
DfaValue[] arguments = args.myArguments;
|
||||
if (arguments.length < 1 || arguments.length > 2 || arguments[0] == null) return TOP;
|
||||
DfaValue from = arguments[0];
|
||||
DfaValue to = arguments.length == 1 ? STRING_LENGTH.createValue(factory, qualifier) : arguments[1];
|
||||
DfaValue lengthVal = factory.getBinOpFactory().create(to, from, state, false, JavaTokenType.MINUS);
|
||||
LongRangeSet resultLen = DfIntType.extractRange(state.getDfType(lengthVal));
|
||||
LongRangeSet length = DfIntType.extractRange(state.getDfType(STRING_LENGTH.createValue(factory, qualifier)));
|
||||
resultLen = resultLen
|
||||
.intersect(LongRangeSet.point(0).fromRelation(RelationType.GE))
|
||||
.intersect(length.fromRelation(RelationType.LE));
|
||||
return getStringValue(stringType, resultLen);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static DfType getStringValue(@NotNull PsiType stringType, @NotNull LongRangeSet stringLength) {
|
||||
if (Long.valueOf(0).equals(stringLength.getConstantValue())) {
|
||||
DfaValue lenVal = STRING_LENGTH.createValue(factory, qualifier);
|
||||
DfaValue to = arguments.length == 1 ? lenVal : arguments[1];
|
||||
DfaValue resultLenVal = factory.getBinOpFactory().create(to, from, state, false, JavaTokenType.MINUS);
|
||||
DfType resultLen = state.getDfType(resultLenVal);
|
||||
if (!(resultLen instanceof DfIntType)) return DfTypes.FAIL;
|
||||
resultLen = ((DfIntType)resultLen).meetRelation(RelationType.GE, DfTypes.intValue(0));
|
||||
if (!(resultLen instanceof DfIntType)) return DfTypes.FAIL;
|
||||
resultLen = ((DfIntType)resultLen).meetRelation(RelationType.LE, state.getDfType(lenVal));
|
||||
if (!(resultLen instanceof DfIntType)) return DfTypes.FAIL;
|
||||
if (DfConstantType.isConst(resultLen, 0)) {
|
||||
return DfTypes.constant("", stringType);
|
||||
}
|
||||
return DfTypes.typedObject(stringType, Nullability.NOT_NULL).meet(STRING_LENGTH.asDfType(DfTypes.intRange(stringLength)));
|
||||
return DfTypes.typedObject(stringType, Nullability.NOT_NULL).meet(STRING_LENGTH.asDfType(resultLen));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
Reference in New Issue
Block a user