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

Reply via email to