getContainingClass() is never null for methods and fields

This commit is contained in:
Alexander Udalov
2013-08-02 22:11:32 +04:00
parent 4e1fb7e0eb
commit 520f812030
9 changed files with 13 additions and 33 deletions
@@ -99,8 +99,7 @@ public final class DescriptorResolverUtils {
* corresponding package). This applies to enum entries, values() and valueOf(String) methods * corresponding package). This applies to enum entries, values() and valueOf(String) methods
*/ */
public static boolean shouldBeInEnumClassObject(@NotNull JavaMember member) { public static boolean shouldBeInEnumClassObject(@NotNull JavaMember member) {
JavaClass javaClass = member.getContainingClass(); if (!member.getContainingClass().isEnum()) return false;
if (javaClass == null || !javaClass.isEnum()) return false;
if (member instanceof JavaField && ((JavaField) member).isEnumEntry()) return true; if (member instanceof JavaField && ((JavaField) member).isEnumEntry()) return true;
@@ -117,13 +116,7 @@ public final class DescriptorResolverUtils {
} }
public static boolean isObjectMethodInInterface(@NotNull JavaMember member) { public static boolean isObjectMethodInInterface(@NotNull JavaMember member) {
if (!(member instanceof JavaMethod)) { return member.getContainingClass().isInterface() && member instanceof JavaMethod && isObjectMethod((JavaMethod) member);
return false;
}
JavaClass containingClass = member.getContainingClass();
assert containingClass != null : "Containing class is null for member: " + member;
return containingClass.isInterface() && isObjectMethod((JavaMethod) member);
} }
public static boolean isObjectMethod(@NotNull JavaMethod method) { public static boolean isObjectMethod(@NotNull JavaMethod method) {
@@ -153,10 +153,7 @@ class PropagationHeuristics {
return Collections.emptyList(); return Collections.emptyList();
} }
JavaClass containingClass = initialMethod.getContainingClass(); for (JavaClassifierType supertype : initialMethod.getContainingClass().getSupertypes()) {
assert containingClass != null : " containing class is null for " + initialMethod;
for (JavaClassifierType supertype : containingClass.getSupertypes()) {
collectFromSupertype(supertype); collectFromSupertype(supertype);
} }
@@ -234,11 +231,10 @@ class PropagationHeuristics {
} }
private static boolean canHaveSuperMethod(@NotNull JavaMethod method) { private static boolean canHaveSuperMethod(@NotNull JavaMethod method) {
if (method.isConstructor() || method.isStatic() || method.getVisibility() == Visibilities.PRIVATE) { return !method.isConstructor() &&
return false; !method.isStatic() &&
} method.getVisibility() != Visibilities.PRIVATE &&
JavaClass containingClass = method.getContainingClass(); !JavaSupertypeResolver.OBJECT_FQ_NAME.equals(method.getContainingClass().getFqName());
return containingClass != null && !JavaSupertypeResolver.OBJECT_FQ_NAME.equals(containingClass.getFqName());
} }
} }
} }
@@ -222,7 +222,6 @@ public class SignaturesPropagationData {
for (JavaMethod superMethod : PropagationHeuristics.getSuperMethods(method)) { for (JavaMethod superMethod : PropagationHeuristics.getSuperMethods(method)) {
JavaClass javaClass = superMethod.getContainingClass(); JavaClass javaClass = superMethod.getContainingClass();
assert javaClass != null : "Super method doesn't have a containing class: " + superMethod;
FqName classFqName = javaClass.getFqName(); FqName classFqName = javaClass.getFqName();
assert classFqName != null : "Class FQ name should not be null: " + javaClass; assert classFqName != null : "Class FQ name should not be null: " + javaClass;
@@ -121,10 +121,7 @@ public final class JavaAnnotationArgumentResolver {
JavaField field = (JavaField) element; JavaField field = (JavaField) element;
if (!field.isEnumEntry()) return null; if (!field.isEnumEntry()) return null;
JavaClass javaClass = field.getContainingClass(); FqName fqName = field.getContainingClass().getFqName();
if (javaClass == null) return null;
FqName fqName = javaClass.getFqName();
if (fqName == null) return null; if (fqName == null) return null;
ClassDescriptor enumClass = classResolver.resolveClass(fqName, INCLUDE_KOTLIN_SOURCES, taskList); ClassDescriptor enumClass = classResolver.resolveClass(fqName, INCLUDE_KOTLIN_SOURCES, taskList);
@@ -351,7 +351,6 @@ public final class JavaClassResolver {
@NotNull ClassDescriptorFromJvmBytecode samInterface @NotNull ClassDescriptorFromJvmBytecode samInterface
) { ) {
JavaClass methodContainer = samInterfaceMethod.getContainingClass(); JavaClass methodContainer = samInterfaceMethod.getContainingClass();
assert methodContainer != null : "method container is null for " + samInterfaceMethod;
FqName containerFqName = methodContainer.getFqName(); FqName containerFqName = methodContainer.getFqName();
assert containerFqName != null : "qualified name is null for " + methodContainer; assert containerFqName != null : "qualified name is null for " + methodContainer;
@@ -31,7 +31,6 @@ class JavaMethodSignatureUtil {
// This and following methods are originally from com.intellij.codeInsight.daemon.impl.analysis.HighlightMethodUtil // This and following methods are originally from com.intellij.codeInsight.daemon.impl.analysis.HighlightMethodUtil
static boolean isMethodReturnTypeCompatible(@NotNull JavaMethod method) { static boolean isMethodReturnTypeCompatible(@NotNull JavaMethod method) {
if (method.isStatic()) return true; if (method.isStatic()) return true;
if (method.getContainingClass() == null) return false;
HierarchicalMethodSignature methodSignature = method.getPsi().getHierarchicalMethodSignature(); HierarchicalMethodSignature methodSignature = method.getPsi().getHierarchicalMethodSignature();
List<HierarchicalMethodSignature> superSignatures = methodSignature.getSuperSignatures(); List<HierarchicalMethodSignature> superSignatures = methodSignature.getSuperSignatures();
@@ -219,9 +219,7 @@ import java.util.Map;
} }
private boolean isInCurrentClass(@NotNull JavaMember member) { private boolean isInCurrentClass(@NotNull JavaMember member) {
JavaClass containingClass = member.getContainingClass(); FqName fqName = member.getContainingClass().getFqName();
if (containingClass == null) return false;
FqName fqName = containingClass.getFqName();
return fqName != null && fqName.equals(javaClass.getFqName()); return fqName != null && fqName.equals(javaClass.getFqName());
} }
@@ -25,7 +25,6 @@ public interface JavaMember extends JavaModifierListOwner, JavaAnnotationOwner,
@Override @Override
PsiMember getPsi(); PsiMember getPsi();
// TODO: NotNull ? @NotNull
@Nullable
JavaClass getContainingClass(); JavaClass getContainingClass();
} }
@@ -45,12 +45,12 @@ public abstract class JavaMemberImpl extends JavaElementImpl implements JavaMemb
return Name.identifier(name); return Name.identifier(name);
} }
// TODO: NotNull? @NotNull
@Nullable
@Override @Override
public JavaClass getContainingClass() { public JavaClass getContainingClass() {
PsiClass psiClass = getPsi().getContainingClass(); PsiClass psiClass = getPsi().getContainingClass();
return psiClass == null ? null : new JavaClass(psiClass); assert psiClass != null : "Member must have a containing class: " + getPsi();
return new JavaClass(psiClass);
} }
@Override @Override