uschindler commented on PR #12188:
URL: https://github.com/apache/lucene/pull/12188#issuecomment-1457739678
This is my local stashed patch (I used it to review the output):
```patch
gradle/generation/panama-foreign.gradle | 6 ++++-
.../panama-foreign/ExtractForeignAPI.java | 29
++++++++++++++--------
2 files changed, 24 insertions(+), 11 deletions(-)
diff --git a/gradle/generation/panama-foreign.gradle
b/gradle/generation/panama-foreign.gradle
index 694c4656e2f..a4038961ea0 100644
--- a/gradle/generation/panama-foreign.gradle
+++ b/gradle/generation/panama-foreign.gradle
@@ -28,7 +28,7 @@ configure(project(":lucene:core")) {
}
dependencies {
- apiextractor "org.ow2.asm:asm:${scriptDepVersions['asm']}"
+ apiextractor "org.ow2.asm:asm-util:${scriptDepVersions['asm']}"
}
for (jdkVersion : panamaJavaVersions) {
@@ -54,9 +54,13 @@ configure(project(":lucene:core")) {
classpath = configurations.apiextractor
mainClass = file("${resources}/ExtractForeignAPI.java") as String
+ systemProperties = [
+ 'line.separator': "\n",
+ ]
args = [
jdkVersion,
new File(apijars, "panama-foreign-jdk${jdkVersion}.apijar"),
+ new File(apijars, "panama-foreign-jdk${jdkVersion}.txt"),
]
}
diff --git a/gradle/generation/panama-foreign/ExtractForeignAPI.java
b/gradle/generation/panama-foreign/ExtractForeignAPI.java
index 3eecbe56149..944b4922f47 100644
--- a/gradle/generation/panama-foreign/ExtractForeignAPI.java
+++ b/gradle/generation/panama-foreign/ExtractForeignAPI.java
@@ -15,6 +15,7 @@
* limitations under the License.
*/
import java.io.IOException;
+import java.io.PrintWriter;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -34,32 +35,40 @@ import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
+import org.objectweb.asm.util.TraceClassVisitor;
public final class ExtractForeignAPI {
private static final FileTime FIXED_FILEDATE =
FileTime.from(Instant.parse("2022-01-01T00:00:00Z"));
public static void main(String... args) throws IOException {
- if (args.length != 2) {
- throw new IllegalArgumentException("Need two parameters: java
version, output file");
+ if (args.length != 3) {
+ throw new IllegalArgumentException("Need three parameters: java
version, apijar output file, text output file");
}
+ var apijarPath = Paths.get(args[0]);
if (Integer.parseInt(args[0]) != Runtime.version().feature()) {
throw new IllegalStateException("Incorrect java version: " +
Runtime.version().feature());
}
var outputPath = Paths.get(args[1]);
+ var signaturesPath = Paths.get(args[2]);
var javaBaseModule =
Paths.get(URI.create("jrt:/")).resolve("java.base").toRealPath();
var fileMatcher =
javaBaseModule.getFileSystem().getPathMatcher("glob:java/{lang/foreign/*,nio/channels/FileChannel}.class");
- try (var out = new ZipOutputStream(Files.newOutputStream(outputPath));
var stream = Files.walk(javaBaseModule)) {
- var filesToExtract =
stream.map(javaBaseModule::relativize).filter(fileMatcher::matches).sorted().collect(Collectors.toList());
+ try (var apijar = new
ZipOutputStream(Files.newOutputStream(apijarPath));
+ var signatures = new
PrintWriter(Files.newBufferedWriter(signaturesPath));
+ var classes = Files.walk(javaBaseModule)) {
+ signatures.println("// These API signatures of Panama Foreign API
were extracted from JDK " + Runtime.version().feature());
+ signatures.println("// Do not modify this file or the corresponding
.apijar file which is used for MR-JAR compilation!");
+ var filesToExtract =
classes.map(javaBaseModule::relativize).filter(fileMatcher::matches).sorted().collect(Collectors.toList());
for (Path relative : filesToExtract) {
+ signatures.println();
System.out.println("Processing class file: " + relative);
try (var in =
Files.newInputStream(javaBaseModule.resolve(relative))) {
final var reader = new ClassReader(in);
final var cw = new ClassWriter(0);
- reader.accept(new Cleaner(cw), ClassReader.SKIP_CODE |
ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
- out.putNextEntry(new
ZipEntry(relative.toString()).setLastModifiedTime(FIXED_FILEDATE));
- out.write(cw.toByteArray());
- out.closeEntry();
+ reader.accept(new Cleaner(cw, signatures), ClassReader.SKIP_CODE
| ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
+ apijar.putNextEntry(new
ZipEntry(relative.toString()).setLastModifiedTime(FIXED_FILEDATE));
+ apijar.write(cw.toByteArray());
+ apijar.closeEntry();
}
}
}
@@ -69,8 +78,8 @@ public final class ExtractForeignAPI {
private static final String PREVIEW_ANN =
"jdk/internal/javac/PreviewFeature";
private static final String PREVIEW_ANN_DESCR =
Type.getObjectType(PREVIEW_ANN).getDescriptor();
- Cleaner(ClassWriter out) {
- super(Opcodes.ASM9, out);
+ Cleaner(ClassWriter out, PrintWriter writer) {
+ super(Opcodes.ASM9, new TraceClassVisitor(out, writer));
}
private static boolean isHidden(int access) {
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]