Refactor light classes: move light members creation to their respective classes
This commit is contained in:
+2
-17
@@ -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<PsiField, PsiField>() {
|
||||
@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<PsiMethod, PsiMethod>() {
|
||||
@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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user