Utilities to resolve Java methods and fields
This commit is contained in:
+37
-2
@@ -19,10 +19,17 @@ package org.jetbrains.jet.lang.resolve.java
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
|
||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
|
||||
import org.jetbrains.jet.lang.descriptors.PackageFragmentProvider
|
||||
import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaPackageFragmentProvider
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass
|
||||
import org.jetbrains.jet.lang.resolve.name.Name
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaField
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaMember
|
||||
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.jet.lang.resolve.java.sources.JavaSourceElement
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaElement
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorWithSource
|
||||
|
||||
public class JavaDescriptorResolver(public val packageFragmentProvider: LazyJavaPackageFragmentProvider, private val module: ModuleDescriptor) {
|
||||
public fun resolveClass(javaClass: JavaClass): ClassDescriptor? {
|
||||
@@ -37,3 +44,31 @@ public class JavaDescriptorResolver(public val packageFragmentProvider: LazyJava
|
||||
public val JAVA_ROOT: Name = Name.special("<java_root>")
|
||||
}
|
||||
}
|
||||
|
||||
public fun JavaDescriptorResolver.resolveMethod(method: JavaMethod): FunctionDescriptor? {
|
||||
val functions = if (method.isConstructor())
|
||||
resolveClass(method.getContainingClass())?.getConstructors()
|
||||
else
|
||||
getContainingScope(method)?.getFunctions(method.getName())
|
||||
|
||||
return functions?.findByJavaElement(method)
|
||||
}
|
||||
|
||||
public fun JavaDescriptorResolver.resolveField(field: JavaField): PropertyDescriptor? {
|
||||
return getContainingScope(field)?.getProperties(field.getName())?.findByJavaElement(field) as? PropertyDescriptor
|
||||
}
|
||||
|
||||
private fun JavaDescriptorResolver.getContainingScope(method: JavaMember): JetScope? {
|
||||
val containingClass = method.getContainingClass()
|
||||
return if (method.isStatic())
|
||||
getPackageFragment(containingClass)?.getMemberScope()
|
||||
else
|
||||
resolveClass(containingClass)?.getDefaultType()?.getMemberScope()
|
||||
}
|
||||
|
||||
private fun <T : DeclarationDescriptorWithSource> Collection<T>.findByJavaElement(javaElement: JavaElement): T? {
|
||||
return firstOrNull {
|
||||
member ->
|
||||
(member.getSource() as? JavaSourceElement)?.javaElement == javaElement
|
||||
}
|
||||
}
|
||||
|
||||
+6
-2
@@ -19,6 +19,10 @@ package org.jetbrains.jet.lang.resolve.java.sources
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaElement
|
||||
import org.jetbrains.jet.lang.descriptors.SourceElement
|
||||
|
||||
trait JavaSourceElementFactory {
|
||||
fun source(javaElement: JavaElement): SourceElement
|
||||
public trait JavaSourceElementFactory {
|
||||
public fun source(javaElement: JavaElement): JavaSourceElement
|
||||
}
|
||||
|
||||
public trait JavaSourceElement: SourceElement {
|
||||
public val javaElement: JavaElement
|
||||
}
|
||||
Reference in New Issue
Block a user