From 22fb9ec5e139417965b8938da5325d9e04b2d954 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Thu, 16 Feb 2017 18:01:01 +0300 Subject: [PATCH] Refactor light classes: move light members creation to their respective classes --- .../asJava/classes/KtLightClassBase.java | 19 ++----------------- .../asJava/elements/KtLightFieldImpl.kt | 8 +++++++- .../kotlin/asJava/elements/KtLightMethod.kt | 13 +++++++++++++ 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassBase.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassBase.java index 21acaf92823..9b1f4eb0795 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassBase.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassBase.java @@ -25,22 +25,15 @@ import com.intellij.psi.impl.light.AbstractLightClass; import com.intellij.psi.impl.source.ClassInnerStuffCache; import com.intellij.psi.impl.source.PsiExtensibleClass; import com.intellij.psi.scope.PsiScopeProcessor; -import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import kotlin.collections.ArraysKt; import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory; -import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin; -import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration; import org.jetbrains.kotlin.asJava.elements.KtLightFieldImpl; import org.jetbrains.kotlin.asJava.elements.KtLightMethodImpl; import org.jetbrains.kotlin.idea.KotlinLanguage; import org.jetbrains.kotlin.psi.KtClassOrObject; -import org.jetbrains.kotlin.psi.KtDeclaration; -import org.jetbrains.kotlin.psi.KtProperty; -import org.jetbrains.kotlin.psi.KtPropertyAccessor; import java.util.List; @@ -124,8 +117,7 @@ public abstract class KtLightClassBase extends AbstractLightClass implements KtL return ContainerUtil.map(getDelegate().getFields(), new Function() { @Override public PsiField fun(PsiField field) { - LightMemberOrigin origin = ClsWrapperStubPsiFactory.getMemberOrigin(field); - return KtLightFieldImpl.Factory.create(origin, field, KtLightClassBase.this); + return KtLightFieldImpl.Factory.fromClsField(field, KtLightClassBase.this); } }); } @@ -136,14 +128,7 @@ public abstract class KtLightClassBase extends AbstractLightClass implements KtL return ArraysKt.map(getDelegate().getMethods(), new Function1() { @Override public PsiMethod invoke(PsiMethod method) { - LightMemberOriginForDeclaration origin = ClsWrapperStubPsiFactory.getMemberOrigin(method); - KtDeclaration originalElement = origin != null ? origin.getOriginalElement() : null; - if (originalElement instanceof KtPropertyAccessor) { - //noinspection ConstantConditions - origin = origin.copy(PsiTreeUtil.getParentOfType(originalElement, KtProperty.class), origin.getOriginKind()); - } - - return KtLightMethodImpl.Factory.create(method, origin, KtLightClassBase.this); + return KtLightMethodImpl.fromClsMethod(method, KtLightClassBase.this); } }); } 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 7e52244b3fa..5b12cea0abc 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 @@ -18,13 +18,13 @@ package org.jetbrains.kotlin.asJava.elements import com.intellij.navigation.ItemPresentation import com.intellij.navigation.ItemPresentationProviders -import com.intellij.navigation.NavigationItem import com.intellij.openapi.util.TextRange import com.intellij.psi.* import com.intellij.psi.impl.PsiVariableEx import com.intellij.psi.impl.light.LightElement import com.intellij.util.IncorrectOperationException import org.jetbrains.annotations.NonNls +import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration import org.jetbrains.kotlin.asJava.classes.KtLightClass @@ -168,5 +168,11 @@ sealed class KtLightFieldImpl( else -> return KtLightFieldForDeclaration(origin, delegate, containingClass) } } + + @JvmStatic + fun fromClsField(field: PsiField, containingClass: KtLightClass): KtLightField { + val origin = ClsWrapperStubPsiFactory.getMemberOrigin(field) + return KtLightFieldImpl.create(origin, field, containingClass) + } } } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethod.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethod.kt index 304fd2cf653..02254ef5446 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethod.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethod.kt @@ -27,6 +27,7 @@ import com.intellij.psi.scope.PsiScopeProcessor import com.intellij.psi.util.* import com.intellij.util.IncorrectOperationException import org.jetbrains.kotlin.asJava.LightClassUtil +import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration import org.jetbrains.kotlin.asJava.classes.KtLightClass @@ -236,6 +237,18 @@ sealed class KtLightMethodImpl( else -> KtLightMethodForDeclaration(delegate, origin, containingClass) } } + + @JvmStatic + fun fromClsMethod(method: PsiMethod, containingClass: KtLightClass): KtLightMethodImpl { + var origin = ClsWrapperStubPsiFactory.getMemberOrigin(method) + val originalElement = if (origin != null) origin.originalElement else null + if (originalElement is KtPropertyAccessor) { + + origin = origin!!.copy(PsiTreeUtil.getParentOfType(originalElement, KtProperty::class.java)!!, origin.originKind) + } + + return KtLightMethodImpl.create(method, origin, containingClass) + } } }