1 package net.mograsim.plugin.asm.editor;
\r
3 import java.io.StringReader;
\r
5 import javax.xml.parsers.DocumentBuilder;
\r
6 import javax.xml.parsers.DocumentBuilderFactory;
\r
8 import org.eclipse.core.resources.IFile;
\r
9 import org.eclipse.core.resources.IMarker;
\r
10 import org.eclipse.core.runtime.CoreException;
\r
11 import org.eclipse.jface.text.DocumentEvent;
\r
12 import org.eclipse.jface.text.IDocumentListener;
\r
13 import org.xml.sax.InputSource;
\r
14 import org.xml.sax.SAXParseException;
\r
16 public class AsmDocumentValidator implements IDocumentListener
\r
19 private final IFile file;
\r
20 private IMarker marker;
\r
22 AsmDocumentValidator(IFile file)
\r
28 public void documentChanged(DocumentEvent event)
\r
30 if (this.marker != null)
\r
34 this.marker.delete();
\r
36 catch (CoreException e)
\r
38 e.printStackTrace();
\r
42 try (StringReader reader = new StringReader(event.getDocument().get());)
\r
44 DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
\r
45 documentBuilder.parse(new InputSource(reader));
\r
47 catch (Exception ex)
\r
51 this.marker = file.createMarker(IMarker.PROBLEM);
\r
52 this.marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
\r
53 this.marker.setAttribute(IMarker.MESSAGE, ex.getMessage());
\r
54 if (ex instanceof SAXParseException)
\r
56 SAXParseException saxParseException = (SAXParseException) ex;
\r
57 int lineNumber = saxParseException.getLineNumber();
\r
58 int offset = event.getDocument().getLineInformation(lineNumber - 1).getOffset() + saxParseException.getColumnNumber()
\r
60 this.marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
\r
61 this.marker.setAttribute(IMarker.CHAR_START, offset);
\r
62 this.marker.setAttribute(IMarker.CHAR_END, offset + 1);
\r
67 e.printStackTrace();
\r
73 public void documentAboutToBeChanged(DocumentEvent event)
\r