From ec895f18f21933c8397558573261ca1ce5044179 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 24 Mar 2017 17:17:28 +0300 Subject: [PATCH] Light classes: refactor, move getOrigin to corresponding classes --- .../asJava/builder/ClsWrapperStubPsiFactory.java | 15 --------------- .../kotlin/asJava/elements/KtLightFieldImpl.kt | 5 +++-- .../kotlin/asJava/elements/KtLightMemberImpl.kt | 12 ++++++++++++ .../kotlin/asJava/elements/KtLightMethodImpl.kt | 7 ++++--- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/ClsWrapperStubPsiFactory.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/ClsWrapperStubPsiFactory.java index 17051f68106..990cea2fe28 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/ClsWrapperStubPsiFactory.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/ClsWrapperStubPsiFactory.java @@ -37,21 +37,6 @@ public class ClsWrapperStubPsiFactory extends StubPsiFactory { private ClsWrapperStubPsiFactory() { } - @Nullable - public static LightMemberOriginForDeclaration getMemberOrigin(@NotNull PsiMember member) { - if (member instanceof ClsRepositoryPsiElement) { - StubElement stubElement = ((ClsRepositoryPsiElement) member).getStub(); - if (stubElement instanceof UserDataHolder) { - LightElementOrigin origin = ((UserDataHolder) stubElement).getUserData(ORIGIN); - if (origin instanceof LightMemberOriginForDeclaration) { - return (LightMemberOriginForDeclaration) origin; - } - } - } - - return null; - } - @Override public PsiClass createClass(@NotNull PsiClassStub stub) { final PsiElement origin = getOriginalElement(stub); diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightFieldImpl.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightFieldImpl.kt index e88881bfa4a..cede7272b08 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightFieldImpl.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightFieldImpl.kt @@ -138,8 +138,9 @@ sealed class KtLightFieldImpl( } fun fromClsFields(delegateClass: PsiClass, containingClass: KtLightClass) = delegateClass.fields.map { - val origin = ClsWrapperStubPsiFactory.getMemberOrigin(it) - KtLightFieldImpl.create(origin, it, containingClass) + KtLightFieldImpl.create(getOrigin(it), it, containingClass) } + + fun getOrigin(field: PsiField) = getMemberOrigin(field) } } 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 15df9eb4e4f..e610c728ad5 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 @@ -19,8 +19,12 @@ 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 @@ -93,3 +97,11 @@ abstract class KtLightMemberImpl( } private val visibilityModifiers = arrayOf(PsiModifier.PRIVATE, PsiModifier.PACKAGE_LOCAL, PsiModifier.PROTECTED, PsiModifier.PUBLIC) + +internal fun getMemberOrigin(member: PsiMember): LightMemberOriginForDeclaration? { + if (member !is ClsRepositoryPsiElement<*>) return null + + val stubElement = member.stub as? UserDataHolder ?: return null + + return stubElement.getUserData(ORIGIN) as? LightMemberOriginForDeclaration ?: return null +} diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt index 94eb38c9846..f7891549438 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt @@ -200,13 +200,14 @@ class KtLightMethodImpl private constructor( origin: LightMemberOriginForDeclaration?, computeRealDelegate: () -> PsiMethod ): KtLightMethodImpl { - return KtLightMethodImpl(computeRealDelegate, adjustMethodOrigin(origin), containingClass, dummyDelegate) + return KtLightMethodImpl(computeRealDelegate, origin, containingClass, dummyDelegate) } fun fromClsMethods(delegateClass: PsiClass, containingClass: KtLightClass) = delegateClass.methods.map { - val origin = ClsWrapperStubPsiFactory.getMemberOrigin(it) - KtLightMethodImpl.create(it, adjustMethodOrigin(origin), containingClass) + KtLightMethodImpl.create(it, getOrigin(it), containingClass) } + + fun getOrigin(method: PsiMethod) = adjustMethodOrigin(getMemberOrigin(method)) } override fun getThrowsList() = clsDelegate.throwsList