More correct API
This commit is contained in:
+32
-33
@@ -31,61 +31,60 @@ import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
|||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
|
|
||||||
private fun PsiElement.getJavaDescriptorResolver(): JavaDescriptorResolver? {
|
@JvmOverloads
|
||||||
if (!ProjectRootsUtil.isInProjectOrLibraryClassFile(this)) return null
|
fun PsiMethod.getJavaMethodDescriptor(resolutionFacade: ResolutionFacade? = null): FunctionDescriptor? {
|
||||||
|
val method = originalElement as? PsiMethod ?: return null
|
||||||
@Suppress("DEPRECATION")
|
if (method.containingClass == null || !Name.isValidIdentifier(method.name)) return null
|
||||||
return KotlinCacheService.getInstance(project).getProjectService(JvmPlatform, this.getModuleInfo(), javaClass<JavaDescriptorResolver>())
|
val resolver = method.getJavaDescriptorResolver(resolutionFacade)
|
||||||
}
|
|
||||||
|
|
||||||
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()
|
|
||||||
return when {
|
return when {
|
||||||
method.isConstructor() -> resolver?.resolveConstructor(JavaConstructorImpl(method))
|
method.isConstructor -> resolver?.resolveConstructor(JavaConstructorImpl(method))
|
||||||
else -> resolver?.resolveMethod(JavaMethodImpl(method))
|
else -> resolver?.resolveMethod(JavaMethodImpl(method))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiMethod.getJavaMethodDescriptor(resolutionFacade: ResolutionFacade): FunctionDescriptor? {
|
@JvmOverloads
|
||||||
val method = originalElement as? PsiMethod ?: return null
|
fun PsiClass.getJavaClassDescriptor(resolutionFacade: ResolutionFacade? = null): ClassDescriptor? {
|
||||||
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? {
|
|
||||||
val psiClass = originalElement as? PsiClass ?: return null
|
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
|
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) {
|
return when (this) {
|
||||||
is PsiClass -> getJavaClassDescriptor()
|
is PsiClass -> getJavaClassDescriptor(resolutionFacade)
|
||||||
is PsiMethod -> getJavaMethodDescriptor()
|
is PsiMethod -> getJavaMethodDescriptor(resolutionFacade)
|
||||||
is PsiField -> getJavaFieldDescriptor()
|
is PsiField -> getJavaFieldDescriptor(resolutionFacade)
|
||||||
else -> null
|
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)
|
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)
|
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
|
return getContainingScope(field)?.getContributedVariables(field.name, NoLookupLocation.FROM_IDE)?.findByJavaElement(field) as? PropertyDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user