Provide access to package fragments generated for static members of Java classes

This commit is contained in:
Andrey Breslav
2014-05-13 17:50:03 +04:00
parent 87750d633c
commit 64f0a8d420
2 changed files with 17 additions and 3 deletions
@@ -65,4 +65,9 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
public PackageFragmentDescriptor getPackageFragment(@NotNull FqName fqName) { public PackageFragmentDescriptor getPackageFragment(@NotNull FqName fqName) {
return lazyJavaPackageFragmentProvider.getPackageFragment(fqName); return lazyJavaPackageFragmentProvider.getPackageFragment(fqName);
} }
@Nullable
public PackageFragmentDescriptor getPackageFragment(@NotNull JavaClass javaClass) {
return lazyJavaPackageFragmentProvider.getPackageFragment(javaClass);
}
} }
@@ -61,9 +61,8 @@ public class LazyJavaPackageFragmentProvider(
} }
else { else {
val jClass = c.findJavaClass(fqName) val jClass = c.findJavaClass(fqName)
if (jClass != null && DescriptorResolverUtils.hasStaticMembers(jClass)) { if (jClass != null) {
val correspondingClass = c.javaClassResolver.resolveClass(jClass) packageFragmentsForClasses(jClass)
if (correspondingClass != null) LazyPackageFragmentForJavaClass(c, _module, jClass) else null
} }
else null else null
} }
@@ -85,7 +84,17 @@ public class LazyJavaPackageFragmentProvider(
) )
} }
private val packageFragmentsForClasses: MemoizedFunctionToNullable<JavaClass, LazyPackageFragmentForJavaClass> = c.storageManager.createMemoizedFunctionWithNullableValues {
jClass ->
if (DescriptorResolverUtils.hasStaticMembers(jClass)) {
val correspondingClass = c.javaClassResolver.resolveClass(jClass)
if (correspondingClass != null) LazyPackageFragmentForJavaClass(c, _module, jClass) else null
}
else null
}
override fun getPackageFragment(fqName: FqName) = _packageFragments(fqName) override fun getPackageFragment(fqName: FqName) = _packageFragments(fqName)
fun getPackageFragment(javaClass: JavaClass) = packageFragmentsForClasses(javaClass)
override fun getPackageFragments(fqName: FqName) = getPackageFragment(fqName)?.let {listOf(it)}.orEmpty() override fun getPackageFragments(fqName: FqName) = getPackageFragment(fqName)?.let {listOf(it)}.orEmpty()