Allow storing dot qualified expression in annotations arguments (KT-23738)
This commit is contained in:
@@ -57,9 +57,11 @@ class KtDotQualifiedExpression : KtExpressionImplStub<KotlinPlaceHolderStub<KtDo
|
||||
|
||||
private fun getChildExpressionsByStub(stub: KotlinPlaceHolderStub<KtDotQualifiedExpression>): Array<KtExpression>? {
|
||||
if (stub.getParentStubOfType(KtImportDirective::class.java) == null &&
|
||||
stub.getParentStubOfType(KtPackageDirective::class.java) == null) {
|
||||
stub.getParentStubOfType(KtPackageDirective::class.java) == null &&
|
||||
stub.getParentStubOfType(KtValueArgument::class.java) == null
|
||||
) {
|
||||
LOG.error(
|
||||
"KtDotQualifiedExpression should only have stubs inside import or package directives.\n" +
|
||||
"KtDotQualifiedExpression should only have stubs inside import, argument or package directives.\n" +
|
||||
"Stubs were created for:\n$text\nFile text:\n${containingFile.text}"
|
||||
)
|
||||
return null
|
||||
|
||||
@@ -54,6 +54,7 @@ public class KtValueArgument extends KtElementImplStub<KotlinPlaceHolderStub<? e
|
||||
KtStubElementTypes.INTEGER_CONSTANT,
|
||||
|
||||
KtStubElementTypes.REFERENCE_EXPRESSION,
|
||||
KtStubElementTypes.DOT_QUALIFIED_EXPRESSION,
|
||||
|
||||
KtStubElementTypes.STRING_TEMPLATE
|
||||
);
|
||||
|
||||
+14
-4
@@ -17,12 +17,10 @@
|
||||
package org.jetbrains.kotlin.psi.stubs.elements;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression;
|
||||
import org.jetbrains.kotlin.psi.KtImportDirective;
|
||||
import org.jetbrains.kotlin.psi.KtPackageDirective;
|
||||
|
||||
public class KtDotQualifiedExpressionElementType extends KtPlaceHolderStubElementType<KtDotQualifiedExpression> {
|
||||
public KtDotQualifiedExpressionElementType(@NotNull @NonNls String debugName) {
|
||||
@@ -31,6 +29,18 @@ public class KtDotQualifiedExpressionElementType extends KtPlaceHolderStubElemen
|
||||
|
||||
@Override
|
||||
public boolean shouldCreateStub(ASTNode node) {
|
||||
return PsiTreeUtil.getParentOfType(node.getPsi(), KtImportDirective.class, KtPackageDirective.class) != null;
|
||||
ASTNode treeParent = node.getTreeParent();
|
||||
if (treeParent == null) return false;
|
||||
|
||||
IElementType parentElementType = treeParent.getElementType();
|
||||
if (parentElementType == KtStubElementTypes.IMPORT_DIRECTIVE ||
|
||||
parentElementType == KtStubElementTypes.PACKAGE_DIRECTIVE ||
|
||||
parentElementType == KtStubElementTypes.VALUE_ARGUMENT ||
|
||||
parentElementType == KtStubElementTypes.DOT_QUALIFIED_EXPRESSION
|
||||
) {
|
||||
return super.shouldCreateStub(node);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,9 +150,17 @@ PsiJetFileStubImpl[package=test]
|
||||
VALUE_ARGUMENT
|
||||
REFERENCE_EXPRESSION[referencedName=E1]
|
||||
VALUE_ARGUMENT
|
||||
DOT_QUALIFIED_EXPRESSION
|
||||
REFERENCE_EXPRESSION[referencedName=E]
|
||||
REFERENCE_EXPRESSION[referencedName=E2]
|
||||
VALUE_ARGUMENT
|
||||
VALUE_ARGUMENT_NAME
|
||||
REFERENCE_EXPRESSION[referencedName=e3]
|
||||
DOT_QUALIFIED_EXPRESSION
|
||||
DOT_QUALIFIED_EXPRESSION
|
||||
REFERENCE_EXPRESSION[referencedName=test]
|
||||
REFERENCE_EXPRESSION[referencedName=E]
|
||||
REFERENCE_EXPRESSION[referencedName=E2]
|
||||
CLASS[fqName=test.VarArg, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=VarArg, superNames=[]]
|
||||
MODIFIER_LIST[annotation]
|
||||
PRIMARY_CONSTRUCTOR
|
||||
|
||||
+6
@@ -36,4 +36,10 @@ PsiJetFileStubImpl[package=]
|
||||
REFERENCE_EXPRESSION[referencedName=Target]
|
||||
VALUE_ARGUMENT_LIST
|
||||
VALUE_ARGUMENT
|
||||
DOT_QUALIFIED_EXPRESSION
|
||||
REFERENCE_EXPRESSION[referencedName=AnnotationTarget]
|
||||
REFERENCE_EXPRESSION[referencedName=TYPE]
|
||||
VALUE_ARGUMENT
|
||||
DOT_QUALIFIED_EXPRESSION
|
||||
REFERENCE_EXPRESSION[referencedName=AnnotationTarget]
|
||||
REFERENCE_EXPRESSION[referencedName=TYPE_PARAMETER]
|
||||
|
||||
+6
@@ -35,6 +35,9 @@ PsiJetFileStubImpl[package=]
|
||||
REFERENCE_EXPRESSION[referencedName=b]
|
||||
VALUE_ARGUMENT_LIST
|
||||
VALUE_ARGUMENT
|
||||
DOT_QUALIFIED_EXPRESSION
|
||||
REFERENCE_EXPRESSION[referencedName=E]
|
||||
REFERENCE_EXPRESSION[referencedName=E1]
|
||||
USER_TYPE
|
||||
REFERENCE_EXPRESSION[referencedName=DoubleRange]
|
||||
TYPE_REFERENCE
|
||||
@@ -53,5 +56,8 @@ PsiJetFileStubImpl[package=]
|
||||
REFERENCE_EXPRESSION[referencedName=b]
|
||||
VALUE_ARGUMENT_LIST
|
||||
VALUE_ARGUMENT
|
||||
DOT_QUALIFIED_EXPRESSION
|
||||
REFERENCE_EXPRESSION[referencedName=E]
|
||||
REFERENCE_EXPRESSION[referencedName=E2]
|
||||
USER_TYPE
|
||||
REFERENCE_EXPRESSION[referencedName=Unit]
|
||||
|
||||
Reference in New Issue
Block a user