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) {
return lazyJavaPackageFragmentProvider.getPackageFragment(fqName);
}
@Nullable
public PackageFragmentDescriptor getPackageFragment(@NotNull JavaClass javaClass) {
return lazyJavaPackageFragmentProvider.getPackageFragment(javaClass);
}
}
@@ -61,9 +61,8 @@ public class LazyJavaPackageFragmentProvider(
}
else {
val jClass = c.findJavaClass(fqName)
if (jClass != null && DescriptorResolverUtils.hasStaticMembers(jClass)) {
val correspondingClass = c.javaClassResolver.resolveClass(jClass)
if (correspondingClass != null) LazyPackageFragmentForJavaClass(c, _module, jClass) else null
if (jClass != null) {
packageFragmentsForClasses(jClass)
}
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)
fun getPackageFragment(javaClass: JavaClass) = packageFragmentsForClasses(javaClass)
override fun getPackageFragments(fqName: FqName) = getPackageFragment(fqName)?.let {listOf(it)}.orEmpty()