mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-114710 Groovy: @Language annotation is not inserted before concatenated string on Alt+Enter
This commit is contained in:
+23
-15
@@ -217,24 +217,32 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
|
||||
final PsiModifierListOwner modifierListOwner,
|
||||
@NotNull PsiLanguageInjectionHost host,
|
||||
final String languageId) {
|
||||
// todo add languageId comment
|
||||
return doAddLanguageAnnotation(project, modifierListOwner, host, languageId, new Processor<PsiLanguageInjectionHost>() {
|
||||
@Override
|
||||
public boolean process(PsiLanguageInjectionHost host) {
|
||||
final Configuration.AdvancedConfiguration configuration = Configuration.getProjectInstance(project).getAdvancedConfiguration();
|
||||
boolean allowed = configuration.isSourceModificationAllowed();
|
||||
configuration.setSourceModificationAllowed(true);
|
||||
try {
|
||||
return doInjectInJava(project, host, host, languageId);
|
||||
}
|
||||
finally {
|
||||
configuration.setSourceModificationAllowed(allowed);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static boolean doAddLanguageAnnotation(final Project project,
|
||||
final PsiModifierListOwner modifierListOwner,
|
||||
@NotNull PsiLanguageInjectionHost host,
|
||||
final String languageId,
|
||||
Processor<PsiLanguageInjectionHost> annotationFixer) {
|
||||
if (modifierListOwner.getModifierList() == null || !PsiUtil.isLanguageLevel5OrHigher(modifierListOwner)) return false;
|
||||
final Configuration.AdvancedConfiguration configuration = Configuration.getProjectInstance(project).getAdvancedConfiguration();
|
||||
if (!configuration.isSourceModificationAllowed()) {
|
||||
// todo add languageId comment
|
||||
host.putUserData(InjectLanguageAction.FIX_KEY, new Processor<PsiLanguageInjectionHost>() {
|
||||
@Override
|
||||
public boolean process(PsiLanguageInjectionHost host) {
|
||||
boolean allowed = configuration.isSourceModificationAllowed();
|
||||
configuration.setSourceModificationAllowed(true);
|
||||
try {
|
||||
return doInjectInJava(project, host, host, languageId);
|
||||
}
|
||||
finally {
|
||||
configuration.setSourceModificationAllowed(allowed);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
host.putUserData(InjectLanguageAction.FIX_KEY, annotationFixer);
|
||||
return false;
|
||||
}
|
||||
if (!OrderEntryFix.ensureAnnotationsJarInPath(ModuleUtilCore.findModuleForPsiElement(modifierListOwner))) {
|
||||
|
||||
+23
-2
@@ -23,6 +23,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.light.LightElement;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.util.NullableFunction;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.intellij.plugins.intelliLang.Configuration;
|
||||
import org.intellij.plugins.intelliLang.inject.AbstractLanguageInjectionSupport;
|
||||
@@ -187,16 +188,36 @@ public class GroovyLanguageInjectionSupport extends AbstractLanguageInjectionSup
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
if (parent instanceof PsiVariable) {
|
||||
if (JavaLanguageInjectionSupport.doAddLanguageAnnotation(project, (PsiModifierListOwner)parent, host, languageId)) return true;
|
||||
Processor<PsiLanguageInjectionHost> fixer = getAnnotationFixer(project, languageId);
|
||||
if (JavaLanguageInjectionSupport.doAddLanguageAnnotation(project, (PsiModifierListOwner)parent, host, languageId, fixer)) return true;
|
||||
}
|
||||
else if (target instanceof PsiVariable && !(target instanceof LightElement)) {
|
||||
if (JavaLanguageInjectionSupport.doAddLanguageAnnotation(project, (PsiModifierListOwner)target, host, languageId)) return true;
|
||||
Processor<PsiLanguageInjectionHost> fixer = getAnnotationFixer(project, languageId);
|
||||
if (JavaLanguageInjectionSupport.doAddLanguageAnnotation(project, (PsiModifierListOwner)target, host, languageId, fixer)) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static Processor<PsiLanguageInjectionHost> getAnnotationFixer(final Project project, final String languageId) {
|
||||
return new Processor<PsiLanguageInjectionHost>() {
|
||||
@Override
|
||||
public boolean process(PsiLanguageInjectionHost host) {
|
||||
final Configuration.AdvancedConfiguration configuration = Configuration.getProjectInstance(project).getAdvancedConfiguration();
|
||||
boolean allowed = configuration.isSourceModificationAllowed();
|
||||
configuration.setSourceModificationAllowed(true);
|
||||
try {
|
||||
return doInject(languageId, host, host);
|
||||
}
|
||||
finally {
|
||||
configuration.setSourceModificationAllowed(allowed);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private static boolean isStringLiteral(PsiLanguageInjectionHost element) {
|
||||
if (element instanceof GrStringContent) {
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user