当我尝试构建MatJuice时出现2个编译错误(找不到符号和不兼容的类型)

时间:2019-03-04 00:38:45

标签: java

我刚刚发现了该工具MatJuice,它可以为我节省几天甚至几周的开发时间,但无法编译。

尽管我对Java一无所知,但是看起来却不那么毛茸茸:这两个错误都位于同一文件中,并且在同一函数中,并且该函数看起来是通用的(findParent),所以也许是Java程序员会立即知道它的含义。

一年多以前,here上发布了一个重大问题,作者似乎不愿更正它。这就是为什么我在这里问。

以下是两个错误:

[javac] /home/geoffrey/mclab-core/languages/Natlab/src/natlab/utils/NodeFinder.java:62: error: cannot find symbol
[javac]         .filter(n -> clazz.isInstance(n) || n.getParent() == null)
[javac]                                              ^
[javac]   symbol:   method getParent()
[javac]   location: variable n of type Object

[javac] /home/geoffrey/mclab-core/languages/Natlab/src/natlab/utils/NodeFinder.java:66: error: incompatible types: Object cannot be converted to T
[javac]         .orElse(null);
[javac]                ^
[javac]   where T is a type-variable:
[javac]     T extends Object declared in method <T>findParent(Class<T>,ASTNode<?>)

下面是相关的代码(此摘录中的第3行和第7行出现错误)

public static <T> T findParent(Class<T> clazz, ASTNode<?> node) {
  return Stream.iterate(node, ASTNode::getParent)
      .filter(n -> clazz.isInstance(n) || n.getParent() == null)
      .findFirst()
      .filter(clazz::isInstance)
      .map(clazz::cast)
      .orElse(null);
}

完整的文件为here(文件中有有用的注释),以及回购协议的其余部分。

我尝试自己尝试一下,但是对Java的知识为零,对于我来说调试太抽象了。

1 个答案:

答案 0 :(得分:1)

这些错误是由于编译器不知道ast.ASTNode是什么而出现的。项目中没有此类。但是蚂蚁构建文件中有Natlab.gen个目标:

mclab-core/languages/Natlab/build.xml

尝试运行Natlab.gen目标,并将在gen目录内生成目录ast.ASTNode(包含必要的软件包Natlab)。这应该可以修复编译错误。