|
From: <caw...@us...> - 2007-03-26 13:53:26
|
Revision: 2226
http://svn.sourceforge.net/rubyeclipse/?rev=2226&view=rev
Author: cawilliams
Date: 2007-03-26 06:53:25 -0700 (Mon, 26 Mar 2007)
Log Message:
-----------
allow marking of method exits/returns (this only does explicit returns, we should probably also do implicit returns!)
Modified Paths:
--------------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DefaultOccurrencesFinder.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/MarkOccurrencesConfigurationBlock.java
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DefaultOccurrencesFinder.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DefaultOccurrencesFinder.java 2007-03-26 13:18:35 UTC (rev 2225)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DefaultOccurrencesFinder.java 2007-03-26 13:53:25 UTC (rev 2226)
@@ -25,6 +25,7 @@
import org.jruby.ast.LocalVarNode;
import org.jruby.ast.ModuleNode;
import org.jruby.ast.Node;
+import org.jruby.ast.ReturnNode;
import org.jruby.ast.SymbolNode;
import org.jruby.lexer.yacc.ISourcePosition;
import org.jruby.lexer.yacc.SourcePosition;
@@ -138,6 +139,10 @@
if (fMarkTypeOccurrences && isTypeRef(orig)) {
pushTypeRefs(root, orig, occurrences);
}
+
+ if (fMarkMethodExitPoints) {
+ pushReturns(root, orig, occurrences);
+ }
// Convert ISourcePosition to IPosition
List<Position> positions = new LinkedList<Position>();
@@ -551,7 +556,33 @@
occurrences.add(getPositionOfName(searchResult, root));
}
}
+
+ private void pushReturns(Node root, Node orig, List<ISourcePosition> occurrences) {
+ // TODO Combine most of this stuff with the stuff in pushLocalVareRefs
+ // Find the search space
+ Node searchSpace = FirstPrecursorNodeLocator.Instance().findFirstPrecursor(root, orig.getPosition().getStartOffset(), new INodeAcceptor() {
+ public boolean doesAccept(Node node) {
+ return ((node instanceof DefnNode) || (node instanceof DefsNode) ); // TODO: Block Body?
+ }
+ });
+ // If no enclosing node found, search the entire space
+ if (searchSpace == null) {
+ searchSpace = root;
+ }
+// Find all return nodes
+ List<Node> searchResults = ScopedNodeLocator.Instance().findNodesInScope(searchSpace, new INodeAcceptor() {
+ public boolean doesAccept(Node node) {
+ return (node instanceof ReturnNode);
+ }
+ });
+
+ // Scrape position from pertinent nodes
+ for (Node searchResult : searchResults) {
+ occurrences.add(searchResult.getPosition());
+ }
+ }
+
// ****************************************************************************
// *
// * Utility methods
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/MarkOccurrencesConfigurationBlock.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/MarkOccurrencesConfigurationBlock.java 2007-03-26 13:18:35 UTC (rev 2225)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/MarkOccurrencesConfigurationBlock.java 2007-03-26 13:53:25 UTC (rev 2226)
@@ -124,9 +124,9 @@
slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_LOCAL_VARIABLE_OCCURRENCES, 0);
createDependency(master, PreferenceConstants.EDITOR_MARK_LOCAL_VARIABLE_OCCURRENCES, slave);
-// label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markMethodExitPoints;
-// slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_METHOD_EXIT_POINTS, 0);
-// createDependency(master, PreferenceConstants.EDITOR_MARK_METHOD_EXIT_POINTS, slave);
+ label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markMethodExitPoints;
+ slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_METHOD_EXIT_POINTS, 0);
+ createDependency(master, PreferenceConstants.EDITOR_MARK_METHOD_EXIT_POINTS, slave);
addFiller(composite);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|