|
From: <caw...@us...> - 2007-03-14 20:12:42
|
Revision: 2169
http://svn.sourceforge.net/rubyeclipse/?rev=2169&view=rev
Author: cawilliams
Date: 2007-03-14 13:12:39 -0700 (Wed, 14 Mar 2007)
Log Message:
-----------
start adding stuff to allow quick fix extensions
Modified Paths:
--------------
trunk/org.rubypeople.rdt.ui/plugin.xml
Added Paths:
-----------
trunk/org.rubypeople.rdt.ui/schema/quickFixProcessor.exsd
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IInvocationContext.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IProblemLocation.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IQuickFixProcessor.java
Modified: trunk/org.rubypeople.rdt.ui/plugin.xml
===================================================================
--- trunk/org.rubypeople.rdt.ui/plugin.xml 2007-03-14 17:58:05 UTC (rev 2168)
+++ trunk/org.rubypeople.rdt.ui/plugin.xml 2007-03-14 20:12:39 UTC (rev 2169)
@@ -7,6 +7,7 @@
<extension-point id="foldingStructureProviders" name="%foldingStructureProviders" schema="schema/foldingStructureProviders.exsd"/>
<extension-point id="editorPopupExtender" name="%editorPopupExtender" schema="schema/org.rubypeople.rdt.ui.editorPopupExtender.exsd"/>
<extension-point id="rubyTemplateProvider" name="Ruby template provider" schema="schema/rubyTemplateProvider.exsd"/>
+ <extension-point id="quickFixProcessors" name="%quickFixProcessorExtensionPoint" schema="schema/quickFixProcessors.exsd"/>
<extension
point="org.eclipse.ui.preferencePages">
Added: trunk/org.rubypeople.rdt.ui/schema/quickFixProcessor.exsd
===================================================================
--- trunk/org.rubypeople.rdt.ui/schema/quickFixProcessor.exsd (rev 0)
+++ trunk/org.rubypeople.rdt.ui/schema/quickFixProcessor.exsd 2007-03-14 20:12:39 UTC (rev 2169)
@@ -0,0 +1,194 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.rubypeople.rdt.ui">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.rubypeople.rdt.ui" id="quickFixProcessors" name="Quick Fix Processor"/>
+ </appInfo>
+ <documentation>
+ This extension point allows to add a Quick Fix processor to offer new Quick Fixes on Ruby problems.
+<p>
+Since 3.2 an extension can specify which problem marker types it can handle. It will only get problems of these types to process.
+If no handled marker type are specified, the processor will only get problems of types org.rubypeople.rdt.core.problem, org.rubypeople.rdt.core.buildpath_problem and org.rubypeople.rdt.core.task (compatible to the behaviour prior to 3.2).
+</p>
+<p>
+This extension point supports the <code>enablement</code> tag. Properties to test on are:
+<dl>
+<li>compilationUnit: type IRubyScript; the compilation unit the quick assist is applied on</li>
+
+<li>projectNatures: type Collection; all project natures of the current project</li>
+<li>sourceLevel: type String; the source compliance of the current project</li>
+</dl>
+</p>
+ </documentation>
+ </annotation>
+
+ <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="quickFixProcessor" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+ a fully qualified identifier of the target extension point
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+ an optional identifier of the extension instance
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+ an optional name of the extension instance
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="quickFixProcessor">
+ <complexType>
+ <sequence>
+ <element ref="enablement"/>
+ <element ref="handledMarkerTypes" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="id" type="string" use="required">
+ <annotation>
+ <documentation>
+ Unique identifier for the Quick Fix processor
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+ Localized name of the Quick Fix processor.
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ the name of the class that implements this Quick Fix processor. The
+class must be public and implement
+<samp>org.eclipse.jdt.ui.text.java.IQuickFixProcessor</samp>
+with a public 0-argument constructor.
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn="org.rubypeople.rdt.ui.text.ruby.IQuickFixProcessor"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="handledMarkerTypes">
+ <annotation>
+ <documentation>
+ Specifies the marker types of the problems this quick fix processor can handle.
+If no handled marker type are specified, the processor will get problems of types org.eclipse.jdt.core.problem, org.eclipse.jdt.core.buildpath_problem and org.eclipse.jdt.core.task.
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="markerType" minOccurs="1" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="markerType">
+ <complexType>
+ <attribute name="id" type="string" use="required">
+ <annotation>
+ <documentation>
+ The marker type id of the marker that can be handled by this processor
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ The following is an example of a Quick Fix processor contribution:
+
+<p>
+<pre>
+ <extension point="org.rubypeople.rdt.ui.quickFixProcessors">
+ <quickFixProcessor
+ id="AdvancedQuickFixProcessor"
+ name="Advanced Quick Fix Processor"
+ requiredSourceLevel="1.5"
+ class="com.example.AdvancedQuickFixProcessor">
+ <handledMarkerTypes>
+ <markerType id="org.eclipse.myplugin.audits"/>
+ </handledMarkerTypes>
+ <enablement>
+ <with variable="projectNatures">
+ <iterate operator="or">
+ <equals value="org.eclipse.jdt.core.javanature"/>
+ </iterate>
+ </with>
+ </enablement>
+ </quickFixProcessor>
+ </extension>
+</pre>
+</p>
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ Extension point since 3.0. Element <code>handledMarkerTypes</code> since 3.2.
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ The contributed class must implement <code>org.rubypeople.rdt.ui.text.ruby.IQuickFixProcessor</code>
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+ Copyright (c) 2001, 2006 IBM Corporation and others.<br>
+All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
+ </documentation>
+ </annotation>
+
+</schema>
Added: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IInvocationContext.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IInvocationContext.java (rev 0)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IInvocationContext.java 2007-03-14 20:12:39 UTC (rev 2169)
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.rubypeople.rdt.ui.text.ruby;
+
+import org.jruby.ast.Node;
+import org.jruby.ast.RootNode;
+import org.rubypeople.rdt.core.IRubyScript;
+
+/**
+ * Context information for quick fix and quick assist processors.
+ * <p>
+ * Note: this interface is not intended to be implemented.
+ * </p>
+ *
+ * @since 1.0.0
+ */
+public interface IInvocationContext {
+
+ /**
+ * @return Returns the current ruby script.
+ */
+ IRubyScript getRubyScript();
+
+ /**
+ * @return Returns the offset of the current selection
+ */
+ int getSelectionOffset();
+
+ /**
+ * @return Returns the length of the current selection
+ */
+ int getSelectionLength();
+
+ /**
+ * Returns an AST of the compilation unit, possibly only a partial AST focused on the selection
+ * offset (see {@link org.eclipse.jdt.core.dom.ASTParser#setFocalPosition(int)}).
+ * The returned AST is shared and therefore protected and cannot be modified.
+ * The client must check the AST API level and do nothing if they are given an AST
+ * they can't handle. (see {@link org.eclipse.jdt.core.dom.AST#apiLevel()}).
+ * @return Returns the root of the AST corresponding to the current compilation unit.
+ */
+ RootNode getASTRoot();
+
+ /**
+ * Convenience method to evaluate the AST node covering the current selection.
+ * @return Returns the node that covers the location of the problem
+ */
+ Node getCoveringNode();
+
+ /**
+ * Convenience method to evaluate the AST node that is covered by the current selection.
+ * @return Returns the node that is covered by the location of the problem
+ */
+ Node getCoveredNode();
+
+}
Added: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IProblemLocation.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IProblemLocation.java (rev 0)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IProblemLocation.java 2007-03-14 20:12:39 UTC (rev 2169)
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.rubypeople.rdt.ui.text.ruby;
+
+import org.jruby.ast.Node;
+import org.jruby.ast.RootNode;
+
+/**
+ * Problem information for quick fix and quick assist processors.
+ * <p>
+ * Note: this interface is not intended to be implemented.
+ * </p>
+ *
+ * @since 3.0
+ */
+public interface IProblemLocation {
+
+ /**
+ * Returns the start offset of the problem.
+ *
+ * @return the start offset of the problem
+ */
+ int getOffset();
+
+ /**
+ * Returns the length of the problem.
+ *
+ * @return the length of the problem
+ */
+ int getLength();
+
+ /**
+ * Returns the marker type of this problem.
+ *
+ * @return The marker type of the problem.
+ * @since 3.2
+ */
+ String getMarkerType();
+
+ /**
+ * Returns the id of problem. Note that problem ids are defined per problem marker type.
+ * See {@link org.eclipse.jdt.core.compiler.IProblem} for id definitions for problems of type
+ * <code>org.eclipse.jdt.core.problem</code> and <code>org.eclipse.jdt.core.task</code>.
+ *
+ * @return The id of the problem.
+ */
+ int getProblemId();
+
+ /**
+ * Returns the original arguments recorded into the problem.
+ *
+ * @return String[] Returns the problem arguments.
+ */
+ String[] getProblemArguments();
+
+ /**
+ * Returns if the problem has error severity.
+ *
+ * @return <code>true</code> if the problem has error severity
+ */
+ boolean isError();
+
+ /**
+ * Convenience method to evaluate the AST node covering this problem.
+ *
+ * @param astRoot The root node of the current AST
+ * @return Returns the node that covers the location of the problem
+ */
+ Node getCoveringNode(RootNode astRoot);
+
+ /**
+ * Convenience method to evaluate the AST node covered by this problem.
+ *
+ * @param astRoot The root node of the current AST
+ * @return Returns the node that is covered by the location of the problem
+ */
+ Node getCoveredNode(RootNode astRoot);
+
+}
Added: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IQuickFixProcessor.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IQuickFixProcessor.java (rev 0)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/ruby/IQuickFixProcessor.java 2007-03-14 20:12:39 UTC (rev 2169)
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *
+ *******************************************************************************/
+package org.rubypeople.rdt.ui.text.ruby;
+
+import org.eclipse.core.runtime.CoreException;
+import org.rubypeople.rdt.core.IRubyScript;
+
+
+/**
+ * Interface to be implemented by contributors to the extension point
+ * <code>org.eclipse.jdt.ui.quickFixProcessors</code>.
+ * <p>Since 3.2, each extension specifies the marker types it can handle, and {@link #hasCorrections(ICompilationUnit, int)} and
+ * {@link #getCorrections(IInvocationContext, IProblemLocation[])} are called if (and only if) quick fix is
+ * required for a problem of these types.</p>
+ * <p>Note, if a extension does not specify marker types it will be only called for problem of type
+ * <code>org.eclipse.jdt.core.problem</code>, <code>org.eclipse.jdt.core.buildpath_problem</code>
+ * and <code>org.eclipse.jdt.core.task</code>; compatible with the behavior prior to 3.2</p>
+ *
+ * @since 3.0
+ */
+public interface IQuickFixProcessor {
+
+ /**
+ * Returns <code>true</code> if the processor has proposals for the given problem. This test should be an
+ * optimistic guess and be very cheap.
+ *
+ * @param unit the compilation unit
+ * @param problemId the problem Id. The id is of a problem of the problem type(s) this processor specified in
+ * the extension point.
+ * @return <code>true</code> if the processor has proposals for the given problem
+ */
+ boolean hasCorrections(IRubyScript unit, int problemId);
+
+ /**
+ * Collects corrections or code manipulations for the given context.
+ *
+ * @param context Defines current compilation unit, position and a shared AST
+ * @param locations Problems are the current location.
+ * @return the corrections applicable at the location or <code>null</code> if no proposals
+ * can be offered
+ * @throws CoreException CoreException can be thrown if the operation fails
+ */
+ IRubyCompletionProposal[] getCorrections(IInvocationContext context, IProblemLocation[] locations) throws CoreException;
+
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|