Minor. Moved method.

This commit is contained in:
Evgeny Gerashchenko
2013-11-28 19:31:06 +04:00
parent c472cb682f
commit d198c202e3
4 changed files with 35 additions and 39 deletions
@@ -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;
}
}
@@ -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<Name> getClassNamesInPackage(@NotNull FqName packageName) {
JavaPackage javaPackage = javaClassFinder.findPackage(packageName);
@@ -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<FqName> getSubPackages() {
List<FqName> result = Lists.newArrayList();
for (JavaClass nested : javaClass.getInnerClasses()) {
if (JavaPackageFragmentProvider.shouldCreateStaticMembersPackage(nested)) {
if (DescriptorResolverUtils.isJavaClassVisibleAsPackage(nested)) {
result.add(nested.getFqName());
}
}
@@ -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());
}
}