问题标签 [ecj]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
482 浏览

java - 具有多个匹配目标类型的 lambda 表达式的方法签名选择

我在回答一个问题时遇到了一个我无法解释的场景。考虑这段代码:

我不明白为什么显式输入 lambda 的参数(A a) -> aList.add(a)会使代码编译。此外,为什么它链接到重载 inIterable而不是 in CustomIterable
对此是否有一些解释或指向规范相关部分的链接?

注意:仅在扩展iterable.forEach((A a) -> aList.add(a));时编译(直接重载方法会导致模棱两可的错误)CustomIterable<T>Iterable<T>CustomIterable


两者兼得:

  • openjdk 版本“13.0.2” 2020-01-14
    Eclipse 编译器
  • openjdk 版本“1.8.0_232”
    Eclipse 编译器

编辑:上面的代码在使用 maven 构建时无法编译,而 Eclipse 成功编译了最后一行代码。

0 投票
3 回答
557 浏览

java - 在 Eclipse 4.15.0 中使用时插入 Java 14 文本块前导 \r\n

我正在学习如何处理 java 14(预览版)文本块。在 Junit 测试中使用以下文本块时,我遇到了以下意外功能(简化代码示例,在实际测试中我使用 HTML 片段):

执行此测试会导致错误,因为"\r\ntest"不匹配"test"

当我查阅文档(https://docs.oracle.com/javase/specs/jls/se14/preview/specs/text-blocks-jls.html)时,它字面意思是:

文本块的内容是紧接在开始定界符的行终止符之后开始并在结束定界符的第一个双引号之前结束的字符序列。

我错过了什么?
几个问题和建议后更新:
我创建了一个小测试类:

它在执行时打印以下内容:

这个类的字节码是

0 投票
1 回答
1014 浏览

java - 为什么 javac 为最终字段插入 Objects.requireNonNull(this)?

考虑以下类:

然后我编译和反编译这个类:

简而言之,javac编译sum()为:

在这里做什么Objects.requireNonNull(this)?重点是什么?这是否与可达性有关?

Java 8 编译器类似。它插入this.getClass()而不是Objects.requireNonNull(this)

我也尝试用 Eclipse 编译它。它不插入requireNonNull

所以这是 javac 特有的行为。

0 投票
0 回答
135 浏览

java - 在 Eclipse 中使用泛型密封接口

以下是合法的(即我可以编译它)并在启用预览功能的 Java 15 中工作(在 eclipse 2020-09 中)

Quantity.java但是,日食在抱怨... permits QuantityImpl。当悬停在QuantityImpl一个可以阅读:

即使它编译,这是一个有效的投诉还是 eclipse 中的错误?

0 投票
0 回答
51 浏览

java - 错误 - 无法推断类型变量 K、V - OpenJDK 1.8 与 ECJ 1.8 与 lambda 的区别?

我有以下代码:

并且 eclipse 允许减少到(没有错误):

但是openJdk构建失败了

项目合规性设置为 1.8

版本:Openjdk 1.8.0-191
Eclipse 4.10

是欧洲法院的错误吗?

0 投票
1 回答
41 浏览

java - 如何将一个 Maven 插件的输出转换为另一个?

我目前在 Maven 中运行 Eclipse Java 编译器 (ECJ) 插件,以便扫描我的代码中的错误和警告。我想为 Maven 设计一个插件,它能够接收 ECJ 发现的所有错误和警告,以便解析它们。

我被困在如何阅读 ECJ 输出上。我的第一直觉是将它输出到一个文件并让我的插件读取该文件,但必须有更好的方法可以将 ECJ 输出传递到我的自定义插件中。

0 投票
0 回答
32 浏览

eclipse - 如何从 eclipse ecj 中的元素中获取 ast 树,如 javac 中的 JavacTrees.getTree(element)?

我写了一个自定义annotation Processor,我希望在eclipse ecj编译器中获得ast 树process

0 投票
0 回答
142 浏览

java - java.lang.ClassNotFoundException: org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl 在 Eclipse 中使用注释处理器

我写了一个自定义Annotation Processor

  1. 我把它打包到test.jar,
  2. 我添加test.jarEclipse 项目。
  3. 我添加test.jarJava编译器-注解处理-工厂路径
  4. 构建项目,但它抛出异常:

我知道 Eclipse 使用ecj编译器,为什么它没有加载类BaseProcessingEnvImpl?我也尝试转换为IdeBuildProcessingEnvImpl,但得到同样的错误。

错误日志:

在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
93 浏览

drools - Optaplanner - 部署项目时无法编译drools文件

我们使用 Java 11 开发了一个 SpringBoot 项目,optaplanner-core并在 Drools 文件中定义规则。使用 JDK 在 intelliJ 中运行应用程序没有问题。

然后,我们将应用部署到安装了 JRE 的 Azure 应用服务上。我们收到以下错误:

我们尝试添加以下依赖项,但仍然出现相同的错误:

有人知道如何解决这个问题吗?

谢谢

0 投票
1 回答
76 浏览

java - Eclipse Java 编译器推断错误的泛型类型?

我想知道这是 ECJ 中的错误还是对 JLS 的有效解释。

Javac (11.0.11) 编译一切(我会说是正确的)。

ECJ (4.20.0) 无法编译getCollection2(HashSet::new)调用并出现错误“类型不匹配:无法从集合转换为集合”。

对于getCollection(HashSet::new)任何编译器来说,调用都不是问题。

如果我应用建议的快速修复并插入强制转换HashSet<Object>,我会收到来自 ECJ 的不同错误:“在类型推断期间检测到问题:调用 getCollection2(GenericsTest.CollectionSupplier<Object,Collection>) 时出现未知错误”

这里有很多类似的问题和bugs.eclipse.org上的错误,但大多数示例似乎都涉及?