Added namespace classes to Java static member scope.
This commit is contained in:
+25
@@ -19,7 +19,10 @@ package org.jetbrains.jet.lang.resolve.java.resolver;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiMember;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.psi.PsiPackage;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
||||
@@ -170,6 +173,12 @@ public final class JavaNamespaceResolver {
|
||||
// static members of enum class into class object descriptor
|
||||
return null;
|
||||
}
|
||||
if (DescriptorResolverUtils.isKotlinClass(psiClass)) {
|
||||
return null;
|
||||
}
|
||||
if (!hasStaticMembers(psiClass)) {
|
||||
return null;
|
||||
}
|
||||
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, namespaceDescriptor, JavaNamespaceKind.CLASS_STATICS);
|
||||
return new JavaClassStaticMembersScope(
|
||||
namespaceDescriptor,
|
||||
@@ -207,4 +216,20 @@ public final class JavaNamespaceResolver {
|
||||
private PsiClass getPsiClassForJavaPackageScope(@NotNull FqName packageFQN) {
|
||||
return psiClassFinder.findPsiClass(PackageClassUtils.getPackageClassFqName(packageFQN), PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
|
||||
}
|
||||
|
||||
private static boolean hasStaticMembers(@NotNull PsiClass psiClass) {
|
||||
for (PsiMember member : ContainerUtil.concat(psiClass.getMethods(), psiClass.getFields())) {
|
||||
if (member.hasModifierProperty(PsiModifier.STATIC)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
for (PsiClass nestedClass : psiClass.getInnerClasses()) {
|
||||
if (nestedClass.hasModifierProperty(PsiModifier.STATIC) && hasStaticMembers(nestedClass)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
+9
-2
@@ -61,13 +61,20 @@ public final class ScopeUtils {
|
||||
|
||||
if (psiClass.hasModifierProperty(PsiModifier.PUBLIC)) {
|
||||
ProgressIndicatorProvider.checkCanceled();
|
||||
ClassDescriptor classDescriptor = descriptorResolver
|
||||
.resolveClass(new FqName(psiClass.getQualifiedName()), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
|
||||
FqName fqName = new FqName(psiClass.getQualifiedName());
|
||||
ClassDescriptor classDescriptor = descriptorResolver.resolveClass(fqName, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
|
||||
if (classDescriptor != null) {
|
||||
result.add(classDescriptor);
|
||||
}
|
||||
|
||||
NamespaceDescriptor namespaceDescriptor = descriptorResolver.resolveNamespace(
|
||||
fqName, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
|
||||
if (namespaceDescriptor != null) {
|
||||
result.add(namespaceDescriptor);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user