mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[^alexander.kirsanov @ rider] support hyperlinks in console heavy filters
This commit is contained in:
@@ -5,7 +5,6 @@ import com.intellij.openapi.editor.EditorFactory;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
|
||||
import com.intellij.util.Consumer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -55,8 +54,8 @@ public class ExceptionWorkerTest extends LightCodeInsightFixtureTestCase {
|
||||
final Document document = EditorFactory.getInstance().createDocument(testData);
|
||||
FilterMixin filter = (FilterMixin)new ExceptionExFilterFactory().create(GlobalSearchScope.projectScope(getProject()));
|
||||
final ArrayList<String> result = new ArrayList<String>();
|
||||
filter.applyHeavyFilter(document, 0, 0,
|
||||
highlight -> result.add(new TextRange(highlight.getStart(), highlight.getEnd() - 1).substring(testData)));
|
||||
filter.applyHeavyFilter(document, 0, 0, r -> r.getResultItems().forEach(
|
||||
highlight -> result.add(new TextRange(highlight.getHighlightStartOffset(), highlight.getHighlightEndOffset() - 1).substring(testData))));
|
||||
assertSameElements(result, "com.sample.RunningMain.func1", "com.sample.RunningMain.main");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.util.Consumer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
@@ -34,24 +35,29 @@ public interface FilterMixin {
|
||||
@NotNull
|
||||
String getUpdateMessage();
|
||||
|
||||
abstract class AdditionalHighlight {
|
||||
private final int myStart;
|
||||
private final int myEnd;
|
||||
|
||||
protected AdditionalHighlight(int start, int end) {
|
||||
myStart = start;
|
||||
myEnd = end;
|
||||
class AdditionalHighlight extends Filter.Result {
|
||||
public AdditionalHighlight(int start, int end) {
|
||||
super(start, end, null);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public AdditionalHighlight(@NotNull List<Filter.ResultItem> resultItems) {
|
||||
super(resultItems);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public int getStart() {
|
||||
return myStart;
|
||||
return getHighlightStartOffset();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public int getEnd() {
|
||||
return myEnd;
|
||||
return getHighlightEndOffset();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public abstract TextAttributes getTextAttributes(@Nullable final TextAttributes source);
|
||||
@Nullable
|
||||
public TextAttributes getTextAttributes(@Nullable final TextAttributes source) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.intellij.execution.ExecutionBundle;
|
||||
import com.intellij.execution.actions.ConsoleActionsPostProcessor;
|
||||
import com.intellij.execution.actions.EOFAction;
|
||||
import com.intellij.execution.filters.*;
|
||||
import com.intellij.execution.filters.Filter.ResultItem;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
import com.intellij.execution.ui.ConsoleView;
|
||||
import com.intellij.execution.ui.ConsoleViewContentType;
|
||||
@@ -1075,8 +1076,15 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
|
||||
@Override
|
||||
public void doRun() {
|
||||
if (myHeavyUpdateTicket != currentValue) return;
|
||||
myHyperlinks.addHighlighter(additionalHighlight.getStart(), additionalHighlight.getEnd(),
|
||||
additionalHighlight.getTextAttributes(null));
|
||||
TextAttributes additionalAttributes = additionalHighlight.getTextAttributes(null);
|
||||
if (additionalAttributes != null) {
|
||||
ResultItem item = additionalHighlight.getResultItems().get(0);
|
||||
myHyperlinks.addHighlighter(item.getHighlightStartOffset(), item.getHighlightEndOffset(),
|
||||
additionalAttributes);
|
||||
}
|
||||
else {
|
||||
myHyperlinks.highlightHyperlinks(additionalHighlight);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+20
-15
@@ -275,22 +275,27 @@ public class EditorHyperlinkSupport {
|
||||
final String text = getLineText(document, line, true);
|
||||
Filter.Result result = customFilter.applyFilter(text, endOffset);
|
||||
if (result != null) {
|
||||
for (Filter.ResultItem resultItem : result.getResultItems()) {
|
||||
int start = resultItem.getHighlightStartOffset();
|
||||
int end = resultItem.getHighlightEndOffset();
|
||||
if (end < start || end > document.getTextLength()) {
|
||||
LOG.error("Filter returned wrong range: start=" + start + "; end=" + end + "; length=" + document.getTextLength() + "; filter=" + customFilter);
|
||||
continue;
|
||||
}
|
||||
highlightHyperlinks(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TextAttributes attributes = resultItem.getHighlightAttributes();
|
||||
if (resultItem.getHyperlinkInfo() != null) {
|
||||
createHyperlink(start, end, attributes, resultItem.getHyperlinkInfo(), resultItem.getFollowedHyperlinkAttributes());
|
||||
}
|
||||
else if (attributes != null) {
|
||||
addHighlighter(start, end, attributes);
|
||||
}
|
||||
}
|
||||
public void highlightHyperlinks(@NotNull Filter.Result result) {
|
||||
Document document = myEditor.getDocument();
|
||||
for (Filter.ResultItem resultItem : result.getResultItems()) {
|
||||
int start = resultItem.getHighlightStartOffset();
|
||||
int end = resultItem.getHighlightEndOffset();
|
||||
if (end < start || end > document.getTextLength()) {
|
||||
LOG.error("Filter returned wrong range: start=" + start + "; end=" + end + "; length=" + document.getTextLength());
|
||||
continue;
|
||||
}
|
||||
|
||||
TextAttributes attributes = resultItem.getHighlightAttributes();
|
||||
if (resultItem.getHyperlinkInfo() != null) {
|
||||
createHyperlink(start, end, attributes, resultItem.getHyperlinkInfo(), resultItem.getFollowedHyperlinkAttributes());
|
||||
}
|
||||
else if (attributes != null) {
|
||||
addHighlighter(start, end, attributes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user