From fba7b33441423b115b821236e54c7e2f2b822853 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 3 Nov 2009 20:14:43 +0300 Subject: [PATCH] run highlight visitors for injected fragments --- .../impl/analysis/HighlightVisitorImpl.java | 8 +- .../daemon/impl/GeneralHighlightingPass.java | 240 ++++++++---------- .../analysis/DefaultHighlightVisitor.java | 18 +- .../impl/analysis/HighlightInfoHolder.java | 16 -- .../problems/WolfTheProblemSolverImpl.java | 16 +- .../tree/injected/MultiHostRegistrarImpl.java | 7 +- .../injected/editor/DocumentWindow.java | 2 +- .../local/GroovyUnusedImportPass.java | 1 - .../impl/analysis/XmlHighlightVisitor.java | 6 +- .../XmlHighlightVisitorBasedInspection.java | 1 - 10 files changed, 121 insertions(+), 194 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index fa7dd2ba8ffe..88ca6d57f87d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -21,6 +21,7 @@ import com.intellij.codeInsight.daemon.JavaErrorMessages; import com.intellij.codeInsight.daemon.impl.*; import com.intellij.codeInsight.daemon.impl.quickfix.QuickFixAction; import com.intellij.codeInsight.daemon.impl.quickfix.SetupJDKFix; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.progress.ProgressManager; @@ -98,13 +99,10 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh } public boolean suitableForFile(PsiFile file) { - return true; + return !InjectedLanguageManager.getInstance(file.getProject()).isInjectedFragment(file); } public void visit(PsiElement element, HighlightInfoHolder holder) { - if (!holder.isWritable()) { - throw new UnsupportedOperationException(); - } myHolder = holder; if (LOG.isDebugEnabled()) { @@ -747,7 +745,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh visitExpression(expression); if (myHolder.hasErrorResults()) return; } - JavaResolveResult result = null; + JavaResolveResult result; try { result = expression.advancedResolve(false); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java index f60fd8820724..ff8aaabe4039 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java @@ -20,19 +20,12 @@ import com.intellij.codeHighlighting.Pass; import com.intellij.codeHighlighting.TextEditorHighlightingPass; import com.intellij.codeInsight.daemon.DaemonBundle; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; -import com.intellij.codeInsight.daemon.impl.analysis.DefaultHighlightVisitor; import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder; import com.intellij.codeInsight.daemon.impl.analysis.HighlightLevelUtil; -import com.intellij.codeInsight.highlighting.HighlightErrorFilter; import com.intellij.codeInsight.problems.ProblemImpl; import com.intellij.concurrency.JobUtil; import com.intellij.injected.editor.DocumentWindow; -import com.intellij.injected.editor.DocumentWindowImpl; -import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.lang.Language; -import com.intellij.lang.LanguageAnnotators; -import com.intellij.lang.annotation.Annotation; -import com.intellij.lang.annotation.Annotator; import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.application.ApplicationManager; @@ -147,6 +140,7 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP DaemonCodeAnalyzer daemonCodeAnalyzer = DaemonCodeAnalyzer.getInstance(myProject); FileStatusMap fileStatusMap = ((DaemonCodeAnalyzerImpl)daemonCodeAnalyzer).getFileStatusMap(); HighlightVisitor[] highlightVisitors = createHighlightVisitors(); + HighlightVisitor[] filtered = filterVisitors(highlightVisitors, myFile); try { final FileViewProvider viewProvider = myFile.getViewProvider(); final Set relevantLanguages = viewProvider.getLanguages(); @@ -166,8 +160,8 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP } } if (elements != null) { - result.addAll(collectHighlights(elements, highlightVisitors, progress)); - addInjectedPsiHighlights(elements, Extensions.getExtensions(DefaultHighlightVisitor.FILTER_EP_NAME, myProject)); + result.addAll(collectHighlights(elements, progress, filtered)); + addInjectedPsiHighlights(elements); } if (!isDumbMode()) { @@ -184,7 +178,7 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP myHighlights = result; } - private void addInjectedPsiHighlights(final List elements, final HighlightErrorFilter[] errorFilters) { + private void addInjectedPsiHighlights(@NotNull final List elements) { List injected = InjectedLanguageUtil.getCachedInjectedDocuments(myFile); Collection hosts = new THashSet(elements.size() + injected.size()); @@ -228,43 +222,36 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP JobUtil.invokeConcurrentlyUnderMyProgress(injectedFiles, new Processor() { public boolean process(final PsiFile injectedPsi) { - AnnotationHolderImpl annotationHolder = createAnnotationHolder(); - highlightInjectedIn(injectedPsi, annotationHolder, errorFilters, injectedLanguageManager); DocumentWindow documentWindow = (DocumentWindow)PsiDocumentManager.getInstance(myProject).getCachedDocument(injectedPsi); - for (Annotation annotation : annotationHolder) { - final TextRange fixedTextRange; - final int startOffset = annotation.getStartOffset(); - TextRange textRange = documentWindow.getHostRange(startOffset); - if (textRange == null) { - // todo[cdr] check this fix. prefix/suffix code annotation case - textRange = findNearestTextRange(documentWindow, startOffset); - final boolean isBefore = startOffset < textRange.getStartOffset(); - fixedTextRange = new ProperTextRange(isBefore ? textRange.getStartOffset() - 1 : textRange.getEndOffset(), - isBefore ? textRange.getStartOffset() : textRange.getEndOffset() + 1); + HighlightInfoHolder holder = createInfoHolder(injectedPsi); + runHighlightVisitosForInjected(injectedPsi, holder); + for (int i=0; i todos = highlightTodos(injectedPsi, injectedPsi.getText(), 0, injectedPsi.getTextLength()); for (HighlightInfo info : todos) { - ProperTextRange textRange = new ProperTextRange(info.startOffset, info.endOffset); - List editables = injectedLanguageManager.intersectWithAllEditableFragments(injectedPsi, textRange); - for (TextRange editable : editables) { - TextRange hostRange = documentWindow.injectedToHost(editable); - - HighlightInfo patched = - new HighlightInfo(info.forcedTextAttributes, info.type, hostRange.getStartOffset(), hostRange.getEndOffset(), - info.description, info.toolTip, info.type.getSeverity(null), false, null, false); - addHighlightInfo(hostRange, patched); - } + addPatchedInfos(info, injectedPsi, documentWindow, injectedLanguageManager, null); } } return true; @@ -272,6 +259,36 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP }, "Highlight injected language fragments"); } + private TextRange getFixedTextRange(DocumentWindow documentWindow, int startOffset) { + final TextRange fixedTextRange; + TextRange textRange = documentWindow.getHostRange(startOffset); + if (textRange == null) { + // todo[cdr] check this fix. prefix/suffix code annotation case + textRange = findNearestTextRange(documentWindow, startOffset); + final boolean isBefore = startOffset < textRange.getStartOffset(); + fixedTextRange = new ProperTextRange(isBefore ? textRange.getStartOffset() - 1 : textRange.getEndOffset(), + isBefore ? textRange.getStartOffset() : textRange.getEndOffset() + 1); + } + else { + fixedTextRange = null; + } + return fixedTextRange; + } + + private void addPatchedInfos(HighlightInfo info, PsiFile injectedPsi, DocumentWindow documentWindow, InjectedLanguageManager injectedLanguageManager, + TextRange fixedTextRange) { + ProperTextRange textRange = new ProperTextRange(info.startOffset, info.endOffset); + List editables = injectedLanguageManager.intersectWithAllEditableFragments(injectedPsi, textRange); + for (TextRange editable : editables) { + TextRange hostRange = fixedTextRange == null ? documentWindow.injectedToHost(editable) : fixedTextRange; + + HighlightInfo patched = + new HighlightInfo(info.forcedTextAttributes, info.type, hostRange.getStartOffset(), hostRange.getEndOffset(), + info.description, info.toolTip, info.type.getSeverity(null), info.isAfterEndOfLine, null, false); + addHighlightInfo(hostRange, patched); + } + } + private void addHighlightInfo(@NotNull TextRange textRange, @NotNull HighlightInfo highlightInfo) { synchronized (myInjectedPsiHighlights) { Collection infos = myInjectedPsiHighlights.get(textRange); @@ -295,89 +312,32 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP return textRange; } - private static void highlightInjectedIn(final PsiFile injectedPsi, - final AnnotationHolderImpl annotationHolder, - final HighlightErrorFilter[] errorFilters, - final InjectedLanguageManager injectedLanguageManager) { - Language injectedLanguage = injectedPsi.getLanguage(); - runAnnotatorsForInjected(injectedPsi, annotationHolder, errorFilters, injectedLanguageManager, injectedLanguage); - highlightInjectedSyntax(injectedLanguage, injectedPsi, annotationHolder); - } - - private static final PerThreadMap cachedAnnotators = new PerThreadMap() { - @NotNull - @Override - public Collection initialValue(@NotNull Language key) { - return LanguageAnnotators.INSTANCE.allForLanguage(key); - } - }; - private static void runAnnotatorsForInjected(final PsiFile injectedPsi, final AnnotationHolderImpl annotationHolder, - final HighlightErrorFilter[] errorFilters, final InjectedLanguageManager injectedLanguageManager, - Language injectedLanguage) { - final DocumentWindow documentRange = ((VirtualFileWindow)injectedPsi.getViewProvider().getVirtualFile()).getDocumentWindow(); - assert documentRange != null; - assert documentRange.getText().equals(injectedPsi.getText()); - final List annotators = cachedAnnotators.get(injectedLanguage); - final AnnotationHolderImpl fixingOffsetsHolder = new AnnotationHolderImpl() { - public boolean add(final Annotation annotation) { - return true; // we are going to hand off the annotation to the annotationHolder anyway - } - - protected Annotation createAnnotation(TextRange range, HighlightSeverity severity, String message) { - List editables = injectedLanguageManager.intersectWithAllEditableFragments(injectedPsi, range); - Annotation firstAnnotation = null; - for (TextRange editable : editables) { - final TextRange patched = documentRange.injectedToHost(editable); - Annotation annotation = super.createAnnotation(patched, severity, message); - if (firstAnnotation == null) { - firstAnnotation = annotation; - } - annotationHolder.add(annotation); - } - return firstAnnotation != null ? firstAnnotation : - // fake - super.createAnnotation(documentRange.injectedToHost(TextRange.from(0, 0)), severity, message); - } - }; - PsiElementVisitor visitor = new PsiRecursiveElementWalkingVisitor() { - @Override public void visitElement(PsiElement element) { - super.visitElement(element); - //noinspection ForLoopReplaceableByForEach - for (int i = 0; i < annotators.size(); i++) { - Annotator annotator = annotators.get(i); - annotator.annotate(element, fixingOffsetsHolder); - } - } - - @Override public void visitErrorElement(PsiErrorElement element) { - for (final HighlightErrorFilter errorFilter : errorFilters) { - if (!errorFilter.shouldHighlightErrorElement(element)) return; - } - - HighlightInfo info = DefaultHighlightVisitor.createErrorElementInfo(element); - Annotation error = fixingOffsetsHolder.createErrorAnnotation(new ProperTextRange(info.startOffset, info.endOffset), info.description); - error.setAfterEndOfLine(info.isAfterEndOfLine); - error.setTooltip(info.toolTip); - if (info.quickFixActionRanges != null) { - for (Pair o : info.quickFixActionRanges) { - List editables = injectedLanguageManager.intersectWithAllEditableFragments(injectedPsi, o.second); - for (TextRange fixEditable : editables) { - error.registerFix(o.first.getAction(), documentRange.injectedToHost(fixEditable)); + private void runHighlightVisitosForInjected(final PsiFile injectedPsi, final HighlightInfoHolder holder) { + HighlightVisitor[] visitors = createHighlightVisitors(); + try { + HighlightVisitor[] filtered = filterVisitors(visitors, injectedPsi); + final List elements = CollectHighlightsUtil.getElementsInRange(injectedPsi, 0, injectedPsi.getTextLength()); + for (final HighlightVisitor hvisitor : filtered) { + hvisitor.analyze(new Runnable() { + public void run() { + for (PsiElement element : elements) { + ProgressManager.checkCanceled(); + hvisitor.visit(element, holder); } } - } + }, true, injectedPsi); } - }; - - injectedPsi.accept(visitor); + } + finally { + incVisitorUsageCount(-1); + } } - private static void highlightInjectedSyntax(final Language injectedLanguage, - final PsiFile injectedPsi, - final AnnotationHolderImpl annotationHolder) { + private static void highlightInjectedSyntax(final PsiFile injectedPsi, HighlightInfoHolder holder) { List> tokens = InjectedLanguageUtil.getHighlightTokens(injectedPsi); if (tokens == null) return; + final Language injectedLanguage = injectedPsi.getLanguage(); SyntaxHighlighter syntaxHighlighter = SyntaxHighlighterFactory.getSyntaxHighlighter(injectedLanguage, injectedPsi.getProject(), injectedPsi.getVirtualFile()); EditorColorsScheme globalScheme = EditorColorsManager.getInstance().getGlobalScheme(); @@ -391,10 +351,7 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP if (textRange.getLength() == 0) continue; TextRange annRange = textRange.shiftRight(injectionHost.getTextRange().getStartOffset()); - Annotation annotation = annotationHolder.createAnnotation(annRange, HighlightInfoType.INJECTED_FRAGMENT_SEVERITY, null); - if (annotation == null) continue; // maybe out of highlightable range // force attribute colors to override host' ones - TextAttributes attributes = null; for(TextAttributesKey key:keys) { TextAttributes attrs2 = globalScheme.getAttributes(key); @@ -402,15 +359,18 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP attributes = attributes != null ? TextAttributes.merge(attributes, attrs2):attrs2; } } + TextAttributes forcedAttributes; if (attributes == null || attributes.isEmpty() || attributes.equals(defaultAttrs)) { - annotation.setEnforcedTextAttributes(TextAttributes.ERASE_MARKER); + forcedAttributes = TextAttributes.ERASE_MARKER; } else { Color back = attributes.getBackgroundColor() == null ? globalScheme.getDefaultBackground() : attributes.getBackgroundColor(); Color fore = attributes.getForegroundColor() == null ? globalScheme.getDefaultForeground() : attributes.getForegroundColor(); - TextAttributes forced = new TextAttributes(fore, back, attributes.getEffectColor(), attributes.getEffectType(), attributes.getFontType()); - annotation.setEnforcedTextAttributes(forced); + forcedAttributes = new TextAttributes(fore, back, attributes.getEffectColor(), attributes.getEffectType(), attributes.getFontType()); } + + HighlightInfo info = HighlightInfo.createHighlightInfo(HighlightInfoType.INJECTED_LANGUAGE_FRAGMENT, annRange, null,null,forcedAttributes); + holder.add(info); } } @@ -460,30 +420,18 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP return list; } - private Collection collectHighlights(@NotNull final List elements, - @NotNull final HighlightVisitor[] highlightVisitors, - @NotNull final ProgressIndicator progress) { + private Collection collectHighlights(@NotNull final List elements, @NotNull final ProgressIndicator progress, + final HighlightVisitor[] visitors) { final Set skipParentsSet = new THashSet(); final Set gotHighlights = new THashSet(); - final List visitors = new ArrayList(highlightVisitors.length); - List list = Arrays.asList(highlightVisitors); - for (HighlightVisitor visitor : DumbService.getInstance(myProject).filterByDumbAwareness(list)) { - if (visitor.suitableForFile(myFile)) visitors.add(visitor); - } - LOG.assertTrue(!visitors.isEmpty(), list); - - HighlightVisitor[] visitorArray = visitors.toArray(new HighlightVisitor[visitors.size()]); - Arrays.sort(visitorArray, VISITOR_ORDER_COMPARATOR); - final boolean forceHighlightParents = forceHighlightParents(); - final HighlightInfoHolder holder = createInfoHolder(); - holder.setWritable(true); - setProgressLimit((long)elements.size() * visitorArray.length); + final HighlightInfoHolder holder = createInfoHolder(myFile); + setProgressLimit((long)elements.size() * visitors.length); final int chunkSize = Math.max(1, elements.size() / 100); // one percent precision is enough - for (final HighlightVisitor visitor : visitorArray) { + for (final HighlightVisitor visitor : visitors) { Runnable action = new Runnable() { public void run() { int nextLimit = chunkSize; @@ -533,6 +481,19 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP return gotHighlights; } + private static HighlightVisitor[] filterVisitors(HighlightVisitor[] highlightVisitors, final PsiFile file) { + final List visitors = new ArrayList(highlightVisitors.length); + List list = Arrays.asList(highlightVisitors); + for (HighlightVisitor visitor : DumbService.getInstance(file.getProject()).filterByDumbAwareness(list)) { + if (visitor.suitableForFile(file)) visitors.add(visitor); + } + LOG.assertTrue(!visitors.isEmpty(), list); + + HighlightVisitor[] visitorArray = visitors.toArray(new HighlightVisitor[visitors.size()]); + Arrays.sort(visitorArray, VISITOR_ORDER_COMPARATOR); + return visitorArray; + } + static Void cancelAndRestartDaemonLater(ProgressIndicator progress, final Project project, TextEditorHighlightingPass pass) { PassExecutorService.log(progress, pass, "Cancel and restart"); progress.cancel(); @@ -561,12 +522,9 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP return forceHighlightParents; } - protected HighlightInfoHolder createInfoHolder() { + protected HighlightInfoHolder createInfoHolder(final PsiFile file) { final HighlightInfoFilter[] filters = ApplicationManager.getApplication().getExtensions(HighlightInfoFilter.EXTENSION_POINT_NAME); - return new HighlightInfoHolder(myFile, filters); - } - protected AnnotationHolderImpl createAnnotationHolder() { - return new AnnotationHolderImpl(); + return new HighlightInfoHolder(file, filters); } private static Collection highlightTodos(PsiFile file, CharSequence text, int startOffset, int endOffset) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/analysis/DefaultHighlightVisitor.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/analysis/DefaultHighlightVisitor.java index 8fb3d0fbc248..79b10a407bf8 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/analysis/DefaultHighlightVisitor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/analysis/DefaultHighlightVisitor.java @@ -16,11 +16,9 @@ package com.intellij.codeInsight.daemon.impl.analysis; -import com.intellij.codeInsight.daemon.impl.AnnotationHolderImpl; -import com.intellij.codeInsight.daemon.impl.HighlightInfo; -import com.intellij.codeInsight.daemon.impl.HighlightInfoType; -import com.intellij.codeInsight.daemon.impl.HighlightVisitor; +import com.intellij.codeInsight.daemon.impl.*; import com.intellij.codeInsight.highlighting.HighlightErrorFilter; +import com.intellij.lang.Language; import com.intellij.lang.LanguageAnnotators; import com.intellij.lang.annotation.Annotation; import com.intellij.lang.annotation.Annotator; @@ -32,7 +30,9 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; +import org.jetbrains.annotations.NotNull; +import java.util.Collection; import java.util.List; /** @@ -84,8 +84,16 @@ public class DefaultHighlightVisitor extends PsiElementVisitor implements Highli runAnnotators(element); } + private static final PerThreadMap cachedAnnotators = new PerThreadMap() { + @NotNull + @Override + public Collection initialValue(@NotNull Language key) { + return LanguageAnnotators.INSTANCE.allForLanguage(key); + } + }; + private void runAnnotators(final PsiElement element) { - List annotators = LanguageAnnotators.INSTANCE.allForLanguage(element.getLanguage()); + List annotators = cachedAnnotators.get(element.getLanguage()); if (!annotators.isEmpty()) { final boolean dumb = DumbService.getInstance(myProject).isDumb(); //noinspection ForLoopReplaceableByForEach diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightInfoHolder.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightInfoHolder.java index 3b67c3c3e84b..a227ab81edb1 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightInfoHolder.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightInfoHolder.java @@ -39,7 +39,6 @@ public class HighlightInfoHolder { private int myErrorCount; private int myWarningCount; private int myInfoCount; - private boolean writable = false; private final List myInfos = new ArrayList(5); public HighlightInfoHolder(@NotNull PsiFile contextFile, @NotNull HighlightInfoFilter... filters) { @@ -48,7 +47,6 @@ public class HighlightInfoHolder { } public boolean add(@Nullable HighlightInfo info) { - if (!writable) throw new IllegalStateException("Update highlight holder after visit finished; "+this+"; info="+info); if (info == null || !accepted(info)) return false; HighlightSeverity severity = info.getSeverity(); @@ -73,8 +71,6 @@ public class HighlightInfoHolder { } public void clear() { - if (!writable) throw new IllegalStateException("Clearing holder after visit finished; " + this); - myErrorCount = 0; myWarningCount = 0; myInfoCount = 0; @@ -107,18 +103,6 @@ public class HighlightInfoHolder { return added; } - // ASSERTIONS ONLY - public void setWritable(final boolean writable) { - if (this.writable == writable) { - LOG.error("this.writable != writable"); - } - this.writable = writable; - } - - public boolean isWritable() { - return writable; - } - public int size() { return myInfos.size(); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java index eadac632bbe8..ff423b6dc5e1 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java @@ -18,7 +18,6 @@ package com.intellij.codeInsight.problems; import com.intellij.codeInsight.daemon.impl.*; import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder; -import com.intellij.lang.annotation.Annotation; import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; @@ -294,8 +293,8 @@ public class WolfTheProblemSolverImpl extends WolfTheProblemSolver { try { GeneralHighlightingPass pass = new GeneralHighlightingPass(myProject, psiFile, document, 0, document.getTextLength(), false) { - protected HighlightInfoHolder createInfoHolder() { - return new HighlightInfoHolder(psiFile, HighlightInfoFilter.EMPTY_ARRAY) { + protected HighlightInfoHolder createInfoHolder(final PsiFile file) { + return new HighlightInfoHolder(file, HighlightInfoFilter.EMPTY_ARRAY) { public boolean add(HighlightInfo info) { if (info != null && info.getSeverity() == HighlightSeverity.ERROR) { throw new HaveGotErrorException(info, myHasErrorElement); @@ -305,17 +304,6 @@ public class WolfTheProblemSolverImpl extends WolfTheProblemSolver { }; } - protected AnnotationHolderImpl createAnnotationHolder() { - return new AnnotationHolderImpl(){ - public boolean add(Annotation annotation) { - if (annotation != null && annotation.getSeverity() == HighlightSeverity.ERROR) { - HighlightInfo highlightInfo = HighlightInfo.fromAnnotation(annotation); - throw new HaveGotErrorException(highlightInfo, myHasErrorElement); - } - return super.add(annotation); - } - }; - } }; pass.collectInformation(progressIndicator); } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java index 57855dfbed18..c9c16028ab26 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java @@ -480,13 +480,10 @@ public class MultiHostRegistrarImpl implements MultiHostRegistrar { int end = escaper.getOffsetInHost(range.getEndOffset() - prevHostEndOffset - prefixLength, rangeInsideHost); if (end == -1) { end = rangeInsideHost.getEndOffset(); - tokens.add(Trinity.create(tokenType, host, new ProperTextRange(start, end))); prevHostEndOffset = shredEndOffset; } - else { - TextRange rangeInHost = new ProperTextRange(start, end); - tokens.add(Trinity.create(tokenType, host, rangeInHost)); - } + TextRange rangeInHost = new ProperTextRange(start, end); + tokens.add(Trinity.create(tokenType, host, rangeInHost)); } range = spilled; } diff --git a/platform/platform-api/src/com/intellij/injected/editor/DocumentWindow.java b/platform/platform-api/src/com/intellij/injected/editor/DocumentWindow.java index a85f1af70c1a..e2c3410e44cc 100644 --- a/platform/platform-api/src/com/intellij/injected/editor/DocumentWindow.java +++ b/platform/platform-api/src/com/intellij/injected/editor/DocumentWindow.java @@ -40,7 +40,7 @@ public interface DocumentWindow extends Document { TextRange intersectWithEditable(@NotNull TextRange range); @Nullable - TextRange getHostRange(int offset); + TextRange getHostRange(int hostOffset); int injectedToHostLine(int line); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyUnusedImportPass.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyUnusedImportPass.java index ef1905b2986a..3e4a48c740ca 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyUnusedImportPass.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyUnusedImportPass.java @@ -112,7 +112,6 @@ public class GroovyUnusedImportPass extends TextEditorHighlightingPass { } HighlightInfoHolder holder = new HighlightInfoHolder(myFile, HighlightInfoFilter.EMPTY_ARRAY); - holder.setWritable(true); List infos = ContainerUtil.map(annotations, new Function() { public HighlightInfo fun(Annotation annotation) { return HighlightInfo.fromAnnotation(annotation); diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java index b238e1170fde..691940fa6f07 100644 --- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java +++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java @@ -391,7 +391,6 @@ public class XmlHighlightVisitor extends XmlElementVisitor implements HighlightV if (!(tag instanceof HtmlTag)) { final HighlightInfoType tagProblemInfoType = HighlightInfoType.WRONG_REF; - IntentionAction[] quickFixes = new IntentionAction[]{removeAttributeIntention}; final ASTNode node = SourceTreeToPsiMap.psiElementToTree(attribute); assert node != null; @@ -403,9 +402,7 @@ public class XmlHighlightVisitor extends XmlElementVisitor implements HighlightV ); addToResults(highlightInfo); - for (IntentionAction quickFix : quickFixes) { - QuickFixAction.registerQuickFixAction(highlightInfo, quickFix); - } + QuickFixAction.registerQuickFixAction(highlightInfo, removeAttributeIntention); return highlightInfo; } @@ -496,7 +493,6 @@ public class XmlHighlightVisitor extends XmlElementVisitor implements HighlightV } private void doCheckRefs(final PsiElement value, final PsiReference[] references, int start) { - ProgressManager progressManager = ProgressManager.getInstance(); for (int i = start; i < references.length; ++i) { PsiReference reference = references[i]; ProgressManager.checkCanceled(); diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitorBasedInspection.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitorBasedInspection.java index 2a753b9e42c9..6bba6ffb293d 100644 --- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitorBasedInspection.java +++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitorBasedInspection.java @@ -73,7 +73,6 @@ public class XmlHighlightVisitorBasedInspection extends GlobalInspectionTool { return true; } }; - myHolder.setWritable(true); super.visitFile(file); }