Uploaded image for project: 'Quarkus'
  1. Quarkus
  2. QUARKUS-7073

ArC: fix subclass generation with not visible decorators

XMLWordPrintable

      This fixes several visibility issues in the generated subclass if decorators are not visible from the decorated bean or an other decorator in the chain.
      An example error looks like this:
      java.lang.IllegalAccessError: failed to access class io.quarkus.arc.test.decorators.NonPublicDecoratorTest$AdditionalConverterDecorator from class io.quarkus.arc.test.decorators.other.ToUpperCaseConverter_Subclass (io.quarkus.arc.test.decorators.NonPublicDecoratorTest$AdditionalConverterDecorator and io.quarkus.arc.test.decorators.other.ToUpperCaseConverter_Subclass are in unnamed module of loader 'app')
      at io.quarkus.arc.test.decorators.other.ToUpperCaseConverter_Subclass.<init>(Unknown Source)
      at io.quarkus.arc.test.decorators.other.ToUpperCaseConverter_Bean.doCreate(Unknown Source)
      at io.quarkus.arc.test.decorators.other.ToUpperCaseConverter_Bean.create(Unknown Source)
      at io.quarkus.arc.test.decorators.other.ToUpperCaseConverter_Bean.create(Unknown Source)
      at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:119)
      at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:38)
      at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:35)
      at io.quarkus.arc.impl.LazyValue.get(LazyValue.java:32)
      at io.quarkus.arc.impl.ComputingCache.computeIfAbsent(ComputingCache.java:69)
      at io.quarkus.arc.impl.ComputingCacheContextInstances.computeIfAbsent(ComputingCacheContextInstances.java:19)
      at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:35)
      at io.quarkus.arc.impl.ClientProxies.getApplicationScopedDelegate(ClientProxies.java:23)
      at io.quarkus.arc.test.decorators.other.ToUpperCaseConverter_ClientProxy.arc$delegate(Unknown Source)
      at io.quarkus.arc.test.decorators.other.ToUpperCaseConverter_ClientProxy.convert(Unknown Source)
      at io.quarkus.arc.test.decorators.NonPublicDecoratorTest.testDecoration(NonPublicDecoratorTest.java:36)
      at java.base/java.lang.reflect.Method.invoke(Method.java:580)
      at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
      at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)

      The fix is to use the methods on the decorated types and not the decorator class.
      A work around without the fix would be to make the decorator abstract (only works with a single decorator and not with a chain).

              jmartisk@redhat.com Jan Martiska
              msochure@redhat.com Miroslav Sochurek
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: