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.PackageClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor;
|
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.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.java.structure.*;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
@@ -61,7 +62,7 @@ public final class DescriptorResolverUtils {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCompiledKotlinClassOrPackageClass(@NotNull JavaClass javaClass) {
|
private static boolean isCompiledKotlinClassOrPackageClass(@NotNull JavaClass javaClass) {
|
||||||
return isCompiledKotlinClass(javaClass) || isCompiledKotlinPackageClass(javaClass);
|
return isCompiledKotlinClass(javaClass) || isCompiledKotlinPackageClass(javaClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,4 +342,33 @@ public final class DescriptorResolverUtils {
|
|||||||
JavaPackageFragmentProvider provider = ((JavaPackageFragmentDescriptor) packageFragment).getProvider();
|
JavaPackageFragmentProvider provider = ((JavaPackageFragmentDescriptor) packageFragment).getProvider();
|
||||||
return provider.getOrCreatePackage(getFQName(javaClass).toSafe());
|
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.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
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.PackageFragmentDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.PackageFragmentProvider;
|
import org.jetbrains.jet.lang.descriptors.PackageFragmentProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaClassFinder;
|
import org.jetbrains.jet.lang.resolve.java.JavaClassFinder;
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor;
|
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.JavaClassStaticMembersScope;
|
||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageScope;
|
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.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.java.structure.JavaPackage;
|
||||||
import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.kotlin.KotlinClassFinder;
|
import org.jetbrains.jet.lang.resolve.kotlin.KotlinClassFinder;
|
||||||
@@ -154,43 +150,13 @@ public final class JavaPackageFragmentProvider implements PackageFragmentProvide
|
|||||||
}
|
}
|
||||||
|
|
||||||
JavaClass javaClass = javaClassFinder.findClass(fqName);
|
JavaClass javaClass = javaClassFinder.findClass(fqName);
|
||||||
if (javaClass != null && shouldCreateStaticMembersPackage(javaClass)) {
|
if (javaClass != null && DescriptorResolverUtils.isJavaClassVisibleAsPackage(javaClass)) {
|
||||||
cache.recordClassStaticMembersNamespace(packageFragment);
|
cache.recordClassStaticMembersNamespace(packageFragment);
|
||||||
return new JavaClassStaticMembersScope(packageFragment, javaClass, memberResolver);
|
return new JavaClassStaticMembersScope(packageFragment, javaClass, memberResolver);
|
||||||
}
|
}
|
||||||
return null;
|
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
|
@NotNull
|
||||||
public Collection<Name> getClassNamesInPackage(@NotNull FqName packageName) {
|
public Collection<Name> getClassNamesInPackage(@NotNull FqName packageName) {
|
||||||
JavaPackage javaPackage = javaClassFinder.findPackage(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.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
|
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.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.java.structure.JavaClass;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ public final class JavaClassStaticMembersScope extends JavaClassMembersScope {
|
|||||||
public Collection<FqName> getSubPackages() {
|
public Collection<FqName> getSubPackages() {
|
||||||
List<FqName> result = Lists.newArrayList();
|
List<FqName> result = Lists.newArrayList();
|
||||||
for (JavaClass nested : javaClass.getInnerClasses()) {
|
for (JavaClass nested : javaClass.getInnerClasses()) {
|
||||||
if (JavaPackageFragmentProvider.shouldCreateStaticMembersPackage(nested)) {
|
if (DescriptorResolverUtils.isJavaClassVisibleAsPackage(nested)) {
|
||||||
result.add(nested.getFqName());
|
result.add(nested.getFqName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -113,7 +113,7 @@ public final class JavaPackageScope extends JavaBaseScope {
|
|||||||
result.add(subPackage.getFqName());
|
result.add(subPackage.getFqName());
|
||||||
}
|
}
|
||||||
for (JavaClass javaClass : DescriptorResolverUtils.getClassesInPackage(javaPackage)) {
|
for (JavaClass javaClass : DescriptorResolverUtils.getClassesInPackage(javaPackage)) {
|
||||||
if (JavaPackageFragmentProvider.shouldCreateStaticMembersPackage(javaClass)) {
|
if (DescriptorResolverUtils.isJavaClassVisibleAsPackage(javaClass)) {
|
||||||
result.add(javaClass.getFqName());
|
result.add(javaClass.getFqName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user