Added ad-hoc KtValueArgument.stringTemplateExpression

Use only stub stringTemplateExpression if it is present and don't use ast nodes as it could be unbounded

#KT-47034 Fixed
This commit is contained in:
Vladimir Dolzhenko
2021-06-10 21:14:32 +00:00
committed by Space
parent a383c1ce79
commit 2c8d583d8b
5 changed files with 123 additions and 10 deletions
@@ -59,6 +59,10 @@ public class KtValueArgument extends KtElementImplStub<KotlinValueArgumentStub<?
KtStubElementTypes.STRING_TEMPLATE
);
private static final TokenSet STRING_TEMPLATE_EXPRESSIONS_TYPES = TokenSet.create(
KtStubElementTypes.STRING_TEMPLATE
);
@Override
@Nullable @IfNotParsed
public KtExpression getArgumentExpression() {
@@ -73,6 +77,19 @@ public class KtValueArgument extends KtElementImplStub<KotlinValueArgumentStub<?
return findChildByClass(KtExpression.class);
}
@Nullable
public KtStringTemplateExpression getStringTemplateExpression() {
KotlinPlaceHolderStub<? extends KtValueArgument> stub = getStub();
KtExpression expression;
if (stub != null) {
KtExpression[] stringTemplateExpressions = stub.getChildrenByType(STRING_TEMPLATE_EXPRESSIONS_TYPES, KtExpression.EMPTY_ARRAY);
expression = stringTemplateExpressions.length != 0 ? stringTemplateExpressions[0] : null;
} else {
expression = findChildByClass(KtExpression.class);
}
return expression instanceof KtStringTemplateExpression ? (KtStringTemplateExpression)expression : null;
}
@Override
@Nullable
public KtValueArgumentName getArgumentName() {