You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "ASF subversion and git services (Jira)" <ji...@apache.org> on 2022/02/25 02:55:00 UTC

[jira] [Commented] (TAP5-2709) Creating a service based on a sealed interface causes exception

    [ https://issues.apache.org/jira/browse/TAP5-2709?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17497866#comment-17497866 ] 

ASF subversion and git services commented on TAP5-2709:
-------------------------------------------------------

Commit 76cc9c2389bb393e7499831b0a6e508f048bea77 in tapestry-5's branch refs/heads/latest-java-tests from Thiago H. de Paula Figueiredo
[ https://gitbox.apache.org/repos/asf?p=tapestry-5.git;h=76cc9c2 ]

TAP5-2709: Service based on a sealed interface causes exception

> Creating a service based on a sealed interface causes exception
> ---------------------------------------------------------------
>
>                 Key: TAP5-2709
>                 URL: https://issues.apache.org/jira/browse/TAP5-2709
>             Project: Tapestry 5
>          Issue Type: Bug
>          Components: tapestry-ioc
>    Affects Versions: 5.7.0, 5.7.1, 5.7.2, 5.7.3
>            Reporter: Thiago Henrique De Paula Figueiredo
>            Assignee: Thiago Henrique De Paula Figueiredo
>            Priority: Major
>
> If you have a sealed interface, like this example:
> {code:java}
> public sealed interface IntExpression permits ConstantIntExpression, PlusExpression, SquareExpression {
>     ...
> }
> {code}
> and define a service based on it, like this example:
> {code:java}
>         @Marker(Primary.class)
>         public static IntExpression buildIntExpression() {
>             return (...);
>         }
> {code}
> 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:
> {noformat}
> 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)
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)