Properly load Java classes as packages

This commit is contained in:
Andrey Breslav
2013-10-23 14:14:25 +04:00
parent 521c203f76
commit eb56550c54
2 changed files with 8 additions and 4 deletions
@@ -8,6 +8,7 @@ import org.jetbrains.jet.lang.resolve.java.structure.JavaClass
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaPackage
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaClass
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver
public open class LazyJavaSubModule(
private val outerContext: GlobalJavaResolverContext,
@@ -29,7 +30,7 @@ public open class LazyJavaSubModule(
}
else {
val jClass = c.finder.findClass(fqName)
if (jClass != null && (jClass.getOuterClass() == null || jClass.isStatic())) {
if (jClass != null && JavaNamespaceResolver.hasStaticMembers(jClass)) {
LazyPackageFragmentForJavaClass(c, findParent(fqName), jClass)
}
else null
@@ -11,6 +11,7 @@ import org.jetbrains.jet.lang.resolve.java.structure.JavaPackage
import org.jetbrains.jet.lang.resolve.name.FqName
import org.jetbrains.jet.utils.flatten
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver
public abstract class LazyJavaPackageFragmentScope(
c: LazyJavaResolverContext,
@@ -55,7 +56,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun getAllPackageNames(): Collection<Name> =
listOf(
jPackage.getClasses().map { c -> c.getName() },
jPackage.getClasses().iterator().filter { c -> JavaNamespaceResolver.hasStaticMembers(c) }.map { c -> c.getName() }.toList(),
jPackage.getSubPackages().map { sp -> sp.getFqName().shortName() }
).flatten()
@@ -73,8 +74,10 @@ public class LazyPackageFragmentScopeForJavaClass(
packageFragment: LazyJavaPackageFragment
) : LazyJavaPackageFragmentScope(c, packageFragment) {
override fun getAllClassNames(): Collection<Name> = jClass.getInnerClasses().map { c -> c.getName() }
override fun getAllPackageNames(): Collection<Name> = jClass.getInnerClasses().filter { c -> c.isStatic() }.map { c -> c.getName() }
override fun getAllClassNames(): Collection<Name> = listOf() // nested classes are loaded as members of their outer classes, not packages
override fun getAllPackageNames(): Collection<Name> = jClass.getInnerClasses().iterator()
.filter { c -> c.isStatic() && JavaNamespaceResolver.hasStaticMembers(c) }
.map { c -> c.getName() }.toList()
// TODO
override fun getProperties(name: Name): Collection<VariableDescriptor> = Collections.emptyList()