我发现了这个问题Eclipse Groovy and autocompletion并且遇到了同样的问题,但是,差不多三年了,我正在使用当前版本的 Groovy Eclipse 插件,并且似乎没有任何会混淆 ANTLR 的语法错误。
我也尝试使用 Groovy / Grails工具套件,并得到了相同的结果。
我已经模拟了一个简单的测试用例,其中内容辅助适用于 Groovy 对象'方法,以及 Java 对象'静态成员,但不是 Java 对象'方法
Groovy类:
package test_groovy
import test_groovy.FooJava
class FooGroovy
{
def fooJava = [2, "baz"] as FooJava
def x = 4
def FooGroovy()
{
// empty constructor
}
def useFooJava()
{
// only displays Groovy methods, not the java ones
def str = fooJava.getStr()
println "str: ${str}"
// static members like this *can* be found via content assist
def str2 = FooJava.FOO_STR
println "str2: ${str2}"
// This is also not found via content assist
def str3 = fooJava.dumpToStr()
println "str3: ${str3}"
}
def fooBar()
{
return x + 3
}
static void main(def args)
{
def fooGroovy = [] as FooGroovy
// Groovy object methods can be found via content assist
def res = fooGroovy.fooBar()
println "res: ${res}"
fooGroovy.useFooJava()
}
}
Java类:
package test_groovy;
public class FooJava
{
private long bar;
private String str;
public static final String FOO_STR = "foo";
public FooJava(long bar, String str)
{
super();
this.bar = bar;
this.str = str;
}
public long getBar()
{
return bar;
}
public void setBar(long bar)
{
this.bar = bar;
}
public String getStr()
{
return str;
}
public void setStr(String str)
{
this.str = str;
}
public String dumpToStr()
{
return new String("Str: " + str + ", bar: " + bar);
}
}
我正在使用 Eclipse Kepler Service Release 2, Groovy 编译器2.0.7和 Groovy Eclipse 插件版本2.8.0.xx-20130703 -1600-E43-RELEASE。
在 Java>下编辑>内容辅助>高级偏好设置菜单,除了 Groovy内容(Java非类型,Java,Java类型提案)之外,我还确保检查所有 Java 选项
由于这对某些人来说似乎总体上起作用,我想知道我在这里可能缺少哪些内容可以帮助 Java 对象方法。感谢。
答案 0 :(得分:5)
我一直在考虑这个问题,并且考虑到了我刚刚测试过的内容辅助工作,尽管在 Groovy 条件下很少:
问题的根源似乎是 Groovy Eclipse 无法在 Java 对象上自动完成,如果它们在中声明的话使用def
的Groovy 方式,即:
def fooJava = [2, "baz"] as FooJava
def fooJava2 = new FooJava(3, "bar")
即使在这两种情况下,类型在编译时都是已知的。我怀疑它与def
本质上是Object
的别名这一事实有关,即使该类型在技术上已知,它也可能被视为Object
,因此& #39; s内容辅助操作的类型。
如果我用传统的 Java 方式声明它,即:
FooJava fooJava3 = new FooJava(4, "foo")
内容辅助允许我查找FooJava
对象的成员,方法等。
所以,我今后肯定可以解决这个问题,但我确实想知道是否有任何方法可以让我的蛋糕也吃掉它。
即。有没有人找到一种方法来获取内容辅助来处理通过def
语法声明的 Java 对象,只要该类型是已知的?