We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
It should be possible for an inherited class to generate a distinct proto message, with overridden methods returning subtypes also supported.
Currently the following:
public static class ParentType { final String message; @ProtoFactory public ParentType(String message) { this.message = message; } @ProtoField(1) public String getMessage() { return message; } } public static class ChildType extends ParentType { @ProtoFactory public ChildType(String message) { super(message); } } public static class Parent { final ParentType field; @ProtoFactory public Parent(ParentType field) { this.field = field; } @ProtoField(1) ParentType getField() { return field; } } public static class Child extends Parent { @ProtoFactory public Child(ChildType field) { super(field); } @ProtoField(1) ChildType getField() { return (ChildType) super.getField(); } }
Will result in:
org.infinispan.protostream.annotations.ProtoSchemaBuilderException: Duplicate field definition. Found two field definitions with number 1: in org.infinispan.protostream.annotations.impl.processor.tests.testdomain.Inheritance.ChildType Child.getField() and in org.infinispan.protostream.annotations.impl.processor.tests.testdomain.Inheritance.ParentType Parent.getField() at org.infinispan.protostream.annotations.impl.ProtoMessageTypeMetadata.discoverFieldsFromClassMethods(ProtoMessageTypeMetadata.java:534) at org.infinispan.protostream.annotations.impl.ProtoMessageTypeMetadata.discoverFields(ProtoMessageTypeMetadata.java:383) at org.infinispan.protostream.annotations.impl.ProtoMessageTypeMetadata.scanMemberAnnotations(ProtoMessageTypeMetadata.java:244) at org.infinispan.protostream.annotations.impl.BaseProtoSchemaGenerator.generateAndRegister(BaseProtoSchemaGenerator.java:123) at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processClass(AutoProtoSchemaBuilderAnnotationProcessor.java:311) at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processElement(AutoProtoSchemaBuilderAnnotationProcessor.java:239) at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.process(AutoProtoSchemaBuilderAnnotationProcessor.java:166) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:1021) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:937) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1265) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1380) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1271) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:948) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94) at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:126) at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:169) at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1188) at org.apache.maven.plugin.compiler.TestCompilerMojo.execute(TestCompilerMojo.java:204) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:342) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:330) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:175) at org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:76) at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:163) at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute(DefaultMojosExecutionStrategy.java:39) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:160) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:105) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:73) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:53) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:118) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:261) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:173) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:101) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:827) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:272) at org.apache.maven.cli.MavenCli.main(MavenCli.java:195) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
The text was updated successfully, but these errors were encountered:
[infinispan#385] Duplicate field definition error when @protofield me…
12097ed
…thods overridden
b319dff
Related to #304 I think we need to implement a more robust inheritance story.
Sorry, something went wrong.
[#385] Duplicate field definition error when @protofield methods over…
6399029
…ridden
ryanemerson
Successfully merging a pull request may close this issue.
It should be possible for an inherited class to generate a distinct proto message, with overridden methods returning subtypes also supported.
Currently the following:
Will result in:
The text was updated successfully, but these errors were encountered: