mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-207657 Quick fix to escaping "&" breaks inside injected languages inside XML
This commit is contained in:
@@ -21,6 +21,9 @@
|
||||
<orderEntry type="module" module-name="intellij.platform.tests" scope="TEST" />
|
||||
<orderEntry type="library" scope="TEST" name="xml-resolver" level="project" />
|
||||
<orderEntry type="library" name="NanoXML" level="project" />
|
||||
<orderEntry type="module" module-name="intellij.platform.langInjection" scope="TEST" />
|
||||
<orderEntry type="module" module-name="intellij.xml.langInjection" scope="RUNTIME" />
|
||||
<orderEntry type="module" module-name="intellij.java.langInjection" />
|
||||
</component>
|
||||
<component name="copyright">
|
||||
<Base>
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.codeInsight.daemon.quickFix;
|
||||
|
||||
import com.intellij.codeInsight.daemon.XmlErrorMessages;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler;
|
||||
import com.intellij.ide.highlighter.XmlFileType;
|
||||
import com.intellij.openapi.fileTypes.PlainTextLanguage;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiLanguageInjectionHost;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase;
|
||||
import org.intellij.plugins.intelliLang.inject.LanguageInjectionSupport;
|
||||
import org.intellij.plugins.intelliLang.inject.TemporaryPlacesRegistry;
|
||||
|
||||
public class XmlQuickFixTest extends LightPlatformCodeInsightFixtureTestCase {
|
||||
|
||||
public void testEscapeAmpersandInInjected() {
|
||||
XmlFile file = (XmlFile)myFixture.configureByText(XmlFileType.INSTANCE, "<a b=\" &<caret>\"/>");
|
||||
PsiElement element = file.getRootTag().getAttribute("b").getValueElement();
|
||||
LanguageInjectionSupport support = TemporaryPlacesRegistry.getInstance(getProject()).getLanguageInjectionSupport();
|
||||
assertTrue(support.addInjectionInPlace(PlainTextLanguage.INSTANCE, (PsiLanguageInjectionHost)element));
|
||||
IntentionAction intention = myFixture.getAvailableIntention(XmlErrorMessages.message("escape.ampersand.quickfix"));
|
||||
assertNotNull(intention);
|
||||
ShowIntentionActionsHandler.chooseActionAndInvoke(file, myFixture.getEditor(), intention, "");
|
||||
myFixture.checkResult("<a b=\" &\"/>");
|
||||
}
|
||||
}
|
||||
+7
-1
@@ -19,8 +19,11 @@ import com.intellij.codeInsight.daemon.XmlErrorMessages;
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.QuickFixAction;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.lang.injection.InjectedLanguageManager;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiErrorElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
@@ -61,8 +64,11 @@ public class XmlErrorQuickFixProvider implements ErrorQuickFixProvider {
|
||||
|
||||
@Override
|
||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) {
|
||||
PsiFile topLevelFile = InjectedLanguageManager.getInstance(project).getTopLevelFile(file);
|
||||
Document document = PsiDocumentManager.getInstance(project).getDocument(topLevelFile);
|
||||
assert document != null;
|
||||
final int textOffset = element.getTextOffset();
|
||||
editor.getDocument().replaceString(textOffset,textOffset + 1,AMP_ENTITY);
|
||||
document.replaceString(textOffset, textOffset + 1, AMP_ENTITY);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user