IDEADEV-40953 XML validation fails with IAE from ValidateXmlActionHandler.invoke()

This commit is contained in:
Maxim.Mossienko
2009-10-22 18:50:52 +04:00
parent bb681db141
commit 7dd48e38a9
2 changed files with 11 additions and 18 deletions
@@ -15,28 +15,27 @@
*/
package com.intellij.xml.actions;
import com.intellij.codeInsight.CodeInsightActionHandler;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.xml.XmlFile;
import com.intellij.util.Function;
import org.jetbrains.annotations.NotNull;
/**
* @author mike
*/
public class ValidateXmlAction extends AnAction /*extends BaseCodeInsightAction*/ {
public class ValidateXmlAction extends AnAction {
private static final Key<String> runningValidationKey = Key.create("xml.running.validation.indicator");
public ValidateXmlAction() {
}
private CodeInsightActionHandler getHandler(final @NotNull PsiFile file) {
private Function<PsiFile, Void> getHandler(final @NotNull PsiFile file) {
ValidateXmlActionHandler handler = new ValidateXmlActionHandler(true);
handler.setErrorReporter(
handler.new StdErrorReporter(
@@ -52,22 +51,18 @@ public class ValidateXmlAction extends AnAction /*extends BaseCodeInsightAction*
}
public void actionPerformed(AnActionEvent e) {
final PsiFile psiFile = LangDataKeys.PSI_FILE.getData(e.getDataContext());
if (psiFile == null) return;
doRunAction(psiFile);
doRunAction(LangDataKeys.PSI_FILE.getData(e.getDataContext()));
}
private void doRunAction(final @NotNull PsiFile psiFile) {
final Project project = psiFile.getProject();
CommandProcessor.getInstance().executeCommand(
project, new Runnable(){
CommandProcessor.getInstance().executeCommand(psiFile.getProject(), new Runnable(){
public void run(){
final Runnable action = new Runnable() {
public void run() {
try {
psiFile.putUserData(runningValidationKey, "");
getHandler(psiFile).invoke(project, null, psiFile);
getHandler(psiFile).fun(psiFile);
}
finally {
psiFile.putUserData(runningValidationKey, null);
@@ -15,13 +15,11 @@
*/
package com.intellij.xml.actions;
import com.intellij.codeInsight.CodeInsightActionHandler;
import com.intellij.ide.errorTreeView.NewErrorTreeViewPanel;
import com.intellij.javaee.UriUtil;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
@@ -35,6 +33,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.xml.*;
import com.intellij.ui.content.*;
import com.intellij.util.Function;
import com.intellij.util.ui.ErrorTreeView;
import com.intellij.util.ui.MessageCategory;
import com.intellij.xml.XmlBundle;
@@ -44,7 +43,6 @@ import org.apache.xerces.jaxp.JAXPConstants;
import org.apache.xerces.jaxp.SAXParserFactoryImpl;
import org.apache.xerces.util.XMLGrammarPoolImpl;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
@@ -66,7 +64,7 @@ import java.util.concurrent.Future;
/**
* @author Mike
*/
public class ValidateXmlActionHandler implements CodeInsightActionHandler {
public class ValidateXmlActionHandler implements Function<PsiFile, Void> {
private static final Logger LOG = Logger.getInstance("#com.intellij.xml.actions.ValidateXmlAction");
private static final Key<NewErrorTreeViewPanel> KEY = Key.create("ValidateXmlAction.KEY");
@NonNls private static final String SCHEMA_FULL_CHECKING_FEATURE_ID = "http://apache.org/xml/features/validation/schema-full-checking";
@@ -83,8 +81,6 @@ public class ValidateXmlActionHandler implements CodeInsightActionHandler {
private final boolean myForceChecking;
@NonNls
private static final String ENTITY_RESOLVER_PROPERTY_NAME = "http://apache.org/xml/properties/internal/entity-resolver";
@NonNls
public static final String XMLNS_PREFIX = "xmlns";
public ValidateXmlActionHandler(boolean _forceChecking) {
myForceChecking = _forceChecking;
@@ -349,10 +345,12 @@ public class ValidateXmlActionHandler implements CodeInsightActionHandler {
}
}
public void invoke(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) {
public Void fun(PsiFile file) {
Project project = file.getProject();
PsiDocumentManager.getInstance(project).commitAllDocuments();
doValidate(project,file);
return null;
}
public void doValidate(Project project, PsiFile file) {