From bdc4014dede2ffd93887a49ff571e3771415c8fa Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Tue, 25 Apr 2017 18:07:45 +0300 Subject: [PATCH] Refactor: Introduce KtLightElementBase --- .../asJava/elements/KtLightElementBase.kt | 40 +++++++++++++++++++ .../asJava/elements/KtLightMemberImpl.kt | 25 +----------- .../asJava/elements/KtLightParameterList.kt | 21 +++++----- 3 files changed, 53 insertions(+), 33 deletions(-) create mode 100644 compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightElementBase.kt diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightElementBase.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightElementBase.kt new file mode 100644 index 00000000000..60fb1a4708b --- /dev/null +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightElementBase.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.asJava.elements + +import com.intellij.navigation.ItemPresentationProviders +import com.intellij.openapi.util.TextRange +import com.intellij.psi.PsiElement +import com.intellij.psi.impl.light.LightElement +import org.jetbrains.kotlin.idea.KotlinLanguage +import org.jetbrains.kotlin.psi.KtElement + +abstract class KtLightElementBase(private val parent: PsiElement): LightElement(parent.manager, KotlinLanguage.INSTANCE) { + override fun toString() = "${this.javaClass.simpleName} of $parent" + override fun getParent(): PsiElement = parent + + abstract val kotlinOrigin: KtElement? + + override fun getText() = kotlinOrigin?.text ?: "" + override fun getTextRange() = kotlinOrigin?.textRange ?: TextRange.EMPTY_RANGE + override fun isWritable() = kotlinOrigin?.isWritable ?: false + override fun getNavigationElement() = kotlinOrigin ?: this + override fun getUseScope() = kotlinOrigin?.useScope ?: super.getUseScope() + override fun getContainingFile() = parent.containingFile + override fun getPresentation() = (kotlinOrigin ?: this).let { ItemPresentationProviders.getItemPresentation(it) } + override fun isValid() = parent.isValid +} \ No newline at end of file diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt index e44a417a26a..9fc55cc0367 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt @@ -16,20 +16,15 @@ package org.jetbrains.kotlin.asJava.elements -import com.intellij.navigation.ItemPresentation -import com.intellij.navigation.ItemPresentationProviders -import com.intellij.openapi.util.TextRange import com.intellij.openapi.util.UserDataHolder import com.intellij.psi.* import com.intellij.psi.impl.compiled.ClsRepositoryPsiElement -import com.intellij.psi.impl.light.LightElement import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory.ORIGIN import org.jetbrains.kotlin.asJava.builder.LightElementOrigin import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.lazyPub -import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtNamedDeclaration @@ -40,7 +35,7 @@ abstract class KtLightMemberImpl( override val lightMemberOrigin: LightMemberOrigin?, private val containingClass: KtLightClass, private val dummyDelegate: D? -) : LightElement(containingClass.manager, KotlinLanguage.INSTANCE), PsiMember, KtLightMember { +) : KtLightElementBase(containingClass), PsiMember, KtLightMember { override val clsDelegate by lazyPub(computeRealDelegate) private val lightIdentifier by lazyPub { KtLightIdentifier(this, kotlinOrigin as? KtNamedDeclaration) } @@ -58,30 +53,12 @@ abstract class KtLightMemberImpl( override fun getContainingClass() = containingClass - override fun getContainingFile() = containingClass.containingFile - - override fun getParent(): PsiElement = containingClass - - override fun isValid() = containingClass.isValid - override fun getName(): String = dummyDelegate?.name ?: clsDelegate.name!! override fun getNameIdentifier(): PsiIdentifier = lightIdentifier - override fun getUseScope() = kotlinOrigin?.useScope ?: super.getUseScope() - override val kotlinOrigin: KtDeclaration? get() = lightMemberOrigin?.originalElement - override fun getNavigationElement() = kotlinOrigin ?: super.getNavigationElement() - - override fun getPresentation(): ItemPresentation? = (kotlinOrigin ?: this).let { ItemPresentationProviders.getItemPresentation(it) } - - override fun getText() = kotlinOrigin?.text ?: "" - - override fun getTextRange() = kotlinOrigin?.textRange ?: TextRange.EMPTY_RANGE - - override fun isWritable() = kotlinOrigin?.isWritable ?: false - override fun getDocComment() = (clsDelegate as PsiDocCommentOwner).docComment override fun isDeprecated() = (clsDelegate as PsiDocCommentOwner).isDeprecated diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightParameterList.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightParameterList.kt index 30aaa0684fe..142ba43db39 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightParameterList.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightParameterList.kt @@ -16,21 +16,24 @@ package org.jetbrains.kotlin.asJava.elements -import com.intellij.psi.* -import com.intellij.psi.impl.light.LightElement +import com.intellij.psi.JavaElementVisitor +import com.intellij.psi.PsiElementVisitor +import com.intellij.psi.PsiParameter +import com.intellij.psi.PsiParameterList import org.jetbrains.kotlin.asJava.classes.lazyPub -import org.jetbrains.kotlin.idea.KotlinLanguage +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtFunction class KtLightParameterList( private val parent: KtLightMethod, private val parametersCount: Int, - computeParameters: () -> List) : LightElement(parent.manager, KotlinLanguage.INSTANCE), PsiParameterList { + computeParameters: () -> List +) : KtLightElementBase(parent), PsiParameterList { + + override val kotlinOrigin: KtElement? + get() = (parent.kotlinOrigin as? KtFunction)?.valueParameterList + private val _parameters: Array by lazyPub { computeParameters().toTypedArray() } - - override fun getParent() = parent - - override fun toString() = "Light parameter list of $parent" - override fun getParameters() = _parameters override fun getParameterIndex(parameter: PsiParameter) = _parameters.indexOf(parameter)