Skip to content

Commit

Permalink
Added namespace classes to Java static member scope.
Browse files Browse the repository at this point in the history
  • Loading branch information
Evgeny Gerashchenko authored and Evgeny Gerashchenko committed Mar 12, 2013
1 parent 11dfcab commit 2eb1503
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
Expand Up @@ -19,7 +19,10 @@
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;
Expand Down Expand Up @@ -170,6 +173,12 @@ private JavaBaseScope doCreateNamespaceScope(
// 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,
Expand Down Expand Up @@ -207,4 +216,20 @@ public JavaBaseScope getJavaPackageScopeForExistingNamespaceDescriptor(@NotNull
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;
}
}
Expand Up @@ -61,13 +61,20 @@ public static Collection<DeclarationDescriptor> computeAllPackageDeclarations(

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;
}

}

0 comments on commit 2eb1503

Please sign in to comment.