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
@@ -21,7 +21,9 @@ import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.Pair;
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 org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -87,7 +89,7 @@ public class KotlinDeclarationMover extends AbstractKotlinUpDownMover {
declaration.accept(
new KtVisitorVoid() {
@Override
public void visitAnonymousInitializer(@NotNull KtAnonymousInitializer initializer) {
public void visitClassInitializer(@NotNull KtClassInitializer initializer) {
PsiElement brace = initializer.getOpenBraceNode();
if (brace != null) {
memberSuspects.add(brace);
@@ -49,7 +49,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder {
return rules(settings) {
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 {
inPosition(left = CLASS, right = CLASS).emptyLinesIfLineBreakInLeft(1)
@@ -102,7 +102,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder {
between(OBJECT_DECLARATION, 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
between(ENUM_ENTRY, DECLARATIONS).blankLines(1)
@@ -292,7 +292,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder {
inPosition(parent = FUN, 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(right = CLASS_BODY).customRule(leftBraceRule(blockType = CLASS_BODY))
+1 -1
View File
@@ -6,6 +6,6 @@ PsiJetFileStubImpl[package=]
VALUE_PARAMETER_LIST:
CLASS_BODY:
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]
VALUE_PARAMETER_LIST:
+2 -2
View File
@@ -10,7 +10,7 @@ PsiJetFileStubImpl[package=test]
USER_TYPE:[isAbsoluteInRootPackage=false]
REFERENCE_EXPRESSION:[referencedName=Boolean]
CLASS_BODY:
ANONYMOUS_INITIALIZER:
CLASS_INITIALIZER:
SECONDARY_CONSTRUCTOR:
MODIFIER_LIST:[]
ANNOTATION_ENTRY:[hasValueArguments=false, shortName=anno]
@@ -23,7 +23,7 @@ PsiJetFileStubImpl[package=test]
TYPE_REFERENCE:
USER_TYPE:[isAbsoluteInRootPackage=false]
REFERENCE_EXPRESSION:[referencedName=String]
ANONYMOUS_INITIALIZER:
CLASS_INITIALIZER:
SECONDARY_CONSTRUCTOR:
MODIFIER_LIST:[private]
VALUE_PARAMETER_LIST:
@@ -194,7 +194,7 @@ public class DebugTextByStubTest : LightCodeInsightFixtureTestCase() {
fun testClassInitializer() {
val tree = createStubTree("class A {\n init {} }")
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())
}