|
From: <caw...@us...> - 2007-03-09 14:31:04
|
Revision: 2110
http://svn.sourceforge.net/rubyeclipse/?rev=2110&view=rev
Author: cawilliams
Date: 2007-03-09 06:31:01 -0800 (Fri, 09 Mar 2007)
Log Message:
-----------
do some more tweaking of code completion
Modified Paths:
--------------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionContext.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DefaultTypeInferrer.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/util/OffsetNodeLocator.java
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionContext.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionContext.java 2007-03-08 20:43:03 UTC (rev 2109)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionContext.java 2007-03-09 14:31:01 UTC (rev 2110)
@@ -84,6 +84,10 @@
return correctedSource;
}
+ public boolean hasReceiver() {
+ return getFullPrefix().indexOf('.') > 1;
+ }
+
/**
* The original source
* @return
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java 2007-03-08 20:43:03 UTC (rev 2109)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java 2007-03-09 14:31:01 UTC (rev 2110)
@@ -192,6 +192,7 @@
switch (method.getVisibility()) {
case IMethod.PRIVATE:
flags |= Flags.AccPrivate;
+ if (fContext.hasReceiver()) return null; // can't invoke a private method on a receiver
break;
case IMethod.PUBLIC:
flags |= Flags.AccPublic;
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DefaultTypeInferrer.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DefaultTypeInferrer.java 2007-03-08 20:43:03 UTC (rev 2109)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DefaultTypeInferrer.java 2007-03-09 14:31:01 UTC (rev 2110)
@@ -68,8 +68,14 @@
tryGlobalVarNode(node, guesses);
tryWellKnownMethodCalls(node, guesses);
+ if (node instanceof Colon2Node) { // if this is a constant, it may be the type name!
+ Colon2Node colonNode = (Colon2Node)node;
+ String name = ASTUtil.getFullyQualifiedName(colonNode);
+ guesses.add(new BasicTypeGuess(name, 100));
+ }
if (node instanceof ConstNode) { // if this is a constant, it may be the type name!
- guesses.add(new BasicTypeGuess(((ConstNode)node).getName(), 100));
+ ConstNode constNode = (ConstNode)node;
+ guesses.add(new BasicTypeGuess(constNode.getName(), 100));
}
if (guesses.isEmpty()) { // if we have no guesses..
if (node instanceof CallNode) { // and it's a method call, try inferring receiver type
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/util/OffsetNodeLocator.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/util/OffsetNodeLocator.java 2007-03-08 20:43:03 UTC (rev 2109)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/util/OffsetNodeLocator.java 2007-03-09 14:31:01 UTC (rev 2110)
@@ -4,6 +4,8 @@
import org.jruby.ast.ArgsNode;
import org.jruby.ast.ArgumentNode;
+import org.jruby.ast.Colon2Node;
+import org.jruby.ast.ConstNode;
import org.jruby.ast.NewlineNode;
import org.jruby.ast.Node;
import org.jruby.evaluator.Instruction;
@@ -85,7 +87,9 @@
//note: careful... should this be <=? I think so; since it traverses in-order, this should find the "most specific" closest node. i.e.
//def foo;x;end offset at 'x' is a 1-char ScopingNode and 1-char LocalVarNode; it should identify the LocalVarNode, which <= does.
if (locatedNode == null || ( nodeSpanLength(iVisited) <= nodeSpanLength(locatedNode))) {
+ if (!((locatedNode instanceof Colon2Node) && (iVisited instanceof ConstNode))) {
locatedNode = iVisited;
+ }
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|