IDEA-129370 Support XML Schema (XSD) 1.1

This commit is contained in:
Dmitry Avdeev
2015-04-27 16:49:35 +03:00
parent 73851fbb19
commit e79e75784e
4 changed files with 13 additions and 10 deletions
@@ -147,7 +147,7 @@ public class StdErrorReporter extends ErrorReporter {
new Runnable() {
@Override
public void run() {
final VirtualFile file = myHandler.getFile(ex.getPublicId(), ex.getSystemId());
final VirtualFile file = myHandler.getProblemFile(ex);
myErrorsView.addMessage(
problemType == ValidateXmlActionHandler.ProblemType.WARNING ? MessageCategory.WARNING : MessageCategory.ERROR,
new String[]{ex.getLocalizedMessage()},
@@ -49,12 +49,7 @@
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
The simpleType element and all of its members are defined
in datatypes.xsd</xs:documentation>
</xs:annotation>
<xs:include schemaLocation="datatypes.xsd"/>
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd">
<xs:annotation>
@@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.xml.*;
@@ -76,9 +77,16 @@ public class ValidateXmlActionHandler {
myErrorReporter = errorReporter;
}
public VirtualFile getFile(String publicId, String systemId) {
public VirtualFile getProblemFile(SAXParseException ex) {
String publicId = ex.getPublicId();
String systemId = ex.getSystemId();
if (publicId == null) {
if (systemId != null) {
if (systemId.startsWith("file:/")) {
VirtualFile file = VirtualFileManager.getInstance()
.findFileByUrl(systemId.startsWith("file://") ? systemId : systemId.replace("file:/", "file://"));
if (file != null) return file;
}
final String path = myXmlResourceResolver.getPathByPublicId(systemId);
if (path != null) return UriUtil.findRelativeFile(path,null);
final PsiFile file = myXmlResourceResolver.resolve(null, systemId);
@@ -95,7 +103,7 @@ public class ValidateXmlActionHandler {
public String buildMessageString(SAXParseException ex) {
String msg = "(" + ex.getLineNumber() + ":" + ex.getColumnNumber() + ") " + ex.getMessage();
final VirtualFile file = getFile(ex.getPublicId(), ex.getSystemId());
final VirtualFile file = getProblemFile(ex);
if ( file != null && !file.equals(myFile.getVirtualFile())) {
msg = file.getName() + ":" + msg;
@@ -146,7 +146,7 @@ public class ExternalDocumentValidator {
return;
}
final VirtualFile errorFile = myHandler.getFile(e.getPublicId(), e.getSystemId());
final VirtualFile errorFile = myHandler.getProblemFile(e);
if (!Comparing.equal(errorFile, file.getVirtualFile()) && errorFile != null) {
return; // error in attached schema
}