byte-buddy icon indicating copy to clipboard operation
byte-buddy copied to clipboard

MethodDescription.SignatureToken should contains modifier

Open 98DE9E1F opened this issue 2 years ago • 4 comments

because of after 1.5 , compiler will generate bridge method for generic erasure , some time bridge method and the origin method has same method parameter and return type

class Demo<A extends Demo> {
public A foo{
    return null;
} 
}
class DemoB<B extends Demo> extends Demo<B> {
public A foo{
    return null;
} 
}

will throw IllegalStateException Duplicate method signature for xxx

98DE9E1F avatar May 26 '23 10:05 98DE9E1F

Not sure I follow. Could you adjust your example code such that it compiles?

raphw avatar May 26 '23 11:05 raphw

ohhh sorry , i make a mistake . this code can't reproduct that.

the really problem is io.grpc.internal.AbstractManagedChannelImplBuilder class in gprc-core after release 1.36.0 .

you can do anything on this class, and will throw IllegalStateException Duplicate method signature for xxx

beacuse of them team has some ' class hack ' in build step Rewrite builder class signatures to avoid internal

98DE9E1F avatar May 29 '23 02:05 98DE9E1F

image

java.lang.IllegalStateException: Duplicate method signature for public io.grpc.ManagedChannelBuilder io.grpc.internal.AbstractManagedChannelImplBuilder.disableServiceConfigLookUp()
	at net.bytebuddy.dynamic.scaffold.InstrumentedType$Default.validated(InstrumentedType.java:1611)
	at net.bytebuddy.dynamic.scaffold.MethodRegistry$Default.prepare(MethodRegistry.java:519)
	at net.bytebuddy.dynamic.scaffold.inline.RebaseDynamicTypeBuilder.make(RebaseDynamicTypeBuilder.java:221)
	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.doTransform(AgentBuilder.java:10438)
	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.transform(AgentBuilder.java:10374)
	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.access$1600(AgentBuilder.java:10140)
	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer$Java9CapableVmDispatcher.run(AgentBuilder.java:10833)
	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer$Java9CapableVmDispatcher.run(AgentBuilder.java:10771)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.transform(AgentBuilder.java:10330)
	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer$ByteBuddy$ModuleSupport.transform(Unknown Source)
	at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
	at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)

98DE9E1F avatar May 29 '23 03:05 98DE9E1F

You cannot have two methods with the same signature, even if the modifier is different, if that is the question?

raphw avatar May 31 '23 20:05 raphw