Fix nullability issues in SimpleStructureViewElement (IJSDK-333)

This commit is contained in:
Dmitry Jemerov 2018-03-19 12:18:43 +01:00
parent 8837d36e1a
commit d086363559

View File

@ -1,18 +1,24 @@
package com.simpleplugin; package com.simpleplugin;
import com.intellij.ide.projectView.PresentationData;
import com.intellij.ide.structureView.StructureViewTreeElement; import com.intellij.ide.structureView.StructureViewTreeElement;
import com.intellij.ide.util.treeView.smartTree.*; import com.intellij.ide.util.treeView.smartTree.SortableTreeElement;
import com.intellij.navigation.*; import com.intellij.ide.util.treeView.smartTree.TreeElement;
import com.intellij.psi.*; import com.intellij.navigation.ItemPresentation;
import com.intellij.psi.NavigatablePsiElement;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import com.simpleplugin.psi.*; import com.simpleplugin.psi.SimpleFile;
import com.simpleplugin.psi.SimpleProperty;
import com.simpleplugin.psi.impl.SimplePropertyImpl;
import org.jetbrains.annotations.NotNull;
import java.util.*; import java.util.ArrayList;
import java.util.List;
public class SimpleStructureViewElement implements StructureViewTreeElement, SortableTreeElement { public class SimpleStructureViewElement implements StructureViewTreeElement, SortableTreeElement {
private PsiElement element; private NavigatablePsiElement element;
public SimpleStructureViewElement(PsiElement element) { public SimpleStructureViewElement(NavigatablePsiElement element) {
this.element = element; this.element = element;
} }
@ -23,32 +29,31 @@ public class SimpleStructureViewElement implements StructureViewTreeElement, Sor
@Override @Override
public void navigate(boolean requestFocus) { public void navigate(boolean requestFocus) {
if (element instanceof NavigationItem) { element.navigate(requestFocus);
((NavigationItem) element).navigate(requestFocus);
}
} }
@Override @Override
public boolean canNavigate() { public boolean canNavigate() {
return element instanceof NavigationItem && return element.canNavigate();
((NavigationItem) element).canNavigate();
} }
@Override @Override
public boolean canNavigateToSource() { public boolean canNavigateToSource() {
return element instanceof NavigationItem && return element.canNavigateToSource();
((NavigationItem) element).canNavigateToSource();
} }
@NotNull
@Override @Override
public String getAlphaSortKey() { public String getAlphaSortKey() {
return element instanceof PsiNamedElement ? ((PsiNamedElement) element).getName() : null; String name = element.getName();
return name != null ? name : "";
} }
@NotNull
@Override @Override
public ItemPresentation getPresentation() { public ItemPresentation getPresentation() {
return element instanceof NavigationItem ? ItemPresentation presentation = element.getPresentation();
((NavigationItem) element).getPresentation() : null; return presentation != null ? presentation : new PresentationData();
} }
@Override @Override
@ -57,7 +62,7 @@ public class SimpleStructureViewElement implements StructureViewTreeElement, Sor
SimpleProperty[] properties = PsiTreeUtil.getChildrenOfType(element, SimpleProperty.class); SimpleProperty[] properties = PsiTreeUtil.getChildrenOfType(element, SimpleProperty.class);
List<TreeElement> treeElements = new ArrayList<TreeElement>(properties.length); List<TreeElement> treeElements = new ArrayList<TreeElement>(properties.length);
for (SimpleProperty property : properties) { for (SimpleProperty property : properties) {
treeElements.add(new SimpleStructureViewElement(property)); treeElements.add(new SimpleStructureViewElement((SimplePropertyImpl) property));
} }
return treeElements.toArray(new TreeElement[treeElements.size()]); return treeElements.toArray(new TreeElement[treeElements.size()]);
} else { } else {