From edeea5e3997cfde2fa7cf3573c5137eea6b44c9b Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 15 May 2015 15:22:43 +0300 Subject: [PATCH] Refactoring: move JavaDescriptorResolver extensions to idea-analysis module --- .../resolve/jvm/JavaDescriptorResolver.kt | 29 +---------- .../caches/resolve/JavaResolveExtension.kt | 48 +++++++++++++------ .../KotlinSignatureAnnotationIntention.java | 8 ++-- .../KotlinSignatureInJavaMarkerProvider.java | 8 ++-- 4 files changed, 43 insertions(+), 50 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JavaDescriptorResolver.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JavaDescriptorResolver.kt index b6c529c77fe..e37bbf7ad6a 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JavaDescriptorResolver.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JavaDescriptorResolver.kt @@ -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 Collection.findByJavaElement(javaElement: JavaElement): T? { - return firstOrNull { - member -> - (member.getSource() as? JavaSourceElement)?.javaElement == javaElement - } -} +} \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JavaResolveExtension.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JavaResolveExtension.kt index b17c9a20bb7..d7cd9d447bd 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JavaResolveExtension.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JavaResolveExtension.kt @@ -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> { override val platform: TargetPlatform = TargetPlatform.JVM @@ -90,4 +83,31 @@ fun PsiMember.getJavaMemberDescriptor(): DeclarationDescriptor? { is PsiField -> getJavaFieldDescriptor() else -> null } -} \ No newline at end of file +} + +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 Collection.findByJavaElement(javaElement: JavaElement): T? { + return firstOrNull { + member -> + (member.getSource() as? JavaSourceElement)?.javaElement == javaElement + } +} diff --git a/idea/src/org/jetbrains/kotlin/idea/ktSignature/KotlinSignatureAnnotationIntention.java b/idea/src/org/jetbrains/kotlin/idea/ktSignature/KotlinSignatureAnnotationIntention.java index 18c50e0fe8d..f5fcc6e7313 100644 --- a/idea/src/org/jetbrains/kotlin/idea/ktSignature/KotlinSignatureAnnotationIntention.java +++ b/idea/src/org/jetbrains/kotlin/idea/ktSignature/KotlinSignatureAnnotationIntention.java @@ -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); } diff --git a/idea/src/org/jetbrains/kotlin/idea/ktSignature/KotlinSignatureInJavaMarkerProvider.java b/idea/src/org/jetbrains/kotlin/idea/ktSignature/KotlinSignatureInJavaMarkerProvider.java index 657a390f1d7..33ddf09bb07 100644 --- a/idea/src/org/jetbrains/kotlin/idea/ktSignature/KotlinSignatureInJavaMarkerProvider.java +++ b/idea/src/org/jetbrains/kotlin/idea/ktSignature/KotlinSignatureInJavaMarkerProvider.java @@ -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; }