Psi: Introduce KtScriptInitializer, a separate entity for script initializers which are quite a bit different from class initializers

This commit is contained in:
Pavel V. Talanov
2015-11-19 15:32:44 +03:00
parent 321364102a
commit dbd49c37c1
28 changed files with 93 additions and 63 deletions
@@ -35,7 +35,8 @@ public interface KtNodeTypes {
IElementType OBJECT_DECLARATION = KtStubElementTypes.OBJECT_DECLARATION; IElementType OBJECT_DECLARATION = KtStubElementTypes.OBJECT_DECLARATION;
IElementType ENUM_ENTRY = KtStubElementTypes.ENUM_ENTRY; IElementType ENUM_ENTRY = KtStubElementTypes.ENUM_ENTRY;
IElementType ANONYMOUS_INITIALIZER = KtStubElementTypes.ANONYMOUS_INITIALIZER; IElementType CLASS_INITIALIZER = KtStubElementTypes.CLASS_INITIALIZER;
IElementType SCRIPT_INITIALIZER = new KtNodeType("SCRIPT_INITIALIZER", KtScriptInitializer.class);
IElementType SECONDARY_CONSTRUCTOR = KtStubElementTypes.SECONDARY_CONSTRUCTOR; IElementType SECONDARY_CONSTRUCTOR = KtStubElementTypes.SECONDARY_CONSTRUCTOR;
IElementType PRIMARY_CONSTRUCTOR = KtStubElementTypes.PRIMARY_CONSTRUCTOR; IElementType PRIMARY_CONSTRUCTOR = KtStubElementTypes.PRIMARY_CONSTRUCTOR;
@@ -1230,7 +1230,7 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing {
else if (isScriptTopLevel){ else if (isScriptTopLevel){
PsiBuilder.Marker scriptInitializer = mark(); PsiBuilder.Marker scriptInitializer = mark();
parseExpression(); parseExpression();
scriptInitializer.done(ANONYMOUS_INITIALIZER); scriptInitializer.done(SCRIPT_INITIALIZER);
} }
else { else {
parseExpression(); parseExpression();
@@ -1083,7 +1083,7 @@ public class KotlinParsing extends AbstractKotlinParsing {
else { else {
mark().error("Expecting '{' after 'init'"); mark().error("Expecting '{' after 'init'");
} }
declType = ANONYMOUS_INITIALIZER; declType = CLASS_INITIALIZER;
} }
else if (at(CONSTRUCTOR_KEYWORD)) { else if (at(CONSTRUCTOR_KEYWORD)) {
parseSecondaryConstructor(); parseSecondaryConstructor();
@@ -18,40 +18,39 @@ package org.jetbrains.kotlin.psi
import com.intellij.lang.ASTNode import com.intellij.lang.ASTNode
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import org.jetbrains.kotlin.psi.stubs.KotlinPlaceHolderStub import org.jetbrains.kotlin.psi.stubs.KotlinPlaceHolderStub
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes
import org.jetbrains.kotlin.utils.sure import org.jetbrains.kotlin.utils.sure
interface KtAnonymousInitializer : KtDeclaration, KtStatementExpression {
val containingDeclaration: KtDeclaration
val body: KtExpression?
}
class KtClassInitializer : KtDeclarationStub<KotlinPlaceHolderStub<KtClassInitializer>>, KtAnonymousInitializer { class KtClassInitializer : KtDeclarationStub<KotlinPlaceHolderStub<KtClassInitializer>>, KtAnonymousInitializer {
constructor(node: ASTNode) : super(node) constructor(node: ASTNode) : super(node)
constructor(stub: KotlinPlaceHolderStub<KtClassInitializer>) : super(stub, KtStubElementTypes.ANONYMOUS_INITIALIZER) constructor(stub: KotlinPlaceHolderStub<KtClassInitializer>) : super(stub, KtStubElementTypes.CLASS_INITIALIZER)
override fun <R, D> accept(visitor: KtVisitor<R, D>, data: D) = visitor.visitAnonymousInitializer(this, data) override fun <R, D> accept(visitor: KtVisitor<R, D>, data: D) = visitor.visitClassInitializer(this, data)
override val body: KtExpression? override val body: KtExpression?
get() = findChildByClass(KtExpression::class.java) get() = findChildByClass(KtExpression::class.java)
override val openBraceNode: PsiElement? val openBraceNode: PsiElement?
get() { get() = (body as? KtBlockExpression)?.lBrace
val body = body
return if (body is KtBlockExpression) body.lBrace else null
}
override val containingDeclaration: KtDeclaration override val containingDeclaration: KtDeclaration
get() { get() = getParentOfType<KtClassOrObject>(true).sure { "Should only be present in class or object" }
val classOrObject = PsiTreeUtil.getParentOfType(this, KtClassOrObject::class.java, true)
if (classOrObject != null) {
return classOrObject
}
val type = PsiTreeUtil.getParentOfType(this, KtScript::class.java, true)
return type.sure { "Should only be present in class, object or script" }
}
} }
public interface KtAnonymousInitializer : KtDeclaration, KtStatementExpression { class KtScriptInitializer(node: ASTNode) : KtDeclarationImpl(node), KtAnonymousInitializer {
val containingDeclaration: KtDeclaration override val body: KtExpression?
val body: KtExpression? get() = findChildByClass(KtExpression::class.java)
val openBraceNode: PsiElement?
override val containingDeclaration: KtDeclaration
get() = getParentOfType<KtScript>(true).sure { "Should only be present in script" }
override fun <R, D> accept(visitor: KtVisitor<R, D>, data: D) = visitor.visitScriptInitializer(this, data)
} }
@@ -38,7 +38,7 @@ class KtClassBody : KtElementImplStub<KotlinPlaceHolderStub<KtClassBody>>, KtDec
override fun <R, D> accept(visitor: KtVisitor<R, D>, data: D) = visitor.visitClassBody(this, data) override fun <R, D> accept(visitor: KtVisitor<R, D>, data: D) = visitor.visitClassBody(this, data)
val anonymousInitializers: List<KtAnonymousInitializer> val anonymousInitializers: List<KtAnonymousInitializer>
get() = findChildrenByType(KtNodeTypes.ANONYMOUS_INITIALIZER) get() = findChildrenByType(KtNodeTypes.CLASS_INITIALIZER)
internal val secondaryConstructors: List<KtSecondaryConstructor> internal val secondaryConstructors: List<KtSecondaryConstructor>
get() = getStubOrPsiChildrenAsList(KtStubElementTypes.SECONDARY_CONSTRUCTOR) get() = getStubOrPsiChildrenAsList(KtStubElementTypes.SECONDARY_CONSTRUCTOR)
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.psi.findDocComment.FindDocCommentKt;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
abstract class KtDeclarationImpl extends KtExpressionImpl implements KtDeclaration { public abstract class KtDeclarationImpl extends KtExpressionImpl implements KtDeclaration {
public KtDeclarationImpl(@NotNull ASTNode node) { public KtDeclarationImpl(@NotNull ASTNode node) {
super(node); super(node);
} }
@@ -342,6 +342,14 @@ public class KtVisitor<R, D> extends PsiElementVisitor {
return visitDeclaration(initializer, data); return visitDeclaration(initializer, data);
} }
public R visitScriptInitializer(@NotNull KtScriptInitializer initializer, D data) {
return visitAnonymousInitializer(initializer, data);
}
public R visitClassInitializer(@NotNull KtClassInitializer initializer, D data) {
return visitAnonymousInitializer(initializer, data);
}
public R visitPropertyAccessor(@NotNull KtPropertyAccessor accessor, D data) { public R visitPropertyAccessor(@NotNull KtPropertyAccessor accessor, D data) {
return visitDeclaration(accessor, data); return visitDeclaration(accessor, data);
} }
@@ -329,6 +329,14 @@ public class KtVisitorVoid extends KtVisitor<Void, Void> {
super.visitAnonymousInitializer(initializer, null); super.visitAnonymousInitializer(initializer, null);
} }
public void visitScriptInitializer(@NotNull KtScriptInitializer initializer) {
super.visitScriptInitializer(initializer, null);
}
public void visitClassInitializer(@NotNull KtClassInitializer initializer) {
super.visitClassInitializer(initializer, null);
}
public void visitPropertyAccessor(@NotNull KtPropertyAccessor accessor) { public void visitPropertyAccessor(@NotNull KtPropertyAccessor accessor) {
super.visitPropertyAccessor(accessor, null); super.visitPropertyAccessor(accessor, null);
} }
@@ -1043,4 +1051,16 @@ public class KtVisitorVoid extends KtVisitor<Void, Void> {
visitPackageDirective(directive); visitPackageDirective(directive);
return null; return null;
} }
@Override
public Void visitScriptInitializer(@NotNull KtScriptInitializer initializer, Void data) {
visitScriptInitializer(initializer);
return null;
}
@Override
public Void visitClassInitializer(@NotNull KtClassInitializer initializer, Void data) {
visitClassInitializer(initializer);
return null;
}
} }
@@ -31,8 +31,8 @@ public interface KtStubElementTypes {
KtClassElementType ENUM_ENTRY = new KtClassElementType("ENUM_ENTRY"); KtClassElementType ENUM_ENTRY = new KtClassElementType("ENUM_ENTRY");
KtObjectElementType OBJECT_DECLARATION = new KtObjectElementType("OBJECT_DECLARATION"); KtObjectElementType OBJECT_DECLARATION = new KtObjectElementType("OBJECT_DECLARATION");
KtPlaceHolderStubElementType<KtClassInitializer> ANONYMOUS_INITIALIZER = KtPlaceHolderStubElementType<KtClassInitializer> CLASS_INITIALIZER =
new KtPlaceHolderStubElementType<KtClassInitializer>("ANONYMOUS_INITIALIZER", KtClassInitializer.class); new KtPlaceHolderStubElementType<KtClassInitializer>("CLASS_INITIALIZER", KtClassInitializer.class);
KtPlaceHolderStubElementType<KtSecondaryConstructor> SECONDARY_CONSTRUCTOR = KtPlaceHolderStubElementType<KtSecondaryConstructor> SECONDARY_CONSTRUCTOR =
new KtPlaceHolderStubElementType<KtSecondaryConstructor>("SECONDARY_CONSTRUCTOR", KtSecondaryConstructor.class); new KtPlaceHolderStubElementType<KtSecondaryConstructor>("SECONDARY_CONSTRUCTOR", KtSecondaryConstructor.class);
KtPlaceHolderStubElementType<KtPrimaryConstructor> PRIMARY_CONSTRUCTOR = KtPlaceHolderStubElementType<KtPrimaryConstructor> PRIMARY_CONSTRUCTOR =
@@ -119,7 +119,7 @@ public interface KtStubElementTypes {
KtScriptElementType SCRIPT = new KtScriptElementType("SCRIPT"); KtScriptElementType SCRIPT = new KtScriptElementType("SCRIPT");
TokenSet DECLARATION_TYPES = TokenSet DECLARATION_TYPES =
TokenSet.create(CLASS, OBJECT_DECLARATION, FUNCTION, PROPERTY, ANONYMOUS_INITIALIZER, SECONDARY_CONSTRUCTOR, ENUM_ENTRY); TokenSet.create(CLASS, OBJECT_DECLARATION, FUNCTION, PROPERTY, CLASS_INITIALIZER, SECONDARY_CONSTRUCTOR, ENUM_ENTRY);
TokenSet DELEGATION_SPECIFIER_TYPES = TokenSet.create(DELEGATOR_BY, DELEGATOR_SUPER_CALL, DELEGATOR_SUPER_CLASS); TokenSet DELEGATION_SPECIFIER_TYPES = TokenSet.create(DELEGATOR_BY, DELEGATOR_SUPER_CALL, DELEGATOR_SUPER_CLASS);
+1 -1
View File
@@ -11,7 +11,7 @@ JetFile: AnonymousInitializer.kt
CLASS_BODY CLASS_BODY
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK BLOCK
+2 -2
View File
@@ -124,7 +124,7 @@ JetFile: PropertiesFollowedByInitializers.kt
PROPERTY_ACCESSOR PROPERTY_ACCESSOR
PsiElement(get)('get') PsiElement(get)('get')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK BLOCK
@@ -180,7 +180,7 @@ JetFile: PropertiesFollowedByInitializers.kt
PsiElement(get)('get') PsiElement(get)('get')
PsiElement(SEMICOLON)(';') PsiElement(SEMICOLON)(';')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK BLOCK
+1 -1
View File
@@ -613,7 +613,7 @@ JetFile: ShortAnnotations.kt
PsiErrorElement:Expecting member declaration PsiErrorElement:Expecting member declaration
PsiElement(IDENTIFIER)('zoo') PsiElement(IDENTIFIER)('zoo')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK BLOCK
+1 -1
View File
@@ -435,7 +435,7 @@ JetFile: validDeclarations.kt
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1') PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
MODIFIER_LIST MODIFIER_LIST
ANNOTATION_ENTRY ANNOTATION_ENTRY
PsiElement(AT)('@') PsiElement(AT)('@')
+1 -1
View File
@@ -1808,7 +1808,7 @@ JetFile: BinaryTree.kt
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('TreeNode') PsiElement(IDENTIFIER)('TreeNode')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK BLOCK
+6 -6
View File
@@ -11,7 +11,7 @@ JetFile: initRecovery.kt
CLASS_BODY CLASS_BODY
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiErrorElement:Expecting '{' after 'init' PsiErrorElement:Expecting '{' after 'init'
<empty list> <empty list>
@@ -26,7 +26,7 @@ JetFile: initRecovery.kt
CLASS_BODY CLASS_BODY
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
MODIFIER_LIST MODIFIER_LIST
ANNOTATION_ENTRY ANNOTATION_ENTRY
PsiElement(AT)('@') PsiElement(AT)('@')
@@ -50,7 +50,7 @@ JetFile: initRecovery.kt
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1') PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiErrorElement:Expecting '{' after 'init' PsiErrorElement:Expecting '{' after 'init'
<empty list> <empty list>
@@ -67,17 +67,17 @@ JetFile: initRecovery.kt
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiErrorElement:Expecting '{' after 'init' PsiErrorElement:Expecting '{' after 'init'
<empty list> <empty list>
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiErrorElement:Expecting '{' after 'init' PsiErrorElement:Expecting '{' after 'init'
<empty list> <empty list>
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK BLOCK
+2 -2
View File
@@ -58,7 +58,7 @@ JetFile: ComplexScript.kts
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n') PsiWhiteSpace('\n\n')
ANONYMOUS_INITIALIZER SCRIPT_INITIALIZER
IF IF
PsiElement(if)('if') PsiElement(if)('if')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -98,7 +98,7 @@ JetFile: ComplexScript.kts
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n') PsiWhiteSpace('\n\n')
ANONYMOUS_INITIALIZER SCRIPT_INITIALIZER
FOR FOR
PsiElement(for)('for') PsiElement(for)('for')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
+1 -1
View File
@@ -7,7 +7,7 @@ JetFile: Shebang.kts
PsiWhiteSpace('\n\n') PsiWhiteSpace('\n\n')
SCRIPT SCRIPT
BLOCK BLOCK
ANONYMOUS_INITIALIZER SCRIPT_INITIALIZER
CALL_EXPRESSION CALL_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('println') PsiElement(IDENTIFIER)('println')
+2 -2
View File
@@ -5,7 +5,7 @@ JetFile: ShebangIncorrect.kts
<empty list> <empty list>
SCRIPT SCRIPT
BLOCK BLOCK
ANONYMOUS_INITIALIZER SCRIPT_INITIALIZER
CALL_EXPRESSION CALL_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('println') PsiElement(IDENTIFIER)('println')
@@ -19,7 +19,7 @@ JetFile: ShebangIncorrect.kts
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiErrorElement:Expecting an element PsiErrorElement:Expecting an element
PsiElement(HASH)('#') PsiElement(HASH)('#')
ANONYMOUS_INITIALIZER SCRIPT_INITIALIZER
BINARY_EXPRESSION BINARY_EXPRESSION
PREFIX_EXPRESSION PREFIX_EXPRESSION
OPERATION_REFERENCE OPERATION_REFERENCE
+1 -1
View File
@@ -5,7 +5,7 @@ JetFile: SimpleScript.kts
<empty list> <empty list>
SCRIPT SCRIPT
BLOCK BLOCK
ANONYMOUS_INITIALIZER SCRIPT_INITIALIZER
CALL_EXPRESSION CALL_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('println') PsiElement(IDENTIFIER)('println')
+1 -1
View File
@@ -5,7 +5,7 @@ JetFile: unexpectedSymbol.kts
<empty list> <empty list>
SCRIPT SCRIPT
BLOCK BLOCK
ANONYMOUS_INITIALIZER SCRIPT_INITIALIZER
CALL_EXPRESSION CALL_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('println') PsiElement(IDENTIFIER)('println')
@@ -11,14 +11,14 @@ JetFile: anonymousInitializer.kt
CLASS_BODY CLASS_BODY
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK BLOCK
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
MODIFIER_LIST MODIFIER_LIST
PsiElement(private)('private') PsiElement(private)('private')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -42,7 +42,7 @@ JetFile: anonymousInitializer.kt
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK BLOCK
@@ -93,7 +93,7 @@ JetFile: enumParsing.kt
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK BLOCK
@@ -126,7 +126,7 @@ JetFile: enumParsing.kt
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK BLOCK
+2 -2
View File
@@ -96,7 +96,7 @@ JetFile: semicolonBetweenDeclarations.kt
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
PsiElement(SEMICOLON)(';') PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK BLOCK
@@ -162,7 +162,7 @@ JetFile: semicolonBetweenDeclarations.kt
<empty list> <empty list>
PsiElement(SEMICOLON)(';') PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
ANONYMOUS_INITIALIZER CLASS_INITIALIZER
PsiElement(init)('init') PsiElement(init)('init')
PsiErrorElement:Expecting '{' after 'init' PsiErrorElement:Expecting '{' after 'init'
<empty list> <empty list>
@@ -21,7 +21,9 @@ import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*; import com.intellij.psi.PsiComment;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -87,7 +89,7 @@ public class KotlinDeclarationMover extends AbstractKotlinUpDownMover {
declaration.accept( declaration.accept(
new KtVisitorVoid() { new KtVisitorVoid() {
@Override @Override
public void visitAnonymousInitializer(@NotNull KtAnonymousInitializer initializer) { public void visitClassInitializer(@NotNull KtClassInitializer initializer) {
PsiElement brace = initializer.getOpenBraceNode(); PsiElement brace = initializer.getOpenBraceNode();
if (brace != null) { if (brace != null) {
memberSuspects.add(brace); memberSuspects.add(brace);
@@ -49,7 +49,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder {
return rules(settings) { return rules(settings) {
val DECLARATIONS = val DECLARATIONS =
TokenSet.create(PROPERTY, FUN, CLASS, OBJECT_DECLARATION, ENUM_ENTRY, SECONDARY_CONSTRUCTOR, ANONYMOUS_INITIALIZER) TokenSet.create(PROPERTY, FUN, CLASS, OBJECT_DECLARATION, ENUM_ENTRY, SECONDARY_CONSTRUCTOR, CLASS_INITIALIZER)
custom { custom {
inPosition(left = CLASS, right = CLASS).emptyLinesIfLineBreakInLeft(1) inPosition(left = CLASS, right = CLASS).emptyLinesIfLineBreakInLeft(1)
@@ -102,7 +102,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder {
between(OBJECT_DECLARATION, DECLARATIONS).blankLines(1) between(OBJECT_DECLARATION, DECLARATIONS).blankLines(1)
between(SECONDARY_CONSTRUCTOR, DECLARATIONS).blankLines(1) between(SECONDARY_CONSTRUCTOR, DECLARATIONS).blankLines(1)
between(ANONYMOUS_INITIALIZER, DECLARATIONS).blankLines(1) between(CLASS_INITIALIZER, DECLARATIONS).blankLines(1)
// ENUM_ENTRY - ENUM_ENTRY is exception // ENUM_ENTRY - ENUM_ENTRY is exception
between(ENUM_ENTRY, DECLARATIONS).blankLines(1) between(ENUM_ENTRY, DECLARATIONS).blankLines(1)
@@ -292,7 +292,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder {
inPosition(parent = FUN, right = BLOCK).customRule(leftBraceRule()) inPosition(parent = FUN, right = BLOCK).customRule(leftBraceRule())
inPosition(parent = SECONDARY_CONSTRUCTOR, right = BLOCK).customRule(leftBraceRule()) inPosition(parent = SECONDARY_CONSTRUCTOR, right = BLOCK).customRule(leftBraceRule())
inPosition(parent = ANONYMOUS_INITIALIZER, right = BLOCK).customRule(leftBraceRule()) inPosition(parent = CLASS_INITIALIZER, right = BLOCK).customRule(leftBraceRule())
inPosition(parent = PROPERTY_ACCESSOR, right = BLOCK).customRule(leftBraceRule()) inPosition(parent = PROPERTY_ACCESSOR, right = BLOCK).customRule(leftBraceRule())
inPosition(right = CLASS_BODY).customRule(leftBraceRule(blockType = CLASS_BODY)) inPosition(right = CLASS_BODY).customRule(leftBraceRule(blockType = CLASS_BODY))
+1 -1
View File
@@ -6,6 +6,6 @@ PsiJetFileStubImpl[package=]
VALUE_PARAMETER_LIST: VALUE_PARAMETER_LIST:
CLASS_BODY: CLASS_BODY:
PROPERTY:[fqName=Test.test, hasDelegate=false, hasDelegateExpression=false, hasInitializer=true, hasReturnTypeRef=false, isExtension=false, isTopLevel=false, isVar=false, name=test] PROPERTY:[fqName=Test.test, hasDelegate=false, hasDelegateExpression=false, hasInitializer=true, hasReturnTypeRef=false, isExtension=false, isTopLevel=false, isVar=false, name=test]
ANONYMOUS_INITIALIZER: CLASS_INITIALIZER:
FUN:[fqName=Test.more, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=more] FUN:[fqName=Test.more, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=more]
VALUE_PARAMETER_LIST: VALUE_PARAMETER_LIST:
+2 -2
View File
@@ -10,7 +10,7 @@ PsiJetFileStubImpl[package=test]
USER_TYPE:[isAbsoluteInRootPackage=false] USER_TYPE:[isAbsoluteInRootPackage=false]
REFERENCE_EXPRESSION:[referencedName=Boolean] REFERENCE_EXPRESSION:[referencedName=Boolean]
CLASS_BODY: CLASS_BODY:
ANONYMOUS_INITIALIZER: CLASS_INITIALIZER:
SECONDARY_CONSTRUCTOR: SECONDARY_CONSTRUCTOR:
MODIFIER_LIST:[] MODIFIER_LIST:[]
ANNOTATION_ENTRY:[hasValueArguments=false, shortName=anno] ANNOTATION_ENTRY:[hasValueArguments=false, shortName=anno]
@@ -23,7 +23,7 @@ PsiJetFileStubImpl[package=test]
TYPE_REFERENCE: TYPE_REFERENCE:
USER_TYPE:[isAbsoluteInRootPackage=false] USER_TYPE:[isAbsoluteInRootPackage=false]
REFERENCE_EXPRESSION:[referencedName=String] REFERENCE_EXPRESSION:[referencedName=String]
ANONYMOUS_INITIALIZER: CLASS_INITIALIZER:
SECONDARY_CONSTRUCTOR: SECONDARY_CONSTRUCTOR:
MODIFIER_LIST:[private] MODIFIER_LIST:[private]
VALUE_PARAMETER_LIST: VALUE_PARAMETER_LIST:
@@ -194,7 +194,7 @@ public class DebugTextByStubTest : LightCodeInsightFixtureTestCase() {
fun testClassInitializer() { fun testClassInitializer() {
val tree = createStubTree("class A {\n init {} }") val tree = createStubTree("class A {\n init {} }")
val initializer = tree.findChildStubByType(KtStubElementTypes.CLASS)!!.findChildStubByType(KtStubElementTypes.CLASS_BODY)!! val initializer = tree.findChildStubByType(KtStubElementTypes.CLASS)!!.findChildStubByType(KtStubElementTypes.CLASS_BODY)!!
.findChildStubByType(KtStubElementTypes.ANONYMOUS_INITIALIZER) .findChildStubByType(KtStubElementTypes.CLASS_INITIALIZER)
assertEquals("initializer in STUB: class A", KtClassInitializer(initializer as KotlinPlaceHolderStub).getDebugText()) assertEquals("initializer in STUB: class A", KtClassInitializer(initializer as KotlinPlaceHolderStub).getDebugText())
} }