/** * Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.builder.syntaxchecker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.text.IDocument; import org.python.pydev.builder.PyDevBuilderPrefPage; import org.python.pydev.builder.PyDevBuilderVisitor; import org.python.pydev.core.MisconfigurationException; import org.python.pydev.core.log.Log; import org.python.pydev.editor.codecompletion.revisited.modules.SourceModule; import org.python.pydev.logging.DebugSettings; import org.python.pydev.parser.PyParser; import org.python.pydev.plugin.nature.PythonNature; import org.python.pydev.shared_core.callbacks.ICallback0; /** * Whenever a given resource is changed, a syntax check is done, updating errors related to the syntax. * * @author Fabio */ public class PySyntaxChecker extends PyDevBuilderVisitor { @Override public void visitChangedResource(IResource resource, ICallback0<IDocument> document, IProgressMonitor monitor) { PythonNature nature = getPythonNature(resource); if (nature == null) { return; } if (PyDevBuilderPrefPage.getAnalyzeOnlyActiveEditor()) { if (DebugSettings.DEBUG_ANALYSIS_REQUESTS) { Log.toLogFile(this, "PyDevBuilderPrefPage.getAnalyzeOnlyActiveEditor()"); } return; //not analyzed with this builder... always from parser changes. } if (DebugSettings.DEBUG_ANALYSIS_REQUESTS) { Log.toLogFile(this, "Checking!"); } IDocument doc = document.call(); if (doc == null) { return; } SourceModule mod; try { mod = getSourceModule(resource, doc, nature); } catch (MisconfigurationException e1) { Log.log(e1); return; } Throwable parseError = mod.parseError; try { PyParser.deleteErrorMarkers(resource); } catch (CoreException e) { Log.log(e); } if (parseError != null) { PyParser.createParserErrorMarkers(parseError, resource, doc); } } @Override public void visitRemovedResource(IResource resource, ICallback0<IDocument> document, IProgressMonitor monitor) { // Nothing needs to be done in this case } }