diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java index b7fa7d7e7b5..24a60b1d29e 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java @@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor; import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor; +import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils; import org.jetbrains.jet.lang.resolve.java.structure.*; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; @@ -61,7 +62,7 @@ public final class DescriptorResolverUtils { return false; } - public static boolean isCompiledKotlinClassOrPackageClass(@NotNull JavaClass javaClass) { + private static boolean isCompiledKotlinClassOrPackageClass(@NotNull JavaClass javaClass) { return isCompiledKotlinClass(javaClass) || isCompiledKotlinPackageClass(javaClass); } @@ -341,4 +342,33 @@ public final class DescriptorResolverUtils { JavaPackageFragmentProvider provider = ((JavaPackageFragmentDescriptor) packageFragment).getProvider(); return provider.getOrCreatePackage(getFQName(javaClass).toSafe()); } + + public static boolean isJavaClassVisibleAsPackage(@NotNull JavaClass javaClass) { + return !isCompiledKotlinClassOrPackageClass(javaClass) && hasStaticMembers(javaClass); + } + + private static boolean hasStaticMembers(@NotNull JavaClass javaClass) { + for (JavaMethod method : javaClass.getMethods()) { + if (method.isStatic() && !shouldBeInEnumClassObject(method)) { + return true; + } + } + + for (JavaField field : javaClass.getFields()) { + if (field.isStatic() && !field.isEnumEntry()) { + return true; + } + } + + for (JavaClass nestedClass : javaClass.getInnerClasses()) { + if (SingleAbstractMethodUtils.isSamInterface(nestedClass)) { + return true; + } + if (nestedClass.isStatic() && hasStaticMembers(nestedClass)) { + return true; + } + } + + return false; + } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java index 5a918f2e16a..2374b14f86b 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java @@ -22,18 +22,14 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; -import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentProvider; import org.jetbrains.jet.lang.resolve.java.JavaClassFinder; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor; -import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils; import org.jetbrains.jet.lang.resolve.java.scope.JavaClassStaticMembersScope; import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageScope; import org.jetbrains.jet.lang.resolve.java.structure.JavaClass; -import org.jetbrains.jet.lang.resolve.java.structure.JavaField; -import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod; import org.jetbrains.jet.lang.resolve.java.structure.JavaPackage; import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver; import org.jetbrains.jet.lang.resolve.kotlin.KotlinClassFinder; @@ -154,43 +150,13 @@ public final class JavaPackageFragmentProvider implements PackageFragmentProvide } JavaClass javaClass = javaClassFinder.findClass(fqName); - if (javaClass != null && shouldCreateStaticMembersPackage(javaClass)) { + if (javaClass != null && DescriptorResolverUtils.isJavaClassVisibleAsPackage(javaClass)) { cache.recordClassStaticMembersNamespace(packageFragment); return new JavaClassStaticMembersScope(packageFragment, javaClass, memberResolver); } return null; } - // TODO 2 move to more decent place - public static boolean shouldCreateStaticMembersPackage(@NotNull JavaClass javaClass) { - return !DescriptorResolverUtils.isCompiledKotlinClassOrPackageClass(javaClass) && hasStaticMembers(javaClass); - } - - private static boolean hasStaticMembers(@NotNull JavaClass javaClass) { - for (JavaMethod method : javaClass.getMethods()) { - if (method.isStatic() && !DescriptorResolverUtils.shouldBeInEnumClassObject(method)) { - return true; - } - } - - for (JavaField field : javaClass.getFields()) { - if (field.isStatic() && !field.isEnumEntry()) { - return true; - } - } - - for (JavaClass nestedClass : javaClass.getInnerClasses()) { - if (SingleAbstractMethodUtils.isSamInterface(nestedClass)) { - return true; - } - if (nestedClass.isStatic() && hasStaticMembers(nestedClass)) { - return true; - } - } - - return false; - } - @NotNull public Collection getClassNamesInPackage(@NotNull FqName packageName) { JavaPackage javaPackage = javaClassFinder.findPackage(packageName); diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java index a5a850d197e..f7c6acec066 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java @@ -20,8 +20,8 @@ import com.google.common.collect.Lists; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; +import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils; import org.jetbrains.jet.lang.resolve.java.resolver.JavaMemberResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider; import org.jetbrains.jet.lang.resolve.java.structure.JavaClass; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -52,7 +52,7 @@ public final class JavaClassStaticMembersScope extends JavaClassMembersScope { public Collection getSubPackages() { List result = Lists.newArrayList(); for (JavaClass nested : javaClass.getInnerClasses()) { - if (JavaPackageFragmentProvider.shouldCreateStaticMembersPackage(nested)) { + if (DescriptorResolverUtils.isJavaClassVisibleAsPackage(nested)) { result.add(nested.getFqName()); } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java index ef1e8427d37..5b2f4c20543 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java @@ -113,7 +113,7 @@ public final class JavaPackageScope extends JavaBaseScope { result.add(subPackage.getFqName()); } for (JavaClass javaClass : DescriptorResolverUtils.getClassesInPackage(javaPackage)) { - if (JavaPackageFragmentProvider.shouldCreateStaticMembersPackage(javaClass)) { + if (DescriptorResolverUtils.isJavaClassVisibleAsPackage(javaClass)) { result.add(javaClass.getFqName()); } }