Skip to content

Generated code does not compile #1284

Description

@swpalmer-cl

I observed multiple problems using the smithy-java gradle plugin (after installing it to MavenLocal, since it isn't published anywhere):

/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:115: error: cannot find symbol
    static List<ChecksumAlgorithm> deserializeChecksumAlgorithmSet(Schema schema, ShapeDeserializer deserializer) {
                ^
  symbol:   class ChecksumAlgorithm
  location: class SharedSerde

The .java file for ChecksumAlgorithm is adjacent to the java file for SharedSerde, so this appears to be an issue configuring the compiler.

In addition to that, the generated SharedSerde.java file contains duplicate methods and nested classes:

/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:154: error: method deserializeStringList(Schema,ShapeDeserializer) is already defined in class SharedSerde
    static List<String> deserializeStringList(Schema schema, ShapeDeserializer deserializer) {
                        ^
/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:193: error: method deserializeStringList(Schema,ShapeDeserializer) is already defined in class SharedSerde
    static List<String> deserializeStringList(Schema schema, ShapeDeserializer deserializer) {
                        ^
/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:135: error: class StringListSerializer is already defined in class SharedSerde
    static final class StringListSerializer implements BiConsumer<List<String>, ShapeSerializer> {
                 ^
/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:161: error: class StringList$MemberDeserializer is already defined in class SharedSerde
    private static final class StringList$MemberDeserializer implements ShapeDeserializer.ListMemberConsumer<List<String>> {
                         ^
/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:174: error: class StringListSerializer is already defined in class SharedSerde
    static final class StringListSerializer implements BiConsumer<List<String>, ShapeSerializer> {
                 ^
/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:200: error: class StringList$MemberDeserializer is already defined in class SharedSerde
    private static final class StringList$MemberDeserializer implements ShapeDeserializer.ListMemberConsumer<List<String>> {

Attempting workarounds by following the instructions to apply smithy-base directly I get a different error:

Running smithy build
SUCCESS: Validated 335 shapes

Validated model, now starting projections...


Projection source failed: java.lang.NoSuchMethodError: 'java.lang.String software.amazon.smithy.java.codegen.writer.JavaWriter.defer(java.util.function.Supplier)'
java.lang.NoSuchMethodError: 'java.lang.String software.amazon.smithy.java.codegen.writer.JavaWriter.defer(java.util.function.Supplier)'
        at software.amazon.smithy.java.codegen.writer.JavaWriter.access$000(JavaWriter.java:32)
        at software.amazon.smithy.java.codegen.writer.JavaWriter$JavaTypeFormatter.getPlaceholder(JavaWriter.java:225)
        at software.amazon.smithy.java.codegen.writer.JavaWriter$JavaTypeFormatter.apply(JavaWriter.java:198)
        at software.amazon.smithy.java.codegen.writer.JavaWriter$JavaTypeFormatter.apply(JavaWriter.java:192)
        at software.amazon.smithy.utils.AbstractCodeWriter.applyFormatter(AbstractCodeWriter.java:2079)
        at software.amazon.smithy.utils.CodeFormatter$Operation.lambda$formatted$1(CodeFormatter.java:97)
        at software.amazon.smithy.utils.CodeFormatter$BlockOperation$Unconditional.apply(CodeFormatter.java:217)
        at software.amazon.smithy.utils.CodeFormatter.run(CodeFormatter.java:30)
        at software.amazon.smithy.utils.AbstractCodeWriter.format(AbstractCodeWriter.java:1755)
        at software.amazon.smithy.utils.AbstractCodeWriter.write(AbstractCodeWriter.java:1814)
        at software.amazon.smithy.java.codegen.generators.EnumGenerator.lambda$accept$0(EnumGenerator.java:102)
        at software.amazon.smithy.codegen.core.WriterDelegator.useSymbolWriter(WriterDelegator.java:192)
        at software.amazon.smithy.codegen.core.WriterDelegator.useShapeWriter(WriterDelegator.java:218)
        at software.amazon.smithy.java.codegen.generators.EnumGenerator.accept(EnumGenerator.java:45)
        at software.amazon.smithy.java.codegen.DirectedJavaCodegen.generateEnumShape(DirectedJavaCodegen.java:125)
        at software.amazon.smithy.codegen.core.directed.CodegenDirector$ShapeGenerator.enumShape(CodegenDirector.java:654)
        at software.amazon.smithy.codegen.core.directed.CodegenDirector$ShapeGenerator.enumShape(CodegenDirector.java:573)
        at software.amazon.smithy.model.shapes.EnumShape.accept(EnumShape.java:107)
        at software.amazon.smithy.codegen.core.directed.CodegenDirector.generateShapesInService(CodegenDirector.java:559)
        at software.amazon.smithy.codegen.core.directed.CodegenDirector.run(CodegenDirector.java:425)
        at software.amazon.smithy.java.codegen.JavaCodegenPlugin.executeTypesMode(JavaCodegenPlugin.java:124)
        at software.amazon.smithy.java.codegen.JavaCodegenPlugin.execute(JavaCodegenPlugin.java:69)
        at software.amazon.smithy.build.SmithyBuildImpl.applyPlugin(SmithyBuildImpl.java:517)
        at software.amazon.smithy.build.SmithyBuildImpl.applyProjection(SmithyBuildImpl.java:440)
        at software.amazon.smithy.build.SmithyBuildImpl.executeSerialProjection(SmithyBuildImpl.java:347)
        at software.amazon.smithy.build.SmithyBuildImpl.lambda$applyAllProjections$4(SmithyBuildImpl.java:201)
        at software.amazon.smithy.build.SmithyBuildImpl.applyAllProjections(SmithyBuildImpl.java:212)
        at software.amazon.smithy.build.SmithyBuild.build(SmithyBuild.java:167)
        at software.amazon.smithy.cli.commands.BuildCommand.runWithClassLoader(BuildCommand.java:145)
        at software.amazon.smithy.cli.commands.ClasspathAction.lambda$apply$0(ClasspathAction.java:52)
        at software.amazon.smithy.cli.commands.ClasspathAction.runTaskWithClasspath(ClasspathAction.java:114)
        at software.amazon.smithy.cli.commands.ClasspathAction.apply(ClasspathAction.java:50)
        at software.amazon.smithy.cli.commands.HelpActionWrapper.apply(HelpActionWrapper.java:73)
        at software.amazon.smithy.cli.commands.BuildCommand.execute(BuildCommand.java:73)
        at software.amazon.smithy.cli.commands.SmithyCommand.execute(SmithyCommand.java:105)
        at software.amazon.smithy.cli.Cli.run(Cli.java:70)
        at software.amazon.smithy.cli.SmithyCli.run(SmithyCli.java:93)
        at software.amazon.smithy.cli.SmithyCli.run(SmithyCli.java:83)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
        at java.base/java.lang.reflect.Method.invoke(Method.java:565)
        at software.amazon.smithy.gradle.SmithyUtils$RunCli.lambda$execute$0(SmithyUtils.java:165)
        at software.amazon.smithy.gradle.SmithyUtils.withCacheBuster(SmithyUtils.java:222)
        at software.amazon.smithy.gradle.SmithyUtils.access$100(SmithyUtils.java:42)
        at software.amazon.smithy.gradle.SmithyUtils$RunCli.lambda$execute$1(SmithyUtils.java:160)
        at software.amazon.smithy.gradle.SmithyUtils.withClassloader(SmithyUtils.java:200)
        at software.amazon.smithy.gradle.SmithyUtils.access$000(SmithyUtils.java:42)
        at software.amazon.smithy.gradle.SmithyUtils$RunCli.execute(SmithyUtils.java:159)
        at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
        at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:54)
        at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:48)
        at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
        at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:48)
        at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49)
        at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30)
        at org.gradle.workers.internal.IsolatedClassloaderWorkerFactory$1.lambda$execute$0(IsolatedClassloaderWorkerFactory.java:60)
        at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
        at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54)
        at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
        at org.gradle.workers.internal.IsolatedClassloaderWorkerFactory$1.execute(IsolatedClassloaderWorkerFactory.java:52)
        at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:191)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$500(DefaultConditionalExecutionQueue.java:112)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:168)
        at org.gradle.internal.Factories$1.create(Factories.java:30)
        at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$runAndReleaseLocks$0(DefaultWorkerLeaseService.java:300)
        at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:43)
        at org.gradle.internal.work.DefaultWorkerLeaseService.runAndReleaseLocks(DefaultWorkerLeaseService.java:298)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:294)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:286)
        at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:130)
        at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:135)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:163)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:125)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
        at java.base/java.lang.Thread.run(Thread.java:1474)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions