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>? {
|
private fun getChildExpressionsByStub(stub: KotlinPlaceHolderStub<KtDotQualifiedExpression>): Array<KtExpression>? {
|
||||||
if (stub.getParentStubOfType(KtImportDirective::class.java) == null &&
|
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(
|
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}"
|
"Stubs were created for:\n$text\nFile text:\n${containingFile.text}"
|
||||||
)
|
)
|
||||||
return null
|
return null
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ public class KtValueArgument extends KtElementImplStub<KotlinPlaceHolderStub<? e
|
|||||||
KtStubElementTypes.INTEGER_CONSTANT,
|
KtStubElementTypes.INTEGER_CONSTANT,
|
||||||
|
|
||||||
KtStubElementTypes.REFERENCE_EXPRESSION,
|
KtStubElementTypes.REFERENCE_EXPRESSION,
|
||||||
|
KtStubElementTypes.DOT_QUALIFIED_EXPRESSION,
|
||||||
|
|
||||||
KtStubElementTypes.STRING_TEMPLATE
|
KtStubElementTypes.STRING_TEMPLATE
|
||||||
);
|
);
|
||||||
|
|||||||
+14
-4
@@ -17,12 +17,10 @@
|
|||||||
package org.jetbrains.kotlin.psi.stubs.elements;
|
package org.jetbrains.kotlin.psi.stubs.elements;
|
||||||
|
|
||||||
import com.intellij.lang.ASTNode;
|
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.NonNls;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression;
|
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 class KtDotQualifiedExpressionElementType extends KtPlaceHolderStubElementType<KtDotQualifiedExpression> {
|
||||||
public KtDotQualifiedExpressionElementType(@NotNull @NonNls String debugName) {
|
public KtDotQualifiedExpressionElementType(@NotNull @NonNls String debugName) {
|
||||||
@@ -31,6 +29,18 @@ public class KtDotQualifiedExpressionElementType extends KtPlaceHolderStubElemen
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldCreateStub(ASTNode node) {
|
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
|
VALUE_ARGUMENT
|
||||||
REFERENCE_EXPRESSION[referencedName=E1]
|
REFERENCE_EXPRESSION[referencedName=E1]
|
||||||
VALUE_ARGUMENT
|
VALUE_ARGUMENT
|
||||||
|
DOT_QUALIFIED_EXPRESSION
|
||||||
|
REFERENCE_EXPRESSION[referencedName=E]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=E2]
|
||||||
VALUE_ARGUMENT
|
VALUE_ARGUMENT
|
||||||
VALUE_ARGUMENT_NAME
|
VALUE_ARGUMENT_NAME
|
||||||
REFERENCE_EXPRESSION[referencedName=e3]
|
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=[]]
|
CLASS[fqName=test.VarArg, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=VarArg, superNames=[]]
|
||||||
MODIFIER_LIST[annotation]
|
MODIFIER_LIST[annotation]
|
||||||
PRIMARY_CONSTRUCTOR
|
PRIMARY_CONSTRUCTOR
|
||||||
|
|||||||
+6
@@ -36,4 +36,10 @@ PsiJetFileStubImpl[package=]
|
|||||||
REFERENCE_EXPRESSION[referencedName=Target]
|
REFERENCE_EXPRESSION[referencedName=Target]
|
||||||
VALUE_ARGUMENT_LIST
|
VALUE_ARGUMENT_LIST
|
||||||
VALUE_ARGUMENT
|
VALUE_ARGUMENT
|
||||||
|
DOT_QUALIFIED_EXPRESSION
|
||||||
|
REFERENCE_EXPRESSION[referencedName=AnnotationTarget]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=TYPE]
|
||||||
VALUE_ARGUMENT
|
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]
|
REFERENCE_EXPRESSION[referencedName=b]
|
||||||
VALUE_ARGUMENT_LIST
|
VALUE_ARGUMENT_LIST
|
||||||
VALUE_ARGUMENT
|
VALUE_ARGUMENT
|
||||||
|
DOT_QUALIFIED_EXPRESSION
|
||||||
|
REFERENCE_EXPRESSION[referencedName=E]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=E1]
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
REFERENCE_EXPRESSION[referencedName=DoubleRange]
|
REFERENCE_EXPRESSION[referencedName=DoubleRange]
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
@@ -53,5 +56,8 @@ PsiJetFileStubImpl[package=]
|
|||||||
REFERENCE_EXPRESSION[referencedName=b]
|
REFERENCE_EXPRESSION[referencedName=b]
|
||||||
VALUE_ARGUMENT_LIST
|
VALUE_ARGUMENT_LIST
|
||||||
VALUE_ARGUMENT
|
VALUE_ARGUMENT
|
||||||
|
DOT_QUALIFIED_EXPRESSION
|
||||||
|
REFERENCE_EXPRESSION[referencedName=E]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=E2]
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
REFERENCE_EXPRESSION[referencedName=Unit]
|
REFERENCE_EXPRESSION[referencedName=Unit]
|
||||||
|
|||||||
Reference in New Issue
Block a user