Fix problems with nulls on abstract classes from jdk

This commit is contained in:
Vladimir Rudev
2012-11-01 00:14:04 +04:00
committed by Nikolay Krasko
parent 511e3d9cd7
commit 98eefd0f1c
2 changed files with 12 additions and 10 deletions
@@ -37,13 +37,11 @@ import javax.swing.*;
public class DescriptorClassMember implements ClassMemberWithElement {
public static final String NO_PARENT_FOR = "No parent for ";
@NotNull
private final DeclarationDescriptor myDescriptor;
@NotNull
private final PsiElement myPsiElement;
public DescriptorClassMember(@NotNull PsiElement element, @NotNull DeclarationDescriptor descriptor) {
public DescriptorClassMember(PsiElement element, @NotNull DeclarationDescriptor descriptor) {
myPsiElement = element;
myDescriptor = descriptor;
}
@@ -51,16 +49,15 @@ public class DescriptorClassMember implements ClassMemberWithElement {
@Override
public MemberChooserObject getParentNodeDelegate() {
final DeclarationDescriptor parent = myDescriptor.getContainingDeclaration();
PsiElement declaration;
PsiElement declaration = null;
if (myPsiElement instanceof JetDeclaration) {
// kotlin
declaration = PsiTreeUtil.getStubOrPsiParentOfType(myPsiElement, JetNamedDeclaration.class);
}
else {
else if (myPsiElement != null) {
// java or bytecode
declaration = ((PsiMember) myPsiElement).getContainingClass();
}
assert declaration != null : NO_PARENT_FOR + myPsiElement;
assert parent != null : NO_PARENT_FOR + myDescriptor;
return new DescriptorClassMember(declaration, parent);
}
@@ -68,7 +65,7 @@ public class DescriptorClassMember implements ClassMemberWithElement {
@Override
public void renderTreeNode(SimpleColoredComponent component, JTree tree) {
component.append(getText());
if (myPsiElement.isValid()) {
if (myPsiElement != null && myPsiElement.isValid()) {
component.setIcon(myPsiElement.getIcon(0));
}
else {
@@ -52,9 +52,14 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
) {
List<DescriptorClassMember> members = new ArrayList<DescriptorClassMember>();
for (CallableMemberDescriptor memberDescriptor : missingImplementations) {
PsiElement psiElement = BindingContextUtils.descriptorToDeclaration(bindingContext, memberDescriptor);
assert psiElement != null : "Can not find PsiElement for descriptor " + memberDescriptor;
members.add(new DescriptorClassMember(psiElement, memberDescriptor));
List<PsiElement> psiElements = BindingContextUtils.descriptorToDeclarations(bindingContext, memberDescriptor);
DescriptorClassMember member;
if (psiElements.isEmpty()) {
member = new DescriptorClassMember(null, memberDescriptor);
} else {
member = new DescriptorClassMember(psiElements.get(0), memberDescriptor);
}
members.add(member);
}
return members;
}