Refactor: get rid of LightClassUtil#getPsiClass() in favor of KtClassOrObject:toLightClass extension

This commit is contained in:
Pavel V. Talanov
2016-01-21 18:49:02 +03:00
parent 2972dbca00
commit 1fe749c114
23 changed files with 75 additions and 69 deletions
@@ -30,7 +30,6 @@ import com.intellij.psi.PsiModifier;
import com.intellij.ui.SimpleColoredComponent;
import com.intellij.ui.StateRestoringCheckBox;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.asJava.LightClassUtil;
import org.jetbrains.kotlin.asJava.LightClassUtilsKt;
import org.jetbrains.kotlin.idea.KotlinBundle;
import org.jetbrains.kotlin.idea.findUsages.KotlinClassFindUsagesOptions;
@@ -41,6 +40,8 @@ import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt;
import javax.swing.*;
import static org.jetbrains.kotlin.asJava.LightClassUtilsKt.toLightClass;
public class KotlinFindClassUsagesDialog extends FindClassUsagesDialog {
private StateRestoringCheckBox constructorUsages;
private StateRestoringCheckBox derivedClasses;
@@ -62,7 +63,7 @@ public class KotlinFindClassUsagesDialog extends FindClassUsagesDialog {
@NotNull
private static PsiClass getRepresentingPsiClass(@NotNull KtClassOrObject classOrObject) {
PsiClass lightClass = LightClassUtil.INSTANCE.getPsiClass(classOrObject);
PsiClass lightClass = toLightClass(classOrObject);
if (lightClass != null) return lightClass;
// TODO: Remove this code when light classes are generated for builtins
@@ -31,7 +31,6 @@ import com.intellij.usageView.UsageInfo
import com.intellij.util.FilteredQuery
import com.intellij.util.Processor
import org.jetbrains.kotlin.asJava.KtLightMethod
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.findUsages.KotlinClassFindUsagesOptions
@@ -193,7 +192,7 @@ class KotlinFindClassUsagesHandler(
override fun getStringsToSearch(element: PsiElement): Collection<String> {
val psiClass = when (element) {
is PsiClass -> element
is KtClassOrObject -> LightClassUtil.getPsiClass(getElement())
is KtClassOrObject -> getElement().toLightClass()
else -> null
} ?: return Collections.emptyList()
@@ -35,6 +35,8 @@ import org.jetbrains.kotlin.psi.psiUtil.PsiUtilsKt;
import java.util.Map;
import static org.jetbrains.kotlin.asJava.LightClassUtilsKt.toLightClass;
public abstract class KotlinCallTreeStructure extends HierarchyTreeStructure {
protected final String scopeType;
@@ -102,7 +104,7 @@ public abstract class KotlinCallTreeStructure extends HierarchyTreeStructure {
}
if (element instanceof KtClassOrObject) {
PsiClass psiClass = LightClassUtil.INSTANCE.getPsiClass((KtClassOrObject) element);
PsiClass psiClass = toLightClass((KtClassOrObject) element);
if (psiClass == null) return null;
PsiMethod[] constructors = psiClass.getConstructors();
@@ -22,6 +22,7 @@ import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtNamedFunction
@@ -45,8 +46,8 @@ internal fun getPsiClass(element: PsiElement?): PsiClass? {
return when {
element == null -> null
element is PsiClass -> element
element is KtClass -> LightClassUtil.getPsiClass(element)
element.parent is KtClass -> LightClassUtil.getPsiClass(element.parent as KtClass)
element is KtClass -> element.toLightClass()
element.parent is KtClass -> (element.parent as KtClass).toLightClass()
else -> null
}
}
@@ -28,13 +28,16 @@ import com.intellij.openapi.project.DumbService
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import com.intellij.psi.search.searches.ClassInheritorsSearch
import com.intellij.util.NullableFunction
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.psi.psiUtil.isOverridable
import java.awt.event.MouseEvent
import java.util.*
@@ -141,7 +144,7 @@ private fun collectInheritedClassMarker(element: KtClass, result: MutableCollect
return
}
val lightClass = LightClassUtil.getPsiClass(element) ?: return
val lightClass = element.toLightClass() ?: return
if (ClassInheritorsSearch.search(lightClass, false).findFirst() == null) return
@@ -58,6 +58,7 @@ import com.intellij.util.VisibilityUtil
import com.intellij.util.containers.MultiMap
import org.jetbrains.kotlin.asJava.KtLightMethod
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind
@@ -548,8 +549,7 @@ fun createJavaClass(klass: KtClass, targetClass: PsiClass?, forcePlainClass: Boo
}
val javaClass = (targetClass?.add(javaClassToAdd) ?: javaClassToAdd) as PsiClass
val template = LightClassUtil.getPsiClass(klass)
?: throw AssertionError("Can't generate light class: ${klass.getElementTextWithContext()}")
val template = klass.toLightClass() ?: throw AssertionError("Can't generate light class: ${klass.getElementTextWithContext()}")
copyModifierListItems(template.modifierList!!, javaClass.modifierList!!)
if (template.isInterface) {
@@ -24,13 +24,13 @@ import com.intellij.refactoring.RefactoringBundle
import com.intellij.refactoring.rename.naming.AutomaticRenamer
import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory
import com.intellij.usageView.UsageInfo
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.psi.KtClass
class AutomaticInheritorRenamer(klass: KtClass, newName: String): AutomaticRenamer() {
init {
val lightClass = LightClassUtil.getPsiClass(klass)
val lightClass = klass.toLightClass()
if (lightClass != null) {
for (inheritorLightClass in ClassInheritorsSearch.search(lightClass, true).findAll()) {
if ((inheritorLightClass.unwrapped as? PsiNamedElement)?.name != null) {
@@ -28,7 +28,7 @@ import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.psi.KtClass
@@ -141,7 +141,7 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
val owner = PsiTreeUtil.getParentOfType(function, KtFunction::class.java, KtClass::class.java)
if (owner is KtClass) {
val delegate = LightClassUtil.getPsiClass(owner) ?: return null
val delegate = owner.toLightClass() ?: return null
val method = delegate.methods.firstOrNull() { it.navigationElement == function } ?: return null
val methodLocation = PsiLocation.fromPsiElement(method)
if (JUnitUtil.isTestMethod(methodLocation, false)) {
@@ -157,14 +157,11 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
if (!jetClass.isJUnitTestClass()) {
jetClass = getTestClassInFile(containingFile)
}
if (jetClass != null) {
return LightClassUtil.getPsiClass(jetClass)
}
return null
return jetClass?.toLightClass()
}
private fun KtClass?.isJUnitTestClass() =
LightClassUtil.getPsiClass(this)?.let { JUnitUtil.isTestClass(it, false, true) } ?: false
this?.toLightClass()?.let { JUnitUtil.isTestClass(it, false, true) } ?: false
private fun getTestClassInFile(jetFile: KtFile) =
jetFile.declarations.filterIsInstance<KtClass>().singleOrNull { it.isJUnitTestClass() }
@@ -36,7 +36,6 @@ import com.theoryinpractice.testng.util.TestNGUtil;
import kotlin.collections.CollectionsKt;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.asJava.LightClassUtil;
import org.jetbrains.kotlin.asJava.LightClassUtilsKt;
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil;
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil;
@@ -44,6 +43,8 @@ import org.jetbrains.kotlin.psi.*;
import java.util.List;
import static org.jetbrains.kotlin.asJava.LightClassUtilsKt.toLightClass;
public class KotlinTestNgConfigurationProducer extends TestNGConfigurationProducer {
@Override
public boolean shouldReplace(ConfigurationFromContext self, ConfigurationFromContext other) {
@@ -88,7 +89,7 @@ public class KotlinTestNgConfigurationProducer extends TestNGConfigurationProduc
KtElement owner = PsiTreeUtil.getParentOfType(function, KtFunction.class, KtClass.class);
if (owner instanceof KtClass) {
PsiClass delegate = LightClassUtil.INSTANCE.getPsiClass((KtClass) owner);
PsiClass delegate = toLightClass((KtClass) owner);
if (delegate != null) {
for (PsiMethod method : delegate.getMethods()) {
if (method.getNavigationElement() == function) {
@@ -103,7 +104,7 @@ public class KotlinTestNgConfigurationProducer extends TestNGConfigurationProduc
}
if (declarationToRun instanceof KtClass) {
PsiClass delegate = LightClassUtil.INSTANCE.getPsiClass((KtClassOrObject) declarationToRun);
PsiClass delegate = toLightClass((KtClassOrObject) declarationToRun);
if (!isTestNGClass(delegate)) {
return false;
}
@@ -29,6 +29,7 @@ import com.intellij.util.Processor
import com.intellij.util.QueryExecutor
import com.intellij.util.indexing.FileBasedIndex
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.stubindex.KotlinAnnotationsIndex
import org.jetbrains.kotlin.idea.util.application.runReadAction
@@ -45,7 +46,7 @@ class KotlinAnnotatedElementsSearcher : QueryExecutor<PsiModifierListOwner, Anno
return processAnnotatedMembers(p.annotationClass, p.scope) { declaration ->
when (declaration) {
is KtClass -> {
val lightClass = LightClassUtil.getPsiClass(declaration)
val lightClass = declaration.toLightClass()
consumer.process(lightClass)
}
is KtNamedFunction, is KtSecondaryConstructor -> {
@@ -21,7 +21,7 @@ import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.searches.ClassesWithAnnotatedMembersSearch
import com.intellij.psi.search.searches.ScopedQueryExecutor
import com.intellij.util.Processor
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.search.allScope
import org.jetbrains.kotlin.psi.KtClassOrObject
@@ -39,7 +39,7 @@ class KotlinClassesWithAnnotatedMembersSearcher : ScopedQueryExecutor<PsiClass,
{ it.getNonStrictParentOfType<KtClassOrObject>() !in processed}) { declaration ->
val ktClass = declaration.getNonStrictParentOfType<KtClassOrObject>()
if (ktClass != null && processed.add(ktClass)) {
val lightClass = LightClassUtil.getPsiClass(ktClass)
val lightClass = ktClass.toLightClass()
if (lightClass != null) consumer.process(lightClass) else true
}
else
@@ -36,6 +36,8 @@ import org.jetbrains.kotlin.psi.*;
import java.util.ArrayList;
import java.util.List;
import static org.jetbrains.kotlin.asJava.LightClassUtilsKt.toLightClass;
public class KotlinDefinitionsSearcher implements QueryExecutor<PsiElement, DefinitionsScopedSearch.SearchParameters> {
@Override
public boolean execute(@NotNull DefinitionsScopedSearch.SearchParameters queryParameters, @NotNull Processor<PsiElement> consumer) {
@@ -82,11 +84,11 @@ public class KotlinDefinitionsSearcher implements QueryExecutor<PsiElement, Defi
return element instanceof KtLightMethod && ((KtLightMethod) element).isDelegated();
}
private static boolean processClassImplementations(final KtClass klass, Processor<PsiElement> consumer) {
private static boolean processClassImplementations(@NotNull final KtClass klass, Processor<PsiElement> consumer) {
PsiClass psiClass = ApplicationManager.getApplication().runReadAction(new Computable<PsiClass>() {
@Override
public PsiClass compute() {
return LightClassUtil.INSTANCE.getPsiClass(klass);
return toLightClass(klass);
}
});
if (psiClass != null) {