in saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/impl/DefaultExpressionResolver.java [55:100]
protected ExpressionStruct parseExpressionStruct(String expressionStr) {
ExpressionStruct struct = new ExpressionStruct();
struct.typeStart = expressionStr.indexOf("$");
int dot = expressionStr.indexOf(".", struct.typeStart);
int leftBracket = expressionStr.indexOf("{", struct.typeStart);
boolean isOldEvaluatorStyle = false;
if (struct.typeStart == 0) {
if (leftBracket < 0 && dot < 0) {
throw new IllegalArgumentException(String.format("Expression [%s] type is not closed", expressionStr));
}
// Backward compatible for structure: $expressionType{expressionContent}
if (leftBracket > 0 && (leftBracket < dot || dot < 0)) {
struct.typeEnd = leftBracket;
isOldEvaluatorStyle = true;
}
if (dot > 0 && (dot < leftBracket || leftBracket < 0)) {
struct.typeEnd = dot;
}
}
if (struct.typeStart == 0 && leftBracket != -1 && leftBracket < dot) {
// Backward compatible for structure: $expressionType{expressionContent}
struct.typeEnd = expressionStr.indexOf("{", struct.typeStart);
isOldEvaluatorStyle = true;
}
// No $ indicator denotes default type
if (struct.typeStart != 0) {
struct.typeStart = struct.typeEnd = -1;
struct.type = null;
} else {
struct.type = expressionStr.substring(struct.typeStart + 1, struct.typeEnd);
}
if (isOldEvaluatorStyle) {
struct.end = expressionStr.indexOf("}", struct.typeEnd);
} else {
struct.end = expressionStr.length();
}
struct.content = expressionStr.substring(struct.typeEnd + 1, struct.end);
return struct;
}