parboiled
parboiled copied to clipboard
ClassFormatException when running 1.1.7 on Java8
Exception while trying to instantiate parser using Parboiled.createParser()
Java version: 1.8.0_25
Error creating extended parser class: Could not load class '<mypackage>.ElExpression$AnalyzerParser$$parboiled'
at org.parboiled.Parboiled.createParser(Parboiled.java:58) ~[parboiled-java-1.1.7.jar:1.1.7]
at <mypackage>.ElExpression$AnalyzerParser.<clinit>(ElExpression.java:109) ~[platform-blocks-impl-1.0-SNAPSHOT.jar:na]
... 123 common frames omitted
Caused by: java.lang.RuntimeException: Could not load class '<mypackage>.ElExpression$AnalyzerParser$$parboiled'
at org.parboiled.transform.AsmUtils.loadClass(AsmUtils.java:247) ~[parboiled-java-1.1.7.jar:1.1.7]
at org.parboiled.transform.ParserTransformer.defineExtendedParserClass(ParserTransformer.java:100) ~[parboiled-java-1.1.7.jar:1.1.7]
at org.parboiled.transform.ParserTransformer.extendParserClass(ParserTransformer.java:47) ~[parboiled-java-1.1.7.jar:1.1.7]
at org.parboiled.transform.ParserTransformer.transformParser(ParserTransformer.java:38) ~[parboiled-java-1.1.7.jar:1.1.7]
at org.parboiled.Parboiled.createParser(Parboiled.java:54) ~[parboiled-java-1.1.7.jar:1.1.7]
... 124 common frames omitted
Caused by: java.lang.reflect.InvocationTargetException: null
at sun.reflect.GeneratedMethodAccessor261.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_25]
at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_25]
at org.parboiled.transform.AsmUtils.loadClass(AsmUtils.java:242) ~[parboiled-java-1.1.7.jar:1.1.7]
... 128 common frames omitted
Caused by: java.lang.ClassFormatError: Class file version does not support constant tag 15 in class file <mypackagepath>/ElExpression$AnalyzerParser$$parboiled
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_25]
at java.lang.ClassLoader.defineClass(ClassLoader.java:760) ~[na:1.8.0_25]
at java.lang.ClassLoader.defineClass(ClassLoader.java:642) ~[na:1.8.0_25]
... 132 common frames omitted
Parser class is defined as static inner class of another class, and it also uses sibling static inner classes.
Ok, I've figured out that this error arises if I use new Action<X>(){ ... }
in rule declarations.
+1, but seems to be a quite rare scenario?
Just want to simplify the action, but got this error
// helper function
public static <V> Action<V> run(Consumer<Context<V>> func) {
return v -> {
func.accept(v);
return true;
};
}
// use in rule
return Sequence(..., Parsers.run((c) -> node.setName(match())), ...);
+1 Any known fix/workaround ? I didn't use any Actions in my project. I have a slightly different error cause:
Caused by: java.lang.ClassFormatError: Class file version does not support constant tag 15 in class file [package]/Action$A3bkRxscB4Cqcexh
I think it's caused when lambdas are somehow used in an old java class version (e.g 1.6). If i replace list#forEach(lambda) with a for() loop, then it works fine