Fixed IntelliLang default injections for multi-part Python string literals (PY-10983)

This commit is contained in:
Andrey Vlasovskikh
2013-10-11 16:12:16 +04:00
parent 0e3f000137
commit cac4b7a29d
@@ -1,12 +1,20 @@
package com.jetbrains.python.intelliLang;
import com.intellij.lang.Language;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiLanguageInjectionHost;
import com.jetbrains.python.patterns.PythonPatterns;
import com.jetbrains.python.psi.PyElement;
import com.jetbrains.python.psi.PyStringLiteralExpression;
import org.intellij.plugins.intelliLang.inject.AbstractLanguageInjectionSupport;
import org.intellij.plugins.intelliLang.inject.config.BaseInjection;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.List;
/**
* @author yole
*/
@@ -34,4 +42,26 @@ public class PyLanguageInjectionSupport extends AbstractLanguageInjectionSupport
public boolean useDefaultInjector(PsiLanguageInjectionHost host) {
return true;
}
@Override
public BaseInjection createInjection(Element element) {
// This is how DefaultLanguageInjector gets its injection ranges
return new BaseInjection(getId()) {
@NotNull
@Override
public List<TextRange> getInjectedArea(PsiElement element) {
if (element instanceof PyStringLiteralExpression) {
return ((PyStringLiteralExpression)element).getStringValueTextRanges();
}
return super.getInjectedArea(element);
}
};
}
@Override
public boolean addInjectionInPlace(Language language, PsiLanguageInjectionHost psiElement) {
// XXX: Disable temporary injections via intention actions for Python elements, since TemporaryPlacesInjector cannot handle elements
// with multiple injection text ranges (PY-10691)
return true;
}
}