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.descriptors.ClassDescriptor
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaPackage 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.lazy.descriptors.LazyPackageFragmentForJavaClass
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver
public open class LazyJavaSubModule( public open class LazyJavaSubModule(
private val outerContext: GlobalJavaResolverContext, private val outerContext: GlobalJavaResolverContext,
@@ -29,7 +30,7 @@ public open class LazyJavaSubModule(
} }
else { else {
val jClass = c.finder.findClass(fqName) 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) LazyPackageFragmentForJavaClass(c, findParent(fqName), jClass)
} }
else null 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.lang.resolve.name.FqName
import org.jetbrains.jet.utils.flatten import org.jetbrains.jet.utils.flatten
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass import org.jetbrains.jet.lang.resolve.java.structure.JavaClass
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver
public abstract class LazyJavaPackageFragmentScope( public abstract class LazyJavaPackageFragmentScope(
c: LazyJavaResolverContext, c: LazyJavaResolverContext,
@@ -55,7 +56,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun getAllPackageNames(): Collection<Name> = override fun getAllPackageNames(): Collection<Name> =
listOf( 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() } jPackage.getSubPackages().map { sp -> sp.getFqName().shortName() }
).flatten() ).flatten()
@@ -73,8 +74,10 @@ public class LazyPackageFragmentScopeForJavaClass(
packageFragment: LazyJavaPackageFragment packageFragment: LazyJavaPackageFragment
) : LazyJavaPackageFragmentScope(c, packageFragment) { ) : LazyJavaPackageFragmentScope(c, packageFragment) {
override fun getAllClassNames(): Collection<Name> = jClass.getInnerClasses().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().filter { c -> c.isStatic() }.map { c -> c.getName() } override fun getAllPackageNames(): Collection<Name> = jClass.getInnerClasses().iterator()
.filter { c -> c.isStatic() && JavaNamespaceResolver.hasStaticMembers(c) }
.map { c -> c.getName() }.toList()
// TODO // TODO
override fun getProperties(name: Name): Collection<VariableDescriptor> = Collections.emptyList() override fun getProperties(name: Name): Collection<VariableDescriptor> = Collections.emptyList()