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: issues-unsubscr...@lucene.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org