From 55612757cf55051d34fedc23ae220309702da5be Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 5 Nov 2015 23:12:24 +0300 Subject: [PATCH] More correct API --- .../caches/resolve/JavaResolveExtension.kt | 65 +++++++++---------- 1 file changed, 32 insertions(+), 33 deletions(-) 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 053a9467182..f5b088a84c5 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 @@ -31,61 +31,60 @@ import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.scopes.MemberScope -private fun PsiElement.getJavaDescriptorResolver(): JavaDescriptorResolver? { - if (!ProjectRootsUtil.isInProjectOrLibraryClassFile(this)) return null - - @Suppress("DEPRECATION") - return KotlinCacheService.getInstance(project).getProjectService(JvmPlatform, this.getModuleInfo(), javaClass()) -} - -fun PsiMethod.getJavaMethodDescriptor(): FunctionDescriptor? { - val method = getOriginalElement() as? PsiMethod ?: return null - if (method.containingClass == null || !Name.isValidIdentifier(method.getName())) return null - val resolver = method.getJavaDescriptorResolver() +@JvmOverloads +fun PsiMethod.getJavaMethodDescriptor(resolutionFacade: ResolutionFacade? = null): FunctionDescriptor? { + val method = originalElement as? PsiMethod ?: return null + if (method.containingClass == null || !Name.isValidIdentifier(method.name)) return null + val resolver = method.getJavaDescriptorResolver(resolutionFacade) return when { - method.isConstructor() -> resolver?.resolveConstructor(JavaConstructorImpl(method)) + method.isConstructor -> resolver?.resolveConstructor(JavaConstructorImpl(method)) else -> resolver?.resolveMethod(JavaMethodImpl(method)) } } -fun PsiMethod.getJavaMethodDescriptor(resolutionFacade: ResolutionFacade): FunctionDescriptor? { - val method = originalElement as? PsiMethod ?: return null - if (method.containingClass == null || !Name.isValidIdentifier(method.name)) return null - val resolver = resolutionFacade.getFrontendService(method, JavaDescriptorResolver::class.java) - return when { - method.isConstructor -> resolver.resolveConstructor(JavaConstructorImpl(method)) - else -> resolver.resolveMethod(JavaMethodImpl(method)) - } -} - -fun PsiClass.getJavaClassDescriptor(): ClassDescriptor? { +@JvmOverloads +fun PsiClass.getJavaClassDescriptor(resolutionFacade: ResolutionFacade? = null): ClassDescriptor? { val psiClass = originalElement as? PsiClass ?: return null - return psiClass.getJavaDescriptorResolver()?.resolveClass(JavaClassImpl(psiClass)) + return psiClass.getJavaDescriptorResolver(resolutionFacade)?.resolveClass(JavaClassImpl(psiClass)) } -fun PsiField.getJavaFieldDescriptor(): PropertyDescriptor? { +@JvmOverloads +fun PsiField.getJavaFieldDescriptor(resolutionFacade: ResolutionFacade? = null): PropertyDescriptor? { val field = originalElement as? PsiField ?: return null - return field.getJavaDescriptorResolver()?.resolveField(JavaFieldImpl(field)) + return field.getJavaDescriptorResolver(resolutionFacade)?.resolveField(JavaFieldImpl(field)) } -fun PsiMember.getJavaMemberDescriptor(): DeclarationDescriptor? { +@JvmOverloads +fun PsiMember.getJavaMemberDescriptor(resolutionFacade: ResolutionFacade? = null): DeclarationDescriptor? { return when (this) { - is PsiClass -> getJavaClassDescriptor() - is PsiMethod -> getJavaMethodDescriptor() - is PsiField -> getJavaFieldDescriptor() + is PsiClass -> getJavaClassDescriptor(resolutionFacade) + is PsiMethod -> getJavaMethodDescriptor(resolutionFacade) + is PsiField -> getJavaFieldDescriptor(resolutionFacade) else -> null } } -public fun JavaDescriptorResolver.resolveMethod(method: JavaMethod): FunctionDescriptor? { +private fun PsiElement.getJavaDescriptorResolver(resolutionFacade: ResolutionFacade?): JavaDescriptorResolver? { + if (resolutionFacade != null) { + return resolutionFacade.getFrontendService(this, JavaDescriptorResolver::class.java) + } + else { + if (!ProjectRootsUtil.isInProjectOrLibraryClassFile(this)) return null + + @Suppress("DEPRECATION") + return KotlinCacheService.getInstance(project).getProjectService(JvmPlatform, this.getModuleInfo(), JavaDescriptorResolver::class.java) + } +} + +private fun JavaDescriptorResolver.resolveMethod(method: JavaMethod): FunctionDescriptor? { return getContainingScope(method)?.getContributedFunctions(method.name, NoLookupLocation.FROM_IDE)?.findByJavaElement(method) } -public fun JavaDescriptorResolver.resolveConstructor(constructor: JavaConstructor): ConstructorDescriptor? { +private fun JavaDescriptorResolver.resolveConstructor(constructor: JavaConstructor): ConstructorDescriptor? { return resolveClass(constructor.getContainingClass())?.getConstructors()?.findByJavaElement(constructor) } -public fun JavaDescriptorResolver.resolveField(field: JavaField): PropertyDescriptor? { +private fun JavaDescriptorResolver.resolveField(field: JavaField): PropertyDescriptor? { return getContainingScope(field)?.getContributedVariables(field.name, NoLookupLocation.FROM_IDE)?.findByJavaElement(field) as? PropertyDescriptor }