Minor. Moved method.
This commit is contained in:
+31
-1
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-35
@@ -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);
|
||||
|
||||
+2
-2
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user