diff --git a/plugins/org.python.pydev.ast/src/org/python/pydev/core/templates/PyDocumentTemplateContext.java b/plugins/org.python.pydev.ast/src/org/python/pydev/core/templates/PyDocumentTemplateContext.java index 218c1c87aa..d4a3c9888c 100644 --- a/plugins/org.python.pydev.ast/src/org/python/pydev/core/templates/PyDocumentTemplateContext.java +++ b/plugins/org.python.pydev.ast/src/org/python/pydev/core/templates/PyDocumentTemplateContext.java @@ -18,8 +18,8 @@ import org.python.pydev.core.IPyEdit; import org.python.pydev.core.IPySourceViewer; import org.python.pydev.core.IPythonNature; +import org.python.pydev.core.ISourceViewerForTemplates; import org.python.pydev.core.MisconfigurationException; -import org.python.pydev.core.autoedit.DefaultIndentPrefs; import org.python.pydev.core.docutils.PySelection; import org.python.pydev.core.interactive_console.IScriptConsoleViewer; import org.python.pydev.parser.fastparser.FastParser; @@ -36,7 +36,7 @@ */ public final class PyDocumentTemplateContext extends DocumentTemplateContextWithIndent { - public IPyEdit viewer; //May be null + public ISourceViewerForTemplates edit; //May be null /** * This constructor is meant for tests! @@ -47,9 +47,9 @@ public PyDocumentTemplateContext(TemplateContextType type, IDocument document, i } public PyDocumentTemplateContext(TemplateContextType type, IDocument document, int offset, int length, - String indentTo, IPyEdit viewer) { - this(type, document, offset, length, indentTo, getIndentPrefs(viewer)); - this.viewer = viewer; + String indentTo, ISourceViewerForTemplates viewer) { + this(type, document, offset, length, indentTo, viewer.getIndentPrefs()); + this.edit = viewer; } // Methods below are Used in scripting @@ -79,15 +79,15 @@ public Class getBadLocationExceptionClass() { } public boolean isCythonFile() { - if (this.viewer instanceof IPySourceViewer) { - return ((IPySourceViewer) this.viewer).getEdit().isCythonFile(); + if (this.edit != null) { + return edit.isCythonFile(); } return false; } public File getEditorFile() { - if (this.viewer instanceof IPySourceViewer) { - return ((IPySourceViewer) this.viewer).getEdit().getEditorFile(); + if (this.edit != null) { + return this.edit.getEditorFile(); } return new File(""); } @@ -96,9 +96,9 @@ public int getGrammarVersion() { //Other possibilities //org.eclipse.jface.text.source.SourceViewer (in compare) - if (this.viewer instanceof IPySourceViewer) { + if (this.edit instanceof IPySourceViewer) { try { - IPythonNature nature = ((IPySourceViewer) this.viewer).getEdit().getPythonNature(); + IPythonNature nature = ((IPySourceViewer) this.edit).getEdit().getPythonNature(); if (nature != null) { return nature.getGrammarVersion(); } @@ -106,9 +106,9 @@ public int getGrammarVersion() { } } - if (this.viewer instanceof IScriptConsoleViewer) { + if (this.edit instanceof IScriptConsoleViewer) { //interactive console - IScriptConsoleViewer v = (IScriptConsoleViewer) this.viewer; + IScriptConsoleViewer v = (IScriptConsoleViewer) this.edit; IInterpreterInfo interpreterInfo = (IInterpreterInfo) v.getInterpreterInfo(); if (interpreterInfo != null) { return interpreterInfo.getGrammarVersion(); @@ -119,9 +119,9 @@ public int getGrammarVersion() { } public String getModuleName() { - if (this.viewer instanceof IPySourceViewer) { + if (this.edit instanceof IPySourceViewer) { try { - IPySourceViewer pyViewer = (IPySourceViewer) this.viewer; + IPySourceViewer pyViewer = (IPySourceViewer) this.edit; IPyEdit edit = pyViewer.getEdit(); IPythonNature nature = edit.getPythonNature(); if (nature != null) { @@ -139,43 +139,31 @@ public String getModuleName() { * returns a DocumentTemplateContext for the context type at the given location. * * @param contextType the context type for the template. - * @param viewer the viewer for which the context is created + * @param edit the viewer for which the context is created * @param region the region into document for which the context is created * @return a template context that can handle template insertion at the given location, or null */ public static PyDocumentTemplateContext createContext(final TemplateContextType contextType, - final IPyEdit viewer, final IRegion region, String indent) { + final ISourceViewerForTemplates edit, final IRegion region, String indent) { if (contextType != null) { - IDocument document = viewer.getDocument(); + IDocument document = edit.getDocument(); final String indentTo = indent; return new PyDocumentTemplateContext(contextType, document, region.getOffset(), region.getLength(), - indentTo, viewer); + indentTo, edit); } return null; } public static PyDocumentTemplateContext createContext(final TemplateContextType contextType, - final IPyEdit viewer, final IRegion region) { + final ISourceViewerForTemplates edit, final IRegion region) { if (contextType != null) { - IDocument document = viewer.getDocument(); - ICoreTextSelection textSelection = viewer.getTextSelection(); + IDocument document = edit.getDocument(); + ICoreTextSelection textSelection = edit.getTextSelection(); PySelection selection = new PySelection(document, textSelection); String indent = selection.getIndentationFromLine(); - return PyDocumentTemplateContext.createContext(contextType, viewer, region, indent); + return PyDocumentTemplateContext.createContext(contextType, edit, region, indent); } return null; } - /** - * @return the indent preferences to be used. - */ - private static IIndentPrefs getIndentPrefs(IPyEdit viewer) { - if (viewer instanceof IPySourceViewer) { - IPySourceViewer pyViewer = (IPySourceViewer) viewer; - return pyViewer.getEdit().getIndentPrefs(); - } else { - return DefaultIndentPrefs.get(null); - } - } - } \ No newline at end of file diff --git a/plugins/org.python.pydev.core/src/org/python/pydev/core/IPyEdit.java b/plugins/org.python.pydev.core/src/org/python/pydev/core/IPyEdit.java index 6f86e39e14..584ecc1eca 100644 --- a/plugins/org.python.pydev.core/src/org/python/pydev/core/IPyEdit.java +++ b/plugins/org.python.pydev.core/src/org/python/pydev/core/IPyEdit.java @@ -9,19 +9,16 @@ */ package org.python.pydev.core; -import java.io.File; - import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.python.pydev.shared_core.editor.IBaseEditor; import org.python.pydev.shared_core.parsing.IParserObserver; -import org.python.pydev.shared_core.string.ICoreTextSelection; /** * @author Fabio */ public interface IPyEdit extends IParserObserver, IBaseEditor, IPyFormatStdProvider, IGrammarVersionProvider, - IPyEditOfflineActionListener { + IPyEditOfflineActionListener, IPyEditCore, ISourceViewerForTemplates { static public final String EDITOR_ID = "org.python.pydev.editor.PythonEditor"; @@ -42,16 +39,10 @@ public interface IPyEdit extends IParserObserver, IBaseEditor, IPyFormatStdProvi /* SimpleNode*/ Object getAST(); - File getEditorFile(); - long getAstModificationTimeStamp(); IFile getIFile(); - boolean isCythonFile(); - /* PyParser */ Object getParser(); - ICoreTextSelection getTextSelection(); - } diff --git a/plugins/org.python.pydev.core/src/org/python/pydev/core/IPyEditCore.java b/plugins/org.python.pydev.core/src/org/python/pydev/core/IPyEditCore.java new file mode 100644 index 0000000000..c8ea0484e5 --- /dev/null +++ b/plugins/org.python.pydev.core/src/org/python/pydev/core/IPyEditCore.java @@ -0,0 +1,9 @@ +package org.python.pydev.core; + +import org.eclipse.jface.text.IDocument; + +public interface IPyEditCore { + + IDocument getDocument(); + +} diff --git a/plugins/org.python.pydev.core/src/org/python/pydev/core/IPySourceViewer.java b/plugins/org.python.pydev.core/src/org/python/pydev/core/IPySourceViewer.java index 53162b3b7e..38d4f71bc9 100644 --- a/plugins/org.python.pydev.core/src/org/python/pydev/core/IPySourceViewer.java +++ b/plugins/org.python.pydev.core/src/org/python/pydev/core/IPySourceViewer.java @@ -1,6 +1,6 @@ package org.python.pydev.core; -public interface IPySourceViewer { +public interface IPySourceViewer extends ISourceViewerForTemplates { IPyEdit getEdit(); diff --git a/plugins/org.python.pydev.core/src/org/python/pydev/core/ISourceViewerForTemplates.java b/plugins/org.python.pydev.core/src/org/python/pydev/core/ISourceViewerForTemplates.java new file mode 100644 index 0000000000..9bb746d8b0 --- /dev/null +++ b/plugins/org.python.pydev.core/src/org/python/pydev/core/ISourceViewerForTemplates.java @@ -0,0 +1,20 @@ +package org.python.pydev.core; + +import java.io.File; + +import org.eclipse.jface.text.IDocument; +import org.python.pydev.shared_core.string.ICoreTextSelection; + +public interface ISourceViewerForTemplates { + + boolean isCythonFile(); + + File getEditorFile(); + + IIndentPrefs getIndentPrefs(); + + IDocument getDocument(); + + ICoreTextSelection getTextSelection(); + +} diff --git a/plugins/org.python.pydev.core/src/org/python/pydev/core/interactive_console/IScriptConsoleViewer.java b/plugins/org.python.pydev.core/src/org/python/pydev/core/interactive_console/IScriptConsoleViewer.java index 2576d2e677..631aafd21e 100644 --- a/plugins/org.python.pydev.core/src/org/python/pydev/core/interactive_console/IScriptConsoleViewer.java +++ b/plugins/org.python.pydev.core/src/org/python/pydev/core/interactive_console/IScriptConsoleViewer.java @@ -9,13 +9,13 @@ *******************************************************************************/ package org.python.pydev.core.interactive_console; -import org.eclipse.jface.text.IDocument; +import org.python.pydev.core.ISourceViewerForTemplates; /** * Interface that must be implemented by the console viewer. Provides info related to what * may be edited or not. */ -public interface IScriptConsoleViewer /* extends ITextViewer */ { +public interface IScriptConsoleViewer extends ISourceViewerForTemplates /* extends ITextViewer */ { /** * @return the contents of the current buffer (text edited still not passed to the shell) @@ -39,11 +39,6 @@ public interface IScriptConsoleViewer /* extends ITextViewer */ { */ public void setCaretOffset(int offset, boolean async); - /** - * @return the document being viewed by this console viewer - */ - public IDocument getDocument(); - /** * @return the interpreter info (used to get the grammar version for resolving templates) */ diff --git a/plugins/org.python.pydev.debug/src/org/python/pydev/debug/console/ScriptConsoleViewerWrapper.java b/plugins/org.python.pydev.debug/src/org/python/pydev/debug/console/ScriptConsoleViewerWrapper.java index 3bc953b29b..462b8f1631 100644 --- a/plugins/org.python.pydev.debug/src/org/python/pydev/debug/console/ScriptConsoleViewerWrapper.java +++ b/plugins/org.python.pydev.debug/src/org/python/pydev/debug/console/ScriptConsoleViewerWrapper.java @@ -6,6 +6,8 @@ */ package org.python.pydev.debug.console; +import java.io.File; + import org.eclipse.jface.text.IAutoEditStrategy; import org.eclipse.jface.text.IAutoIndentStrategy; import org.eclipse.jface.text.IDocument; @@ -55,10 +57,14 @@ import org.eclipse.swt.widgets.Item; import org.eclipse.ui.console.IHyperlink; import org.eclipse.ui.console.TextConsoleViewer; +import org.python.pydev.core.IIndentPrefs; import org.python.pydev.core.IInterpreterInfo; +import org.python.pydev.core.autoedit.DefaultIndentPrefs; import org.python.pydev.core.docutils.PySelection; import org.python.pydev.core.interactive_console.IScriptConsoleViewer; import org.python.pydev.editor.PySelectionFromEditor; +import org.python.pydev.shared_core.string.CoreTextSelection; +import org.python.pydev.shared_core.string.ICoreTextSelection; public class ScriptConsoleViewerWrapper implements ITextViewer, IScriptConsoleViewer { @@ -698,4 +704,25 @@ public void setTabsToSpacesConverter(IAutoEditStrategy converter) { viewer.setTabsToSpacesConverter(converter); } + @Override + public boolean isCythonFile() { + return false; + } + + @Override + public File getEditorFile() { + return new File(""); + } + + @Override + public IIndentPrefs getIndentPrefs() { + return DefaultIndentPrefs.get(null); + } + + @Override + public ICoreTextSelection getTextSelection() { + ITextSelection selection = (ITextSelection) viewer.getSelectionProvider().getSelection(); + return new CoreTextSelection(selection.getOffset(), selection.getLength()); + } + } diff --git a/plugins/org.python.pydev.shared_interactive_console/src/org/python/pydev/shared_interactive_console/console/ui/internal/ScriptConsoleViewer.java b/plugins/org.python.pydev.shared_interactive_console/src/org/python/pydev/shared_interactive_console/console/ui/internal/ScriptConsoleViewer.java index 22004b848e..7bc675d9bc 100644 --- a/plugins/org.python.pydev.shared_interactive_console/src/org/python/pydev/shared_interactive_console/console/ui/internal/ScriptConsoleViewer.java +++ b/plugins/org.python.pydev.shared_interactive_console/src/org/python/pydev/shared_interactive_console/console/ui/internal/ScriptConsoleViewer.java @@ -9,6 +9,7 @@ *******************************************************************************/ package org.python.pydev.shared_interactive_console.console.ui.internal; +import java.io.File; import java.lang.reflect.Method; import java.util.List; @@ -53,9 +54,13 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.console.TextConsoleViewer; +import org.python.pydev.core.IIndentPrefs; +import org.python.pydev.core.autoedit.DefaultIndentPrefs; import org.python.pydev.core.autoedit.IHandleScriptAutoEditStrategy; import org.python.pydev.core.interactive_console.IScriptConsoleViewer; import org.python.pydev.shared_core.log.Log; +import org.python.pydev.shared_core.string.CoreTextSelection; +import org.python.pydev.shared_core.string.ICoreTextSelection; import org.python.pydev.shared_core.string.StringUtils; import org.python.pydev.shared_interactive_console.console.ScriptConsoleHistory; import org.python.pydev.shared_interactive_console.console.codegen.IScriptConsoleCodeGenerator; @@ -984,4 +989,25 @@ public void setScrollLock(boolean scrollLock) { public boolean getScrollLock() { return listener.getScrollLock(); } + + @Override + public boolean isCythonFile() { + return false; + } + + @Override + public File getEditorFile() { + return new File(""); + } + + @Override + public IIndentPrefs getIndentPrefs() { + return DefaultIndentPrefs.get(null); + } + + @Override + public ICoreTextSelection getTextSelection() { + ITextSelection selection = (ITextSelection) getSelectionProvider().getSelection(); + return new CoreTextSelection(selection.getOffset(), selection.getLength()); + } } diff --git a/plugins/org.python.pydev/plugin.xml b/plugins/org.python.pydev/plugin.xml index 3cd22fd08f..33b5aeba7a 100644 --- a/plugins/org.python.pydev/plugin.xml +++ b/plugins/org.python.pydev/plugin.xml @@ -1925,11 +1925,11 @@ autoinsert="false" name="super" icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif" - description="Call super(current_class, self).current_method()" + description="Call super().current_method()" contextTypeId="org.python.pydev.editor.templates.python" id="org.python.pydev.editor.templates.python.super"> -super(${current_class}, ${self_or_cls}).${current_method}(${cursor}) +super().${current_method}(${cursor}) diff --git a/plugins/org.python.pydev/src/org/python/pydev/editor/codecompletion/PyTemplateCompletionProcessor.java b/plugins/org.python.pydev/src/org/python/pydev/editor/codecompletion/PyTemplateCompletionProcessor.java index 8938067f6b..404edf1952 100644 --- a/plugins/org.python.pydev/src/org/python/pydev/editor/codecompletion/PyTemplateCompletionProcessor.java +++ b/plugins/org.python.pydev/src/org/python/pydev/editor/codecompletion/PyTemplateCompletionProcessor.java @@ -11,11 +11,10 @@ import org.eclipse.jface.text.templates.TemplateContext; import org.eclipse.jface.text.templates.TemplateContextType; import org.eclipse.swt.graphics.Image; -import org.python.pydev.core.IPySourceViewer; +import org.python.pydev.core.ISourceViewerForTemplates; import org.python.pydev.core.log.Log; import org.python.pydev.core.proposals.CompletionProposalFactory; import org.python.pydev.core.templates.PyDocumentTemplateContext; -import org.python.pydev.editor.codefolding.PySourceViewer; import org.python.pydev.editor.templates.PyContextType; import org.python.pydev.editor.templates.TemplateHelper; import org.python.pydev.shared_core.code_completion.ICompletionProposalHandle; @@ -108,12 +107,12 @@ protected ICompletionProposal createProposal(Template template, TemplateContext @Override protected TemplateContext createContext(final ITextViewer viewer, final IRegion region) { TemplateContextType contextType = getContextType(viewer, region); - if (viewer instanceof IPySourceViewer) { - PySourceViewer pySourceViewer = (PySourceViewer) viewer; + if (viewer instanceof ISourceViewerForTemplates) { + ISourceViewerForTemplates pySourceViewer = (ISourceViewerForTemplates) viewer; - return PyDocumentTemplateContext.createContext(contextType, pySourceViewer.getEdit(), region); + return PyDocumentTemplateContext.createContext(contextType, pySourceViewer, region); } - Log.log("Expected an IPySourceViewer. Found: " + viewer); + Log.log("Expected an ISourceViewerForTemplates. Found: " + viewer); return PyDocumentTemplateContext.createContext(contextType, null, region); } diff --git a/plugins/org.python.pydev/src/org/python/pydev/editor/codecompletion/PythonCompletionProcessor.java b/plugins/org.python.pydev/src/org/python/pydev/editor/codecompletion/PythonCompletionProcessor.java index 23bcc16cb0..5321572bda 100644 --- a/plugins/org.python.pydev/src/org/python/pydev/editor/codecompletion/PythonCompletionProcessor.java +++ b/plugins/org.python.pydev/src/org/python/pydev/editor/codecompletion/PythonCompletionProcessor.java @@ -214,7 +214,6 @@ public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int * Returns the python proposals as a list. * First parameter of tuple is a list and second is a Boolean object indicating whether the templates * should be also shown or not. - * @param viewer * @throws CoreException * @throws BadLocationException * @throws MisconfigurationException diff --git a/plugins/org.python.pydev/src/org/python/pydev/editor/codefolding/PySourceViewer.java b/plugins/org.python.pydev/src/org/python/pydev/editor/codefolding/PySourceViewer.java index 36585495c4..fa77791ddf 100644 --- a/plugins/org.python.pydev/src/org/python/pydev/editor/codefolding/PySourceViewer.java +++ b/plugins/org.python.pydev/src/org/python/pydev/editor/codefolding/PySourceViewer.java @@ -11,6 +11,7 @@ */ package org.python.pydev.editor.codefolding; +import java.io.File; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Iterator; @@ -33,10 +34,12 @@ import org.eclipse.ui.IEditorInput; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.MarkerAnnotation; +import org.python.pydev.core.IIndentPrefs; import org.python.pydev.core.IPySourceViewer; import org.python.pydev.core.autoedit.PyAutoIndentStrategy; import org.python.pydev.editor.PyEdit; import org.python.pydev.editor.actions.PyShiftLeft; +import org.python.pydev.shared_core.string.ICoreTextSelection; import org.python.pydev.shared_ui.editor.BaseSourceViewer; import org.python.pydev.shared_ui.editor.ITextViewerExtensionAutoEditions; @@ -273,4 +276,24 @@ public T getAdapter(Class adapter) { return null; } + @Override + public boolean isCythonFile() { + return getEdit().isCythonFile(); + } + + @Override + public File getEditorFile() { + return getEdit().getEditorFile(); + } + + @Override + public IIndentPrefs getIndentPrefs() { + return getEdit().getIndentPrefs(); + } + + @Override + public ICoreTextSelection getTextSelection() { + return getEdit().getTextSelection(); + } + } \ No newline at end of file