CPP-7113 Support related per-variable highlighting semantic in Doxigen

This commit is contained in:
Alexey Utkin
2016-07-04 18:29:50 +03:00
parent 7019abee2e
commit 8b6c1bc21c
2 changed files with 47 additions and 5 deletions
@@ -537,6 +537,8 @@ public interface CodeInsightTestFixture extends IdeaProjectTestFixture {
void testFoldingWithCollapseStatus(@NotNull String fileName);
void testRainbow(@NotNull String fileName, @NotNull String text, boolean isRainbowOn, boolean withColor);
void assertPreferredCompletionItems(int selected, @NotNull String... expected);
/**
@@ -16,6 +16,7 @@
package com.intellij.testFramework.fixtures.impl;
import com.intellij.analysis.AnalysisScope;
import com.intellij.codeHighlighting.RainbowHighlighter;
import com.intellij.codeInsight.TargetElementUtil;
import com.intellij.codeInsight.completion.CodeCompletionHandlerBase;
import com.intellij.codeInsight.completion.CompletionProgressIndicator;
@@ -70,6 +71,7 @@ import com.intellij.openapi.editor.ex.util.EditorUtil;
import com.intellij.openapi.editor.impl.DocumentImpl;
import com.intellij.openapi.editor.impl.DocumentMarkupModel;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.extensions.ExtensionPoint;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.ExtensionsArea;
@@ -83,6 +85,8 @@ import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.registry.RegistryValue;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.*;
import com.intellij.profile.Profile;
@@ -133,6 +137,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
private static final String START_FOLD = "<fold\\stext=\'[^\']*\'(\\sexpand=\'[^\']*\')*>";
private static final String END_FOLD = "</fold>";
private static final String RAINBOW = "rainbow";
private final IdeaProjectTestFixture myProjectFixture;
private final TempDirTestFixture myTempDirFixture;
@@ -966,7 +971,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
Assert.assertNotNull("Cannot find handler for: " + targetElement, handler);
final PsiElement[] psiElements = ArrayUtil.mergeArrays(handler.getPrimaryElements(), handler.getSecondaryElements());
final FindUsagesOptions options = handler.getFindUsagesOptions(null);
if (scope != null) options.searchScope = scope;
if (scope != null) options.searchScope = scope;
for (PsiElement psiElement : psiElements) {
handler.processElementUsages(psiElement, processor, options);
}
@@ -1441,7 +1446,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
private PsiFile configureByFileInner(@NotNull VirtualFile copy) {
return configureInner(copy, SelectionAndCaretMarkupLoader.fromFile(copy));
}
private PsiFile configureInner(@NotNull final VirtualFile copy, @NotNull final SelectionAndCaretMarkupLoader loader) {
assertInitialized();
@@ -1750,17 +1755,35 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
}
@NotNull
public String getHighlightingDescription(@NotNull List<HighlightInfo> highlighting, @NotNull String tagName) {
public String getHighlightingDescription(@NotNull List<HighlightInfo> highlighting, @NotNull String tagName, boolean withColor) {
final List<Border> borders = new LinkedList<Border>();
for (HighlightInfo region : highlighting) {
borders.add(new Border(Border.LEFT, region.getStartOffset(), "", false));
TextAttributes attributes = region.getTextAttributes(null, null);
borders.add(new Border(Border.LEFT, region.getStartOffset(),
attributes == null ? "null"
: attributes.getForegroundColor() == null
? "null"
: Integer.toHexString(attributes.getForegroundColor().getRGB()),
false));
borders.add(new Border(Border.RIGHT, region.getEndOffset(), "", false));
}
Collections.sort(borders);
StringBuilder result = new StringBuilder(myEditor.getDocument().getText());
for (Border border : borders) {
result.insert(border.getOffset(), (border.isSide() == Border.LEFT ? "<": "</") + tagName + ">");
StringBuilder info = new StringBuilder();
info.append('<');
if (border.isSide() == Border.LEFT) {
info.append(tagName);
if (withColor) {
info.append(" color=\'").append(border.myText).append('\'');
}
}
else {
info.append('/').append(tagName);
}
info.append('>');
result.insert(border.getOffset(), info);
}
return result.toString();
@@ -1809,6 +1832,23 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
testFoldingRegions(verificationFileName, null, false);
}
@Override
public void testRainbow(@NotNull String fileName, @NotNull String text, boolean isRainbowOn, boolean withColor) {
RegistryValue registryValue = Registry.get("editor.rainbow.identifiers");
final boolean rainbowColors = registryValue.asBoolean();
try {
registryValue.setValue(isRainbowOn);
configureByText(fileName, text.replaceAll("<" + RAINBOW + "(\\scolor=\'[^\']*\')?>", "").replace("</" + RAINBOW + ">", ""));
Assert.assertEquals(text, getHighlightingDescription(ContainerUtil.filter(doHighlighting(),
info -> info.type == RainbowHighlighter.RAINBOW_ELEMENT), RAINBOW,
withColor));
}
finally {
registryValue.setValue(rainbowColors);
}
}
@Override
public void assertPreferredCompletionItems(final int selected, @NotNull final String... expected) {
final LookupImpl lookup = getLookup();