Light classes: refactor, move getOrigin to corresponding classes

This commit is contained in:
Pavel V. Talanov
2017-03-24 17:17:28 +03:00
parent a2511232ab
commit ec895f18f2
4 changed files with 19 additions and 20 deletions
@@ -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);
@@ -138,8 +138,9 @@ sealed class KtLightFieldImpl<D : PsiField>(
}
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)
}
}
@@ -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<out D : PsiMember>(
}
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<LightElementOrigin>(ORIGIN) as? LightMemberOriginForDeclaration ?: return null
}
@@ -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