Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
5.7.0, 5.7.1, 5.7.2, 5.7.3
-
None
Description
If you have a sealed interface, like this example:
public sealed interface IntExpression permits ConstantIntExpression, PlusExpression, SquareExpression { ... }
and define a service based on it, like this example:
@Marker(Primary.class) public static IntExpression buildIntExpression() { return (...); }
This exception is thrown, since Tapestry-IoC is trying to create a proxy for it by creating a non-permitted implementation of the sealed interface:
java.lang.IncompatibleClassChangeError: class $IntExpression_32ba636c88d5 cannot implement sealed interface com.example.IntExpression at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:874) at org.apache.tapestry5.internal.plastic.PlasticClassLoader.defineClassWithBytecode(PlasticClassLoader.java:63) at org.apache.tapestry5.internal.plastic.PlasticClassPool.realize(PlasticClassPool.java:160) at org.apache.tapestry5.internal.plastic.PlasticClassPool.realizeTransformedClass(PlasticClassPool.java:139) at org.apache.tapestry5.internal.plastic.PlasticClassImpl.createInstantiator(PlasticClassImpl.java:650) at org.apache.tapestry5.plastic.PlasticManager.createProxy(PlasticManager.java:289) at org.apache.tapestry5.beanmodel.services.PlasticProxyFactoryImpl.createProxy(PlasticProxyFactoryImpl.java:78) at org.apache.tapestry5.ioc.internal.ModuleImpl.createProxyInstance(ModuleImpl.java:542) at org.apache.tapestry5.ioc.internal.ModuleImpl.createProxy(ModuleImpl.java:536) at org.apache.tapestry5.ioc.internal.ModuleImpl.access$15(ModuleImpl.java:526) at org.apache.tapestry5.ioc.internal.ModuleImpl$6.invoke(ModuleImpl.java:380) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:82) at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:72) at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1298) at org.apache.tapestry5.ioc.internal.ModuleImpl.create(ModuleImpl.java:402) at org.apache.tapestry5.ioc.internal.ModuleImpl.access$8(ModuleImpl.java:306) at org.apache.tapestry5.ioc.internal.ModuleImpl$3.invoke(ModuleImpl.java:256) at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withWrite(ConcurrentBarrier.java:139) at org.apache.tapestry5.ioc.internal.ModuleImpl$4.invoke(ModuleImpl.java:273) at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:83) at org.apache.tapestry5.ioc.internal.ModuleImpl.findOrCreate(ModuleImpl.java:279) at org.apache.tapestry5.ioc.internal.ModuleImpl.getService(ModuleImpl.java:170) at org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.java:530) at org.apache.tapestry5.ioc.internal.RegistryImpl.extractServiceFromMatches(RegistryImpl.java:1083) at org.apache.tapestry5.ioc.internal.RegistryImpl.getServiceByTypeAndMarkers(RegistryImpl.java:845) at org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.java:801) at org.apache.tapestry5.ioc.internal.RegistryWrapper.getService(RegistryWrapper.java:71)
Attachments
Issue Links
- is related to
-
TAP5-2700 Create Tapestry IoC tests covering new Java features from versions 9 to 17
- Resolved