From 98eefd0f1cb949f6c3c33c214044f10f5326fa31 Mon Sep 17 00:00:00 2001 From: Vladimir Rudev Date: Thu, 1 Nov 2012 00:14:04 +0400 Subject: [PATCH] Fix problems with nulls on abstract classes from jdk --- .../jet/plugin/codeInsight/DescriptorClassMember.java | 11 ++++------- .../codeInsight/OverrideImplementMethodsHandler.java | 11 ++++++++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/DescriptorClassMember.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/DescriptorClassMember.java index 964ee4709a1..809d825463e 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/DescriptorClassMember.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/DescriptorClassMember.java @@ -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 { diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java index c0f0afaa2d7..d13e6ce56a9 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java @@ -52,9 +52,14 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns ) { List members = new ArrayList(); 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 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; }