diff --git a/1.1.6.tar.gz b/1.1.6.tar.gz deleted file mode 100644 index 66b85af..0000000 --- a/1.1.6.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:793fe27f8aa5ae71e6dc09bcda702835ad9a23329d61cd26de046cfdcb0fbe5d -size 215393 diff --git a/1.4.1.tar.gz b/1.4.1.tar.gz new file mode 100644 index 0000000..6417806 --- /dev/null +++ b/1.4.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f396cd6f51939efed94f37736440238a86291ed02bcd523aa97aa2eff8de1f2 +size 230536 diff --git a/_multibuild b/_multibuild deleted file mode 100644 index 078eeb6..0000000 --- a/_multibuild +++ /dev/null @@ -1,3 +0,0 @@ - - scala - diff --git a/parboiled-1.1.6-build.tar.xz b/parboiled-1.1.6-build.tar.xz deleted file mode 100644 index 5f558e0..0000000 --- a/parboiled-1.1.6-build.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b4a7d350818ea568dee926ffef3098a2d228f57b16e594b17f04f29b767c0a64 -size 2796 diff --git a/parboiled-build.tar.xz b/parboiled-build.tar.xz new file mode 100644 index 0000000..8b26c57 --- /dev/null +++ b/parboiled-build.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b426cd0ac656fe6c6d19037a13766a8214195517d409c2d2b62beed0f48087a +size 2856 diff --git a/parboiled-core-1.1.6.pom b/parboiled-core-1.4.1.pom similarity index 83% rename from parboiled-core-1.1.6.pom rename to parboiled-core-1.4.1.pom index 1c061d8..0950ea8 100644 --- a/parboiled-core-1.1.6.pom +++ b/parboiled-core-1.4.1.pom @@ -3,10 +3,10 @@ 4.0.0 org.parboiled parboiled-core - bundle + jar Elegant parsing in Java and Scala - lightweight, easy-to-use, powerful http://parboiled.org - 1.1.6 + 1.4.1 Apache 2 @@ -32,15 +32,15 @@ - org.testng - testng - 5.14.1 + org.scalatestplus + testng-7-5_2.13 + 3.2.11.0 test org.scalatest - scalatest_2.9.3 - 1.9.1 + scalatest_2.13 + 3.2.11 test diff --git a/parboiled-java-1.1.6.pom b/parboiled-java-1.4.1.pom similarity index 81% rename from parboiled-java-1.1.6.pom rename to parboiled-java-1.4.1.pom index ca7805e..e6f0d65 100644 --- a/parboiled-java-1.1.6.pom +++ b/parboiled-java-1.4.1.pom @@ -3,10 +3,10 @@ 4.0.0 org.parboiled parboiled-java - bundle + jar Elegant parsing in Java and Scala - lightweight, easy-to-use, powerful http://parboiled.org - 1.1.6 + 1.4.1 Apache 2 @@ -34,39 +34,39 @@ org.parboiled parboiled-core - 1.1.6 + 1.4.1 - org.testng - testng - 5.14.1 + org.scalatestplus + testng-7-5_2.13 + 3.2.11.0 test org.scalatest - scalatest_2.9.3 - 1.9.1 + scalatest_2.13 + 3.2.11 test org.ow2.asm asm - 4.1 + 9.2 org.ow2.asm asm-tree - 4.1 + 9.2 org.ow2.asm asm-analysis - 4.1 + 9.2 org.ow2.asm asm-util - 4.1 + 9.2 \ No newline at end of file diff --git a/parboiled-port-to-objectweb-asm-5.0.1.patch b/parboiled-port-to-objectweb-asm-5.0.1.patch deleted file mode 100644 index 369f968..0000000 --- a/parboiled-port-to-objectweb-asm-5.0.1.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 66129b1155188b4c2b1d3b34641a7118fd99eb51 Mon Sep 17 00:00:00 2001 -From: Michal Srb -Date: Thu, 27 Mar 2014 10:59:08 +0100 -Subject: [PATCH] Port to objectweb-asm 5.0.1 - ---- - .../src/main/java/org/parboiled/transform/ParserClassNode.java | 2 ++ - parboiled-java/src/main/java/org/parboiled/transform/RuleMethod.java | 3 ++- - 2 files changed, 4 insertions(+), 1 deletion(-) - -diff --git a/parboiled-java/src/main/java/org/parboiled/transform/ParserClassNode.java b/parboiled-java/src/main/java/org/parboiled/transform/ParserClassNode.java -index 6534f24..3da751b 100644 ---- a/parboiled-java/src/main/java/org/parboiled/transform/ParserClassNode.java -+++ b/parboiled-java/src/main/java/org/parboiled/transform/ParserClassNode.java -@@ -26,6 +26,7 @@ import static org.parboiled.common.Preconditions.*; - import org.objectweb.asm.Type; - import org.objectweb.asm.tree.ClassNode; - import org.objectweb.asm.tree.MethodNode; -+import org.objectweb.asm.Opcodes; - - import java.util.*; - -@@ -39,6 +40,7 @@ class ParserClassNode extends ClassNode { - private Class extendedClass; - - public ParserClassNode(Class parentClass) { -+ super(Opcodes.ASM4); - this.parentClass = checkArgNotNull(parentClass, "parentClass"); - parentType = Type.getType(parentClass); - } -diff --git a/parboiled-java/src/main/java/org/parboiled/transform/RuleMethod.java b/parboiled-java/src/main/java/org/parboiled/transform/RuleMethod.java -index c60ef8a..8c023ca 100644 ---- a/parboiled-java/src/main/java/org/parboiled/transform/RuleMethod.java -+++ b/parboiled-java/src/main/java/org/parboiled/transform/RuleMethod.java -@@ -31,6 +31,7 @@ import org.objectweb.asm.tree.LabelNode; - import org.objectweb.asm.tree.LocalVariableNode; - import org.objectweb.asm.tree.MethodNode; - import org.objectweb.asm.tree.analysis.BasicValue; -+import org.objectweb.asm.Opcodes; - import org.parboiled.BaseParser; - import org.parboiled.common.StringUtils; - import org.parboiled.support.Var; -@@ -71,7 +72,7 @@ class RuleMethod extends MethodNode { - - public RuleMethod(Class ownerClass, int access, String name, String desc, String signature, String[] exceptions, - boolean hasExplicitActionOnlyAnno, boolean hasDontLabelAnno, boolean hasSkipActionsInPredicates) { -- super(access, name, desc, signature, exceptions); -+ super(Opcodes.ASM4, access, name, desc, signature, exceptions); - this.ownerClass = ownerClass; - parameterCount = Type.getArgumentTypes(desc).length; - hasCachedAnnotation = parameterCount == 0; --- -1.9.0 - diff --git a/parboiled-scala_2.10-1.1.6.pom b/parboiled-scala_2.10-1.1.6.pom deleted file mode 100644 index 15b5cf1..0000000 --- a/parboiled-scala_2.10-1.1.6.pom +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - org.parboiled - parboiled-scala_2.10 - bundle - Elegant parsing in Java and Scala - lightweight, easy-to-use, powerful - http://parboiled.org - 1.1.6 - - - Apache 2 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - parboiled-scala - 2009 - - org.parboiled - http://parboiled.org - - - git@github.com:sirthias/parboiled.git - scm:git:git@github.com:sirthias/parboiled.git - - - - sirthias - Mathias Doenitz - - - - - org.parboiled - parboiled-core - 1.1.6 - - - org.scala-lang - scala-library - 2.10.2 - - - org.testng - testng - 5.14.1 - test - - - org.scalatest - scalatest_2.10 - 1.9.1 - test - - - \ No newline at end of file diff --git a/parboiled.changes b/parboiled.changes index bd5ff83..59fc691 100644 --- a/parboiled.changes +++ b/parboiled.changes @@ -1,3 +1,52 @@ +------------------------------------------------------------------- +Wed Oct 11 07:22:30 UTC 2023 - Fridrich Strba + +- Do not build the scala subpackage, since it is not needed by any + package + +------------------------------------------------------------------- +Fri Oct 6 11:26:05 UTC 2023 - Fridrich Strba + +- 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 + ------------------------------------------------------------------- Sun Mar 20 15:24:52 UTC 2022 - Fridrich Strba diff --git a/parboiled.spec b/parboiled.spec index 38200b7..30e92ba 100644 --- a/parboiled.spec +++ b/parboiled.spec @@ -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 -License: Apache-2.0 -Group: Development/Libraries/Java -%endif -Version: 1.1.6 +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 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 @@ Group: Documentation/HTML 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,6 +87,6 @@ done %files javadoc %license LICENSE -%{_javadocdir}/%{base_name} +%{_javadocdir}/%{name} %changelog diff --git a/restore-java8-compatibility.patch b/restore-java8-compatibility.patch new file mode 100644 index 0000000..cd239e8 --- /dev/null +++ b/restore-java8-compatibility.patch @@ -0,0 +1,268 @@ +--- 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, Lookup> lookups = new WeakHashMap<>(); +- private Lookup trustedLookup; +- +- LookupFactory() { +- loadTrustedLookup(); +- } +- +- /** +- * Tries to load a trusted {@link Lookup} instance. +- * +- *

+- * Adapted from HiddenClassDefiner +- * of Google Guice. +- *

+- */ +- 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. +- *

+- * The method first tries to use a static method of the hostClass with the +- * following signature: +- *

+- *

+- * +- * public static {@link Lookup} lookup(); +- * +- *

+- *

+- * If this fails then it tries to use a trusted lookup +- * instance created via sun.misc.Unsafe. +- *

+- * +- * @param hostClass The target class of the lookup instance +- * @return a lookup instance or null 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 Class transformParser(Class 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) + (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() + )); + } +