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.ClassInnerStuffCache;
|
||||||
import com.intellij.psi.impl.source.PsiExtensibleClass;
|
import com.intellij.psi.impl.source.PsiExtensibleClass;
|
||||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
|
||||||
import com.intellij.util.Function;
|
import com.intellij.util.Function;
|
||||||
import com.intellij.util.containers.ContainerUtil;
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import kotlin.collections.ArraysKt;
|
import kotlin.collections.ArraysKt;
|
||||||
import kotlin.jvm.functions.Function1;
|
import kotlin.jvm.functions.Function1;
|
||||||
import org.jetbrains.annotations.NotNull;
|
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.KtLightFieldImpl;
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethodImpl;
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethodImpl;
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage;
|
import org.jetbrains.kotlin.idea.KotlinLanguage;
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject;
|
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;
|
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>() {
|
return ContainerUtil.map(getDelegate().getFields(), new Function<PsiField, PsiField>() {
|
||||||
@Override
|
@Override
|
||||||
public PsiField fun(PsiField field) {
|
public PsiField fun(PsiField field) {
|
||||||
LightMemberOrigin origin = ClsWrapperStubPsiFactory.getMemberOrigin(field);
|
return KtLightFieldImpl.Factory.fromClsField(field, KtLightClassBase.this);
|
||||||
return KtLightFieldImpl.Factory.create(origin, field, KtLightClassBase.this);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -136,14 +128,7 @@ public abstract class KtLightClassBase extends AbstractLightClass implements KtL
|
|||||||
return ArraysKt.map(getDelegate().getMethods(), new Function1<PsiMethod, PsiMethod>() {
|
return ArraysKt.map(getDelegate().getMethods(), new Function1<PsiMethod, PsiMethod>() {
|
||||||
@Override
|
@Override
|
||||||
public PsiMethod invoke(PsiMethod method) {
|
public PsiMethod invoke(PsiMethod method) {
|
||||||
LightMemberOriginForDeclaration origin = ClsWrapperStubPsiFactory.getMemberOrigin(method);
|
return KtLightMethodImpl.fromClsMethod(method, KtLightClassBase.this);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ package org.jetbrains.kotlin.asJava.elements
|
|||||||
|
|
||||||
import com.intellij.navigation.ItemPresentation
|
import com.intellij.navigation.ItemPresentation
|
||||||
import com.intellij.navigation.ItemPresentationProviders
|
import com.intellij.navigation.ItemPresentationProviders
|
||||||
import com.intellij.navigation.NavigationItem
|
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.impl.PsiVariableEx
|
import com.intellij.psi.impl.PsiVariableEx
|
||||||
import com.intellij.psi.impl.light.LightElement
|
import com.intellij.psi.impl.light.LightElement
|
||||||
import com.intellij.util.IncorrectOperationException
|
import com.intellij.util.IncorrectOperationException
|
||||||
import org.jetbrains.annotations.NonNls
|
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.LightMemberOrigin
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
|
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
@@ -168,5 +168,11 @@ sealed class KtLightFieldImpl(
|
|||||||
else -> return KtLightFieldForDeclaration(origin, delegate, containingClass)
|
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.psi.util.*
|
||||||
import com.intellij.util.IncorrectOperationException
|
import com.intellij.util.IncorrectOperationException
|
||||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
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.LightMemberOrigin
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
|
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
@@ -236,6 +237,18 @@ sealed class KtLightMethodImpl(
|
|||||||
else -> KtLightMethodForDeclaration(delegate, origin, containingClass)
|
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