<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Probably related: a few other classes which are being transformed with the new method call are failing due to stack size calculation problems, like this:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">java.lang.IllegalArgumentException: Stack size mismatch at bytecode offset 204 of method discoverSources()<br> - max stack: 65535<br> max locals: 65535<br> attributes: []<br> //stack map frame @0: {locals: [io/smallrye/config/SmallRyeConfigBuilder], stack: []}<br> 0: {opcode: NEW, type: java/util/ArrayList}<br> 3: {opcode: DUP}<br> 4: {opcode: INVOKESPECIAL, owner: java/util/ArrayList, method name: <init>, method type: ()V}<br> 7: {opcode: ASTORE_1, slot: 1}<br> 8: {opcode: LDC, constant value: 'ClassDesc[ConfigSource]'}<br> 10: {opcode: ALOAD_0, slot: 0}<br> 11: {opcode: GETFIELD, owner: io/smallrye/config/SmallRyeConfigBuilder, field name: classLoader, field type: Ljava/lang/ClassLoader;}<br> 14: {opcode: INVOKESTATIC, owner: io/github/dmlloyd/modules/ModuleServiceLoader, method name: load, method type: (Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;}<br> 17: {opcode: ASTORE_2, slot: 2}<br> 18: {opcode: ALOAD_2, slot: 2}<br> 19: {opcode: INVOKEVIRTUAL, owner: java/util/ServiceLoader, method name: iterator, method type: ()Ljava/util/Iterator;}<br> 22: {opcode: ASTORE_3, slot: 3}<br> 23: {opcode: ALOAD_3, slot: 3}<br> 24: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: hasNext, method type: ()Z}<br> 29: {opcode: IFEQ, target: 55}<br> 32: {opcode: ALOAD_3, slot: 3}<br> 33: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: next, method type: ()Ljava/lang/Object;}<br> 38: {opcode: CHECKCAST, type: org/eclipse/microprofile/config/spi/ConfigSource}<br> 41: {opcode: ASTORE, slot: 4}<br> 43: {opcode: ALOAD_1, slot: 1}<br> 44: {opcode: ALOAD, slot: 4}<br> 46: {opcode: INVOKEINTERFACE, owner: java/util/List, method name: add, method type: (Ljava/lang/Object;)Z}<br> 51: {opcode: POP}<br> 52: {opcode: GOTO, target: 23}<br> 55: {opcode: LDC, constant value: 'ClassDesc[ConfigSourceProvider]'}<br> 57: {opcode: ALOAD_0, slot: 0}<br> 58: {opcode: GETFIELD, owner: io/smallrye/config/SmallRyeConfigBuilder, field name: classLoader, field type: Ljava/lang/ClassLoader;}<br> 61: {opcode: INVOKESTATIC, owner: io/github/dmlloyd/modules/ModuleServiceLoader, method name: load, method type: (Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;}<br> 64: {opcode: ASTORE_3, slot: 3}<br> 65: {opcode: ALOAD_3, slot: 3}<br> 66: {opcode: INVOKEVIRTUAL, owner: java/util/ServiceLoader, method name: iterator, method type: ()Ljava/util/Iterator;}<br> 69: {opcode: ASTORE, slot: 4}<br> 71: {opcode: ALOAD, slot: 4}<br> 73: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: hasNext, method type: ()Z}<br> 78: {opcode: IFEQ, target: 148}<br> 81: {opcode: ALOAD, slot: 4}<br> 83: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: next, method type: ()Ljava/lang/Object;}<br> 88: {opcode: CHECKCAST, type: org/eclipse/microprofile/config/spi/ConfigSourceProvider}<br> 91: {opcode: ASTORE, slot: 5}<br> 93: {opcode: ALOAD, slot: 5}<br> 95: {opcode: ALOAD_0, slot: 0}<br> 96: {opcode: GETFIELD, owner: io/smallrye/config/SmallRyeConfigBuilder, field name: classLoader, field type: Ljava/lang/ClassLoader;}<br> 99: {opcode: INVOKEINTERFACE, owner: org/eclipse/microprofile/config/spi/ConfigSourceProvider, method name: getConfigSources, method type: (Ljava/lang/ClassLoader;)Ljava/lang/Iterable;}<br> 104: {opcode: INVOKEINTERFACE, owner: java/lang/Iterable, method name: iterator, method type: ()Ljava/util/Iterator;}<br> 109: {opcode: ASTORE, slot: 6}<br> 111: {opcode: ALOAD, slot: 6}<br> 113: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: hasNext, method type: ()Z}<br> 118: {opcode: IFEQ, target: 145}<br> 121: {opcode: ALOAD, slot: 6}<br> 123: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: next, method type: ()Ljava/lang/Object;}<br> 128: {opcode: CHECKCAST, type: org/eclipse/microprofile/config/spi/ConfigSource}<br> 131: {opcode: ASTORE, slot: 7}<br> 133: {opcode: ALOAD_1, slot: 1}<br> 134: {opcode: ALOAD, slot: 7}<br> 136: {opcode: INVOKEINTERFACE, owner: java/util/List, method name: add, method type: (Ljava/lang/Object;)Z}<br> 141: {opcode: POP}<br> 142: {opcode: GOTO, target: 111}<br> 145: {opcode: GOTO, target: 71}<br> 148: {opcode: LDC, constant value: 'ClassDesc[ConfigSourceFactory]'}<br> 150: {opcode: ALOAD_0, slot: 0}<br> 151: {opcode: GETFIELD, owner: io/smallrye/config/SmallRyeConfigBuilder, field name: classLoader, field type: Ljava/lang/ClassLoader;}<br> 154: {opcode: INVOKESTATIC, owner: io/github/dmlloyd/modules/ModuleServiceLoader, method name: load, method type: (Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;}<br> 157: {opcode: ASTORE, slot: 4}<br> 159: {opcode: ALOAD, slot: 4}<br> 161: {opcode: INVOKEVIRTUAL, owner: java/util/ServiceLoader, method name: iterator, method type: ()Ljava/util/Iterator;}<br> 164: {opcode: ASTORE, slot: 5}<br> 166: {opcode: ALOAD, slot: 5}<br> 168: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: hasNext, method type: ()Z}<br> 173: {opcode: IFEQ, target: 207}<br> 176: {opcode: ALOAD, slot: 5}<br> 178: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: next, method type: ()Ljava/lang/Object;}<br> 183: {opcode: CHECKCAST, type: io/smallrye/config/ConfigSourceFactory}<br> 186: {opcode: ASTORE, slot: 6}<br> 188: {opcode: ALOAD_1, slot: 1}<br> 189: {opcode: NEW, type: io/smallrye/config/ConfigurableConfigSource}<br> 192: {opcode: DUP}<br> 193: {opcode: ALOAD, slot: 6}<br> 195: {opcode: INVOKESPECIAL, owner: io/smallrye/config/ConfigurableConfigSource, method name: <init>, method type: (Lio/smallrye/config/ConfigSourceFactory;)V}<br> 198: {opcode: INVOKEINTERFACE, owner: java/util/List, method name: add, method type: (Ljava/lang/Object;)Z}<br> 203: {opcode: POP}<br> 204: {opcode: GOTO, target: 166}<br> 207: {opcode: ALOAD_1, slot: 1}<br> 208: {opcode: ARETURN}</div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Thu, Dec 12, 2024 at 11:11 AM David Lloyd <<a href="mailto:david.lloyd@redhat.com">david.lloyd@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Initial disclaimer: I'm using my backport [1] of this API, so it's possible that I've introduced a bug that is not found upstream, or somehow missed a backport patch. I don't have a good way to test this with upstream directly at the moment.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">I'm seeing a case where I'm transforming a class, and only changing calls to two overloads of `ServiceLoader.load()` to an equivalent on another class, for a test. But, the rewritten class triggers a `VerifyError` because one of the stack maps got a superfluous `int` added to it. This looks similar to a previously reported bug.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">I've narrowed it down to when I change the owner type of the method being called. If I keep the original owner, then things pass through just fine - this might be because of some optimization where it doesn't detect a change, or maybe it is because I end up growing the constant pool by one?</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Here's my transformation code (it's a little redundant in places but I was trying to rule out possible problems):</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"> ClassFile cf = ClassFile.of();<br> ClassModel old = cf.parse(bytes);<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"> // then later...</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"> newBytes = cf.transformClass(old, old.thisClass(), ClassTransform.transformingMethodBodies(<br> (cb, ce) -> {<br> if (ce instanceof InvokeInstruction ii<br> && ii.opcode() == Opcode.INVOKESTATIC<br> && ii.owner().name().equalsString("java/util/ServiceLoader")<br> && <a href="http://ii.name" target="_blank">ii.name</a>().equalsString("load")<br> ) {<br> switch (ii.type().stringValue()) {<br> case "(Ljava/lang/Class;)Ljava/util/ServiceLoader;",<br> "(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;" -><br> cb.invokestatic(ModuleServiceLoader.class.describeConstable().orElseThrow(), <a href="http://ii.name" target="_blank">ii.name</a>().stringValue(), ii.typeSymbol(), ii.isInterface());<br> default -><br> cb.invokestatic(ii.owner().asSymbol(), <a href="http://ii.name" target="_blank">ii.name</a>().stringValue(), ii.typeSymbol(), ii.isInterface());<br> }<br> } else {<br> cb.with(ce);<br> }<br> }<br> ));<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Here's the original with a correct stack map:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"> Stackmap Frame:<br> bci: @61<br> flags: { }<br> locals: { 'java/util/ServiceLoader', 'java/util/Iterator' }<br> stack: { integer }<br> Bytecode:<br> 0000000: 1259 b800 5ab3 003b 125b b802 314b 2ab6<br> 0000010: 0040 4c2b b900 4101 0099 0021 2bb9 0042<br> 0000020: 0100 c000 5b4d 2cb9 005c 0100 125d b800<br> 0000030: 30c0 005e b800 09a7 0006 b800 5fb8 0060<br> 0000040: b800 61b2 0047 b300 2db2 0050 b300 4c11<br> 0000050: 0080 b300 0510 20b3 0006 1101 00b3 0007<br> 0000060: b1 <br> - {start: 28, line number: 45}<br> - {start: 38, line number: 46}<br> - {start: 55, line number: 47}<br> - {start: 58, line number: 48}<br> - {start: 61, line number: 51}<br> - {start: 64, line number: 53}<br> - {start: 67, line number: 63}<br> - {start: 73, line number: 65}<br> - {start: 79, line number: 67}<br> - {start: 85, line number: 69}<br> - {start: 90, line number: 70}<br> local variables: <br> - {start: 38, end: 55, slot: 2, name: next, type: Lio/smallrye/mutiny/infrastructure/ExecutorConfiguration;}<br> - {start: 14, end: 67, slot: 0, name: executorLoader, type: Ljava/util/ServiceLoader;}<br> - {start: 19, end: 67, slot: 1, name: iterator, type: Ljava/util/Iterator;}<br> local variable types: <br> - {start: 14, end: 67, slot: 0, name: executorLoader, signature: Ljava/util/ServiceLoader<Lio/smallrye/mutiny/infrastructure/ExecutorConfiguration;>;}<br> - {start: 19, end: 67, slot: 1, name: iterator, signature: Ljava/util/Iterator<Lio/smallrye/mutiny/infrastructure/ExecutorConfiguration;>;}<br> stack map frames: <br> 58: {locals: [java/util/ServiceLoader, java/util/Iterator], stack: []}<br> 61: {locals: [java/util/ServiceLoader, java/util/Iterator], stack: []}<br> //stack map frame @0: {locals: [], stack: []}<br> 0: {opcode: LDC, constant value: mutiny.disableCallBackDecorators}<br> 2: {opcode: INVOKESTATIC, owner: java/lang/Boolean, method name: getBoolean, method type: (Ljava/lang/String;)Z}<br> 5: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: DISABLE_CALLBACK_DECORATORS, field type: Z}<br> 8: {opcode: LDC, constant value: 'ClassDesc[ExecutorConfiguration]'}<br> 10: {opcode: INVOKESTATIC, owner: java/util/ServiceLoader, method name: load, method type: (Ljava/lang/Class;)Ljava/util/ServiceLoader;}<br> 13: {opcode: ASTORE_0, slot: 0}<br> 14: {opcode: ALOAD_0, slot: 0, type: Ljava/util/ServiceLoader;, variable name: executorLoader}<br> 15: {opcode: INVOKEVIRTUAL, owner: java/util/ServiceLoader, method name: iterator, method type: ()Ljava/util/Iterator;}<br> 18: {opcode: ASTORE_1, slot: 1}<br> 19: {opcode: ALOAD_1, slot: 1, type: Ljava/util/Iterator;, variable name: iterator}<br> 20: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: hasNext, method type: ()Z}<br> 25: {opcode: IFEQ, target: 58}<br> 28: {opcode: ALOAD_1, slot: 1, type: Ljava/util/Iterator;, variable name: iterator}<br> 29: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: next, method type: ()Ljava/lang/Object;}<br> 34: {opcode: CHECKCAST, type: io/smallrye/mutiny/infrastructure/ExecutorConfiguration}<br> 37: {opcode: ASTORE_2, slot: 2}<br> 38: {opcode: ALOAD_2, slot: 2, type: Lio/smallrye/mutiny/infrastructure/ExecutorConfiguration;, variable name: next}<br> 39: {opcode: INVOKEINTERFACE, owner: io/smallrye/mutiny/infrastructure/ExecutorConfiguration, method name: getDefaultWorkerExecutor, method type: ()Ljava/util/concurrent/Executor;}<br> 44: {opcode: LDC, constant value: executor}<br> 46: {opcode: INVOKESTATIC, owner: io/smallrye/mutiny/helpers/ParameterValidation, method name: nonNull, method type: (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;}<br> 49: {opcode: CHECKCAST, type: java/util/concurrent/Executor}<br> 52: {opcode: INVOKESTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, method name: setDefaultExecutor, method type: (Ljava/util/concurrent/Executor;)V}<br> 55: {opcode: GOTO, target: 61}<br> //stack map frame @58: {locals: [java/util/ServiceLoader, java/util/Iterator], stack: []}<br> 58: {opcode: INVOKESTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, method name: setDefaultExecutor, method type: ()V}<br> //stack map frame @61: {locals: [java/util/ServiceLoader, java/util/Iterator], stack: []}<br> 61: {opcode: INVOKESTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, method name: reload, method type: ()V}<br> 64: {opcode: INVOKESTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, method name: resetCanCallerThreadBeBlockedSupplier, method type: ()V}<br> 67: {opcode: GETSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure$PrintAndDumpThrowableConsumer, field name: INSTANCE, field type: Lio/smallrye/mutiny/infrastructure/Infrastructure$PrintAndDumpThrowableConsumer;}<br> 70: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: droppedExceptionHandler, field type: Ljava/util/function/Consumer;}<br> 73: {opcode: GETSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure$PrintOperatorEventOperatorLogger, field name: INSTANCE, field type: Lio/smallrye/mutiny/infrastructure/Infrastructure$PrintOperatorEventOperatorLogger;}<br> 76: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: operatorLogger, field type: Lio/smallrye/mutiny/infrastructure/Infrastructure$OperatorLogger;}<br> 79: {opcode: SIPUSH, constant value: 128}<br> 82: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: multiOverflowDefaultBufferSize, field type: I}<br> 85: {opcode: BIPUSH, constant value: 32}<br> 87: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: bufferSizeXs, field type: I}<br> 90: {opcode: SIPUSH, constant value: 256}<br> 93: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: bufferSizeS, field type: I}<br> 96: {opcode: RETURN}</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Here's the rewritten version with the wrong stack map:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"> Current Frame:<br> bci: @55<br> flags: { }<br> locals: { 'java/util/ServiceLoader', 'java/util/Iterator', 'io/smallrye/mutiny/infrastructure/ExecutorConfiguration' }<br> stack: { }<br> Stackmap Frame:<br> bci: @61<br> flags: { }<br> locals: { 'java/util/ServiceLoader', 'java/util/Iterator' }<br> stack: { integer }<br> Bytecode:<br> 0000000: 1259 b800 5ab3 003b 125b b802 314b 2ab6<br> 0000010: 0040 4c2b b900 4101 0099 0021 2bb9 0042<br> 0000020: 0100 c000 5b4d 2cb9 005c 0100 125d b800<br> 0000030: 30c0 005e b800 09a7 0006 b800 5fb8 0060<br> 0000040: b800 61b2 0047 b300 2db2 0050 b300 4c11<br> 0000050: 0080 b300 0510 20b3 0006 1101 00b3 0007<br> 0000060: b1 <br> - {start: 14, line number: 43}<br> - {start: 19, line number: 44}<br> - {start: 28, line number: 45}<br> - {start: 38, line number: 46}<br> - {start: 55, line number: 47}<br> - {start: 58, line number: 48}<br> - {start: 61, line number: 51}<br> - {start: 64, line number: 53}<br> - {start: 67, line number: 63}<br> - {start: 73, line number: 65}<br> - {start: 79, line number: 67}<br> - {start: 85, line number: 69}<br> - {start: 90, line number: 70}<br> stack map frames: <br> 58: {locals: [java/util/ServiceLoader, java/util/Iterator], stack: []}<br> 61: {locals: [java/util/ServiceLoader, java/util/Iterator], stack: [int]}<br> //stack map frame @0: {locals: [], stack: []}<br> 0: {opcode: LDC, constant value: mutiny.disableCallBackDecorators}<br> 2: {opcode: INVOKESTATIC, owner: java/lang/Boolean, method name: getBoolean, method type: (Ljava/lang/String;)Z}<br> 5: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: DISABLE_CALLBACK_DECORATORS, field type: Z}<br> 8: {opcode: LDC, constant value: 'ClassDesc[ExecutorConfiguration]'}<br> 10: {opcode: INVOKESTATIC, owner: io/github/dmlloyd/modules/ModuleServiceLoader, method name: load, method type: (Ljava/lang/Class;)Ljava/util/ServiceLoader;}<br> 13: {opcode: ASTORE_0, slot: 0}<br> 14: {opcode: ALOAD_0, slot: 0, type: Ljava/util/ServiceLoader;, variable name: executorLoader}<br> 15: {opcode: INVOKEVIRTUAL, owner: java/util/ServiceLoader, method name: iterator, method type: ()Ljava/util/Iterator;}<br> 18: {opcode: ASTORE_1, slot: 1}<br> 19: {opcode: ALOAD_1, slot: 1, type: Ljava/util/Iterator;, variable name: iterator}<br> 20: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: hasNext, method type: ()Z}<br> 25: {opcode: IFEQ, target: 58}<br> 28: {opcode: ALOAD_1, slot: 1, type: Ljava/util/Iterator;, variable name: iterator}<br> 29: {opcode: INVOKEINTERFACE, owner: java/util/Iterator, method name: next, method type: ()Ljava/lang/Object;}<br> 34: {opcode: CHECKCAST, type: io/smallrye/mutiny/infrastructure/ExecutorConfiguration}<br> 37: {opcode: ASTORE_2, slot: 2}<br> 38: {opcode: ALOAD_2, slot: 2, type: Lio/smallrye/mutiny/infrastructure/ExecutorConfiguration;, variable name: next}<br> 39: {opcode: INVOKEINTERFACE, owner: io/smallrye/mutiny/infrastructure/ExecutorConfiguration, method name: getDefaultWorkerExecutor, method type: ()Ljava/util/concurrent/Executor;}<br> 44: {opcode: LDC, constant value: executor}<br> 46: {opcode: INVOKESTATIC, owner: io/smallrye/mutiny/helpers/ParameterValidation, method name: nonNull, method type: (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;}<br> 49: {opcode: CHECKCAST, type: java/util/concurrent/Executor}<br> 52: {opcode: INVOKESTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, method name: setDefaultExecutor, method type: (Ljava/util/concurrent/Executor;)V}<br> 55: {opcode: GOTO, target: 61}<br> //stack map frame @58: {locals: [java/util/ServiceLoader, java/util/Iterator], stack: []}<br> 58: {opcode: INVOKESTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, method name: setDefaultExecutor, method type: ()V}<br> //stack map frame @61: {locals: [java/util/ServiceLoader, java/util/Iterator], stack: [int]}<br> 61: {opcode: INVOKESTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, method name: reload, method type: ()V}<br> 64: {opcode: INVOKESTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, method name: resetCanCallerThreadBeBlockedSupplier, method type: ()V}<br> 67: {opcode: GETSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure$PrintAndDumpThrowableConsumer, field name: INSTANCE, field type: Lio/smallrye/mutiny/infrastructure/Infrastructure$PrintAndD<br>umpThrowableConsumer;}<br> 70: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: droppedExceptionHandler, field type: Ljava/util/function/Consumer;}<br> 73: {opcode: GETSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure$PrintOperatorEventOperatorLogger, field name: INSTANCE, field type: Lio/smallrye/mutiny/infrastructure/Infrastructure$PrintOperatorEventOperatorLogger;}<br> 76: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: operatorLogger, field type: Lio/smallrye/mutiny/infrastructure/Infrastructure$OperatorLogger;}<br> 79: {opcode: SIPUSH, constant value: 128}<br> 82: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: multiOverflowDefaultBufferSize, field type: I}<br> 85: {opcode: BIPUSH, constant value: 32}<br> 87: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: bufferSizeXs, field type: I}<br> 90: {opcode: SIPUSH, constant value: 256}<br> 93: {opcode: PUTSTATIC, owner: io/smallrye/mutiny/infrastructure/Infrastructure, field name: bufferSizeS, field type: I}<br> 96: {opcode: RETURN}<br></div><br clear="all"></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">[1] <a href="https://github.com/dmlloyd/jdk-classfile-backport" target="_blank">https://github.com/dmlloyd/jdk-classfile-backport</a></div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">- DML • he/him<br></div></div></div>
</blockquote></div><div><br clear="all"></div><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">- DML • he/him<br></div></div>