|
From: <caw...@us...> - 2007-09-10 17:22:22
|
Revision: 3122
http://rubyeclipse.svn.sourceforge.net/rubyeclipse/?rev=3122&view=rev
Author: cawilliams
Date: 2007-09-10 10:22:13 -0700 (Mon, 10 Sep 2007)
Log Message:
-----------
include method arguments as local variable declarations. Resolves references to method arguments inside the method properly.
Modified Paths:
--------------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/SelectionEngine.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/SourceElementParser.java
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/SelectionEngine.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/SelectionEngine.java 2007-09-10 16:37:24 UTC (rev 3121)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/SelectionEngine.java 2007-09-10 17:22:13 UTC (rev 3122)
@@ -28,6 +28,7 @@
import org.jruby.ast.InstVarNode;
import org.jruby.ast.LocalAsgnNode;
import org.jruby.ast.LocalVarNode;
+import org.jruby.ast.MethodDefNode;
import org.jruby.ast.ModuleNode;
import org.jruby.ast.Node;
import org.jruby.ast.VCallNode;
@@ -159,10 +160,17 @@
return completer.findType(fullyQualifiedName); // get fully qualified name of surrounding type!
}
if (isLocalVarRef(selected)) {
- // TODO Try the local namespace first!
- List<IRubyElement> possible = getChildrenWithName(script
- .getChildren(), IRubyElement.LOCAL_VARIABLE,
+ IRubyElement spanner = script.getElementAt(selected.getPosition().getStartOffset());
+ List<IRubyElement> possible = new ArrayList<IRubyElement>();
+ if (spanner instanceof IParent) {
+ IParent parent = (IParent) spanner;
+ possible = getChildrenWithName(parent.getChildren(), IRubyElement.LOCAL_VARIABLE,
+ getName(selected));
+ }
+ if (possible.isEmpty()) {
+ possible = getChildrenWithName(script.getChildren(), IRubyElement.LOCAL_VARIABLE,
getName(selected));
+ }
return possible.toArray(new IRubyElement[possible.size()]);
}
if (isInstanceVarRef(selected)) {
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/SourceElementParser.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/SourceElementParser.java 2007-09-10 16:37:24 UTC (rev 3121)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/SourceElementParser.java 2007-09-10 17:22:13 UTC (rev 3122)
@@ -30,6 +30,8 @@
import java.util.List;
import org.jruby.ast.AliasNode;
+import org.jruby.ast.ArgsNode;
+import org.jruby.ast.ArgumentNode;
import org.jruby.ast.ArrayNode;
import org.jruby.ast.AssignableNode;
import org.jruby.ast.CallNode;
@@ -50,9 +52,9 @@
import org.jruby.ast.InstAsgnNode;
import org.jruby.ast.InstVarNode;
import org.jruby.ast.IterNode;
+import org.jruby.ast.ListNode;
import org.jruby.ast.LocalAsgnNode;
import org.jruby.ast.ModuleNode;
-import org.jruby.ast.NewlineNode;
import org.jruby.ast.Node;
import org.jruby.ast.RootNode;
import org.jruby.ast.SClassNode;
@@ -186,7 +188,7 @@
} else {
requestor.enterMethod(methodInfo);
}
-
+
Instruction ins = super.visitDefnNode(iVisited); // now traverse it's body
int end = iVisited.getPosition().getEndOffset() - 2;
if (methodInfo.isConstructor) {
@@ -198,6 +200,38 @@
}
@Override
+ public Instruction visitArgsNode(ArgsNode iVisited) {
+ // Add args as local vars!
+ ListNode list = iVisited.getArgs();
+ if (list != null) {
+ for (int i = 0; i < list.size(); i++) {
+ Node arg = list.get(i);
+ FieldInfo field = new FieldInfo();
+ field.declarationStart = arg.getPosition().getStartOffset();
+ field.nameSourceStart = arg.getPosition().getStartOffset();
+ String name = ASTUtil.getNameReflectively(arg);
+ field.nameSourceEnd = arg.getPosition().getStartOffset()
+ + name.length() - 1;
+ field.name = name;
+ requestor.enterField(field);
+ requestor.exitField(arg.getPosition().getEndOffset() - 1);
+ }
+ }
+ ArgumentNode arg = iVisited.getRestArgNode();
+ if (arg != null) {
+ FieldInfo field = new FieldInfo();
+ field.declarationStart = arg.getPosition().getStartOffset() + 1;
+ field.nameSourceStart = arg.getPosition().getStartOffset() + 1;
+ String name = ASTUtil.getNameReflectively(arg);
+ field.nameSourceEnd = arg.getPosition().getStartOffset() + name.length();
+ field.name = name;
+ requestor.enterField(field);
+ requestor.exitField(arg.getPosition().getEndOffset());
+ }
+ return super.visitArgsNode(iVisited);
+ }
+
+ @Override
public Instruction visitDefsNode(DefsNode iVisited) {
MethodInfo methodInfo = new MethodInfo();
methodInfo.declarationStart = iVisited.getPosition().getStartOffset();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|