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