KtAnonymousInitializer: make it an interface with KtClassInitializer inheritor

This commit is contained in:
Pavel V. Talanov
2015-11-19 15:03:25 +03:00
parent bc2a65b2ea
commit 321364102a
3 changed files with 15 additions and 9 deletions
@@ -23,23 +23,23 @@ import org.jetbrains.kotlin.psi.stubs.KotlinPlaceHolderStub
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes
import org.jetbrains.kotlin.utils.sure
class KtAnonymousInitializer : KtDeclarationStub<KotlinPlaceHolderStub<KtAnonymousInitializer>>, KtStatementExpression {
class KtClassInitializer : KtDeclarationStub<KotlinPlaceHolderStub<KtClassInitializer>>, KtAnonymousInitializer {
constructor(node: ASTNode) : super(node)
constructor(stub: KotlinPlaceHolderStub<KtAnonymousInitializer>) : super(stub, KtStubElementTypes.ANONYMOUS_INITIALIZER)
constructor(stub: KotlinPlaceHolderStub<KtClassInitializer>) : super(stub, KtStubElementTypes.ANONYMOUS_INITIALIZER)
override fun <R, D> accept(visitor: KtVisitor<R, D>, data: D) = visitor.visitAnonymousInitializer(this, data)
val body: KtExpression?
override val body: KtExpression?
get() = findChildByClass(KtExpression::class.java)
val openBraceNode: PsiElement?
override val openBraceNode: PsiElement?
get() {
val body = body
return if ((body is KtBlockExpression)) body.lBrace else null
return if (body is KtBlockExpression) body.lBrace else null
}
val containingDeclaration: KtDeclaration
override val containingDeclaration: KtDeclaration
get() {
val classOrObject = PsiTreeUtil.getParentOfType(this, KtClassOrObject::class.java, true)
if (classOrObject != null) {
@@ -49,3 +49,9 @@ class KtAnonymousInitializer : KtDeclarationStub<KotlinPlaceHolderStub<KtAnonymo
return type.sure { "Should only be present in class, object or script" }
}
}
public interface KtAnonymousInitializer : KtDeclaration, KtStatementExpression {
val containingDeclaration: KtDeclaration
val body: KtExpression?
val openBraceNode: PsiElement?
}
@@ -31,8 +31,8 @@ public interface KtStubElementTypes {
KtClassElementType ENUM_ENTRY = new KtClassElementType("ENUM_ENTRY");
KtObjectElementType OBJECT_DECLARATION = new KtObjectElementType("OBJECT_DECLARATION");
KtPlaceHolderStubElementType<KtAnonymousInitializer> ANONYMOUS_INITIALIZER =
new KtPlaceHolderStubElementType<KtAnonymousInitializer>("ANONYMOUS_INITIALIZER", KtAnonymousInitializer.class);
KtPlaceHolderStubElementType<KtClassInitializer> ANONYMOUS_INITIALIZER =
new KtPlaceHolderStubElementType<KtClassInitializer>("ANONYMOUS_INITIALIZER", KtClassInitializer.class);
KtPlaceHolderStubElementType<KtSecondaryConstructor> SECONDARY_CONSTRUCTOR =
new KtPlaceHolderStubElementType<KtSecondaryConstructor>("SECONDARY_CONSTRUCTOR", KtSecondaryConstructor.class);
KtPlaceHolderStubElementType<KtPrimaryConstructor> PRIMARY_CONSTRUCTOR =
@@ -195,7 +195,7 @@ public class DebugTextByStubTest : LightCodeInsightFixtureTestCase() {
val tree = createStubTree("class A {\n init {} }")
val initializer = tree.findChildStubByType(KtStubElementTypes.CLASS)!!.findChildStubByType(KtStubElementTypes.CLASS_BODY)!!
.findChildStubByType(KtStubElementTypes.ANONYMOUS_INITIALIZER)
assertEquals("initializer in STUB: class A", KtAnonymousInitializer(initializer as KotlinPlaceHolderStub).getDebugText())
assertEquals("initializer in STUB: class A", KtClassInitializer(initializer as KotlinPlaceHolderStub).getDebugText())
}
fun testClassObject() {