Eclipse内容辅助不适用于Groovy文件中的Java对象



我发现了Eclipse Groovy和自动完成的这个问题,并且遇到了同样的问题,然而,这已经快三年了,我使用的是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);
    }
}

我使用的是EclipseKepler Service Release 2、Groovy编译器2.0.7和Groovy Eclipse插件版本2.8.0.xx-2013703-1600-e43-Release。

Java>Editor>Content Assist>Advanced首选项菜单下,我已确保除了Groovy Content(Java Non-Type、Java、Java Type Proposals)之外,还选中了所有Java选项。

由于这似乎对一些人来说是通用的,我想知道我在这里可能缺少什么,这将允许内容辅助为Java对象方法工作。谢谢

我一直在思考这个问题,并有一个想法,我刚刚测试过,它允许内容辅助工作,尽管在较少的Groovy条件下:

问题的根源似乎是GroovyEclipse不能在Java对象上自动完成,如果它们是使用defGroovy的方式声明的,即:

def fooJava = [2, "baz"] as FooJava
def fooJava2 = new FooJava(3, "bar")

尽管在这两种情况下,类型在编译时都是已知的。我怀疑这与def本质上是Object的别名这一事实有关,尽管该类型在技术上是已知的,但它可能被视为Object,因此这就是内容辅助操作的类型。

如果我以传统的Java方式声明,即:

FooJava fooJava3 = new FooJava(4, "foo")

然后,内容辅助允许我查找FooJava对象的成员、方法等。

所以,我将来当然可以这样做来解决这个问题,但我确实想知道是否有什么方法可以让我的蛋糕也吃。

即,是否有人找到了一种方法来获得内容帮助,以处理通过def语法声明的Java对象,只要类型已知?

相关内容

  • 没有找到相关文章

最新更新