package com.babel17.netbeans; import org.netbeans.modules.parsing.spi.*; import org.netbeans.modules.parsing.api.*; import com.babel17.interpreter.parser.ErrorMessage; import com.babel17.naive.Interpreter; import com.babel17.naive.FileCentral; import java.util.*; import java.io.*; import java.util.logging.*; import javax.swing.event.ChangeListener; //import org.netbeans.modules.csl.spi.ParserResult; //import org.netbeans.modules.csl.spi.DefaultError; import com.babel17.interpreter.parser.ErrorMessage; import com.babel17.syntaxtree.Location; import com.babel17.syntaxtree.Source; import javax.swing.text.Document; import javax.swing.text.StyledDocument; import javax.swing.text.BadLocationException; //import org.netbeans.spi.editor.hints.*; import org.netbeans.spi.editor.errorstripe.UpToDateStatus; import org.openide.text.NbDocument; import org.openide.filesystems.FileObject; import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; public class Babel17Parser extends Parser { private Snapshot snapshot; private Collection<ErrorMessage> errors; @Override public void parse(Snapshot snapshot, Task task, SourceModificationEvent event) { Document document = snapshot.getSource().getDocument(false); Babel17EditorStatusProvider p = (Babel17EditorStatusProvider) document.getProperty(Babel17EditorStatusProviderFactory.PROP); if (p != null) p.setStatus(UpToDateStatus.UP_TO_DATE_PROCESSING); this.snapshot = snapshot; Reader reader = new StringReader(snapshot.getText().toString()); try { FileObject fo = snapshot.getSource().getFileObject(); Project project = FileOwnerQuery.getOwner(fo); FileCentral fc = null; if (project instanceof Babel17Project) { fc = ((Babel17Project) project).getFileCentral(); } else fc = new FileCentral(); errors = Interpreter.parseAndAnalyze(fc, new Source(fo.getPath()), reader); } catch (IOException ex) { Logger.getLogger(Babel17Parser.class.getName()).log(Level.WARNING, null, ex); } } @Override public Result getResult(Task task) { return new Babel17ParserResult(snapshot, errors); } @Override public void cancel() { } @Override public void addChangeListener(ChangeListener changeListener) { } @Override public void removeChangeListener(ChangeListener changeListener) { } public static class Babel17ParserResult extends Result { private Collection<ErrorMessage> errors; private boolean valid = true; Babel17ParserResult(Snapshot snapshot, Collection<ErrorMessage> errors) { super(snapshot); this.errors = errors; } /* @Override public List<org.netbeans.modules.csl.api.Error> getDiagnostics() { return generateDefaultErrors(); }*/ public Collection<ErrorMessage> getErrors() { if (!valid) { return java.util.Collections.emptyList(); } else { return errors; } } /* public List<org.netbeans.modules.csl.api.Error> generateDefaultErrors() { Collection<ErrorMessage> syntaxErrors = getErrors(); Document document = getSnapshot().getSource().getDocument(false); List<org.netbeans.modules.csl.api.Error> errors = new ArrayList<org.netbeans.modules.csl.api.Error>(); org.openide.filesystems.FileObject fo = getSnapshot().getSource().getFileObject(); for (ErrorMessage error : syntaxErrors) { Location loc = error.location().normalize(); int start = NbDocument.findLineOffset((StyledDocument) document, loc.startLine() - 1) + loc.startColumn() - 1; int end = NbDocument.findLineOffset((StyledDocument) document, loc.endLine() - 1) + loc.endColumn(); String msg = error.message(); org.netbeans.modules.csl.api.Error e = DefaultError.createDefaultError("SYNTAX_ERROR", msg, msg, fo, start, end, false, org.netbeans.modules.csl.api.Severity.ERROR); errors.add(e); } return errors; }*/ @Override protected void invalidate() { valid = false; } } }