Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package parboiled for openSUSE:Factory 
checked in at 2023-10-11 23:55:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/parboiled (Old)
 and      /work/SRC/openSUSE:Factory/.parboiled.new.1807 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "parboiled"

Wed Oct 11 23:55:39 2023 rev:6 rq:1116885 version:1.4.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/parboiled/parboiled.changes      2022-03-20 
20:56:43.278627701 +0100
+++ /work/SRC/openSUSE:Factory/.parboiled.new.1807/parboiled.changes    
2023-10-12 11:48:22.906699076 +0200
@@ -1,0 +2,49 @@
+Wed Oct 11 07:22:30 UTC 2023 - Fridrich Strba <[email protected]>
+
+- Do not build the scala subpackage, since it is not needed by any
+  package
+
+-------------------------------------------------------------------
+Fri Oct  6 11:26:05 UTC 2023 - Fridrich Strba <[email protected]>
+
+- Upgrade to upstream version 1.4.1
+  * Changes of 1.4.1
+    + Improved support for Java 16+
+    + Dropped support for Java 8
+  * Changes of 1.4.0
+    + Support Java 17
+    + Upgraded to ASM 9.2
+    + Dropped support for Scala 2.11
+  * Changes of 1.3.1
+    + Upgraded to ASM 7.1
+    + Fixed class loader in parser generation
+    + Added cross-build for Scala 2.13.0
+    + Dropped support for Scala 2.10
+  * Changes of 1.3.0
+    + Upgraded to ASM 7.0
+    + Added Scala 2.13.0-M5 build
+  * Changes of 1.2.0
+    + Added support for '~~>' and friends in ReductionRules
+    + Added support for PushRules to chain after ReductionRules
+    + Upgraded to ASM 6.2.1
+    + Added Scala 2.13.0-M4 build
+    + Dropped support for Java 1.5
+  * Changes of 1.1.8
+    + Cross build for Scala 2.10, 2.11 and 2.12
+    + Upgrade to ASM 5.2
+    + Fixed "Utils.findConstructor doesn't match boolean parameter"
+    + Added method for clearing class cache in AsmUtil
+  * Changes of 1.1.7
+    + Upgrade to Scala 2.11.4, cross build for Scala 2.9.2, 2.9.3,
+      2.10 and 2.11
+    + Upgrade to ASM 5.0.3, closed #76
+    + Make parboiled-java relocatable, closed #80
+- Added patch:
+  * restore-java8-compatibility.patch
+    + revert upstream commit making changes incompatible with
+      Java 8
+- Removed patch:
+  * parboiled-port-to-objectweb-asm-5.0.1.patch
+    + not needed with this version
+
+-------------------------------------------------------------------

Old:
----
  1.1.6.tar.gz
  _multibuild
  parboiled-1.1.6-build.tar.xz
  parboiled-core-1.1.6.pom
  parboiled-java-1.1.6.pom
  parboiled-port-to-objectweb-asm-5.0.1.patch
  parboiled-scala_2.10-1.1.6.pom

New:
----
  1.4.1.tar.gz
  parboiled-build.tar.xz
  parboiled-core-1.4.1.pom
  parboiled-java-1.4.1.pom
  restore-java8-compatibility.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ parboiled.spec ++++++
--- /var/tmp/diff_new_pack.vhZpJS/_old  2023-10-12 11:48:23.498721029 +0200
+++ /var/tmp/diff_new_pack.vhZpJS/_new  2023-10-12 11:48:23.502721177 +0200
@@ -1,7 +1,7 @@
 #
-# spec file
+# spec file for package parboiled
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,58 +16,28 @@
 #
 
 
-%global flavor @BUILD_FLAVOR@%{nil}
-%if "%{flavor}" == "scala"
-%bcond_without scala
-%else
-%bcond_with scala
-%endif
-%global scala_short_version 2.10
-%global base_name parboiled
-%if %{with scala}
-Name:           %{base_name}-scala
-Summary:        Parboiled for Scala
-License:        Apache-2.0
-Group:          Development/Libraries/Java
-%else
-Name:           %{base_name}
-Summary:        Java/Scala library providing parsing of input text based on 
PEGs
+Name:           parboiled
+Version:        1.4.1
+Release:        0
+Summary:        Java library providing parsing of input text based on PEGs
 License:        Apache-2.0
 Group:          Development/Libraries/Java
-%endif
-Version:        1.1.6
-Release:        0
 URL:            http://parboiled.org/
 Source0:        https://github.com/sirthias/parboiled/archive/%{version}.tar.gz
-Source1:        %{base_name}-%{version}-build.tar.xz
+Source1:        %{name}-build.tar.xz
 # for build see https://github.com/sirthias/parboiled/wiki/Building-parboiled
-Source2:        
http://repo1.maven.org/maven2/org/parboiled/%{base_name}-core/%{version}/%{base_name}-core-%{version}.pom
-Source3:        
http://repo1.maven.org/maven2/org/parboiled/%{base_name}-java/%{version}/%{base_name}-java-%{version}.pom
-Source4:        
http://repo1.maven.org/maven2/org/parboiled/%{base_name}-scala_%{scala_short_version}/%{version}/%{base_name}-scala_%{scala_short_version}-%{version}.pom
-Patch0:         parboiled-port-to-objectweb-asm-5.0.1.patch
+Source2:        
https://repo1.maven.org/maven2/org/parboiled/%{name}-core/%{version}/%{name}-core-%{version}.pom
+Source3:        
https://repo1.maven.org/maven2/org/parboiled/%{name}-java/%{version}/%{name}-java-%{version}.pom
+Patch0:         restore-java8-compatibility.patch
 BuildRequires:  ant
 BuildRequires:  fdupes
+BuildRequires:  java-devel >= 1.8
 BuildRequires:  javapackages-local
-%if %{with scala}
-BuildRequires:  ant-scala >= 2.10.7
-BuildRequires:  parboiled
-Requires:       mvn(org.parboiled:parboiled-core) = %{version}
-Requires:       mvn(org.scala-lang:scala-library)
-%else
 BuildRequires:  objectweb-asm
-Requires:       mvn(org.ow2.asm:asm)
-Requires:       mvn(org.ow2.asm:asm-analysis)
-Requires:       mvn(org.ow2.asm:asm-tree)
-Requires:       mvn(org.ow2.asm:asm-util)
-%endif
 BuildArch:      noarch
 
 %description
-%if %{with scala}
-An internal Scala DSL for efficiently defining your parser rules.
-
-%endif
-parboiled is a mixed Java/Scala library providing parsing of
+parboiled is a mixed Java library providing parsing of
 arbitrary input text based on Parsing expression grammars (PEGs).
 PEGs are an alternative to context free grammars (CFGs) for formally
 specifying syntax, they make a replacement for regular expressions
@@ -82,49 +52,32 @@
 This package contains javadoc for %{name}.
 
 %prep
-%setup -q -n %{base_name}-%{version} -a1
-
-find . -name "*.class" -delete
-find . -name "*.jar" -delete
-
+%setup -q -n %{name}-%{version} -a1
 %patch0 -p1
 
-cp %{SOURCE2} %{base_name}-core/pom.xml
-cp %{SOURCE3} %{base_name}-java/pom.xml
-cp %{SOURCE4} %{base_name}-scala/pom.xml
+cp %{SOURCE2} %{name}-core/pom.xml
+cp %{SOURCE3} %{name}-java/pom.xml
 
 %build
 mkdir -p lib
 build-jar-repository -s lib \
-%if %{with scala}
-       %{base_name}
-%else
        objectweb-asm
-%endif
 %{ant} \
-%if %{with scala}
-       -Dscala.libDir=%{_datadir}/scala/lib \
-       -f build-scala.xml \
-%endif
        package javadoc
 
 %install
-%if %{with scala}
-%global modules scala
-%else
 %global modules core java
-%endif
-install -dm 0755 %{buildroot}%{_javadir}/%{base_name}
-install -dm 0755 %{buildroot}%{_mavenpomdir}/%{base_name}
+install -dm 0755 %{buildroot}%{_javadir}/%{name}
+install -dm 0755 %{buildroot}%{_mavenpomdir}/%{name}
 for i in %{modules}; do
   # jar
-  install -pm 0644 %{base_name}-${i}/target/%{base_name}-${i}*%{version}.jar 
%{buildroot}%{_javadir}/%{base_name}/${i}.jar
+  install -pm 0644 %{name}-${i}/target/%{name}-${i}*%{version}.jar 
%{buildroot}%{_javadir}/%{name}/${i}.jar
   # pom
-  install -pm 0644 %{base_name}-${i}/pom.xml 
%{buildroot}%{_mavenpomdir}/%{base_name}/${i}.pom
-  %add_maven_depmap %{base_name}/${i}.pom %{base_name}/${i}.jar
+  %{mvn_install_pom} %{name}-${i}/pom.xml 
%{buildroot}%{_mavenpomdir}/%{name}/${i}.pom
+  %add_maven_depmap %{name}/${i}.pom %{name}/${i}.jar
   # javadoc
-  install -dm 0755 %{buildroot}%{_javadocdir}/%{base_name}/${i}
-  cp -pr %{base_name}-${i}/target/site/apidocs/* 
%{buildroot}%{_javadocdir}/%{base_name}/${i}/
+  install -dm 0755 %{buildroot}%{_javadocdir}/%{name}/${i}
+  cp -pr %{name}-${i}/target/site/apidocs/* 
%{buildroot}%{_javadocdir}/%{name}/${i}/
 done
 %fdupes -s %{buildroot}%{_javadocdir}
 
@@ -134,5 +87,5 @@
 
 %files javadoc
 %license LICENSE
-%{_javadocdir}/%{base_name}
+%{_javadocdir}/%{name}
 

++++++ 1.1.6.tar.gz -> 1.4.1.tar.gz ++++++
++++ 5892 lines of diff (skipped)

++++++ parboiled-1.1.6-build.tar.xz -> parboiled-build.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/common.xml new/common.xml
--- old/common.xml      2022-03-20 16:23:54.132311416 +0100
+++ new/common.xml      2023-09-29 18:26:14.714874288 +0200
@@ -5,13 +5,14 @@
   <property file="build.properties"/>
 
   <property name="project.groupId" value="org.parboiled"/>
-  <property name="project.version" value="1.1.6"/>
+  <property name="project.version" value="1.4.1"/>
   <property name="project.description" value="Elegant parsing in Java and 
Scala - lightweight, easy-to-use, powerful"/>
   <property name="project.organization.name" value="${project.groupId}"/>
   <property name="project.organization.url" value="http://parboiled.org"/>
   <property name="project.license.url" 
value="http://www.apache.org/licenses/LICENSE-2.0.txt"/>
 
-  <property name="compiler.source" value="1.8"/>
+  <property name="compiler.release" value="8"/>
+  <property name="compiler.source" value="1.${compiler.release}"/>
   <property name="compiler.target" value="${compiler.source}"/>
 
 </project>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parboiled-core/build.xml new/parboiled-core/build.xml
--- old/parboiled-core/build.xml        2019-11-27 07:35:37.832134136 +0100
+++ new/parboiled-core/build.xml        2023-10-11 09:49:53.696984580 +0200
@@ -50,6 +50,7 @@
            debug="true" 
            optimize="false" 
            deprecation="true" 
+           release="${compiler.release}" 
            target="${compiler.target}" 
            verbose="false" 
            fork="false" 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parboiled-java/build.xml new/parboiled-java/build.xml
--- old/parboiled-java/build.xml        2019-02-15 12:58:41.375071554 +0100
+++ new/parboiled-java/build.xml        2023-10-11 09:50:04.643719416 +0200
@@ -51,6 +51,7 @@
            debug="true" 
            optimize="false" 
            deprecation="true" 
+           release="${compiler.release}" 
            target="${compiler.target}" 
            verbose="false" 
            fork="false" 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parboiled-scala/build.xml 
new/parboiled-scala/build.xml
--- old/parboiled-scala/build.xml       2019-11-27 07:35:10.288010357 +0100
+++ new/parboiled-scala/build.xml       2023-09-29 18:41:36.221329060 +0200
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<project name="parboiled-scala_2.10" default="package" basedir=".">
+<project name="parboiled-scala_2.13" default="package" basedir=".">
 
   <!-- ====================================================================== 
-->
   <!-- Build environment properties                                           
-->
@@ -12,7 +12,7 @@
   <property file="build.properties"/>
   
   <property name="project.fragment" value="scala"/>
-  <property name="project.artifactId" 
value="parboiled-${project.fragment}_2.10"/>
+  <property name="project.artifactId" 
value="parboiled-${project.fragment}_2.13"/>
 
   <property name="scala.home" value="${env.SCALA_HOME}"/>
   <property name="scala.libDir" value="${scala.home}/lib"/>

++++++ parboiled-core-1.1.6.pom -> parboiled-core-1.4.1.pom ++++++
--- /work/SRC/openSUSE:Factory/parboiled/parboiled-core-1.1.6.pom       
2019-04-05 12:04:00.598599032 +0200
+++ /work/SRC/openSUSE:Factory/.parboiled.new.1807/parboiled-core-1.4.1.pom     
2023-10-12 11:48:22.886698335 +0200
@@ -3,10 +3,10 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.parboiled</groupId>
     <artifactId>parboiled-core</artifactId>
-    <packaging>bundle</packaging>
+    <packaging>jar</packaging>
     <description>Elegant parsing in Java and Scala - lightweight, easy-to-use, 
powerful</description>
     <url>http://parboiled.org</url>
-    <version>1.1.6</version>
+    <version>1.4.1</version>
     <licenses>
         <license>
             <name>Apache 2</name>
@@ -32,15 +32,15 @@
     </developers>
     <dependencies>
         <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>5.14.1</version>
+            <groupId>org.scalatestplus</groupId>
+            <artifactId>testng-7-5_2.13</artifactId>
+            <version>3.2.11.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.scalatest</groupId>
-            <artifactId>scalatest_2.9.3</artifactId>
-            <version>1.9.1</version>
+            <artifactId>scalatest_2.13</artifactId>
+            <version>3.2.11</version>
             <scope>test</scope>
         </dependency>
     </dependencies>

++++++ parboiled-java-1.1.6.pom -> parboiled-java-1.4.1.pom ++++++
--- /work/SRC/openSUSE:Factory/parboiled/parboiled-java-1.1.6.pom       
2019-04-05 12:04:00.654599051 +0200
+++ /work/SRC/openSUSE:Factory/.parboiled.new.1807/parboiled-java-1.4.1.pom     
2023-10-12 11:48:22.898698780 +0200
@@ -3,10 +3,10 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.parboiled</groupId>
     <artifactId>parboiled-java</artifactId>
-    <packaging>bundle</packaging>
+    <packaging>jar</packaging>
     <description>Elegant parsing in Java and Scala - lightweight, easy-to-use, 
powerful</description>
     <url>http://parboiled.org</url>
-    <version>1.1.6</version>
+    <version>1.4.1</version>
     <licenses>
         <license>
             <name>Apache 2</name>
@@ -34,39 +34,39 @@
         <dependency>
             <groupId>org.parboiled</groupId>
             <artifactId>parboiled-core</artifactId>
-            <version>1.1.6</version>
+            <version>1.4.1</version>
         </dependency>
         <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>5.14.1</version>
+            <groupId>org.scalatestplus</groupId>
+            <artifactId>testng-7-5_2.13</artifactId>
+            <version>3.2.11.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.scalatest</groupId>
-            <artifactId>scalatest_2.9.3</artifactId>
-            <version>1.9.1</version>
+            <artifactId>scalatest_2.13</artifactId>
+            <version>3.2.11</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.ow2.asm</groupId>
             <artifactId>asm</artifactId>
-            <version>4.1</version>
+            <version>9.2</version>
         </dependency>
         <dependency>
             <groupId>org.ow2.asm</groupId>
             <artifactId>asm-tree</artifactId>
-            <version>4.1</version>
+            <version>9.2</version>
         </dependency>
         <dependency>
             <groupId>org.ow2.asm</groupId>
             <artifactId>asm-analysis</artifactId>
-            <version>4.1</version>
+            <version>9.2</version>
         </dependency>
         <dependency>
             <groupId>org.ow2.asm</groupId>
             <artifactId>asm-util</artifactId>
-            <version>4.1</version>
+            <version>9.2</version>
         </dependency>
     </dependencies>
 </project>
\ No newline at end of file

++++++ restore-java8-compatibility.patch ++++++
--- 
parboiled-1.4.1/parboiled-java/src/main/java/org/parboiled/transform/AsmUtils.java
  2023-10-11 09:54:38.742121727 +0200
+++ 
parboiled-1.4.1/parboiled-java/src/main/java/org/parboiled/transform/AsmUtils.java
  2023-10-11 09:54:51.432202375 +0200
@@ -35,7 +35,6 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.lang.invoke.MethodHandles;
 import java.lang.reflect.Array;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
@@ -47,8 +46,6 @@
 
 class AsmUtils {
 
-    private static final LookupFactory lookupFactory = new LookupFactory();
-
     public static ClassReader createClassReader(Class<?> clazz) throws 
IOException {
         checkArgNotNull(clazz, "clazz");
         String classFilename = clazz.getName().replace('.', '/') + ".class";
@@ -199,17 +196,22 @@
      * Otherwise the method returns null.
      *
      * @param className   the full name of the class to be loaded
-     * @param parentClass the parent class of the class with the given 
className
+     * @param classLoader the class loader to use
      * @return the class instance or null
      */
-    public static Class<?> loadClass(String className, Class<?> parentClass) {
+    public static Class<?> findLoadedClass(String className, ClassLoader 
classLoader) {
         checkArgNotNull(className, "className");
-        checkArgNotNull(parentClass, "parentClass");
+        checkArgNotNull(classLoader, "classLoader");
         try {
+            Class<?> classLoaderBaseClass = 
Class.forName("java.lang.ClassLoader");
+            Method findLoadedClassMethod = 
classLoaderBaseClass.getDeclaredMethod("findLoadedClass", String.class);
+
+            // protected method invocation
+            findLoadedClassMethod.setAccessible(true);
             try {
-                return parentClass.getClassLoader().loadClass(className);
-            } catch (ClassNotFoundException cnfe) {
-                return null;
+                return (Class<?>) findLoadedClassMethod.invoke(classLoader, 
className);
+            } finally {
+                findLoadedClassMethod.setAccessible(false);
             }
         } catch (Exception e) {
             throw new RuntimeException("Could not determine whether class '" + 
className +
@@ -218,30 +220,22 @@
     }
 
     /**
-     * Defines a new class with the given name and bytecode within the package 
of the given parent class.
-     * Since package and class identity includes the ClassLoader instance used 
to load a class we use reflection
+     * Loads the class defined with the given name and bytecode using the 
given class loader.
+     * Since package and class idendity includes the ClassLoader instance used 
to load a class we use reflection
      * on the given class loader to define generated classes. If we used our 
own class loader (in order to be able
      * to access the protected "defineClass" method) we would likely still be 
able to load generated classes,
      * however, they would not have access to package-private classes and 
members of their super classes.
      *
      * @param className   the full name of the class to be loaded
      * @param code        the bytecode of the class to load
-     * @param parentClass the parent class of the new class
+     * @param classLoader the class loader to use
      * @return the class instance
      */
-    public static Class<?> defineClass(String className, byte[] code, Class<?> 
parentClass) {
+    public static Class<?> loadClass(String className, byte[] code, 
ClassLoader classLoader) {
         checkArgNotNull(className, "className");
         checkArgNotNull(code, "code");
-        checkArgNotNull(parentClass, "parentClass");
-
+        checkArgNotNull(classLoader, "classLoader");
         try {
-            if (lookupFactory != null) {
-                MethodHandles.Lookup lookup = 
lookupFactory.lookupFor(parentClass);
-                if (lookup != null) {
-                    return lookup.defineClass(code);
-                }
-            }
-
             Class<?> classLoaderBaseClass = 
Class.forName("java.lang.ClassLoader");
             Method defineClassMethod = 
classLoaderBaseClass.getDeclaredMethod("defineClass",
                     String.class, byte[].class, int.class, int.class);
@@ -249,7 +243,7 @@
             // protected method invocation
             defineClassMethod.setAccessible(true);
             try {
-                return (Class<?>) 
defineClassMethod.invoke(parentClass.getClassLoader(), className, code, 0, 
code.length);
+                return (Class<?>) defineClassMethod.invoke(classLoader, 
className, code, 0, code.length);
             } finally {
                 defineClassMethod.setAccessible(false);
             }
--- 
parboiled-1.4.1/parboiled-java/src/main/java/org/parboiled/transform/GroupClassGenerator.java
       2023-10-11 09:54:38.758788500 +0200
+++ 
parboiled-1.4.1/parboiled-java/src/main/java/org/parboiled/transform/GroupClassGenerator.java
       2023-10-11 09:58:14.413389233 +0200
@@ -23,7 +23,8 @@
 import org.objectweb.asm.tree.*;
 
 import static org.objectweb.asm.Opcodes.*;
-import static org.parboiled.transform.AsmUtils.defineClass;
+import static org.parboiled.transform.AsmUtils.findLoadedClass;
+import static org.parboiled.transform.AsmUtils.loadClass;
 
 abstract class GroupClassGenerator implements RuleMethodProcessor {
 
@@ -53,15 +54,16 @@
     private void loadGroupClass(InstructionGroup group) {
         createGroupClassType(group);
         String className = group.getGroupClassType().getClassName();
+        ClassLoader classLoader = classNode.getParentClass().getClassLoader();
 
         Class<?> groupClass;
         synchronized (lock) {
-            groupClass = AsmUtils.loadClass(className, 
classNode.getParentClass());
+            groupClass = findLoadedClass(className, classLoader);
             if (groupClass == null || forceCodeBuilding) {
                 byte[] groupClassCode = generateGroupClassCode(group);
                 group.setGroupClassCode(groupClassCode);
                 if (groupClass == null) {
-                    AsmUtils.defineClass(className, groupClassCode, 
classNode.getParentClass());
+                    loadClass(className, groupClassCode, classLoader);
                 }
             }
         }
@@ -71,7 +73,7 @@
         String s = classNode.name;
         int lastSlash = classNode.name.lastIndexOf('/');
         // do not prepend a slash if class is in the default package 
(lastSlash == -1)
-        String groupClassInternalName = (lastSlash >= 0 ? s.substring(0, 
lastSlash) + '/' : "") + group.getName();
+        String groupClassInternalName = (lastSlash >= 0 ? s.substring(0, 
lastSlash) : s)+ '/' + group.getName();
         group.setGroupClassType(Type.getObjectType(groupClassInternalName));
     }
 
--- 
parboiled-1.4.1/parboiled-java/src/main/java/org/parboiled/transform/LookupFactory.java
     2023-10-11 09:54:38.758788500 +0200
+++ 
parboiled-1.4.1/parboiled-java/src/main/java/org/parboiled/transform/LookupFactory.java
     1970-01-01 01:00:00.000000000 +0100
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2022 parboiled contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.parboiled.transform;
-
-import java.lang.invoke.MethodHandles.Lookup;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.WeakHashMap;
-
-/**
- * Helper that can be used to create {@link Lookup} instances for
- * specific classes.
- */
-final class LookupFactory {
-
-       private WeakHashMap<Class<?>, Lookup> lookups = new WeakHashMap<>();
-       private Lookup trustedLookup;
-
-       LookupFactory() {
-               loadTrustedLookup();
-       }
-
-       /**
-        * Tries to load a trusted {@link Lookup} instance.
-        *
-        * <p>
-        * Adapted from <a 
href="https://github.com/google/guice/blob/cf759d44c78e8490e3d54df6a27918e0811bbdf9/core/src/com/google/inject/internal/aop/HiddenClassDefiner.java#L40";>HiddenClassDefiner</a>
-        * of Google Guice.
-        * </p>
-        */
-       private void loadTrustedLookup() {
-               try {
-                       Class<?> unsafeType = Class.forName("sun.misc.Unsafe");
-                       Field theUnsafeField = 
unsafeType.getDeclaredField("theUnsafe");
-                       theUnsafeField.setAccessible(true);
-                       Object unsafeInstance = theUnsafeField.get(null);
-                       Field trustedLookupField = 
Lookup.class.getDeclaredField("IMPL_LOOKUP");
-                       Method baseMethod = 
unsafeType.getMethod("staticFieldBase", Field.class);
-                       Object trustedLookupBase = 
baseMethod.invoke(unsafeInstance, trustedLookupField);
-                       Method offsetMethod = 
unsafeType.getMethod("staticFieldOffset", Field.class);
-                       Object trustedLookupOffset = 
offsetMethod.invoke(unsafeInstance, trustedLookupField);
-                       Method getObjectMethod = 
unsafeType.getMethod("getObject", Object.class, long.class);
-                       this.trustedLookup =
-                                       (Lookup) 
getObjectMethod.invoke(unsafeInstance, trustedLookupBase, trustedLookupOffset);
-               } catch (Exception e) {
-                       // Unsafe and trusted lookup is not available
-               }
-       }
-
-       /**
-        * Determines a {@link Lookup} instance for the given hostClass.
-        * <p>
-        * The method first tries to use a static method of the hostClass with 
the
-        * following signature:
-        * </p>
-        * <p>
-        * <code>
-        *     public static {@link Lookup} lookup();
-        * </code>
-        * </p>
-        * <p>
-        * If this fails then it tries to use a trusted lookup
-        * instance created via sun.misc.Unsafe.
-        * </p>
-        *
-        * @param hostClass The target class of the lookup instance
-        * @return a lookup instance or <code>null</code> if not found
-        */
-       Lookup lookupFor(Class<?> hostClass) {
-               Lookup lookup = lookups.get(hostClass);
-               if (lookup == null) {
-                       try {
-                               // try to find a lookup() method first
-                               Method lookupMethod = 
hostClass.getMethod("lookup");
-                               lookup = (Lookup) lookupMethod.invoke(null);
-                       } catch (Exception e) {
-                               // failed to use lookup() method
-                       }
-
-                       if (lookup == null && trustedLookup != null) {
-                               // use trusted lookup instance if available
-                               lookup = trustedLookup.in(hostClass);
-                       }
-
-                       if (lookup != null) {
-                               lookups.put(hostClass, lookup);
-                       }
-               }
-               return lookup;
-       }
-}
\ No newline at end of file
--- 
parboiled-1.4.1/parboiled-java/src/main/java/org/parboiled/transform/ParserTransformer.java
 2023-10-11 09:54:38.758788500 +0200
+++ 
parboiled-1.4.1/parboiled-java/src/main/java/org/parboiled/transform/ParserTransformer.java
 2023-10-11 09:55:09.205648662 +0200
@@ -32,8 +32,8 @@
     public static synchronized <T> Class<? extends T> transformParser(Class<T> 
parserClass) throws Exception {
         checkArgNotNull(parserClass, "parserClass");
         // first check whether we did not already create and load the 
extension of the given parser class
-        Class<?> extendedClass = AsmUtils.loadClass(
-                getExtendedParserClassName(parserClass.getName()), parserClass
+        Class<?> extendedClass = findLoadedClass(
+                getExtendedParserClassName(parserClass.getName()), 
parserClass.getClassLoader()
         );
         return (Class<? extends T>)
                 (extendedClass != null ? extendedClass : 
extendParserClass(parserClass).getExtendedClass());
@@ -102,10 +102,10 @@
         };
         classNode.accept(classWriter);
         classNode.setClassCode(classWriter.toByteArray());
-        classNode.setExtendedClass(defineClass(
+        classNode.setExtendedClass(loadClass(
                 classNode.name.replace('/', '.'),
                 classNode.getClassCode(),
-                classNode.getParentClass()
+                classNode.getParentClass().getClassLoader()
         ));
     }
 

Reply via email to