Merge remote-tracking branch 'origin/master'

This commit is contained in:
anna
2013-02-25 19:34:13 +01:00
3 changed files with 27 additions and 2 deletions
@@ -26,6 +26,8 @@
<concatenationAwareInjector implementation="org.intellij.plugins.intelliLang.inject.java.ConcatenationInjector"/>
<psi.referenceContributor implementation="org.intellij.plugins.intelliLang.inject.java.LanguageReferenceProvider"/>
<daemon.highlightInfoFilter implementation="org.intellij.plugins.intelliLang.inject.CustomErrorElementFilter"/>
</extensions>
<extensions defaultExtensionNs="org.intellij.intelliLang">
@@ -15,20 +15,42 @@
*/
package org.intellij.plugins.intelliLang.inject;
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.codeInsight.daemon.impl.HighlightInfoFilter;
import com.intellij.codeInsight.highlighting.HighlightErrorFilter;
import com.intellij.lang.annotation.HighlightSeverity;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiErrorElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Gregory.Shrago
*/
public class CustomErrorElementFilter extends HighlightErrorFilter {
public class CustomErrorElementFilter extends HighlightErrorFilter implements HighlightInfoFilter {
public boolean shouldHighlightErrorElement(@NotNull final PsiErrorElement element) {
return !value(element);
}
public static boolean value(final PsiErrorElement psiErrorElement) {
return Boolean.TRUE.equals(psiErrorElement.getContainingFile().getUserData(InjectedLanguageUtil.FRANKENSTEIN_INJECTION));
return isFrankenstein(psiErrorElement.getContainingFile());
}
@Override
public boolean accept(@NotNull HighlightInfo highlightInfo, @Nullable PsiFile file) {
if (highlightInfo.getSeverity() != HighlightSeverity.WARNING &&
highlightInfo.getSeverity() != HighlightSeverity.WEAK_WARNING) return true;
if (!isFrankenstein(file)) return true;
int start = highlightInfo.getStartOffset();
int end = highlightInfo.getEndOffset();
// the bad news are: offsets may be in host file or in injected file
String text = (end < file.getTextLength() ? file.getText() : file.getContext().getContainingFile().getText()).substring(start, end);
return !"missingValue".equals(text);
}
private static boolean isFrankenstein(PsiFile file) {
return file != null && Boolean.TRUE.equals(file.getUserData(InjectedLanguageUtil.FRANKENSTEIN_INJECTION));
}
}
@@ -223,6 +223,7 @@ public class InjectorUtils {
String prefix = ObjectUtils.notNull(map.get("prefix"), "");
String suffix = ObjectUtils.notNull(map.get("suffix"), "");
BaseInjection injection = new BaseInjection(supportId);
injection.setDisplayName(text);
injection.setInjectedLanguageId(languageId);
injection.setPrefix(prefix);
injection.setSuffix(suffix);