Refactoring: move JavaDescriptorResolver extensions to idea-analysis module

This commit is contained in:
Nikolay Krasko
2015-05-15 15:22:43 +03:00
parent ea789845aa
commit edeea5e399
4 changed files with 43 additions and 50 deletions
@@ -29,31 +29,4 @@ public class JavaDescriptorResolver(public val packageFragmentProvider: LazyJava
public fun resolveClass(javaClass: JavaClass): ClassDescriptor? {
return packageFragmentProvider.getClass(javaClass)
}
}
public fun JavaDescriptorResolver.resolveMethod(method: JavaMethod): FunctionDescriptor? {
return getContainingScope(method)?.getFunctions(method.getName())?.findByJavaElement(method)
}
public fun JavaDescriptorResolver.resolveConstructor(constructor: JavaConstructor): ConstructorDescriptor? {
return resolveClass(constructor.getContainingClass())?.getConstructors()?.findByJavaElement(constructor)
}
public fun JavaDescriptorResolver.resolveField(field: JavaField): PropertyDescriptor? {
return getContainingScope(field)?.getProperties(field.getName())?.findByJavaElement(field) as? PropertyDescriptor
}
private fun JavaDescriptorResolver.getContainingScope(member: JavaMember): JetScope? {
val containingClass = resolveClass(member.getContainingClass())
return if (member.isStatic())
containingClass?.getStaticScope()
else
containingClass?.getDefaultType()?.getMemberScope()
}
private fun <T : DeclarationDescriptorWithSource> Collection<T>.findByJavaElement(javaElement: JavaElement): T? {
return firstOrNull {
member ->
(member.getSource() as? JavaSourceElement)?.javaElement == javaElement
}
}
}
@@ -18,26 +18,19 @@ package org.jetbrains.kotlin.idea.caches.resolve
import org.jetbrains.kotlin.idea.project.TargetPlatform
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.resolve.jvm.JvmResolverForModule
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
import org.jetbrains.kotlin.resolve.BindingContext
import com.intellij.psi.PsiMethod
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.asJava.KotlinLightMethod
import org.jetbrains.kotlin.resolve.jvm.resolveMethod
import org.jetbrains.kotlin.load.java.structure.impl.JavaMethodImpl
import org.jetbrains.kotlin.load.java.structure.impl.JavaConstructorImpl
import org.jetbrains.kotlin.resolve.jvm.resolveConstructor
import com.intellij.psi.PsiClass
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
import com.intellij.psi.PsiField
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.resolve.jvm.resolveField
import org.jetbrains.kotlin.load.java.structure.impl.JavaFieldImpl
import com.intellij.psi.PsiMember
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.load.java.sources.JavaSourceElement
import org.jetbrains.kotlin.load.java.structure.*
import org.jetbrains.kotlin.load.java.structure.impl.*
import org.jetbrains.kotlin.resolve.jvm.*
import org.jetbrains.kotlin.resolve.scopes.JetScope
public object JavaResolveExtension : CacheExtension<(PsiElement) -> Pair<JavaDescriptorResolver, BindingContext>> {
override val platform: TargetPlatform = TargetPlatform.JVM
@@ -90,4 +83,31 @@ fun PsiMember.getJavaMemberDescriptor(): DeclarationDescriptor? {
is PsiField -> getJavaFieldDescriptor()
else -> null
}
}
}
public fun JavaDescriptorResolver.resolveMethod(method: JavaMethod): FunctionDescriptor? {
return getContainingScope(method)?.getFunctions(method.getName())?.findByJavaElement(method)
}
public fun JavaDescriptorResolver.resolveConstructor(constructor: JavaConstructor): ConstructorDescriptor? {
return resolveClass(constructor.getContainingClass())?.getConstructors()?.findByJavaElement(constructor)
}
public fun JavaDescriptorResolver.resolveField(field: JavaField): PropertyDescriptor? {
return getContainingScope(field)?.getProperties(field.getName())?.findByJavaElement(field) as? PropertyDescriptor
}
private fun JavaDescriptorResolver.getContainingScope(member: JavaMember): JetScope? {
val containingClass = resolveClass(member.getContainingClass())
return if (member.isStatic())
containingClass?.getStaticScope()
else
containingClass?.getDefaultType()?.getMemberScope()
}
private fun <T : DeclarationDescriptorWithSource> Collection<T>.findByJavaElement(javaElement: JavaElement): T? {
return firstOrNull {
member ->
(member.getSource() as? JavaSourceElement)?.javaElement == javaElement
}
}
@@ -39,6 +39,7 @@ import org.jetbrains.kotlin.descriptors.VariableDescriptor;
import org.jetbrains.kotlin.idea.JetBundle;
import org.jetbrains.kotlin.idea.JetIcons;
import org.jetbrains.kotlin.idea.caches.resolve.JavaResolveExtension;
import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage;
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers;
import org.jetbrains.kotlin.load.java.structure.impl.JavaConstructorImpl;
import org.jetbrains.kotlin.load.java.structure.impl.JavaFieldImpl;
@@ -47,7 +48,6 @@ import org.jetbrains.kotlin.renderer.DescriptorRenderer;
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder;
import org.jetbrains.kotlin.renderer.NameShortness;
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver;
import org.jetbrains.kotlin.resolve.jvm.JvmPackage;
import javax.swing.*;
@@ -155,12 +155,12 @@ public class KotlinSignatureAnnotationIntention extends BaseIntentionAction impl
PsiMethod psiMethod = (PsiMethod) analyzableAnnotationOwner;
if (psiMethod.isConstructor()) {
ConstructorDescriptor constructorDescriptor =
JvmPackage.resolveConstructor(javaDescriptorResolver, new JavaConstructorImpl(psiMethod));
ResolvePackage.resolveConstructor(javaDescriptorResolver, new JavaConstructorImpl(psiMethod));
assert constructorDescriptor != null: "Couldn't find constructor descriptor for " + renderMember(psiMethod);
return getDefaultConstructorAnnotation(constructorDescriptor);
}
else {
FunctionDescriptor functionDescriptor = JvmPackage.resolveMethod(javaDescriptorResolver, new JavaMethodImpl(psiMethod));
FunctionDescriptor functionDescriptor = ResolvePackage.resolveMethod(javaDescriptorResolver, new JavaMethodImpl(psiMethod));
assert functionDescriptor != null: "Couldn't find function descriptor for " + renderMember(psiMethod);
return RENDERER.render(functionDescriptor);
}
@@ -168,7 +168,7 @@ public class KotlinSignatureAnnotationIntention extends BaseIntentionAction impl
if (analyzableAnnotationOwner instanceof PsiField) {
VariableDescriptor variableDescriptor =
JvmPackage.resolveField(javaDescriptorResolver, new JavaFieldImpl((PsiField) analyzableAnnotationOwner));
ResolvePackage.resolveField(javaDescriptorResolver, new JavaFieldImpl((PsiField) analyzableAnnotationOwner));
assert variableDescriptor != null : "Couldn't find variable descriptor for field " + renderMember(analyzableAnnotationOwner);
return RENDERER.render(variableDescriptor);
}
@@ -41,6 +41,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.idea.JetIcons;
import org.jetbrains.kotlin.idea.caches.resolve.JavaResolveExtension;
import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage;
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil;
import org.jetbrains.kotlin.idea.util.attachment.AttachmentPackage;
import org.jetbrains.kotlin.load.java.JavaBindingContext;
@@ -49,7 +50,6 @@ import org.jetbrains.kotlin.load.java.structure.impl.JavaFieldImpl;
import org.jetbrains.kotlin.load.java.structure.impl.JavaMethodImpl;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver;
import org.jetbrains.kotlin.resolve.jvm.JvmPackage;
import java.awt.event.MouseEvent;
import java.util.Collection;
@@ -148,14 +148,14 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
if (member instanceof PsiMethod) {
PsiMethod method = (PsiMethod) member;
if (method.isConstructor()) {
return JvmPackage.resolveConstructor(javaDescriptorResolver, new JavaConstructorImpl(method));
return ResolvePackage.resolveConstructor(javaDescriptorResolver, new JavaConstructorImpl(method));
}
else {
return JvmPackage.resolveMethod(javaDescriptorResolver, new JavaMethodImpl(method));
return ResolvePackage.resolveMethod(javaDescriptorResolver, new JavaMethodImpl(method));
}
}
else if (member instanceof PsiField) {
return JvmPackage.resolveField(javaDescriptorResolver, new JavaFieldImpl((PsiField) member));
return ResolvePackage.resolveField(javaDescriptorResolver, new JavaFieldImpl((PsiField) member));
}
return null;
}