[
https://issues.apache.org/jira/browse/BCEL-323?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tomo Suzuki updated BCEL-323:
-----------------------------
Attachment: screenshot-2.png
> JDK 13 build failing in master: BCELifierTestCase.testJavapCompare
> ------------------------------------------------------------------
>
> Key: BCEL-323
> URL: https://issues.apache.org/jira/browse/BCEL-323
> Project: Commons BCEL
> Issue Type: Improvement
> Reporter: Tomo Suzuki
> Priority: Minor
> Attachments: screenshot-1.png, screenshot-2.png
>
>
> fdh1. Problem
> With OpenJDK 13 EA, BCELifer does not give "default" modifier for an
> [interface's default
> method|https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html].
> [https://travis-ci.org/apache/commons-bcel/jobs/556441835]
> {code:java}
> [INFO]
> [INFO] Results:
> [INFO]
> [ERROR] Failures:
> [ERROR] BCELifierTestCase.testJavapCompare:90->testClassOnPath:80
> expected:<...a8Example {
> public [default ]void hello();
> Code:...> but was:<...a8Example {
> public []void hello();
> Code:...>
> [INFO]
> [ERROR] Tests run: 130, Failures: 1, Errors: 0, Skipped: 1{code}
>
> I'm checking why it fails.
> Memo for myself:
> {code:java}
> export JAVA_HOME=${HOME}/local/jdk-13
> export PATH=${JAVA_HOME}/bin:$PATH{code}
> h1. Difference causing Test Failure
> In OpenJDK 13, the default parameter for the interface disappears after
> BCELifier creates the class file.
> !screenshot-1.png!
>
> {code:java}
> $ java -version
> openjdk version "13-ea" 2019-09-17
> OpenJDK Runtime Environment (build 13-ea+28)
> OpenJDK 64-Bit Server VM (build 13-ea+28, mixed mode, sharing){code}
> h2. What does BCELifierTestCase do?
> The test compares two output of javap command:
> * javap "target/test-classes/Java8Example.class" (which is copied from
> ./src/test/resources/Java8Example.class in git)
> * javap another Java8Example.class which is generated by BCELifer.
> ** Actually the class file is not directly created by BCELifer.
> *** BCELifer writes Java8ExampleCreator.java
> *** The test runs "javac" to compile Java8ExampleCreator.
> *** The test runs "java" to run Java8ExampleCreator, which in turn generates
> Java8Example.class
> h2. Question to Answer
> Q. In theory, because Java8Example.class is generated by BCEL, not JDK, the
> output should not change. Which part of BCEL relies on JDK?
> Q. Is there difference between Java8ExampleCreator.java files from JDK 8 and
> JDK 13?
> A. They are the same.
> Q. How to see the difference between Java8Example.class from JDK 8 and JDK 13?
> * javap (screenshot shown above)
> * binary diff editor
> Q. Which part of BCEL/BCELifer is responsible to write "default" into class
> files.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)