/** * Copyright (C) 2012 - 2013 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.eclim.plugin.pydev; import java.util.ArrayList; import java.util.List; import org.eclim.Services; import org.eclim.logging.Logger; import org.eclim.plugin.AbstractPluginResources; import org.eclim.plugin.core.preference.PreferenceFactory; import org.eclim.plugin.core.preference.Preferences; import org.eclim.plugin.core.preference.PreferencesOptionHandler; import org.eclim.plugin.core.project.ProjectManagement; import org.eclim.plugin.core.project.ProjectNatureFactory; import org.eclim.plugin.pydev.project.PydevProjectManager; import org.python.pydev.core.ICodeCompletionASTManager; import org.python.pydev.core.ICompletionState; import org.python.pydev.core.IPythonNature; import org.python.pydev.core.IToken; import org.python.pydev.editor.codecompletion.revisited.CompletionCache; import org.python.pydev.editor.codecompletion.revisited.CompletionStateFactory; import org.python.pydev.editor.preferences.PydevEditorPrefs; import org.python.pydev.plugin.nature.PythonNature; import com.python.pydev.analysis.AnalysisPreferenceInitializer; /** * Implementation of AbstractPluginResources. * * @author Eric Van Dewoestine */ public class PluginResources extends AbstractPluginResources { private static final Logger logger = Logger.getLogger(PluginResources.class); /** * Name that can be used to lookup this PluginResources from * {@link Services#getPluginResources(String)}. */ public static final String NAME = "org.eclim.pydev"; @Override public void initialize(String name) { super.initialize(name); // add the nature alias ProjectNatureFactory.addNature("python", PythonNature.PYTHON_NATURE_ID); ProjectManagement.addProjectManager( PythonNature.PYTHON_NATURE_ID, new PydevProjectManager()); PreferenceFactory.addPreferences(PythonNature.PYTHON_NATURE_ID, // "PYDEV org.eclim.python.builtins {} JSON{}\n" + "PYDEV org.eclim.python.ignore.unresolved.imports [] JSON[]\n" + "PYDEV org.eclim.python.ignore.builtin.reserved [] JSON[]" ); // Note: pydev doesn't currently support project level preferences PreferencesOptionHandler handler = new PreferencesOptionHandler( PythonNature.PYTHON_NATURE_ID, false); handler.addSupportedPreferences("org.python.pydev", new String[]{ PydevEditorPrefs.TAB_WIDTH, }); new AnalysisPreferenceInitializer().initializeDefaultPreferences(); handler.addSupportedPreferences("com.python.pydev.analysis", new String[]{ AnalysisPreferenceInitializer.NAMES_TO_IGNORE_UNUSED_VARIABLE, AnalysisPreferenceInitializer.NAMES_TO_IGNORE_UNUSED_IMPORT, AnalysisPreferenceInitializer.NAMES_TO_CONSIDER_GLOBALS, }); Preferences.addOptionHandler(handler); PreferenceFactory.addOptions(PythonNature.PYTHON_NATURE_ID, "PYDEV org.python.pydev.TAB_WIDTH \\d+\n" + "PYDEV com.python.pydev.analysis.NAMES_TO_CONSIDER_GLOBALS\n" + "PYDEV com.python.pydev.analysis.NAMES_TO_IGNORE_UNUSED_VARIABLE\n" + "PYDEV com.python.pydev.analysis.NAMES_TO_IGNORE_UNUSED_IMPORT" ); // pre-init the builtin completions for the python natures so that users // don't have to wait on this on the first save List<IPythonNature> natures = PythonNature.getAllPythonNatures(); logger.debug("pre-loading python builtin completions..."); for (IPythonNature nature : natures){ ICompletionState completionState = CompletionStateFactory .getEmptyCompletionState(nature, new CompletionCache()); ICodeCompletionASTManager manager = nature.getAstManager(); if (manager != null){ // this is the part that takes some time to complete manager.getBuiltinCompletions(completionState, new ArrayList<IToken>()); } } logger.debug("finished loading python builtin completions."); } @Override protected String getBundleBaseName() { return "org/eclim/plugin/pydev/messages"; } }