IDEA-157959 code refactoring after review

This commit is contained in:
Sergey Malenkov
2017-06-07 10:58:17 +03:00
parent 608a0af28e
commit d41b212fca
2 changed files with 27 additions and 21 deletions
@@ -40,6 +40,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.vcs.FileStatusListener;
@@ -246,11 +247,11 @@ public class BreadcrumbsXmlWrapper extends JComponent implements Disposable {
return provider == null ? defaultProvider : provider;
}
private static PsiElement[] toPsiElementArray(Collection<PsiCrumb> items) {
final PsiElement[] elements = new PsiElement[items.size()];
private static PsiElement[] toPsiElementArray(Collection<Pair<PsiElement, BreadcrumbsProvider>> pairs) {
PsiElement[] elements = new PsiElement[pairs.size()];
int index = 0;
for (PsiCrumb item : items) {
elements[index++] = item.anchor.retrieve();
for (Pair<PsiElement, BreadcrumbsProvider> pair : pairs) {
elements[index++] = pair.first;
}
return elements;
}
@@ -276,18 +277,20 @@ public class BreadcrumbsXmlWrapper extends JComponent implements Disposable {
final Editor editor,
final Project project,
final BreadcrumbsProvider defaultInfoProvider) {
final LinkedList<PsiCrumb> result =
Collection<Pair<PsiElement, BreadcrumbsProvider>> pairs =
getLineElements(editor.logicalPositionToOffset(position), file, project, defaultInfoProvider);
if (result == null) return null;
if (pairs == null) return null;
final PsiElement[] elements = toPsiElementArray(result);
final CrumbPresentation[] presentations = getCrumbPresentations(elements);
if (presentations != null) {
int i = 0;
for (PsiCrumb item : result) {
item.presentation = presentations[i++];
ArrayList<PsiCrumb> result = new ArrayList<>(pairs.size());
CrumbPresentation[] presentations = getCrumbPresentations(toPsiElementArray(pairs));
int index = 0;
for (Pair<PsiElement, BreadcrumbsProvider> pair : pairs) {
PsiCrumb crumb = new PsiCrumb(pair.first, pair.second);
if (presentations != null && 0 <= index && index < presentations.length) {
crumb.presentation = presentations[index++];
}
result.add(crumb);
}
return result;
@@ -295,24 +298,24 @@ public class BreadcrumbsXmlWrapper extends JComponent implements Disposable {
@Nullable
public static PsiElement[] getLinePsiElements(int offset, VirtualFile file, Project project, BreadcrumbsProvider infoProvider) {
final LinkedList<PsiCrumb> lineElements = getLineElements(offset, file, project, infoProvider);
return lineElements != null ? toPsiElementArray(lineElements) : null;
Collection<Pair<PsiElement, BreadcrumbsProvider>> pairs = getLineElements(offset, file, project, infoProvider);
return pairs == null ? null : toPsiElementArray(pairs);
}
@Nullable
private static LinkedList<PsiCrumb> getLineElements(final int offset,
VirtualFile file,
Project project,
BreadcrumbsProvider defaultInfoProvider) {
private static Collection<Pair<PsiElement, BreadcrumbsProvider>> getLineElements(int offset,
VirtualFile file,
Project project,
BreadcrumbsProvider defaultInfoProvider) {
PsiElement element = findFirstBreadcrumbedElement(offset, file, project, defaultInfoProvider);
if (element == null) return null;
final LinkedList<PsiCrumb> result = new LinkedList<>();
LinkedList<Pair<PsiElement, BreadcrumbsProvider>> result = new LinkedList<>();
while (element != null) {
BreadcrumbsProvider provider = findProviderForElement(element, defaultInfoProvider);
if (provider != null && provider.acceptElement(element)) {
result.addFirst(new PsiCrumb(element, provider));
result.addFirst(Pair.create(element, provider));
}
element = getParent(element, provider);
@@ -19,12 +19,13 @@ import com.intellij.psi.PsiAnchor;
import com.intellij.psi.PsiElement;
import com.intellij.ui.breadcrumbs.BreadcrumbsProvider;
import com.intellij.ui.components.breadcrumbs.Crumb;
import org.jetbrains.annotations.Nullable;
/**
* @author Sergey.Malenkov
*/
final class PsiCrumb extends Crumb.Impl {
final PsiAnchor anchor;
private final PsiAnchor anchor;
CrumbPresentation presentation;
PsiCrumb(PsiElement element, BreadcrumbsProvider provider) {
@@ -32,10 +33,12 @@ final class PsiCrumb extends Crumb.Impl {
anchor = PsiAnchor.create(element);
}
@Nullable
static PsiElement getElement(Crumb crumb) {
return crumb instanceof PsiCrumb ? ((PsiCrumb)crumb).anchor.retrieve() : null;
}
@Nullable
static CrumbPresentation getPresentation(Crumb crumb) {
return crumb instanceof PsiCrumb ? ((PsiCrumb)crumb).presentation : null;
}