// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Generated code for "@scope/jsii-calc-base": <outDir>/ 1`] = `
<root>
 ┗━ 📁 java
    ┣━ 📄 LICENSE
    ┣━ 📄 NOTICE
    ┣━ 📄 pom.xml
    ┗━ 📁 src
       ┗━ 📁 main
          ┣━ 📁 java
          ┃  ┗━ 📁 software
          ┃     ┗━ 📁 amazon
          ┃        ┗━ 📁 jsii
          ┃           ┗━ 📁 tests
          ┃              ┗━ 📁 calculator
          ┃                 ┗━ 📁 base
          ┃                    ┣━ 📄 $Module.java
          ┃                    ┣━ 📄 Base.java
          ┃                    ┣━ 📄 BaseProps.java
          ┃                    ┣━ 📄 IBaseInterface.java
          ┃                    ┗━ 📄 StaticConsumer.java
          ┗━ 📁 resources
             ┗━ 📁 software
                ┗━ 📁 amazon
                   ┗━ 📁 jsii
                      ┗━ 📁 tests
                         ┗━ 📁 calculator
                            ┗━ 📁 base
                               ┣━ 📄 $Module.txt
                               ┗━ 📄 jsii-calc-base@0.0.0.jsii.tgz
`;

exports[`Generated code for "@scope/jsii-calc-base": <outDir>/java/LICENSE 1`] = `

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
`;

exports[`Generated code for "@scope/jsii-calc-base": <outDir>/java/NOTICE 1`] = `
jsii
Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.

`;

exports[`Generated code for "@scope/jsii-calc-base": <outDir>/java/pom.xml 1`] = `
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <name>\${project.groupId}:\${project.artifactId}</name>
  <description>An example direct dependency for jsii-calc.</description>
  <url>https://github.com/aws/jsii</url>
  <licenses>
    <license>
      <name>Apache License 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0</url>
      <distribution>repo</distribution>
      <comments>An OSI-approved license</comments>
    </license>
  </licenses>
  <developers>
    <developer>
      <organization>Amazon Web Services</organization>
      <roles>
        <role>author</role>
      </roles>
      <organizationUrl>https://aws.amazon.com</organizationUrl>
    </developer>
  </developers>
  <scm>
    <connection>scm:git:https://github.com/aws/jsii.git</connection>
    <url>https://github.com/aws/jsii.git</url>
  </scm>
  <groupId>software.amazon.jsii.tests</groupId>
  <artifactId>calculator-base</artifactId>
  <version>0.0.0</version>
  <packaging>jar</packaging>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>software.amazon.jsii.tests</groupId>
      <artifactId>calculator-base-of-base</artifactId>
      <version>[2.1.1,3.0.0)</version>
    </dependency>
    <dependency>
      <groupId>software.amazon.jsii</groupId>
      <artifactId>jsii-runtime</artifactId>
      <version>[0.0.0-SNAPSHOT]</version>
    </dependency>
    <dependency>
      <groupId>org.jetbrains</groupId>
      <artifactId>annotations</artifactId>
      <version>[16.0.3,20.0.0)</version>
    </dependency>
    <dependency>
      <!-- Provides @javax.annotation.Generated for JDKs >= 9 -->
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>[1.3.2,1.4.0)</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <fork>true</fork>
          <maxmem>4096m</maxmem>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
          <archive>
            <index>true</index>
            <manifest>
              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.5.0</version>
        <executions>
          <execution>
            <id>attach-javadocs</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <failOnError>false</failOnError>
          <show>protected</show>
          <sourceFileExcludes>
            <exclude>**/$Module.java</exclude>
          </sourceFileExcludes>
          <additionalJOption>-J-XX:+TieredCompilation</additionalJOption>
          <additionalJOption>-J-XX:TieredStopAtLevel=1</additionalJOption>
          <doclint>none</doclint>
          <quiet>true</quiet>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>enforce-maven</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <version>3.6</version>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>2.16.0</version>
        <configuration>
          <generateBackupPoms>false</generateBackupPoms>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

`;

exports[`Generated code for "@scope/jsii-calc-base": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/base/$Module.java 1`] = `
package software.amazon.jsii.tests.calculator.base;

import static java.util.Arrays.asList;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.Reader;
import java.io.UncheckedIOException;

import java.nio.charset.StandardCharsets;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import software.amazon.jsii.JsiiModule;

@software.amazon.jsii.Internal
public final class $Module extends JsiiModule {
    private static final Map<String, String> MODULE_TYPES = load();

    private static Map<String, String> load() {
        final Map<String, String> result = new HashMap<>();
        final ClassLoader cl = $Module.class.getClassLoader();
        try (final InputStream is = cl.getResourceAsStream("software/amazon/jsii/tests/calculator/base/$Module.txt");
             final Reader rd = new InputStreamReader(is, StandardCharsets.UTF_8);
             final BufferedReader br = new BufferedReader(rd)) {
            br.lines()
              .filter(line -> !line.trim().isEmpty())
              .forEach(line ->  {
                final String[] parts = line.split("=", 2);
                final String fqn = parts[0];
                final String className = parts[1];
                result.put(fqn, className);
            });
        }
        catch (final IOException exception) {
            throw new UncheckedIOException(exception);
        }
        return result;
    }

    private final Map<String, Class<?>> cache = new HashMap<>();

    public $Module() {
        super("@scope/jsii-calc-base", "0.0.0", $Module.class, "jsii-calc-base@0.0.0.jsii.tgz");
    }

    @Override
    public List<Class<? extends JsiiModule>> getDependencies() {
        return asList(software.amazon.jsii.tests.calculator.baseofbase.$Module.class);
    }

    @Override
    protected Class<?> resolveClass(final String fqn) throws ClassNotFoundException {
        if (!MODULE_TYPES.containsKey(fqn)) {
            throw new ClassNotFoundException("Unknown JSII type: " + fqn);
        }
        String className = MODULE_TYPES.get(fqn);
        if (!this.cache.containsKey(className)) {
            this.cache.put(className, this.findClass(className));
        }
        return this.cache.get(className);
    }

    private Class<?> findClass(final String binaryName) {
        try {
            return Class.forName(binaryName);
        }
        catch (final ClassNotFoundException exception) {
            throw new RuntimeException(exception);
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-base": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/base/Base.java 1`] = `
package software.amazon.jsii.tests.calculator.base;

/**
 * A base class.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.base.$Module.class, fqn = "@scope/jsii-calc-base.Base")
public abstract class Base extends software.amazon.jsii.JsiiObject {

    protected Base(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Base(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    protected Base() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @return the name of the class (to verify native type names are created for derived classes).
     */
    public @org.jetbrains.annotations.NotNull java.lang.Object typeName() {
        return software.amazon.jsii.Kernel.call(this, "typeName", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.base.Base {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-base": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/base/BaseProps.java 1`] = `
package software.amazon.jsii.tests.calculator.base;

@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.base.$Module.class, fqn = "@scope/jsii-calc-base.BaseProps")
@software.amazon.jsii.Jsii.Proxy(BaseProps.Jsii$Proxy.class)
public interface BaseProps extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.baseofbase.VeryBaseProps {

    @org.jetbrains.annotations.NotNull java.lang.String getBar();

    /**
     * @return a {@link Builder} of {@link BaseProps}
     */
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link BaseProps}
     */
    public static final class Builder implements software.amazon.jsii.Builder<BaseProps> {
        java.lang.String bar;
        software.amazon.jsii.tests.calculator.baseofbase.Very foo;

        /**
         * Sets the value of {@link BaseProps#getBar}
         * @param bar the value to be set. This parameter is required.
         * @return {@code this}
         */
        public Builder bar(java.lang.String bar) {
            this.bar = bar;
            return this;
        }

        /**
         * Sets the value of {@link BaseProps#getFoo}
         * @param foo the value to be set. This parameter is required.
         * @return {@code this}
         */
        public Builder foo(software.amazon.jsii.tests.calculator.baseofbase.Very foo) {
            this.foo = foo;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link BaseProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @Override
        public BaseProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link BaseProps}
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements BaseProps {
        private final java.lang.String bar;
        private final software.amazon.jsii.tests.calculator.baseofbase.Very foo;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.bar = software.amazon.jsii.Kernel.get(this, "bar", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.foo = software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.baseofbase.Very.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.bar = java.util.Objects.requireNonNull(builder.bar, "bar is required");
            this.foo = java.util.Objects.requireNonNull(builder.foo, "foo is required");
        }

        @Override
        public final java.lang.String getBar() {
            return this.bar;
        }

        @Override
        public final software.amazon.jsii.tests.calculator.baseofbase.Very getFoo() {
            return this.foo;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("bar", om.valueToTree(this.getBar()));
            data.set("foo", om.valueToTree(this.getFoo()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("@scope/jsii-calc-base.BaseProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            BaseProps.Jsii$Proxy that = (BaseProps.Jsii$Proxy) o;

            if (!bar.equals(that.bar)) return false;
            return this.foo.equals(that.foo);
        }

        @Override
        public final int hashCode() {
            int result = this.bar.hashCode();
            result = 31 * result + (this.foo.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-base": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/base/IBaseInterface.java 1`] = `
package software.amazon.jsii.tests.calculator.base;

@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.base.$Module.class, fqn = "@scope/jsii-calc-base.IBaseInterface")
@software.amazon.jsii.Jsii.Proxy(IBaseInterface.Jsii$Proxy.class)
public interface IBaseInterface extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.baseofbase.IVeryBaseInterface {

    void bar();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.baseofbase.IVeryBaseInterface.Jsii$Default, software.amazon.jsii.tests.calculator.base.IBaseInterface {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        @Override
        public final void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }

        @Override
        public final void bar() {
            software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-base": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/base/StaticConsumer.java 1`] = `
package software.amazon.jsii.tests.calculator.base;

/**
 * Hides the transitive dependency of base-of-base.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.base.$Module.class, fqn = "@scope/jsii-calc-base.StaticConsumer")
public class StaticConsumer extends software.amazon.jsii.JsiiObject {

    protected StaticConsumer(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected StaticConsumer(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    public StaticConsumer() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    public static void consume(final @org.jetbrains.annotations.NotNull java.lang.Object... args) {
        software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.base.StaticConsumer.class, "consume", software.amazon.jsii.NativeType.VOID, java.util.Arrays.<Object>stream(args).toArray(Object[]::new));
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-base": <outDir>/java/src/main/resources/software/amazon/jsii/tests/calculator/base/$Module.txt 1`] = `
@scope/jsii-calc-base.Base=software.amazon.jsii.tests.calculator.base.Base
@scope/jsii-calc-base.BaseProps=software.amazon.jsii.tests.calculator.base.BaseProps
@scope/jsii-calc-base.IBaseInterface=software.amazon.jsii.tests.calculator.base.IBaseInterface
@scope/jsii-calc-base.StaticConsumer=software.amazon.jsii.tests.calculator.base.StaticConsumer

`;

exports[`Generated code for "@scope/jsii-calc-base": <outDir>/java/src/main/resources/software/amazon/jsii/tests/calculator/base/jsii-calc-base@0.0.0.jsii.tgz 1`] = `java/src/main/resources/software/amazon/jsii/tests/calculator/base/jsii-calc-base@0.0.0.jsii.tgz is a tarball`;

exports[`Generated code for "@scope/jsii-calc-base": <runtime-type-check-diff>/ 1`] = `
<runtime-type-check-diff>
┗━ 🕳 There is nothing here
`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <outDir>/ 1`] = `
<root>
 ┗━ 📁 java
    ┣━ 📄 LICENSE
    ┣━ 📄 NOTICE
    ┣━ 📄 pom.xml
    ┗━ 📁 src
       ┗━ 📁 main
          ┣━ 📁 java
          ┃  ┗━ 📁 software
          ┃     ┗━ 📁 amazon
          ┃        ┗━ 📁 jsii
          ┃           ┗━ 📁 tests
          ┃              ┗━ 📁 calculator
          ┃                 ┗━ 📁 baseofbase
          ┃                    ┣━ 📄 $Module.java
          ┃                    ┣━ 📄 IVeryBaseInterface.java
          ┃                    ┣━ 📄 StaticConsumer.java
          ┃                    ┣━ 📄 Very.java
          ┃                    ┗━ 📄 VeryBaseProps.java
          ┗━ 📁 resources
             ┗━ 📁 software
                ┗━ 📁 amazon
                   ┗━ 📁 jsii
                      ┗━ 📁 tests
                         ┗━ 📁 calculator
                            ┗━ 📁 baseofbase
                               ┣━ 📄 $Module.txt
                               ┗━ 📄 jsii-calc-base-of-base@2.1.1.jsii.tgz
`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <outDir>/java/LICENSE 1`] = `

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <outDir>/java/NOTICE 1`] = `
jsii
Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.

`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <outDir>/java/pom.xml 1`] = `
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <name>\${project.groupId}:\${project.artifactId}</name>
  <description>An example transitive dependency for jsii-calc.</description>
  <url>https://github.com/aws/jsii</url>
  <licenses>
    <license>
      <name>Apache License 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0</url>
      <distribution>repo</distribution>
      <comments>An OSI-approved license</comments>
    </license>
  </licenses>
  <developers>
    <developer>
      <organization>Amazon Web Services</organization>
      <roles>
        <role>author</role>
      </roles>
      <organizationUrl>https://aws.amazon.com</organizationUrl>
    </developer>
  </developers>
  <scm>
    <connection>scm:git:https://github.com/aws/jsii.git</connection>
    <url>https://github.com/aws/jsii.git</url>
  </scm>
  <groupId>software.amazon.jsii.tests</groupId>
  <artifactId>calculator-base-of-base</artifactId>
  <version>2.1.1</version>
  <packaging>jar</packaging>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>software.amazon.jsii</groupId>
      <artifactId>jsii-runtime</artifactId>
      <version>[0.0.0-SNAPSHOT]</version>
    </dependency>
    <dependency>
      <groupId>org.jetbrains</groupId>
      <artifactId>annotations</artifactId>
      <version>[16.0.3,20.0.0)</version>
    </dependency>
    <dependency>
      <!-- Provides @javax.annotation.Generated for JDKs >= 9 -->
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>[1.3.2,1.4.0)</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <fork>true</fork>
          <maxmem>4096m</maxmem>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
          <archive>
            <index>true</index>
            <manifest>
              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.5.0</version>
        <executions>
          <execution>
            <id>attach-javadocs</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <failOnError>false</failOnError>
          <show>protected</show>
          <sourceFileExcludes>
            <exclude>**/$Module.java</exclude>
          </sourceFileExcludes>
          <additionalJOption>-J-XX:+TieredCompilation</additionalJOption>
          <additionalJOption>-J-XX:TieredStopAtLevel=1</additionalJOption>
          <doclint>none</doclint>
          <quiet>true</quiet>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>enforce-maven</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <version>3.6</version>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>2.16.0</version>
        <configuration>
          <generateBackupPoms>false</generateBackupPoms>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/baseofbase/$Module.java 1`] = `
package software.amazon.jsii.tests.calculator.baseofbase;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.Reader;
import java.io.UncheckedIOException;

import java.nio.charset.StandardCharsets;

import java.util.HashMap;
import java.util.Map;

import software.amazon.jsii.JsiiModule;

@software.amazon.jsii.Internal
public final class $Module extends JsiiModule {
    private static final Map<String, String> MODULE_TYPES = load();

    private static Map<String, String> load() {
        final Map<String, String> result = new HashMap<>();
        final ClassLoader cl = $Module.class.getClassLoader();
        try (final InputStream is = cl.getResourceAsStream("software/amazon/jsii/tests/calculator/baseofbase/$Module.txt");
             final Reader rd = new InputStreamReader(is, StandardCharsets.UTF_8);
             final BufferedReader br = new BufferedReader(rd)) {
            br.lines()
              .filter(line -> !line.trim().isEmpty())
              .forEach(line ->  {
                final String[] parts = line.split("=", 2);
                final String fqn = parts[0];
                final String className = parts[1];
                result.put(fqn, className);
            });
        }
        catch (final IOException exception) {
            throw new UncheckedIOException(exception);
        }
        return result;
    }

    private final Map<String, Class<?>> cache = new HashMap<>();

    public $Module() {
        super("@scope/jsii-calc-base-of-base", "2.1.1", $Module.class, "jsii-calc-base-of-base@2.1.1.jsii.tgz");
    }

    @Override
    protected Class<?> resolveClass(final String fqn) throws ClassNotFoundException {
        if (!MODULE_TYPES.containsKey(fqn)) {
            throw new ClassNotFoundException("Unknown JSII type: " + fqn);
        }
        String className = MODULE_TYPES.get(fqn);
        if (!this.cache.containsKey(className)) {
            this.cache.put(className, this.findClass(className));
        }
        return this.cache.get(className);
    }

    private Class<?> findClass(final String binaryName) {
        try {
            return Class.forName(binaryName);
        }
        catch (final ClassNotFoundException exception) {
            throw new RuntimeException(exception);
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/baseofbase/IVeryBaseInterface.java 1`] = `
package software.amazon.jsii.tests.calculator.baseofbase;

@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.baseofbase.$Module.class, fqn = "@scope/jsii-calc-base-of-base.IVeryBaseInterface")
@software.amazon.jsii.Jsii.Proxy(IVeryBaseInterface.Jsii$Proxy.class)
public interface IVeryBaseInterface extends software.amazon.jsii.JsiiSerializable {

    void foo();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.baseofbase.IVeryBaseInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        @Override
        public final void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IVeryBaseInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IVeryBaseInterface {

        @Override
        default void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/baseofbase/StaticConsumer.java 1`] = `
package software.amazon.jsii.tests.calculator.baseofbase;

@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.baseofbase.$Module.class, fqn = "@scope/jsii-calc-base-of-base.StaticConsumer")
public class StaticConsumer extends software.amazon.jsii.JsiiObject {

    protected StaticConsumer(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected StaticConsumer(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    public static void consume(final @org.jetbrains.annotations.NotNull java.lang.Object... _args) {
        software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.baseofbase.StaticConsumer.class, "consume", software.amazon.jsii.NativeType.VOID, java.util.Arrays.<Object>stream(_args).toArray(Object[]::new));
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/baseofbase/Very.java 1`] = `
package software.amazon.jsii.tests.calculator.baseofbase;

/**
 * (experimental) Something here.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.baseofbase.$Module.class, fqn = "@scope/jsii-calc-base-of-base.Very")
public class Very extends software.amazon.jsii.JsiiObject {

    protected Very(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Very(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    public Very() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    public @org.jetbrains.annotations.NotNull java.lang.Number hey() {
        return software.amazon.jsii.Kernel.call(this, "hey", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/baseofbase/VeryBaseProps.java 1`] = `
package software.amazon.jsii.tests.calculator.baseofbase;

@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.baseofbase.$Module.class, fqn = "@scope/jsii-calc-base-of-base.VeryBaseProps")
@software.amazon.jsii.Jsii.Proxy(VeryBaseProps.Jsii$Proxy.class)
public interface VeryBaseProps extends software.amazon.jsii.JsiiSerializable {

    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.baseofbase.Very getFoo();

    /**
     * @return a {@link Builder} of {@link VeryBaseProps}
     */
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link VeryBaseProps}
     */
    public static final class Builder implements software.amazon.jsii.Builder<VeryBaseProps> {
        software.amazon.jsii.tests.calculator.baseofbase.Very foo;

        /**
         * Sets the value of {@link VeryBaseProps#getFoo}
         * @param foo the value to be set. This parameter is required.
         * @return {@code this}
         */
        public Builder foo(software.amazon.jsii.tests.calculator.baseofbase.Very foo) {
            this.foo = foo;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link VeryBaseProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @Override
        public VeryBaseProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link VeryBaseProps}
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements VeryBaseProps {
        private final software.amazon.jsii.tests.calculator.baseofbase.Very foo;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.foo = software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.baseofbase.Very.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.foo = java.util.Objects.requireNonNull(builder.foo, "foo is required");
        }

        @Override
        public final software.amazon.jsii.tests.calculator.baseofbase.Very getFoo() {
            return this.foo;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("foo", om.valueToTree(this.getFoo()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("@scope/jsii-calc-base-of-base.VeryBaseProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            VeryBaseProps.Jsii$Proxy that = (VeryBaseProps.Jsii$Proxy) o;

            return this.foo.equals(that.foo);
        }

        @Override
        public final int hashCode() {
            int result = this.foo.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <outDir>/java/src/main/resources/software/amazon/jsii/tests/calculator/baseofbase/$Module.txt 1`] = `
@scope/jsii-calc-base-of-base.IVeryBaseInterface=software.amazon.jsii.tests.calculator.baseofbase.IVeryBaseInterface
@scope/jsii-calc-base-of-base.StaticConsumer=software.amazon.jsii.tests.calculator.baseofbase.StaticConsumer
@scope/jsii-calc-base-of-base.Very=software.amazon.jsii.tests.calculator.baseofbase.Very
@scope/jsii-calc-base-of-base.VeryBaseProps=software.amazon.jsii.tests.calculator.baseofbase.VeryBaseProps

`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <outDir>/java/src/main/resources/software/amazon/jsii/tests/calculator/baseofbase/jsii-calc-base-of-base@2.1.1.jsii.tgz 1`] = `java/src/main/resources/software/amazon/jsii/tests/calculator/baseofbase/jsii-calc-base-of-base@2.1.1.jsii.tgz is a tarball`;

exports[`Generated code for "@scope/jsii-calc-base-of-base": <runtime-type-check-diff>/ 1`] = `
<runtime-type-check-diff>
┗━ 🕳 There is nothing here
`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/ 1`] = `
<root>
 ┗━ 📁 java
    ┣━ 📄 LICENSE
    ┣━ 📄 NOTICE
    ┣━ 📄 pom.xml
    ┗━ 📁 src
       ┗━ 📁 main
          ┣━ 📁 java
          ┃  ┗━ 📁 software
          ┃     ┗━ 📁 amazon
          ┃        ┗━ 📁 jsii
          ┃           ┗━ 📁 tests
          ┃              ┗━ 📁 calculator
          ┃                 ┣━ 📁 custom_submodule_name
          ┃                 ┃  ┣━ 📄 IReflectable.java
          ┃                 ┃  ┣━ 📄 NestingClass.java
          ┃                 ┃  ┣━ 📄 package-info.java
          ┃                 ┃  ┣━ 📄 ReflectableEntry.java
          ┃                 ┃  ┗━ 📄 Reflector.java
          ┃                 ┗━ 📁 lib
          ┃                    ┣━ 📄 $Module.java
          ┃                    ┣━ 📄 BaseFor2647.java
          ┃                    ┣━ 📁 deprecation_removal
          ┃                    ┃  ┣━ 📄 IInterface.java
          ┃                    ┃  ┣━ 📄 InterfaceFactory.java
          ┃                    ┃  ┗━ 📄 VisibleBaseClass.java
          ┃                    ┣━ 📄 DiamondLeft.java
          ┃                    ┣━ 📄 DiamondRight.java
          ┃                    ┣━ 📄 EnumFromScopedModule.java
          ┃                    ┣━ 📄 FunctionWithUnderscoreArgument.java
          ┃                    ┣━ 📄 IDoublable.java
          ┃                    ┣━ 📄 IFriendly.java
          ┃                    ┣━ 📄 IThreeLevelsInterface.java
          ┃                    ┣━ 📄 MyFirstStruct.java
          ┃                    ┣━ 📄 Number.java
          ┃                    ┣━ 📄 NumericValue.java
          ┃                    ┣━ 📄 Operation.java
          ┃                    ┣━ 📄 package-info.java
          ┃                    ┗━ 📄 StructWithOnlyOptionals.java
          ┗━ 📁 resources
             ┗━ 📁 software
                ┗━ 📁 amazon
                   ┗━ 📁 jsii
                      ┗━ 📁 tests
                         ┗━ 📁 calculator
                            ┗━ 📁 lib
                               ┣━ 📄 $Module.txt
                               ┗━ 📄 jsii-calc-lib@0.0.0.jsii.tgz
`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/LICENSE 1`] = `

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/NOTICE 1`] = `
jsii
Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/pom.xml 1`] = `
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <name>\${project.groupId}:\${project.artifactId}</name>
  <description>A simple calcuator library built on JSII.</description>
  <url>https://github.com/aws/jsii</url>
  <licenses>
    <license>
      <name>Apache License 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0</url>
      <distribution>repo</distribution>
      <comments>An OSI-approved license</comments>
    </license>
  </licenses>
  <developers>
    <developer>
      <organization>Amazon Web Services</organization>
      <roles>
        <role>author</role>
      </roles>
      <organizationUrl>https://aws.amazon.com</organizationUrl>
    </developer>
  </developers>
  <scm>
    <connection>scm:git:https://github.com/aws/jsii.git</connection>
    <url>https://github.com/aws/jsii.git</url>
  </scm>
  <groupId>software.amazon.jsii.tests</groupId>
  <artifactId>calculator-lib</artifactId>
  <version>0.0.0.DEVPREVIEW</version>
  <packaging>jar</packaging>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>software.amazon.jsii.tests</groupId>
      <artifactId>calculator-base</artifactId>
      <version>[0.0.0,)</version>
    </dependency>
    <dependency>
      <groupId>software.amazon.jsii.tests</groupId>
      <artifactId>calculator-base-of-base</artifactId>
      <version>[2.1.1,3.0.0)</version>
    </dependency>
    <dependency>
      <groupId>software.amazon.jsii</groupId>
      <artifactId>jsii-runtime</artifactId>
      <version>[0.0.0-SNAPSHOT]</version>
    </dependency>
    <dependency>
      <groupId>org.jetbrains</groupId>
      <artifactId>annotations</artifactId>
      <version>[16.0.3,20.0.0)</version>
    </dependency>
    <dependency>
      <!-- Provides @javax.annotation.Generated for JDKs >= 9 -->
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>[1.3.2,1.4.0)</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <fork>true</fork>
          <maxmem>4096m</maxmem>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
          <archive>
            <index>true</index>
            <manifest>
              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.5.0</version>
        <executions>
          <execution>
            <id>attach-javadocs</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <failOnError>false</failOnError>
          <show>protected</show>
          <sourceFileExcludes>
            <exclude>**/$Module.java</exclude>
          </sourceFileExcludes>
          <additionalJOption>-J-XX:+TieredCompilation</additionalJOption>
          <additionalJOption>-J-XX:TieredStopAtLevel=1</additionalJOption>
          <doclint>none</doclint>
          <quiet>true</quiet>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>enforce-maven</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <version>3.6</version>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>2.16.0</version>
        <configuration>
          <generateBackupPoms>false</generateBackupPoms>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/custom_submodule_name/IReflectable.java 1`] = `
package software.amazon.jsii.tests.calculator.custom_submodule_name;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.submodule.IReflectable")
@software.amazon.jsii.Jsii.Proxy(IReflectable.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface IReflectable extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.custom_submodule_name.ReflectableEntry> getEntries();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.custom_submodule_name.IReflectable.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public final @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.custom_submodule_name.ReflectableEntry> getEntries() {
            return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "entries", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.custom_submodule_name.ReflectableEntry.class))));
        }
    }

    /**
     * Internal default implementation for {@link IReflectable}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IReflectable {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        default @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.custom_submodule_name.ReflectableEntry> getEntries() {
            return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "entries", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.custom_submodule_name.ReflectableEntry.class))));
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/custom_submodule_name/NestingClass.java 1`] = `
package software.amazon.jsii.tests.calculator.custom_submodule_name;

/**
 * (deprecated) This class is here to show we can use nested classes across module boundaries.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.submodule.NestingClass")
public class NestingClass extends software.amazon.jsii.JsiiObject {

    protected NestingClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected NestingClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }
    /**
     * (deprecated) This class is here to show we can use nested classes across module boundaries.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.submodule.NestingClass.NestedClass")
    public static class NestedClass extends software.amazon.jsii.JsiiObject {

        protected NestedClass(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        protected NestedClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
            super(initializationMode);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public NestedClass() {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public @org.jetbrains.annotations.NotNull java.lang.String getProperty() {
            return software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
    /**
     * (deprecated) This is a struct, nested within a class.
     * <p>
     * Normal.
     */
    @software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.submodule.NestingClass.NestedStruct")
    @software.amazon.jsii.Jsii.Proxy(NestedStruct.Jsii$Proxy.class)
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public static interface NestedStruct extends software.amazon.jsii.JsiiSerializable {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @org.jetbrains.annotations.NotNull java.lang.String getName();

        /**
         * @return a {@link Builder} of {@link NestedStruct}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        static Builder builder() {
            return new Builder();
        }
        /**
         * A builder for {@link NestedStruct}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public static final class Builder implements software.amazon.jsii.Builder<NestedStruct> {
            java.lang.String name;

            /**
             * Sets the value of {@link NestedStruct#getName}
             * @param name the value to be set. This parameter is required.
             * @return {@code this}
             */
            @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
            @Deprecated
            public Builder name(java.lang.String name) {
                this.name = name;
                return this;
            }

            /**
             * Builds the configured instance.
             * @return a new instance of {@link NestedStruct}
             * @throws NullPointerException if any required attribute was not provided
             */
            @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
            @Deprecated
            @Override
            public NestedStruct build() {
                return new Jsii$Proxy(this);
            }
        }

        /**
         * An implementation for {@link NestedStruct}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @software.amazon.jsii.Internal
        final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements NestedStruct {
            private final java.lang.String name;

            /**
             * Constructor that initializes the object based on values retrieved from the JsiiObject.
             * @param objRef Reference to the JSII managed object.
             */
            protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
                super(objRef);
                this.name = software.amazon.jsii.Kernel.get(this, "name", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            }

            /**
             * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
             */
            protected Jsii$Proxy(final Builder builder) {
                super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
                this.name = java.util.Objects.requireNonNull(builder.name, "name is required");
            }

            @Override
            public final java.lang.String getName() {
                return this.name;
            }

            @Override
            @software.amazon.jsii.Internal
            public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
                final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
                final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

                data.set("name", om.valueToTree(this.getName()));

                final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
                struct.set("fqn", om.valueToTree("@scope/jsii-calc-lib.submodule.NestingClass.NestedStruct"));
                struct.set("data", data);

                final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
                obj.set("$jsii.struct", struct);

                return obj;
            }

            @Override
            public final boolean equals(final Object o) {
                if (this == o) return true;
                if (o == null || getClass() != o.getClass()) return false;

                NestedStruct.Jsii$Proxy that = (NestedStruct.Jsii$Proxy) o;

                return this.name.equals(that.name);
            }

            @Override
            public final int hashCode() {
                int result = this.name.hashCode();
                return result;
            }
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/custom_submodule_name/ReflectableEntry.java 1`] = `
package software.amazon.jsii.tests.calculator.custom_submodule_name;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.submodule.ReflectableEntry")
@software.amazon.jsii.Jsii.Proxy(ReflectableEntry.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface ReflectableEntry extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @org.jetbrains.annotations.NotNull java.lang.String getKey();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @org.jetbrains.annotations.NotNull java.lang.Object getValue();

    /**
     * @return a {@link Builder} of {@link ReflectableEntry}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ReflectableEntry}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public static final class Builder implements software.amazon.jsii.Builder<ReflectableEntry> {
        java.lang.String key;
        java.lang.Object value;

        /**
         * Sets the value of {@link ReflectableEntry#getKey}
         * @param key the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder key(java.lang.String key) {
            this.key = key;
            return this;
        }

        /**
         * Sets the value of {@link ReflectableEntry#getValue}
         * @param value the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder value(java.lang.Object value) {
            this.value = value;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ReflectableEntry}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public ReflectableEntry build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ReflectableEntry}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ReflectableEntry {
        private final java.lang.String key;
        private final java.lang.Object value;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.key = software.amazon.jsii.Kernel.get(this, "key", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.value = software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.key = java.util.Objects.requireNonNull(builder.key, "key is required");
            this.value = java.util.Objects.requireNonNull(builder.value, "value is required");
        }

        @Override
        public final java.lang.String getKey() {
            return this.key;
        }

        @Override
        public final java.lang.Object getValue() {
            return this.value;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("key", om.valueToTree(this.getKey()));
            data.set("value", om.valueToTree(this.getValue()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("@scope/jsii-calc-lib.submodule.ReflectableEntry"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ReflectableEntry.Jsii$Proxy that = (ReflectableEntry.Jsii$Proxy) o;

            if (!key.equals(that.key)) return false;
            return this.value.equals(that.value);
        }

        @Override
        public final int hashCode() {
            int result = this.key.hashCode();
            result = 31 * result + (this.value.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/custom_submodule_name/Reflector.java 1`] = `
package software.amazon.jsii.tests.calculator.custom_submodule_name;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.submodule.Reflector")
public class Reflector extends software.amazon.jsii.JsiiObject {

    protected Reflector(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Reflector(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public Reflector() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param reflectable This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> asMap(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.custom_submodule_name.IReflectable reflectable) {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.Kernel.call(this, "asMap", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class)), new Object[] { java.util.Objects.requireNonNull(reflectable, "reflectable is required") }));
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/custom_submodule_name/package-info.java 1`] = `
/**
 * <h1>Submodule Readme</h1>
 * <p>
 * This is a submodule readme.
 */
package software.amazon.jsii.tests.calculator.custom_submodule_name;

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/$Module.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

import static java.util.Arrays.asList;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.Reader;
import java.io.UncheckedIOException;

import java.nio.charset.StandardCharsets;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import software.amazon.jsii.JsiiModule;

@software.amazon.jsii.Internal
public final class $Module extends JsiiModule {
    private static final Map<String, String> MODULE_TYPES = load();

    private static Map<String, String> load() {
        final Map<String, String> result = new HashMap<>();
        final ClassLoader cl = $Module.class.getClassLoader();
        try (final InputStream is = cl.getResourceAsStream("software/amazon/jsii/tests/calculator/lib/$Module.txt");
             final Reader rd = new InputStreamReader(is, StandardCharsets.UTF_8);
             final BufferedReader br = new BufferedReader(rd)) {
            br.lines()
              .filter(line -> !line.trim().isEmpty())
              .forEach(line ->  {
                final String[] parts = line.split("=", 2);
                final String fqn = parts[0];
                final String className = parts[1];
                result.put(fqn, className);
            });
        }
        catch (final IOException exception) {
            throw new UncheckedIOException(exception);
        }
        return result;
    }

    private final Map<String, Class<?>> cache = new HashMap<>();

    public $Module() {
        super("@scope/jsii-calc-lib", "0.0.0", $Module.class, "jsii-calc-lib@0.0.0.jsii.tgz");
    }

    @Override
    public List<Class<? extends JsiiModule>> getDependencies() {
        return asList(software.amazon.jsii.tests.calculator.base.$Module.class, software.amazon.jsii.tests.calculator.baseofbase.$Module.class);
    }

    @Override
    protected Class<?> resolveClass(final String fqn) throws ClassNotFoundException {
        if (!MODULE_TYPES.containsKey(fqn)) {
            throw new ClassNotFoundException("Unknown JSII type: " + fqn);
        }
        String className = MODULE_TYPES.get(fqn);
        if (!this.cache.containsKey(className)) {
            this.cache.put(className, this.findClass(className));
        }
        return this.cache.get(className);
    }

    private Class<?> findClass(final String binaryName) {
        try {
            return Class.forName(binaryName);
        }
        catch (final ClassNotFoundException exception) {
            throw new RuntimeException(exception);
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/BaseFor2647.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 * (deprecated) A base class for testing #2647.
 * <p>
 * The method <code>foo</code> has a parameter that uses a type
 * from a dependent module. Since Go "reimplments" this method, it will also need
 * to include an "import" statement for the calc-base module.
 * <p>
 * @see <a href="https://github.com/aws/jsii/issues/2647">https://github.com/aws/jsii/issues/2647</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.BaseFor2647")
public class BaseFor2647 extends software.amazon.jsii.JsiiObject {

    protected BaseFor2647(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected BaseFor2647(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param very This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public BaseFor2647(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.baseofbase.Very very) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(very, "very is required") });
    }

    /**
     * @param obj This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public void foo(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.base.IBaseInterface obj) {
        software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(obj, "obj is required") });
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/DiamondLeft.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.DiamondLeft")
@software.amazon.jsii.Jsii.Proxy(DiamondLeft.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface DiamondLeft extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    default @org.jetbrains.annotations.Nullable java.lang.String getHoistedTop() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    default @org.jetbrains.annotations.Nullable java.lang.Number getLeft() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link DiamondLeft}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link DiamondLeft}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public static final class Builder implements software.amazon.jsii.Builder<DiamondLeft> {
        java.lang.String hoistedTop;
        java.lang.Number left;

        /**
         * Sets the value of {@link DiamondLeft#getHoistedTop}
         * @param hoistedTop the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder hoistedTop(java.lang.String hoistedTop) {
            this.hoistedTop = hoistedTop;
            return this;
        }

        /**
         * Sets the value of {@link DiamondLeft#getLeft}
         * @param left the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder left(java.lang.Number left) {
            this.left = left;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link DiamondLeft}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public DiamondLeft build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link DiamondLeft}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements DiamondLeft {
        private final java.lang.String hoistedTop;
        private final java.lang.Number left;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.hoistedTop = software.amazon.jsii.Kernel.get(this, "hoistedTop", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.left = software.amazon.jsii.Kernel.get(this, "left", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.hoistedTop = builder.hoistedTop;
            this.left = builder.left;
        }

        @Override
        public final java.lang.String getHoistedTop() {
            return this.hoistedTop;
        }

        @Override
        public final java.lang.Number getLeft() {
            return this.left;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getHoistedTop() != null) {
                data.set("hoistedTop", om.valueToTree(this.getHoistedTop()));
            }
            if (this.getLeft() != null) {
                data.set("left", om.valueToTree(this.getLeft()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("@scope/jsii-calc-lib.DiamondLeft"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DiamondLeft.Jsii$Proxy that = (DiamondLeft.Jsii$Proxy) o;

            if (this.hoistedTop != null ? !this.hoistedTop.equals(that.hoistedTop) : that.hoistedTop != null) return false;
            return this.left != null ? this.left.equals(that.left) : that.left == null;
        }

        @Override
        public final int hashCode() {
            int result = this.hoistedTop != null ? this.hoistedTop.hashCode() : 0;
            result = 31 * result + (this.left != null ? this.left.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/DiamondRight.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.DiamondRight")
@software.amazon.jsii.Jsii.Proxy(DiamondRight.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface DiamondRight extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    default @org.jetbrains.annotations.Nullable java.lang.String getHoistedTop() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    default @org.jetbrains.annotations.Nullable java.lang.Boolean getRight() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link DiamondRight}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link DiamondRight}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public static final class Builder implements software.amazon.jsii.Builder<DiamondRight> {
        java.lang.String hoistedTop;
        java.lang.Boolean right;

        /**
         * Sets the value of {@link DiamondRight#getHoistedTop}
         * @param hoistedTop the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder hoistedTop(java.lang.String hoistedTop) {
            this.hoistedTop = hoistedTop;
            return this;
        }

        /**
         * Sets the value of {@link DiamondRight#getRight}
         * @param right the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder right(java.lang.Boolean right) {
            this.right = right;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link DiamondRight}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public DiamondRight build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link DiamondRight}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements DiamondRight {
        private final java.lang.String hoistedTop;
        private final java.lang.Boolean right;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.hoistedTop = software.amazon.jsii.Kernel.get(this, "hoistedTop", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.right = software.amazon.jsii.Kernel.get(this, "right", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.hoistedTop = builder.hoistedTop;
            this.right = builder.right;
        }

        @Override
        public final java.lang.String getHoistedTop() {
            return this.hoistedTop;
        }

        @Override
        public final java.lang.Boolean getRight() {
            return this.right;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getHoistedTop() != null) {
                data.set("hoistedTop", om.valueToTree(this.getHoistedTop()));
            }
            if (this.getRight() != null) {
                data.set("right", om.valueToTree(this.getRight()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("@scope/jsii-calc-lib.DiamondRight"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DiamondRight.Jsii$Proxy that = (DiamondRight.Jsii$Proxy) o;

            if (this.hoistedTop != null ? !this.hoistedTop.equals(that.hoistedTop) : that.hoistedTop != null) return false;
            return this.right != null ? this.right.equals(that.right) : that.right == null;
        }

        @Override
        public final int hashCode() {
            int result = this.hoistedTop != null ? this.hoistedTop.hashCode() : 0;
            result = 31 * result + (this.right != null ? this.right.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/EnumFromScopedModule.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 * (deprecated) Check that enums from &#64;scoped packages can be references.
 * <p>
 * See awslabs/jsii#138
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.EnumFromScopedModule")
public enum EnumFromScopedModule {
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    VALUE1,
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    VALUE2,
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/FunctionWithUnderscoreArgument.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 * (deprecated) For Java, test that an identifier that is just a _ is handled.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.FunctionWithUnderscoreArgument")
public class FunctionWithUnderscoreArgument extends software.amazon.jsii.JsiiObject {

    protected FunctionWithUnderscoreArgument(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected FunctionWithUnderscoreArgument(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public FunctionWithUnderscoreArgument() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param _ This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public @org.jetbrains.annotations.NotNull java.lang.String foo(final @org.jetbrains.annotations.NotNull java.lang.String __) {
        return software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(__, "__ is required") });
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/IDoublable.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 * (deprecated) The general contract for a concrete number.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.IDoublable")
@software.amazon.jsii.Jsii.Proxy(IDoublable.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface IDoublable extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @org.jetbrains.annotations.NotNull java.lang.Number getDoubleValue();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.lib.IDoublable.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public final @org.jetbrains.annotations.NotNull java.lang.Number getDoubleValue() {
            return software.amazon.jsii.Kernel.get(this, "doubleValue", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }
    }

    /**
     * Internal default implementation for {@link IDoublable}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IDoublable {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        default @org.jetbrains.annotations.NotNull java.lang.Number getDoubleValue() {
            return software.amazon.jsii.Kernel.get(this, "doubleValue", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/IFriendly.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 * (deprecated) Applies to classes that are considered friendly.
 * <p>
 * These classes can be greeted with
 * a "hello" or "goodbye" blessing and they will respond back in a fun and friendly manner.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.IFriendly")
@software.amazon.jsii.Jsii.Proxy(IFriendly.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface IFriendly extends software.amazon.jsii.JsiiSerializable {

    /**
     * (deprecated) Say hello!
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @org.jetbrains.annotations.NotNull java.lang.String hello();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.lib.IFriendly.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * (deprecated) Say hello!
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String hello() {
            return software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IFriendly}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IFriendly {

        /**
         * (deprecated) Say hello!
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String hello() {
            return software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/IThreeLevelsInterface.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 * (deprecated) Interface that inherits from packages 2 levels up the tree.
 * <p>
 * Their presence validates that .NET/Java/jsii-reflect can track all fields
 * far enough up the tree.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.IThreeLevelsInterface")
@software.amazon.jsii.Jsii.Proxy(IThreeLevelsInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface IThreeLevelsInterface extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.base.IBaseInterface {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    void baz();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.lib.IThreeLevelsInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        @Override
        public final void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }

        @Override
        public final void bar() {
            software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public final void baz() {
            software.amazon.jsii.Kernel.call(this, "baz", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IThreeLevelsInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IThreeLevelsInterface, software.amazon.jsii.tests.calculator.baseofbase.IVeryBaseInterface.Jsii$Default {

        @Override
        default void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }

        @Override
        default void bar() {
            software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        default void baz() {
            software.amazon.jsii.Kernel.call(this, "baz", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/MyFirstStruct.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 * (deprecated) This is the first struct we have created in jsii.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.MyFirstStruct")
@software.amazon.jsii.Jsii.Proxy(MyFirstStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface MyFirstStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     * (deprecated) An awesome number value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @org.jetbrains.annotations.NotNull java.lang.Number getAnumber();

    /**
     * (deprecated) A string value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @org.jetbrains.annotations.NotNull java.lang.String getAstring();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    default @org.jetbrains.annotations.Nullable java.util.List<java.lang.String> getFirstOptional() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link MyFirstStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link MyFirstStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public static final class Builder implements software.amazon.jsii.Builder<MyFirstStruct> {
        java.lang.Number anumber;
        java.lang.String astring;
        java.util.List<java.lang.String> firstOptional;

        /**
         * Sets the value of {@link MyFirstStruct#getAnumber}
         * @param anumber An awesome number value. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder anumber(java.lang.Number anumber) {
            this.anumber = anumber;
            return this;
        }

        /**
         * Sets the value of {@link MyFirstStruct#getAstring}
         * @param astring A string value. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder astring(java.lang.String astring) {
            this.astring = astring;
            return this;
        }

        /**
         * Sets the value of {@link MyFirstStruct#getFirstOptional}
         * @param firstOptional the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder firstOptional(java.util.List<java.lang.String> firstOptional) {
            this.firstOptional = firstOptional;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link MyFirstStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public MyFirstStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link MyFirstStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements MyFirstStruct {
        private final java.lang.Number anumber;
        private final java.lang.String astring;
        private final java.util.List<java.lang.String> firstOptional;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.anumber = software.amazon.jsii.Kernel.get(this, "anumber", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
            this.astring = software.amazon.jsii.Kernel.get(this, "astring", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.firstOptional = software.amazon.jsii.Kernel.get(this, "firstOptional", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class)));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.anumber = java.util.Objects.requireNonNull(builder.anumber, "anumber is required");
            this.astring = java.util.Objects.requireNonNull(builder.astring, "astring is required");
            this.firstOptional = builder.firstOptional;
        }

        @Override
        public final java.lang.Number getAnumber() {
            return this.anumber;
        }

        @Override
        public final java.lang.String getAstring() {
            return this.astring;
        }

        @Override
        public final java.util.List<java.lang.String> getFirstOptional() {
            return this.firstOptional;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("anumber", om.valueToTree(this.getAnumber()));
            data.set("astring", om.valueToTree(this.getAstring()));
            if (this.getFirstOptional() != null) {
                data.set("firstOptional", om.valueToTree(this.getFirstOptional()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("@scope/jsii-calc-lib.MyFirstStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            MyFirstStruct.Jsii$Proxy that = (MyFirstStruct.Jsii$Proxy) o;

            if (!anumber.equals(that.anumber)) return false;
            if (!astring.equals(that.astring)) return false;
            return this.firstOptional != null ? this.firstOptional.equals(that.firstOptional) : that.firstOptional == null;
        }

        @Override
        public final int hashCode() {
            int result = this.anumber.hashCode();
            result = 31 * result + (this.astring.hashCode());
            result = 31 * result + (this.firstOptional != null ? this.firstOptional.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/Number.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 * (deprecated) Represents a concrete number.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.Number")
public class Number extends software.amazon.jsii.tests.calculator.lib.NumericValue implements software.amazon.jsii.tests.calculator.lib.IDoublable {

    protected Number(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Number(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * (deprecated) Creates a Number object.
     * <p>
     * @param value The number. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public Number(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     * (deprecated) The number multiplied by 2.
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public @org.jetbrains.annotations.NotNull java.lang.Number getDoubleValue() {
        return software.amazon.jsii.Kernel.get(this, "doubleValue", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * (deprecated) The number.
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
        return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/NumericValue.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 * (deprecated) Abstract class which represents a numeric value.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.NumericValue")
public abstract class NumericValue extends software.amazon.jsii.tests.calculator.base.Base {

    protected NumericValue(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected NumericValue(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    protected NumericValue() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * (deprecated) String representation of the value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public @org.jetbrains.annotations.NotNull java.lang.String toString() {
        return software.amazon.jsii.Kernel.call(this, "toString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * (deprecated) The value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public abstract @org.jetbrains.annotations.NotNull java.lang.Number getValue();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.lib.NumericValue {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * (deprecated) The value.
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public final @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/Operation.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 * (deprecated) Represents an operation on values.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.Operation")
public abstract class Operation extends software.amazon.jsii.tests.calculator.lib.NumericValue {

    protected Operation(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Operation(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    protected Operation() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * (deprecated) String representation of the value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @Override
    public abstract @org.jetbrains.annotations.NotNull java.lang.String toString();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.lib.Operation {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * (deprecated) The value.
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public final @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * (deprecated) String representation of the value.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String toString() {
            return software.amazon.jsii.Kernel.call(this, "toString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/StructWithOnlyOptionals.java 1`] = `
package software.amazon.jsii.tests.calculator.lib;

/**
 * (deprecated) This is a struct with only optional properties.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.StructWithOnlyOptionals")
@software.amazon.jsii.Jsii.Proxy(StructWithOnlyOptionals.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface StructWithOnlyOptionals extends software.amazon.jsii.JsiiSerializable {

    /**
     * (deprecated) The first optional!
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    default @org.jetbrains.annotations.Nullable java.lang.String getOptional1() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    default @org.jetbrains.annotations.Nullable java.lang.Number getOptional2() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    default @org.jetbrains.annotations.Nullable java.lang.Boolean getOptional3() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link StructWithOnlyOptionals}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link StructWithOnlyOptionals}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public static final class Builder implements software.amazon.jsii.Builder<StructWithOnlyOptionals> {
        java.lang.String optional1;
        java.lang.Number optional2;
        java.lang.Boolean optional3;

        /**
         * Sets the value of {@link StructWithOnlyOptionals#getOptional1}
         * @param optional1 The first optional!.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder optional1(java.lang.String optional1) {
            this.optional1 = optional1;
            return this;
        }

        /**
         * Sets the value of {@link StructWithOnlyOptionals#getOptional2}
         * @param optional2 the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder optional2(java.lang.Number optional2) {
            this.optional2 = optional2;
            return this;
        }

        /**
         * Sets the value of {@link StructWithOnlyOptionals#getOptional3}
         * @param optional3 the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder optional3(java.lang.Boolean optional3) {
            this.optional3 = optional3;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link StructWithOnlyOptionals}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public StructWithOnlyOptionals build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link StructWithOnlyOptionals}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements StructWithOnlyOptionals {
        private final java.lang.String optional1;
        private final java.lang.Number optional2;
        private final java.lang.Boolean optional3;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.optional1 = software.amazon.jsii.Kernel.get(this, "optional1", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.optional2 = software.amazon.jsii.Kernel.get(this, "optional2", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
            this.optional3 = software.amazon.jsii.Kernel.get(this, "optional3", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.optional1 = builder.optional1;
            this.optional2 = builder.optional2;
            this.optional3 = builder.optional3;
        }

        @Override
        public final java.lang.String getOptional1() {
            return this.optional1;
        }

        @Override
        public final java.lang.Number getOptional2() {
            return this.optional2;
        }

        @Override
        public final java.lang.Boolean getOptional3() {
            return this.optional3;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getOptional1() != null) {
                data.set("optional1", om.valueToTree(this.getOptional1()));
            }
            if (this.getOptional2() != null) {
                data.set("optional2", om.valueToTree(this.getOptional2()));
            }
            if (this.getOptional3() != null) {
                data.set("optional3", om.valueToTree(this.getOptional3()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("@scope/jsii-calc-lib.StructWithOnlyOptionals"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            StructWithOnlyOptionals.Jsii$Proxy that = (StructWithOnlyOptionals.Jsii$Proxy) o;

            if (this.optional1 != null ? !this.optional1.equals(that.optional1) : that.optional1 != null) return false;
            if (this.optional2 != null ? !this.optional2.equals(that.optional2) : that.optional2 != null) return false;
            return this.optional3 != null ? this.optional3.equals(that.optional3) : that.optional3 == null;
        }

        @Override
        public final int hashCode() {
            int result = this.optional1 != null ? this.optional1.hashCode() : 0;
            result = 31 * result + (this.optional2 != null ? this.optional2.hashCode() : 0);
            result = 31 * result + (this.optional3 != null ? this.optional3.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/deprecation_removal/IInterface.java 1`] = `
package software.amazon.jsii.tests.calculator.lib.deprecation_removal;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.deprecationRemoval.IInterface")
@software.amazon.jsii.Jsii.Proxy(IInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface IInterface extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    void method();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.lib.deprecation_removal.IInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public final void method() {
            software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IInterface {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        default void method() {
            software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/deprecation_removal/InterfaceFactory.java 1`] = `
package software.amazon.jsii.tests.calculator.lib.deprecation_removal;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.deprecationRemoval.InterfaceFactory")
public class InterfaceFactory extends software.amazon.jsii.JsiiObject {

    protected InterfaceFactory(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected InterfaceFactory(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.deprecation_removal.IInterface create() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.lib.deprecation_removal.InterfaceFactory.class, "create", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.deprecation_removal.IInterface.class));
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/deprecation_removal/VisibleBaseClass.java 1`] = `
package software.amazon.jsii.tests.calculator.lib.deprecation_removal;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.lib.$Module.class, fqn = "@scope/jsii-calc-lib.deprecationRemoval.VisibleBaseClass")
public class VisibleBaseClass extends software.amazon.jsii.JsiiObject {

    protected VisibleBaseClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected VisibleBaseClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public VisibleBaseClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public @org.jetbrains.annotations.NotNull java.lang.Boolean getPropertyPresent() {
        return software.amazon.jsii.Kernel.get(this, "propertyPresent", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }
}

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/lib/package-info.java 1`] = `
/**
 *
 * Deprecated: Really just deprecated for shows...
 */
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
package software.amazon.jsii.tests.calculator.lib;

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/resources/software/amazon/jsii/tests/calculator/lib/$Module.txt 1`] = `
@scope/jsii-calc-lib.BaseFor2647=software.amazon.jsii.tests.calculator.lib.BaseFor2647
@scope/jsii-calc-lib.DiamondLeft=software.amazon.jsii.tests.calculator.lib.DiamondLeft
@scope/jsii-calc-lib.DiamondRight=software.amazon.jsii.tests.calculator.lib.DiamondRight
@scope/jsii-calc-lib.EnumFromScopedModule=software.amazon.jsii.tests.calculator.lib.EnumFromScopedModule
@scope/jsii-calc-lib.FunctionWithUnderscoreArgument=software.amazon.jsii.tests.calculator.lib.FunctionWithUnderscoreArgument
@scope/jsii-calc-lib.IDoublable=software.amazon.jsii.tests.calculator.lib.IDoublable
@scope/jsii-calc-lib.IFriendly=software.amazon.jsii.tests.calculator.lib.IFriendly
@scope/jsii-calc-lib.IThreeLevelsInterface=software.amazon.jsii.tests.calculator.lib.IThreeLevelsInterface
@scope/jsii-calc-lib.MyFirstStruct=software.amazon.jsii.tests.calculator.lib.MyFirstStruct
@scope/jsii-calc-lib.Number=software.amazon.jsii.tests.calculator.lib.Number
@scope/jsii-calc-lib.NumericValue=software.amazon.jsii.tests.calculator.lib.NumericValue
@scope/jsii-calc-lib.Operation=software.amazon.jsii.tests.calculator.lib.Operation
@scope/jsii-calc-lib.StructWithOnlyOptionals=software.amazon.jsii.tests.calculator.lib.StructWithOnlyOptionals
@scope/jsii-calc-lib.deprecationRemoval.IInterface=software.amazon.jsii.tests.calculator.lib.deprecation_removal.IInterface
@scope/jsii-calc-lib.deprecationRemoval.InterfaceFactory=software.amazon.jsii.tests.calculator.lib.deprecation_removal.InterfaceFactory
@scope/jsii-calc-lib.deprecationRemoval.VisibleBaseClass=software.amazon.jsii.tests.calculator.lib.deprecation_removal.VisibleBaseClass
@scope/jsii-calc-lib.submodule.IReflectable=software.amazon.jsii.tests.calculator.custom_submodule_name.IReflectable
@scope/jsii-calc-lib.submodule.NestingClass=software.amazon.jsii.tests.calculator.custom_submodule_name.NestingClass
@scope/jsii-calc-lib.submodule.NestingClass.NestedClass=software.amazon.jsii.tests.calculator.custom_submodule_name.NestingClass$NestedClass
@scope/jsii-calc-lib.submodule.NestingClass.NestedStruct=software.amazon.jsii.tests.calculator.custom_submodule_name.NestingClass$NestedStruct
@scope/jsii-calc-lib.submodule.ReflectableEntry=software.amazon.jsii.tests.calculator.custom_submodule_name.ReflectableEntry
@scope/jsii-calc-lib.submodule.Reflector=software.amazon.jsii.tests.calculator.custom_submodule_name.Reflector

`;

exports[`Generated code for "@scope/jsii-calc-lib": <outDir>/java/src/main/resources/software/amazon/jsii/tests/calculator/lib/jsii-calc-lib@0.0.0.jsii.tgz 1`] = `java/src/main/resources/software/amazon/jsii/tests/calculator/lib/jsii-calc-lib@0.0.0.jsii.tgz is a tarball`;

exports[`Generated code for "@scope/jsii-calc-lib": <runtime-type-check-diff>/ 1`] = `
<runtime-type-check-diff>
┗━ 🕳 There is nothing here
`;

exports[`Generated code for "jsii-calc": <outDir>/ 1`] = `
<root>
 ┗━ 📁 java
    ┣━ 📄 LICENSE
    ┣━ 📄 NOTICE
    ┣━ 📄 pom.xml
    ┗━ 📁 src
       ┗━ 📁 main
          ┣━ 📁 java
          ┃  ┗━ 📁 software
          ┃     ┗━ 📁 amazon
          ┃        ┗━ 📁 jsii
          ┃           ┗━ 📁 tests
          ┃              ┗━ 📁 calculator
          ┃                 ┣━ 📄 $Module.java
          ┃                 ┣━ 📄 AbstractClass.java
          ┃                 ┣━ 📄 AbstractClassBase.java
          ┃                 ┣━ 📄 AbstractClassReturner.java
          ┃                 ┣━ 📄 AbstractSuite.java
          ┃                 ┣━ 📄 Add.java
          ┃                 ┣━ 📄 AllowedMethodNames.java
          ┃                 ┣━ 📄 AllTypes.java
          ┃                 ┣━ 📄 AllTypesEnum.java
          ┃                 ┣━ 📄 AmbiguousParameters.java
          ┃                 ┣━ 📁 anonymous
          ┃                 ┃  ┣━ 📄 IOptionA.java
          ┃                 ┃  ┣━ 📄 IOptionB.java
          ┃                 ┃  ┗━ 📄 UseOptions.java
          ┃                 ┣━ 📄 AnonymousImplementationProvider.java
          ┃                 ┣━ 📄 AnyPropertyAccess.java
          ┃                 ┣━ 📄 AsyncVirtualMethods.java
          ┃                 ┣━ 📄 AugmentableClass.java
          ┃                 ┣━ 📄 BaseClass.java
          ┃                 ┣━ 📄 BaseJsii976.java
          ┃                 ┣━ 📄 Bell.java
          ┃                 ┣━ 📄 BinaryOperation.java
          ┃                 ┣━ 📄 BurriedAnonymousObject.java
          ┃                 ┣━ 📄 Calculator.java
          ┃                 ┣━ 📄 CalculatorProps.java
          ┃                 ┣━ 📁 cdk16625
          ┃                 ┃  ┣━ 📄 Cdk16625.java
          ┃                 ┃  ┗━ 📁 donotimport
          ┃                 ┃     ┗━ 📄 UnimportedSubmoduleType.java
          ┃                 ┣━ 📁 cdk22369
          ┃                 ┃  ┣━ 📄 AcceptsPath.java
          ┃                 ┃  ┗━ 📄 AcceptsPathProps.java
          ┃                 ┣━ 📄 ChildStruct982.java
          ┃                 ┣━ 📄 ClassThatImplementsTheInternalInterface.java
          ┃                 ┣━ 📄 ClassThatImplementsThePrivateInterface.java
          ┃                 ┣━ 📄 ClassWithCollectionOfUnions.java
          ┃                 ┣━ 📄 ClassWithCollections.java
          ┃                 ┣━ 📄 ClassWithContainerTypes.java
          ┃                 ┣━ 📄 ClassWithDocs.java
          ┃                 ┣━ 📄 ClassWithJavaReservedWords.java
          ┃                 ┣━ 📄 ClassWithMutableObjectLiteralProperty.java
          ┃                 ┣━ 📄 ClassWithNestedUnion.java
          ┃                 ┣━ 📄 ClassWithPrivateConstructorAndAutomaticProperties.java
          ┃                 ┣━ 📁 composition
          ┃                 ┃  ┗━ 📄 CompositeOperation.java
          ┃                 ┣━ 📄 ConfusingToJackson.java
          ┃                 ┣━ 📄 ConfusingToJacksonStruct.java
          ┃                 ┣━ 📄 ConstructorPassesThisOut.java
          ┃                 ┣━ 📄 Constructors.java
          ┃                 ┣━ 📄 ConsumePureInterface.java
          ┃                 ┣━ 📄 ConsumerCanRingBell.java
          ┃                 ┣━ 📄 ConsumersOfThisCrazyTypeSystem.java
          ┃                 ┣━ 📄 ContainerProps.java
          ┃                 ┣━ 📄 DataRenderer.java
          ┃                 ┣━ 📄 Default.java
          ┃                 ┣━ 📄 DefaultedConstructorArgument.java
          ┃                 ┣━ 📄 Demonstrate982.java
          ┃                 ┣━ 📄 DeprecatedClass.java
          ┃                 ┣━ 📄 DeprecatedEnum.java
          ┃                 ┣━ 📄 DeprecatedStruct.java
          ┃                 ┣━ 📁 derived_class_has_no_properties
          ┃                 ┃  ┣━ 📄 Base.java
          ┃                 ┃  ┗━ 📄 Derived.java
          ┃                 ┣━ 📄 DerivedStruct.java
          ┃                 ┣━ 📄 DiamondBottom.java
          ┃                 ┣━ 📄 DiamondInheritanceBaseLevelStruct.java
          ┃                 ┣━ 📄 DiamondInheritanceFirstMidLevelStruct.java
          ┃                 ┣━ 📄 DiamondInheritanceSecondMidLevelStruct.java
          ┃                 ┣━ 📄 DiamondInheritanceTopLevelStruct.java
          ┃                 ┣━ 📄 DisappointingCollectionSource.java
          ┃                 ┣━ 📄 DocumentedClass.java
          ┃                 ┣━ 📄 DoNotOverridePrivates.java
          ┃                 ┣━ 📄 DoNotRecognizeAnyAsOptional.java
          ┃                 ┣━ 📄 DontComplainAboutVariadicAfterOptional.java
          ┃                 ┣━ 📄 DontUseMe.java
          ┃                 ┣━ 📄 DoubleTrouble.java
          ┃                 ┣━ 📄 DummyObj.java
          ┃                 ┣━ 📄 DynamicPropertyBearer.java
          ┃                 ┣━ 📄 DynamicPropertyBearerChild.java
          ┃                 ┣━ 📄 Entropy.java
          ┃                 ┣━ 📄 EnumDispenser.java
          ┃                 ┣━ 📄 EraseUndefinedHashValues.java
          ┃                 ┣━ 📄 EraseUndefinedHashValuesOptions.java
          ┃                 ┣━ 📄 ExperimentalClass.java
          ┃                 ┣━ 📄 ExperimentalEnum.java
          ┃                 ┣━ 📄 ExperimentalStruct.java
          ┃                 ┣━ 📄 ExportedBaseClass.java
          ┃                 ┣━ 📄 ExtendsInternalInterface.java
          ┃                 ┣━ 📄 ExternalClass.java
          ┃                 ┣━ 📄 ExternalEnum.java
          ┃                 ┣━ 📄 ExternalStruct.java
          ┃                 ┣━ 📄 FullCombo.java
          ┃                 ┣━ 📄 GiveMeStructs.java
          ┃                 ┣━ 📄 Greetee.java
          ┃                 ┣━ 📄 GreetingAugmenter.java
          ┃                 ┣━ 📁 homonymous_forward_references
          ┃                 ┃  ┣━ 📁 bar
          ┃                 ┃  ┃  ┣━ 📄 Consumer.java
          ┃                 ┃  ┃  ┣━ 📄 ConsumerProps.java
          ┃                 ┃  ┃  ┗━ 📄 Homonymous.java
          ┃                 ┃  ┣━ 📁 foo
          ┃                 ┃  ┃  ┣━ 📄 Consumer.java
          ┃                 ┃  ┃  ┣━ 📄 ConsumerProps.java
          ┃                 ┃  ┃  ┗━ 📄 Homonymous.java
          ┃                 ┃  ┗━ 📄 package-info.java
          ┃                 ┣━ 📄 IAnonymousImplementationProvider.java
          ┃                 ┣━ 📄 IAnonymouslyImplementMe.java
          ┃                 ┣━ 📄 IAnotherPublicInterface.java
          ┃                 ┣━ 📄 IBell.java
          ┃                 ┣━ 📄 IBellRinger.java
          ┃                 ┣━ 📄 IConcreteBellRinger.java
          ┃                 ┣━ 📄 IDeprecatedInterface.java
          ┃                 ┣━ 📄 IExperimentalInterface.java
          ┃                 ┣━ 📄 IExtendsPrivateInterface.java
          ┃                 ┣━ 📄 IExternalInterface.java
          ┃                 ┣━ 📄 IFriendlier.java
          ┃                 ┣━ 📄 IFriendlyRandomGenerator.java
          ┃                 ┣━ 📄 IIndirectlyImplemented.java
          ┃                 ┣━ 📄 IInterfaceImplementedByAbstractClass.java
          ┃                 ┣━ 📄 IInterfaceThatShouldNotBeADataType.java
          ┃                 ┣━ 📄 IInterfaceWithInternal.java
          ┃                 ┣━ 📄 IInterfaceWithMethods.java
          ┃                 ┣━ 📄 IInterfaceWithOptionalMethodArguments.java
          ┃                 ┣━ 📄 IInterfaceWithProperties.java
          ┃                 ┣━ 📄 IInterfaceWithPropertiesExtension.java
          ┃                 ┣━ 📄 IJavaReservedWordsInAnInterface.java
          ┃                 ┣━ 📄 IJSII417Derived.java
          ┃                 ┣━ 📄 IJSII417PublicBaseOfBase.java
          ┃                 ┣━ 📄 IJsii487External.java
          ┃                 ┣━ 📄 IJsii487External2.java
          ┃                 ┣━ 📄 IJsii496.java
          ┃                 ┣━ 📄 Implementation.java
          ┃                 ┣━ 📄 ImplementInternalInterface.java
          ┃                 ┣━ 📄 ImplementsInterfaceWithInternal.java
          ┃                 ┣━ 📄 ImplementsInterfaceWithInternalSubclass.java
          ┃                 ┣━ 📄 ImplementsPrivateInterface.java
          ┃                 ┣━ 📄 ImplictBaseOfBase.java
          ┃                 ┣━ 📄 IMutableObjectLiteral.java
          ┃                 ┣━ 📄 InbetweenClass.java
          ┃                 ┣━ 📄 INonInternalInterface.java
          ┃                 ┣━ 📁 interface_in_namespace_includes_classes
          ┃                 ┃  ┣━ 📄 Foo.java
          ┃                 ┃  ┗━ 📄 Hello.java
          ┃                 ┣━ 📁 interface_in_namespace_only_interface
          ┃                 ┃  ┗━ 📄 Hello.java
          ┃                 ┣━ 📄 InterfaceCollections.java
          ┃                 ┣━ 📄 InterfacesMaker.java
          ┃                 ┣━ 📄 IObjectWithProperty.java
          ┃                 ┣━ 📄 IOptionalMethod.java
          ┃                 ┣━ 📄 IPrivatelyImplemented.java
          ┃                 ┣━ 📄 IPublicInterface.java
          ┃                 ┣━ 📄 IPublicInterface2.java
          ┃                 ┣━ 📄 IRandomNumberGenerator.java
          ┃                 ┣━ 📄 IReturnJsii976.java
          ┃                 ┣━ 📄 IReturnsNumber.java
          ┃                 ┣━ 📄 Isomorphism.java
          ┃                 ┣━ 📄 Issue2638.java
          ┃                 ┣━ 📄 Issue2638B.java
          ┃                 ┣━ 📄 IStableInterface.java
          ┃                 ┣━ 📄 IStructReturningDelegate.java
          ┃                 ┣━ 📄 IWallClock.java
          ┃                 ┣━ 📄 JavaReservedWords.java
          ┃                 ┣━ 📁 jsii3656
          ┃                 ┃  ┣━ 📄 ImplementMeOpts.java
          ┃                 ┃  ┗━ 📄 OverrideMe.java
          ┃                 ┣━ 📄 JSII417Derived.java
          ┃                 ┣━ 📄 JSII417PublicBaseOfBase.java
          ┃                 ┣━ 📄 Jsii487Derived.java
          ┃                 ┣━ 📄 Jsii496Derived.java
          ┃                 ┣━ 📄 JsiiAgent.java
          ┃                 ┣━ 📄 JSObjectLiteralForInterface.java
          ┃                 ┣━ 📄 JSObjectLiteralToNative.java
          ┃                 ┣━ 📄 JSObjectLiteralToNativeClass.java
          ┃                 ┣━ 📄 JsonFormatter.java
          ┃                 ┣━ 📄 LevelOne.java
          ┃                 ┣━ 📄 LevelOneProps.java
          ┃                 ┣━ 📄 LoadBalancedFargateServiceProps.java
          ┃                 ┣━ 📄 MethodNamedProperty.java
          ┃                 ┣━ 📁 module2530
          ┃                 ┃  ┗━ 📄 MyClass.java
          ┃                 ┣━ 📁 module2617
          ┃                 ┃  ┗━ 📄 OnlyStatics.java
          ┃                 ┣━ 📁 module2647
          ┃                 ┃  ┗━ 📄 ExtendAndImplement.java
          ┃                 ┣━ 📁 module2689
          ┃                 ┃  ┣━ 📁 methods
          ┃                 ┃  ┃  ┗━ 📄 MyClass.java
          ┃                 ┃  ┣━ 📁 props
          ┃                 ┃  ┃  ┗━ 📄 MyClass.java
          ┃                 ┃  ┣━ 📁 retval
          ┃                 ┃  ┃  ┗━ 📄 MyClass.java
          ┃                 ┃  ┗━ 📁 structs
          ┃                 ┃     ┗━ 📄 MyStruct.java
          ┃                 ┣━ 📁 module2692
          ┃                 ┃  ┣━ 📁 submodule1
          ┃                 ┃  ┃  ┗━ 📄 Bar.java
          ┃                 ┃  ┗━ 📁 submodule2
          ┃                 ┃     ┣━ 📄 Bar.java
          ┃                 ┃     ┗━ 📄 Foo.java
          ┃                 ┣━ 📁 module2700
          ┃                 ┃  ┣━ 📄 Base.java
          ┃                 ┃  ┣━ 📄 Derived.java
          ┃                 ┃  ┗━ 📄 IFoo.java
          ┃                 ┣━ 📁 module2702
          ┃                 ┃  ┣━ 📄 Baz.java
          ┃                 ┃  ┣━ 📄 Class1.java
          ┃                 ┃  ┣━ 📄 Class2.java
          ┃                 ┃  ┣━ 📄 Class3.java
          ┃                 ┃  ┣━ 📄 Construct.java
          ┃                 ┃  ┣━ 📄 IBaz.java
          ┃                 ┃  ┣━ 📄 IConstruct.java
          ┃                 ┃  ┣━ 📄 IFoo.java
          ┃                 ┃  ┣━ 📄 IResource.java
          ┃                 ┃  ┣━ 📄 IVpc.java
          ┃                 ┃  ┣━ 📄 Resource.java
          ┃                 ┃  ┗━ 📄 Vpc.java
          ┃                 ┣━ 📄 Multiply.java
          ┃                 ┣━ 📄 Negate.java
          ┃                 ┣━ 📄 NestedClassInstance.java
          ┃                 ┣━ 📄 NestedStruct.java
          ┃                 ┣━ 📄 NodeStandardLibrary.java
          ┃                 ┣━ 📁 nodirect
          ┃                 ┃  ┣━ 📁 sub1
          ┃                 ┃  ┃  ┗━ 📄 TypeFromSub1.java
          ┃                 ┃  ┗━ 📁 sub2
          ┃                 ┃     ┗━ 📄 TypeFromSub2.java
          ┃                 ┣━ 📄 NullShouldBeTreatedAsUndefined.java
          ┃                 ┣━ 📄 NullShouldBeTreatedAsUndefinedData.java
          ┃                 ┣━ 📄 NumberGenerator.java
          ┃                 ┣━ 📄 ObjectRefsInCollections.java
          ┃                 ┣━ 📄 ObjectWithPropertyProvider.java
          ┃                 ┣━ 📄 Old.java
          ┃                 ┣━ 📁 onlystatic
          ┃                 ┃  ┗━ 📄 OnlyStaticMethods.java
          ┃                 ┣━ 📄 OptionalArgumentInvoker.java
          ┃                 ┣━ 📄 OptionalConstructorArgument.java
          ┃                 ┣━ 📄 OptionalStruct.java
          ┃                 ┣━ 📄 OptionalStructConsumer.java
          ┃                 ┣━ 📄 OverridableProtectedMember.java
          ┃                 ┣━ 📄 OverrideReturnsObject.java
          ┃                 ┣━ 📄 package-info.java
          ┃                 ┣━ 📄 ParamShadowsBuiltins.java
          ┃                 ┣━ 📄 ParamShadowsBuiltinsProps.java
          ┃                 ┣━ 📄 ParamShadowsScope.java
          ┃                 ┣━ 📄 ParentStruct982.java
          ┃                 ┣━ 📄 PartiallyInitializedThisConsumer.java
          ┃                 ┣━ 📄 Polymorphism.java
          ┃                 ┣━ 📄 Power.java
          ┃                 ┣━ 📄 PromiseNothing.java
          ┃                 ┣━ 📄 PropertyNamedProperty.java
          ┃                 ┣━ 📄 PublicClass.java
          ┃                 ┣━ 📁 python_self
          ┃                 ┃  ┣━ 📄 ClassWithSelf.java
          ┃                 ┃  ┣━ 📄 ClassWithSelfKwarg.java
          ┃                 ┃  ┣━ 📄 IInterfaceWithSelf.java
          ┃                 ┃  ┗━ 📄 StructWithSelf.java
          ┃                 ┣━ 📄 PythonReservedWords.java
          ┃                 ┣━ 📄 ReferenceEnumFromScopedPackage.java
          ┃                 ┣━ 📄 ReturnsPrivateImplementationOfInterface.java
          ┃                 ┣━ 📄 RootStruct.java
          ┃                 ┣━ 📄 RootStructValidator.java
          ┃                 ┣━ 📄 RuntimeTypeChecking.java
          ┃                 ┣━ 📄 SecondLevelStruct.java
          ┃                 ┣━ 📄 SingleInstanceTwoTypes.java
          ┃                 ┣━ 📄 SingletonInt.java
          ┃                 ┣━ 📄 SingletonIntEnum.java
          ┃                 ┣━ 📄 SingletonString.java
          ┃                 ┣━ 📄 SingletonStringEnum.java
          ┃                 ┣━ 📄 SmellyStruct.java
          ┃                 ┣━ 📄 SomeTypeJsii976.java
          ┃                 ┣━ 📄 StableClass.java
          ┃                 ┣━ 📄 StableEnum.java
          ┃                 ┣━ 📄 StableStruct.java
          ┃                 ┣━ 📄 StaticContext.java
          ┃                 ┣━ 📄 StaticHelloChild.java
          ┃                 ┣━ 📄 StaticHelloParent.java
          ┃                 ┣━ 📄 Statics.java
          ┃                 ┣━ 📄 StringEnum.java
          ┃                 ┣━ 📄 StripInternal.java
          ┃                 ┣━ 📄 StructA.java
          ┃                 ┣━ 📄 StructB.java
          ┃                 ┣━ 📄 StructParameterType.java
          ┃                 ┣━ 📄 StructPassing.java
          ┃                 ┣━ 📄 StructUnionConsumer.java
          ┃                 ┣━ 📄 StructWithCollectionOfUnionts.java
          ┃                 ┣━ 📄 StructWithEnum.java
          ┃                 ┣━ 📄 StructWithJavaReservedWords.java
          ┃                 ┣━ 📁 submodule
          ┃                 ┃  ┣━ 📁 back_references
          ┃                 ┃  ┃  ┗━ 📄 MyClassReference.java
          ┃                 ┃  ┣━ 📁 child
          ┃                 ┃  ┃  ┣━ 📄 Awesomeness.java
          ┃                 ┃  ┃  ┣━ 📄 Goodness.java
          ┃                 ┃  ┃  ┣━ 📄 InnerClass.java
          ┃                 ┃  ┃  ┣━ 📄 KwargsProps.java
          ┃                 ┃  ┃  ┣━ 📄 OuterClass.java
          ┃                 ┃  ┃  ┣━ 📄 SomeEnum.java
          ┃                 ┃  ┃  ┣━ 📄 SomeStruct.java
          ┃                 ┃  ┃  ┗━ 📄 Structure.java
          ┃                 ┃  ┣━ 📄 Default.java
          ┃                 ┃  ┣━ 📁 isolated
          ┃                 ┃  ┃  ┣━ 📄 Kwargs.java
          ┃                 ┃  ┃  ┗━ 📄 package-info.java
          ┃                 ┃  ┣━ 📄 MyClass.java
          ┃                 ┃  ┣━ 📁 nested_submodule
          ┃                 ┃  ┃  ┣━ 📁 deeply_nested
          ┃                 ┃  ┃  ┃  ┗━ 📄 INamespaced.java
          ┃                 ┃  ┃  ┗━ 📄 Namespaced.java
          ┃                 ┃  ┣━ 📄 package-info.java
          ┃                 ┃  ┣━ 📁 param
          ┃                 ┃  ┃  ┗━ 📄 SpecialParameter.java
          ┃                 ┃  ┗━ 📁 returnsparam
          ┃                 ┃     ┗━ 📄 ReturnsSpecialParameter.java
          ┃                 ┣━ 📄 Sum.java
          ┃                 ┣━ 📄 SupportsNiceJavaBuilder.java
          ┃                 ┣━ 📄 SupportsNiceJavaBuilderProps.java
          ┃                 ┣━ 📄 SupportsNiceJavaBuilderWithRequiredProps.java
          ┃                 ┣━ 📄 SyncVirtualMethods.java
          ┃                 ┣━ 📄 TestStructWithEnum.java
          ┃                 ┣━ 📄 Thrower.java
          ┃                 ┣━ 📄 TopLevelStruct.java
          ┃                 ┣━ 📄 TwoMethodsWithSimilarCapitalization.java
          ┃                 ┣━ 📄 UmaskCheck.java
          ┃                 ┣━ 📄 UnaryOperation.java
          ┃                 ┣━ 📁 union
          ┃                 ┃  ┣━ 📄 ConsumesUnion.java
          ┃                 ┃  ┣━ 📄 IResolvable.java
          ┃                 ┃  ┗━ 📄 Resolvable.java
          ┃                 ┣━ 📄 UnionProperties.java
          ┃                 ┣━ 📄 UpcasingReflectable.java
          ┃                 ┣━ 📄 UseBundledDependency.java
          ┃                 ┣━ 📄 UseCalcBase.java
          ┃                 ┣━ 📄 UsesInterfaceWithProperties.java
          ┃                 ┣━ 📄 VariadicInvoker.java
          ┃                 ┣━ 📄 VariadicMethod.java
          ┃                 ┣━ 📄 VariadicTypeUnion.java
          ┃                 ┣━ 📄 VirtualMethodPlayground.java
          ┃                 ┣━ 📄 VoidCallback.java
          ┃                 ┣━ 📄 WeirdDocs.java
          ┃                 ┗━ 📄 WithPrivatePropertyInConstructor.java
          ┗━ 📁 resources
             ┗━ 📁 software
                ┗━ 📁 amazon
                   ┗━ 📁 jsii
                      ┗━ 📁 tests
                         ┗━ 📁 calculator
                            ┣━ 📄 $Module.txt
                            ┗━ 📄 jsii-calc@3.20.120.jsii.tgz
`;

exports[`Generated code for "jsii-calc": <outDir>/java/LICENSE 1`] = `

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
`;

exports[`Generated code for "jsii-calc": <outDir>/java/NOTICE 1`] = `
jsii
Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.

`;

exports[`Generated code for "jsii-calc": <outDir>/java/pom.xml 1`] = `
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <name>\${project.groupId}:\${project.artifactId}</name>
  <description>A simple calcuator built on JSII.</description>
  <url>https://github.com/aws/jsii</url>
  <licenses>
    <license>
      <name>Apache License 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0</url>
      <distribution>repo</distribution>
      <comments>An OSI-approved license</comments>
    </license>
  </licenses>
  <developers>
    <developer>
      <organization>Amazon Web Services</organization>
      <roles>
        <role>author</role>
      </roles>
      <organizationUrl>https://aws.amazon.com</organizationUrl>
    </developer>
    <developer>
      <name>Elad Ben-Israel</name>
      <roles>
        <role>maintainer</role>
      </roles>
      <url>https://github.com/eladb</url>
    </developer>
    <developer>
      <name>Rico Huijbers</name>
      <roles>
        <role>maintainer</role>
      </roles>
      <url>https://github.com/rix0rrr</url>
    </developer>
    <developer>
      <name>Romain Marcadier-Muller</name>
      <roles>
        <role>maintainer</role>
      </roles>
      <url>https://github.com/RomainMuller</url>
    </developer>
  </developers>
  <scm>
    <connection>scm:git:https://github.com/aws/jsii.git</connection>
    <url>https://github.com/aws/jsii.git</url>
  </scm>
  <groupId>software.amazon.jsii.tests</groupId>
  <artifactId>calculator</artifactId>
  <version>3.20.120</version>
  <packaging>jar</packaging>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>software.amazon.jsii.tests</groupId>
      <artifactId>calculator-base</artifactId>
      <version>[0.0.0,)</version>
    </dependency>
    <dependency>
      <groupId>software.amazon.jsii.tests</groupId>
      <artifactId>calculator-lib</artifactId>
      <version>[0.0.0,)</version>
    </dependency>
    <dependency>
      <groupId>software.amazon.jsii</groupId>
      <artifactId>jsii-runtime</artifactId>
      <version>[0.0.0-SNAPSHOT]</version>
    </dependency>
    <dependency>
      <groupId>org.jetbrains</groupId>
      <artifactId>annotations</artifactId>
      <version>[16.0.3,20.0.0)</version>
    </dependency>
    <dependency>
      <!-- Provides @javax.annotation.Generated for JDKs >= 9 -->
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>[1.3.2,1.4.0)</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <fork>true</fork>
          <maxmem>4096m</maxmem>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
          <archive>
            <index>true</index>
            <manifest>
              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.5.0</version>
        <executions>
          <execution>
            <id>attach-javadocs</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <failOnError>false</failOnError>
          <show>protected</show>
          <sourceFileExcludes>
            <exclude>**/$Module.java</exclude>
          </sourceFileExcludes>
          <additionalJOption>-J-XX:+TieredCompilation</additionalJOption>
          <additionalJOption>-J-XX:TieredStopAtLevel=1</additionalJOption>
          <doclint>none</doclint>
          <quiet>true</quiet>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>enforce-maven</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <version>3.6</version>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>2.16.0</version>
        <configuration>
          <generateBackupPoms>false</generateBackupPoms>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/$Module.java 1`] = `
package software.amazon.jsii.tests.calculator;

import static java.util.Arrays.asList;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.Reader;
import java.io.UncheckedIOException;

import java.nio.charset.StandardCharsets;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import software.amazon.jsii.JsiiModule;

@software.amazon.jsii.Internal
public final class $Module extends JsiiModule {
    private static final Map<String, String> MODULE_TYPES = load();

    private static Map<String, String> load() {
        final Map<String, String> result = new HashMap<>();
        final ClassLoader cl = $Module.class.getClassLoader();
        try (final InputStream is = cl.getResourceAsStream("software/amazon/jsii/tests/calculator/$Module.txt");
             final Reader rd = new InputStreamReader(is, StandardCharsets.UTF_8);
             final BufferedReader br = new BufferedReader(rd)) {
            br.lines()
              .filter(line -> !line.trim().isEmpty())
              .forEach(line ->  {
                final String[] parts = line.split("=", 2);
                final String fqn = parts[0];
                final String className = parts[1];
                result.put(fqn, className);
            });
        }
        catch (final IOException exception) {
            throw new UncheckedIOException(exception);
        }
        return result;
    }

    private final Map<String, Class<?>> cache = new HashMap<>();

    public $Module() {
        super("jsii-calc", "3.20.120", $Module.class, "jsii-calc@3.20.120.jsii.tgz");
    }

    @Override
    public List<Class<? extends JsiiModule>> getDependencies() {
        return asList(software.amazon.jsii.tests.calculator.base.$Module.class, software.amazon.jsii.tests.calculator.lib.$Module.class);
    }

    @Override
    protected Class<?> resolveClass(final String fqn) throws ClassNotFoundException {
        if (!MODULE_TYPES.containsKey(fqn)) {
            throw new ClassNotFoundException("Unknown JSII type: " + fqn);
        }
        String className = MODULE_TYPES.get(fqn);
        if (!this.cache.containsKey(className)) {
            this.cache.put(className, this.findClass(className));
        }
        return this.cache.get(className);
    }

    private Class<?> findClass(final String binaryName) {
        try {
            return Class.forName(binaryName);
        }
        catch (final ClassNotFoundException exception) {
            throw new RuntimeException(exception);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AbstractClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AbstractClass")
public abstract class AbstractClass extends software.amazon.jsii.tests.calculator.AbstractClassBase implements software.amazon.jsii.tests.calculator.IInterfaceImplementedByAbstractClass {

    protected AbstractClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AbstractClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected AbstractClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param name This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public abstract @org.jetbrains.annotations.NotNull java.lang.String abstractMethod(final @org.jetbrains.annotations.NotNull java.lang.String name);

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number nonAbstractMethod() {
        return software.amazon.jsii.Kernel.call(this, "nonAbstractMethod", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getPropFromInterface() {
        return software.amazon.jsii.Kernel.get(this, "propFromInterface", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.AbstractClass implements software.amazon.jsii.tests.calculator.IInterfaceImplementedByAbstractClass.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getAbstractProperty() {
            return software.amazon.jsii.Kernel.get(this, "abstractProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * @param name This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String abstractMethod(final @org.jetbrains.annotations.NotNull java.lang.String name) {
            return software.amazon.jsii.Kernel.call(this, "abstractMethod", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(name, "name is required") });
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AbstractClassBase.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AbstractClassBase")
public abstract class AbstractClassBase extends software.amazon.jsii.JsiiObject {

    protected AbstractClassBase(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AbstractClassBase(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected AbstractClassBase() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public abstract @org.jetbrains.annotations.NotNull java.lang.String getAbstractProperty();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.AbstractClassBase {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getAbstractProperty() {
            return software.amazon.jsii.Kernel.get(this, "abstractProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AbstractClassReturner.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AbstractClassReturner")
public class AbstractClassReturner extends software.amazon.jsii.JsiiObject {

    protected AbstractClassReturner(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AbstractClassReturner(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public AbstractClassReturner() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.AbstractClass giveMeAbstract() {
        return software.amazon.jsii.Kernel.call(this, "giveMeAbstract", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.AbstractClass.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IInterfaceImplementedByAbstractClass giveMeInterface() {
        return software.amazon.jsii.Kernel.call(this, "giveMeInterface", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IInterfaceImplementedByAbstractClass.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.AbstractClassBase getReturnAbstractFromProperty() {
        return software.amazon.jsii.Kernel.get(this, "returnAbstractFromProperty", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.AbstractClassBase.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AbstractSuite.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Ensures abstract members implementations correctly register overrides in various languages.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AbstractSuite")
public abstract class AbstractSuite extends software.amazon.jsii.JsiiObject {

    protected AbstractSuite(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AbstractSuite(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected AbstractSuite() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param str This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected abstract @org.jetbrains.annotations.NotNull java.lang.String someMethod(final @org.jetbrains.annotations.NotNull java.lang.String str);

    /**
     * Sets <code>seed</code> to <code>this.property</code>, then calls <code>someMethod</code> with <code>this.property</code> and returns the result.
     * <p>
     * @param seed a <code>string</code>. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String workItAll(final @org.jetbrains.annotations.NotNull java.lang.String seed) {
        return software.amazon.jsii.Kernel.call(this, "workItAll", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(seed, "seed is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected abstract @org.jetbrains.annotations.NotNull java.lang.String getProperty();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected abstract void setProperty(final @org.jetbrains.annotations.NotNull java.lang.String value);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.AbstractSuite {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        protected final @org.jetbrains.annotations.NotNull java.lang.String getProperty() {
            return software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        protected final void setProperty(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "property", java.util.Objects.requireNonNull(value, "property is required"));
        }

        /**
         * @param str This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        protected final @org.jetbrains.annotations.NotNull java.lang.String someMethod(final @org.jetbrains.annotations.NotNull java.lang.String str) {
            return software.amazon.jsii.Kernel.call(this, "someMethod", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(str, "str is required") });
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Add.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * The "+" binary operation.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Add")
public class Add extends software.amazon.jsii.tests.calculator.BinaryOperation {

    protected Add(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Add(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * Creates a BinaryOperation.
     * <p>
     * @param lhs Left-hand side operand. This parameter is required.
     * @param rhs Right-hand side operand. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Add(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue lhs, final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue rhs) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(lhs, "lhs is required"), java.util.Objects.requireNonNull(rhs, "rhs is required") });
    }

    /**
     * String representation of the value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String toString() {
        return software.amazon.jsii.Kernel.call(this, "toString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * The value.
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
        return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AllTypes.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * This class includes property for all types supported by jsii.
 * <p>
 * The setters will validate
 * that the value set is of the expected type and throw otherwise.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AllTypes")
public class AllTypes extends software.amazon.jsii.JsiiObject {

    protected AllTypes(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AllTypes(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public AllTypes() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param inp This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void anyIn(final @org.jetbrains.annotations.NotNull java.lang.Object inp) {
        software.amazon.jsii.Kernel.call(this, "anyIn", software.amazon.jsii.NativeType.VOID, new Object[] { inp });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Object anyOut() {
        return software.amazon.jsii.Kernel.call(this, "anyOut", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StringEnum enumMethod(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StringEnum value) {
        return software.amazon.jsii.Kernel.call(this, "enumMethod", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StringEnum.class), new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getEnumPropertyValue() {
        return software.amazon.jsii.Kernel.get(this, "enumPropertyValue", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> getAnyArrayProperty() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "anyArrayProperty", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setAnyArrayProperty(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> value) {
        software.amazon.jsii.Kernel.set(this, "anyArrayProperty", java.util.Objects.requireNonNull(value, "anyArrayProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> getAnyMapProperty() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.Kernel.get(this, "anyMapProperty", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setAnyMapProperty(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> value) {
        software.amazon.jsii.Kernel.set(this, "anyMapProperty", java.util.Objects.requireNonNull(value, "anyMapProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Object getAnyProperty() {
        return software.amazon.jsii.Kernel.get(this, "anyProperty", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setAnyProperty(final @org.jetbrains.annotations.NotNull java.lang.Object value) {
        software.amazon.jsii.Kernel.set(this, "anyProperty", java.util.Objects.requireNonNull(value, "anyProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> getArrayProperty() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "arrayProperty", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setArrayProperty(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> value) {
        software.amazon.jsii.Kernel.set(this, "arrayProperty", java.util.Objects.requireNonNull(value, "arrayProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean getBooleanProperty() {
        return software.amazon.jsii.Kernel.get(this, "booleanProperty", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setBooleanProperty(final @org.jetbrains.annotations.NotNull java.lang.Boolean value) {
        software.amazon.jsii.Kernel.set(this, "booleanProperty", java.util.Objects.requireNonNull(value, "booleanProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.time.Instant getDateProperty() {
        return software.amazon.jsii.Kernel.get(this, "dateProperty", software.amazon.jsii.NativeType.forClass(java.time.Instant.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setDateProperty(final @org.jetbrains.annotations.NotNull java.time.Instant value) {
        software.amazon.jsii.Kernel.set(this, "dateProperty", java.util.Objects.requireNonNull(value, "dateProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.AllTypesEnum getEnumProperty() {
        return software.amazon.jsii.Kernel.get(this, "enumProperty", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.AllTypesEnum.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setEnumProperty(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.AllTypesEnum value) {
        software.amazon.jsii.Kernel.set(this, "enumProperty", java.util.Objects.requireNonNull(value, "enumProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull com.fasterxml.jackson.databind.node.ObjectNode getJsonProperty() {
        return software.amazon.jsii.Kernel.get(this, "jsonProperty", software.amazon.jsii.NativeType.forClass(com.fasterxml.jackson.databind.node.ObjectNode.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setJsonProperty(final @org.jetbrains.annotations.NotNull com.fasterxml.jackson.databind.node.ObjectNode value) {
        software.amazon.jsii.Kernel.set(this, "jsonProperty", java.util.Objects.requireNonNull(value, "jsonProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.lib.Number> getMapProperty() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.Kernel.get(this, "mapProperty", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.Number.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setMapProperty(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.lib.Number> value) {
        software.amazon.jsii.Kernel.set(this, "mapProperty", java.util.Objects.requireNonNull(value, "mapProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getNumberProperty() {
        return software.amazon.jsii.Kernel.get(this, "numberProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setNumberProperty(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        software.amazon.jsii.Kernel.set(this, "numberProperty", java.util.Objects.requireNonNull(value, "numberProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getStringProperty() {
        return software.amazon.jsii.Kernel.get(this, "stringProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setStringProperty(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "stringProperty", java.util.Objects.requireNonNull(value, "stringProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> getUnionArrayProperty() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "unionArrayProperty", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionArrayProperty(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> value) {
        software.amazon.jsii.Kernel.set(this, "unionArrayProperty", java.util.Objects.requireNonNull(value, "unionArrayProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> getUnionMapProperty() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.Kernel.get(this, "unionMapProperty", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionMapProperty(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> value) {
        software.amazon.jsii.Kernel.set(this, "unionMapProperty", java.util.Objects.requireNonNull(value, "unionMapProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Object getUnionProperty() {
        return software.amazon.jsii.Kernel.get(this, "unionProperty", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionProperty(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "unionProperty", java.util.Objects.requireNonNull(value, "unionProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionProperty(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        software.amazon.jsii.Kernel.set(this, "unionProperty", java.util.Objects.requireNonNull(value, "unionProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionProperty(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.Number value) {
        software.amazon.jsii.Kernel.set(this, "unionProperty", java.util.Objects.requireNonNull(value, "unionProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionProperty(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Multiply value) {
        software.amazon.jsii.Kernel.set(this, "unionProperty", java.util.Objects.requireNonNull(value, "unionProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> getUnknownArrayProperty() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "unknownArrayProperty", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnknownArrayProperty(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> value) {
        software.amazon.jsii.Kernel.set(this, "unknownArrayProperty", java.util.Objects.requireNonNull(value, "unknownArrayProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> getUnknownMapProperty() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.Kernel.get(this, "unknownMapProperty", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnknownMapProperty(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> value) {
        software.amazon.jsii.Kernel.set(this, "unknownMapProperty", java.util.Objects.requireNonNull(value, "unknownMapProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Object getUnknownProperty() {
        return software.amazon.jsii.Kernel.get(this, "unknownProperty", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnknownProperty(final @org.jetbrains.annotations.NotNull java.lang.Object value) {
        software.amazon.jsii.Kernel.set(this, "unknownProperty", java.util.Objects.requireNonNull(value, "unknownProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.StringEnum getOptionalEnumValue() {
        return software.amazon.jsii.Kernel.get(this, "optionalEnumValue", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StringEnum.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setOptionalEnumValue(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.StringEnum value) {
        software.amazon.jsii.Kernel.set(this, "optionalEnumValue", value);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AllTypesEnum.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AllTypesEnum")
public enum AllTypesEnum {
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    MY_ENUM_VALUE,
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    YOUR_ENUM_VALUE,
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    THIS_IS_GREAT,
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AllowedMethodNames.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AllowedMethodNames")
public class AllowedMethodNames extends software.amazon.jsii.JsiiObject {

    protected AllowedMethodNames(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AllowedMethodNames(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public AllowedMethodNames() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param _p1 This parameter is required.
     * @param _p2 This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void getBar(final @org.jetbrains.annotations.NotNull java.lang.String _p1, final @org.jetbrains.annotations.NotNull java.lang.Number _p2) {
        software.amazon.jsii.Kernel.call(this, "getBar", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(_p1, "_p1 is required"), java.util.Objects.requireNonNull(_p2, "_p2 is required") });
    }

    /**
     * getXxx() is not allowed (see negatives), but getXxx(a, ...) is okay.
     * <p>
     * @param withParam This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getFoo(final @org.jetbrains.annotations.NotNull java.lang.String withParam) {
        return software.amazon.jsii.Kernel.call(this, "getFoo", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(withParam, "withParam is required") });
    }

    /**
     * @param _x This parameter is required.
     * @param _y This parameter is required.
     * @param _z This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setBar(final @org.jetbrains.annotations.NotNull java.lang.String _x, final @org.jetbrains.annotations.NotNull java.lang.Number _y, final @org.jetbrains.annotations.NotNull java.lang.Boolean _z) {
        software.amazon.jsii.Kernel.call(this, "setBar", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(_x, "_x is required"), java.util.Objects.requireNonNull(_y, "_y is required"), java.util.Objects.requireNonNull(_z, "_z is required") });
    }

    /**
     * setFoo(x) is not allowed (see negatives), but setXxx(a, b, ...) is okay.
     * <p>
     * @param _x This parameter is required.
     * @param _y This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setFoo(final @org.jetbrains.annotations.NotNull java.lang.String _x, final @org.jetbrains.annotations.NotNull java.lang.Number _y) {
        software.amazon.jsii.Kernel.call(this, "setFoo", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(_x, "_x is required"), java.util.Objects.requireNonNull(_y, "_y is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AmbiguousParameters.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AmbiguousParameters")
public class AmbiguousParameters extends software.amazon.jsii.JsiiObject {

    protected AmbiguousParameters(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AmbiguousParameters(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param scope This parameter is required.
     * @param props This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public AmbiguousParameters(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Bell scope, final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StructParameterType props) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(scope, "scope is required"), java.util.Objects.requireNonNull(props, "props is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StructParameterType getProps() {
        return software.amazon.jsii.Kernel.get(this, "props", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StructParameterType.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Bell getScope() {
        return software.amazon.jsii.Kernel.get(this, "scope", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.Bell.class));
    }

    /**
     * A fluent builder for {@link software.amazon.jsii.tests.calculator.AmbiguousParameters}.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<software.amazon.jsii.tests.calculator.AmbiguousParameters> {
        /**
         * @return a new instance of {@link Builder}.
         * @param scope This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create(final software.amazon.jsii.tests.calculator.Bell scope) {
            return new Builder(scope);
        }

        private final software.amazon.jsii.tests.calculator.Bell scope;
        private final software.amazon.jsii.tests.calculator.StructParameterType.Builder props;

        private Builder(final software.amazon.jsii.tests.calculator.Bell scope) {
            this.scope = scope;
            this.props = new software.amazon.jsii.tests.calculator.StructParameterType.Builder();
        }

        /**
         * @return {@code this}
         * @param scope This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder scope(final java.lang.String scope) {
            this.props.scope(scope);
            return this;
        }

        /**
         * @return {@code this}
         * @param props This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder props(final java.lang.Boolean props) {
            this.props.props(props);
            return this;
        }

        /**
         * @return a newly built instance of {@link software.amazon.jsii.tests.calculator.AmbiguousParameters}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public software.amazon.jsii.tests.calculator.AmbiguousParameters build() {
            return new software.amazon.jsii.tests.calculator.AmbiguousParameters(
                this.scope,
                this.props.build()
            );
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AnonymousImplementationProvider.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AnonymousImplementationProvider")
public class AnonymousImplementationProvider extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IAnonymousImplementationProvider {

    protected AnonymousImplementationProvider(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AnonymousImplementationProvider(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public AnonymousImplementationProvider() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Implementation provideAsClass() {
        return software.amazon.jsii.Kernel.call(this, "provideAsClass", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.Implementation.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IAnonymouslyImplementMe provideAsInterface() {
        return software.amazon.jsii.Kernel.call(this, "provideAsInterface", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IAnonymouslyImplementMe.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AnyPropertyAccess.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AnyPropertyAccess")
public class AnyPropertyAccess extends software.amazon.jsii.JsiiObject {

    protected AnyPropertyAccess(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AnyPropertyAccess(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * Sets obj[resultProp] to <code>\${obj[propA]}+\${obj[propB]}</code>.
     * <p>
     * @param obj the receiver object. This parameter is required.
     * @param propA the first property to read. This parameter is required.
     * @param propB the second property to read. This parameter is required.
     * @param resultProp the property to write into. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void mutateProperties(final @org.jetbrains.annotations.NotNull java.lang.Object obj, final @org.jetbrains.annotations.NotNull java.lang.String propA, final @org.jetbrains.annotations.NotNull java.lang.String propB, final @org.jetbrains.annotations.NotNull java.lang.String resultProp) {
        software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.AnyPropertyAccess.class, "mutateProperties", software.amazon.jsii.NativeType.VOID, new Object[] { obj, java.util.Objects.requireNonNull(propA, "propA is required"), java.util.Objects.requireNonNull(propB, "propB is required"), java.util.Objects.requireNonNull(resultProp, "resultProp is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AsyncVirtualMethods.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AsyncVirtualMethods")
public class AsyncVirtualMethods extends software.amazon.jsii.JsiiObject {

    protected AsyncVirtualMethods(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AsyncVirtualMethods(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public AsyncVirtualMethods() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number callMe() {
        return software.amazon.jsii.Kernel.asyncCall(this, "callMe", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * Just calls "overrideMeToo".
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number callMe2() {
        return software.amazon.jsii.Kernel.asyncCall(this, "callMe2", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * This method calls the "callMe" async method indirectly, which will then invoke a virtual method.
     * <p>
     * This is a "double promise" situation, which
     * means that callbacks are not going to be available immediate, but only
     * after an "immediates" cycle.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number callMeDoublePromise() {
        return software.amazon.jsii.Kernel.asyncCall(this, "callMeDoublePromise", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number dontOverrideMe() {
        return software.amazon.jsii.Kernel.call(this, "dontOverrideMe", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * @param mult This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number overrideMe(final @org.jetbrains.annotations.NotNull java.lang.Number mult) {
        return software.amazon.jsii.Kernel.asyncCall(this, "overrideMe", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(mult, "mult is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number overrideMeToo() {
        return software.amazon.jsii.Kernel.asyncCall(this, "overrideMeToo", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/AugmentableClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.AugmentableClass")
public class AugmentableClass extends software.amazon.jsii.JsiiObject {

    protected AugmentableClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AugmentableClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public AugmentableClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void methodOne() {
        software.amazon.jsii.Kernel.call(this, "methodOne", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void methodTwo() {
        software.amazon.jsii.Kernel.call(this, "methodTwo", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/BaseClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.BaseClass")
public abstract class BaseClass extends software.amazon.jsii.JsiiObject {

    protected BaseClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected BaseClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected BaseClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number method() {
        return software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getProperty() {
        return software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.BaseClass {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/BaseJsii976.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.BaseJsii976")
public class BaseJsii976 extends software.amazon.jsii.JsiiObject {

    protected BaseJsii976(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected BaseJsii976(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public BaseJsii976() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Bell.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Bell")
public class Bell extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IBell {

    protected Bell(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Bell(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Bell() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public void ring() {
        software.amazon.jsii.Kernel.call(this, "ring", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean getRung() {
        return software.amazon.jsii.Kernel.get(this, "rung", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setRung(final @org.jetbrains.annotations.NotNull java.lang.Boolean value) {
        software.amazon.jsii.Kernel.set(this, "rung", java.util.Objects.requireNonNull(value, "rung is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/BinaryOperation.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Represents an operation with two operands.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.BinaryOperation")
public abstract class BinaryOperation extends software.amazon.jsii.tests.calculator.lib.Operation implements software.amazon.jsii.tests.calculator.lib.IFriendly {

    protected BinaryOperation(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected BinaryOperation(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * Creates a BinaryOperation.
     * <p>
     * @param lhs Left-hand side operand. This parameter is required.
     * @param rhs Right-hand side operand. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected BinaryOperation(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue lhs, final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue rhs) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(lhs, "lhs is required"), java.util.Objects.requireNonNull(rhs, "rhs is required") });
    }

    /**
     * Say hello!
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String hello() {
        return software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * Left-hand side operand.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue getLhs() {
        return software.amazon.jsii.Kernel.get(this, "lhs", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class));
    }

    /**
     * Right-hand side operand.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue getRhs() {
        return software.amazon.jsii.Kernel.get(this, "rhs", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class));
    }

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.BinaryOperation implements software.amazon.jsii.tests.calculator.lib.IFriendly.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * (deprecated) The value.
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public final @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * (deprecated) String representation of the value.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String toString() {
            return software.amazon.jsii.Kernel.call(this, "toString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/BurriedAnonymousObject.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * See https://github.com/aws/aws-cdk/issues/7977.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.BurriedAnonymousObject")
public abstract class BurriedAnonymousObject extends software.amazon.jsii.JsiiObject {

    protected BurriedAnonymousObject(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected BurriedAnonymousObject(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected BurriedAnonymousObject() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean check() {
        return software.amazon.jsii.Kernel.call(this, "check", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }

    /**
     * Implement this method and have it return it's parameter.
     * <p>
     * @return <code>value</code>
     * @param value the value that should be returned. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public abstract @org.jetbrains.annotations.NotNull java.lang.Object giveItBack(final @org.jetbrains.annotations.NotNull java.lang.Object value);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.BurriedAnonymousObject {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * Implement this method and have it return it's parameter.
         * <p>
         * @return <code>value</code>
         * @param value the value that should be returned. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.Object giveItBack(final @org.jetbrains.annotations.NotNull java.lang.Object value) {
            return software.amazon.jsii.Kernel.call(this, "giveItBack", software.amazon.jsii.NativeType.forClass(java.lang.Object.class), new Object[] { value });
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Calculator.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * A calculator which maintains a current value and allows adding operations.
 * <p>
 * Here's how you use it:
 * <p>
 * <blockquote><pre>
 * Calculator calculator = new Calculator();
 * calculator.add(5);
 * calculator.mul(3);
 * System.out.println(calculator.getExpression().getValue());
 * </pre></blockquote>
 * <p>
 * I will repeat this example again, but in an &#64;example tag.
 * <p>
 * Example:
 * <p>
 * <blockquote><pre>
 * Calculator calculator = new Calculator();
 * calculator.add(5);
 * calculator.mul(3);
 * System.out.println(calculator.getExpression().getValue());
 * </pre></blockquote>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Calculator")
public class Calculator extends software.amazon.jsii.tests.calculator.composition.CompositeOperation {

    protected Calculator(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Calculator(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * Creates a Calculator object.
     * <p>
     * @param props Initialization properties.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Calculator(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.CalculatorProps props) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { props });
    }

    /**
     * Creates a Calculator object.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Calculator() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * Adds a number to the current value.
     * <p>
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void add(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        software.amazon.jsii.Kernel.call(this, "add", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     * Multiplies the current value by a number.
     * <p>
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void mul(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        software.amazon.jsii.Kernel.call(this, "mul", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     * Negates the current value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void neg() {
        software.amazon.jsii.Kernel.call(this, "neg", software.amazon.jsii.NativeType.VOID);
    }

    /**
     * Raises the current value by a power.
     * <p>
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void pow(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        software.amazon.jsii.Kernel.call(this, "pow", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     * Returns teh value of the union property (if defined).
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number readUnionValue() {
        return software.amazon.jsii.Kernel.call(this, "readUnionValue", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * Returns the expression.
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue getExpression() {
        return software.amazon.jsii.Kernel.get(this, "expression", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class));
    }

    /**
     * A log of all operations.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.lib.NumericValue> getOperationsLog() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "operationsLog", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class))));
    }

    /**
     * A map of per operation name of all operations performed.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.util.List<software.amazon.jsii.tests.calculator.lib.NumericValue>> getOperationsMap() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.Kernel.get(this, "operationsMap", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class)))));
    }

    /**
     * The current value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue getCurr() {
        return software.amazon.jsii.Kernel.get(this, "curr", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class));
    }

    /**
     * The current value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setCurr(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue value) {
        software.amazon.jsii.Kernel.set(this, "curr", java.util.Objects.requireNonNull(value, "curr is required"));
    }

    /**
     * The maximum value allows in this calculator.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.lang.Number getMaxValue() {
        return software.amazon.jsii.Kernel.get(this, "maxValue", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * The maximum value allows in this calculator.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setMaxValue(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
        software.amazon.jsii.Kernel.set(this, "maxValue", value);
    }

    /**
     * Example of a property that accepts a union of types.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.lang.Object getUnionProperty() {
        return software.amazon.jsii.Kernel.get(this, "unionProperty", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     * Example of a property that accepts a union of types.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionProperty(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.Add value) {
        software.amazon.jsii.Kernel.set(this, "unionProperty", value);
    }

    /**
     * Example of a property that accepts a union of types.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionProperty(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.Multiply value) {
        software.amazon.jsii.Kernel.set(this, "unionProperty", value);
    }

    /**
     * Example of a property that accepts a union of types.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionProperty(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.Power value) {
        software.amazon.jsii.Kernel.set(this, "unionProperty", value);
    }

    /**
     * A fluent builder for {@link software.amazon.jsii.tests.calculator.Calculator}.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<software.amazon.jsii.tests.calculator.Calculator> {
        /**
         * @return a new instance of {@link Builder}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create() {
            return new Builder();
        }

        private software.amazon.jsii.tests.calculator.CalculatorProps.Builder props;

        private Builder() {
        }

        /**
         * The initial value of the calculator.
         * <p>
         * NOTE: Any number works here, it's fine.
         * <p>
         * Default: 0
         * <p>
         * @return {@code this}
         * @param initialValue The initial value of the calculator. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder initialValue(final java.lang.Number initialValue) {
            this.props().initialValue(initialValue);
            return this;
        }

        /**
         * The maximum value the calculator can store.
         * <p>
         * Default: none
         * <p>
         * @return {@code this}
         * @param maximumValue The maximum value the calculator can store. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder maximumValue(final java.lang.Number maximumValue) {
            this.props().maximumValue(maximumValue);
            return this;
        }

        /**
         * @return a newly built instance of {@link software.amazon.jsii.tests.calculator.Calculator}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public software.amazon.jsii.tests.calculator.Calculator build() {
            return new software.amazon.jsii.tests.calculator.Calculator(
                this.props != null ? this.props.build() : null
            );
        }

        private software.amazon.jsii.tests.calculator.CalculatorProps.Builder props() {
            if (this.props == null) {
                this.props = new software.amazon.jsii.tests.calculator.CalculatorProps.Builder();
            }
            return this.props;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/CalculatorProps.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Properties for Calculator.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.CalculatorProps")
@software.amazon.jsii.Jsii.Proxy(CalculatorProps.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface CalculatorProps extends software.amazon.jsii.JsiiSerializable {

    /**
     * The initial value of the calculator.
     * <p>
     * NOTE: Any number works here, it's fine.
     * <p>
     * Default: 0
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Number getInitialValue() {
        return null;
    }

    /**
     * The maximum value the calculator can store.
     * <p>
     * Default: none
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Number getMaximumValue() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link CalculatorProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link CalculatorProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<CalculatorProps> {
        java.lang.Number initialValue;
        java.lang.Number maximumValue;

        /**
         * Sets the value of {@link CalculatorProps#getInitialValue}
         * @param initialValue The initial value of the calculator.
         *                     NOTE: Any number works here, it's fine.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder initialValue(java.lang.Number initialValue) {
            this.initialValue = initialValue;
            return this;
        }

        /**
         * Sets the value of {@link CalculatorProps#getMaximumValue}
         * @param maximumValue The maximum value the calculator can store.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder maximumValue(java.lang.Number maximumValue) {
            this.maximumValue = maximumValue;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link CalculatorProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public CalculatorProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link CalculatorProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements CalculatorProps {
        private final java.lang.Number initialValue;
        private final java.lang.Number maximumValue;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.initialValue = software.amazon.jsii.Kernel.get(this, "initialValue", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
            this.maximumValue = software.amazon.jsii.Kernel.get(this, "maximumValue", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.initialValue = builder.initialValue;
            this.maximumValue = builder.maximumValue;
        }

        @Override
        public final java.lang.Number getInitialValue() {
            return this.initialValue;
        }

        @Override
        public final java.lang.Number getMaximumValue() {
            return this.maximumValue;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getInitialValue() != null) {
                data.set("initialValue", om.valueToTree(this.getInitialValue()));
            }
            if (this.getMaximumValue() != null) {
                data.set("maximumValue", om.valueToTree(this.getMaximumValue()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.CalculatorProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            CalculatorProps.Jsii$Proxy that = (CalculatorProps.Jsii$Proxy) o;

            if (this.initialValue != null ? !this.initialValue.equals(that.initialValue) : that.initialValue != null) return false;
            return this.maximumValue != null ? this.maximumValue.equals(that.maximumValue) : that.maximumValue == null;
        }

        @Override
        public final int hashCode() {
            int result = this.initialValue != null ? this.initialValue.hashCode() : 0;
            result = 31 * result + (this.maximumValue != null ? this.maximumValue.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ChildStruct982.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ChildStruct982")
@software.amazon.jsii.Jsii.Proxy(ChildStruct982.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface ChildStruct982 extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.ParentStruct982 {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number getBar();

    /**
     * @return a {@link Builder} of {@link ChildStruct982}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ChildStruct982}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<ChildStruct982> {
        java.lang.Number bar;
        java.lang.String foo;

        /**
         * Sets the value of {@link ChildStruct982#getBar}
         * @param bar the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar(java.lang.Number bar) {
            this.bar = bar;
            return this;
        }

        /**
         * Sets the value of {@link ChildStruct982#getFoo}
         * @param foo the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder foo(java.lang.String foo) {
            this.foo = foo;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ChildStruct982}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public ChildStruct982 build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ChildStruct982}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ChildStruct982 {
        private final java.lang.Number bar;
        private final java.lang.String foo;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.bar = software.amazon.jsii.Kernel.get(this, "bar", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
            this.foo = software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.bar = java.util.Objects.requireNonNull(builder.bar, "bar is required");
            this.foo = java.util.Objects.requireNonNull(builder.foo, "foo is required");
        }

        @Override
        public final java.lang.Number getBar() {
            return this.bar;
        }

        @Override
        public final java.lang.String getFoo() {
            return this.foo;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("bar", om.valueToTree(this.getBar()));
            data.set("foo", om.valueToTree(this.getFoo()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.ChildStruct982"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ChildStruct982.Jsii$Proxy that = (ChildStruct982.Jsii$Proxy) o;

            if (!bar.equals(that.bar)) return false;
            return this.foo.equals(that.foo);
        }

        @Override
        public final int hashCode() {
            int result = this.bar.hashCode();
            result = 31 * result + (this.foo.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassThatImplementsTheInternalInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ClassThatImplementsTheInternalInterface")
public class ClassThatImplementsTheInternalInterface extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.INonInternalInterface {

    protected ClassThatImplementsTheInternalInterface(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassThatImplementsTheInternalInterface(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassThatImplementsTheInternalInterface() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getA() {
        return software.amazon.jsii.Kernel.get(this, "a", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setA(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "a", java.util.Objects.requireNonNull(value, "a is required"));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getB() {
        return software.amazon.jsii.Kernel.get(this, "b", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setB(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "b", java.util.Objects.requireNonNull(value, "b is required"));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getC() {
        return software.amazon.jsii.Kernel.get(this, "c", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setC(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "c", java.util.Objects.requireNonNull(value, "c is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getD() {
        return software.amazon.jsii.Kernel.get(this, "d", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setD(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "d", java.util.Objects.requireNonNull(value, "d is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassThatImplementsThePrivateInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ClassThatImplementsThePrivateInterface")
public class ClassThatImplementsThePrivateInterface extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.INonInternalInterface {

    protected ClassThatImplementsThePrivateInterface(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassThatImplementsThePrivateInterface(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassThatImplementsThePrivateInterface() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getA() {
        return software.amazon.jsii.Kernel.get(this, "a", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setA(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "a", java.util.Objects.requireNonNull(value, "a is required"));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getB() {
        return software.amazon.jsii.Kernel.get(this, "b", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setB(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "b", java.util.Objects.requireNonNull(value, "b is required"));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getC() {
        return software.amazon.jsii.Kernel.get(this, "c", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setC(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "c", java.util.Objects.requireNonNull(value, "c is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getE() {
        return software.amazon.jsii.Kernel.get(this, "e", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setE(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "e", java.util.Objects.requireNonNull(value, "e is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithCollectionOfUnions.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ClassWithCollectionOfUnions")
public class ClassWithCollectionOfUnions extends software.amazon.jsii.JsiiObject {

    protected ClassWithCollectionOfUnions(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassWithCollectionOfUnions(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param unionProperty This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassWithCollectionOfUnions(final @org.jetbrains.annotations.NotNull java.util.List<java.util.Map<java.lang.String, java.lang.Object>> unionProperty) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(unionProperty, "unionProperty is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.util.Map<java.lang.String, java.lang.Object>> getUnionProperty() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "unionProperty", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class)))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionProperty(final @org.jetbrains.annotations.NotNull java.util.List<java.util.Map<java.lang.String, java.lang.Object>> value) {
        software.amazon.jsii.Kernel.set(this, "unionProperty", java.util.Objects.requireNonNull(value, "unionProperty is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithCollections.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ClassWithCollections")
public class ClassWithCollections extends software.amazon.jsii.JsiiObject {

    protected ClassWithCollections(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassWithCollections(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param map This parameter is required.
     * @param array This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassWithCollections(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.String> map, final @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> array) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(map, "map is required"), java.util.Objects.requireNonNull(array, "array is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> createAList() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.ClassWithCollections.class, "createAList", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.String> createAMap() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.ClassWithCollections.class, "createAMap", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> getStaticArray() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.ClassWithCollections.class, "staticArray", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void setStaticArray(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> value) {
        software.amazon.jsii.JsiiObject.jsiiStaticSet(software.amazon.jsii.tests.calculator.ClassWithCollections.class, "staticArray", java.util.Objects.requireNonNull(value, "staticArray is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.String> getStaticMap() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.ClassWithCollections.class, "staticMap", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void setStaticMap(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.String> value) {
        software.amazon.jsii.JsiiObject.jsiiStaticSet(software.amazon.jsii.tests.calculator.ClassWithCollections.class, "staticMap", java.util.Objects.requireNonNull(value, "staticMap is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> getArray() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "array", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setArray(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> value) {
        software.amazon.jsii.Kernel.set(this, "array", java.util.Objects.requireNonNull(value, "array is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.String> getMap() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.Kernel.get(this, "map", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setMap(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.String> value) {
        software.amazon.jsii.Kernel.set(this, "map", java.util.Objects.requireNonNull(value, "map is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithContainerTypes.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ClassWithContainerTypes")
public class ClassWithContainerTypes extends software.amazon.jsii.JsiiObject {

    protected ClassWithContainerTypes(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassWithContainerTypes(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param array This parameter is required.
     * @param record This parameter is required.
     * @param obj This parameter is required.
     * @param props
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassWithContainerTypes(final @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.DummyObj> array, final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> record, final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> obj, final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.ContainerProps props) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(array, "array is required"), java.util.Objects.requireNonNull(record, "record is required"), java.util.Objects.requireNonNull(obj, "obj is required"), props });
    }

    /**
     * @param array This parameter is required.
     * @param record This parameter is required.
     * @param obj This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassWithContainerTypes(final @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.DummyObj> array, final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> record, final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> obj) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(array, "array is required"), java.util.Objects.requireNonNull(record, "record is required"), java.util.Objects.requireNonNull(obj, "obj is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.DummyObj> getArray() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "array", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.DummyObj.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> getObj() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.Kernel.get(this, "obj", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.DummyObj.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> getRecord() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.Kernel.get(this, "record", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.DummyObj.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.ContainerProps getProps() {
        return software.amazon.jsii.Kernel.get(this, "props", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.ContainerProps.class));
    }

    /**
     * A fluent builder for {@link software.amazon.jsii.tests.calculator.ClassWithContainerTypes}.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<software.amazon.jsii.tests.calculator.ClassWithContainerTypes> {
        /**
         * @return a new instance of {@link Builder}.
         * @param array This parameter is required.
         * @param record This parameter is required.
         * @param obj This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create(final java.util.List<software.amazon.jsii.tests.calculator.DummyObj> array, final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> record, final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> obj) {
            return new Builder(array, record, obj);
        }

        private final java.util.List<software.amazon.jsii.tests.calculator.DummyObj> array;
        private final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> record;
        private final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> obj;
        private software.amazon.jsii.tests.calculator.ContainerProps.Builder props;

        private Builder(final java.util.List<software.amazon.jsii.tests.calculator.DummyObj> array, final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> record, final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> obj) {
            this.array = array;
            this.record = record;
            this.obj = obj;
        }

        /**
         * @return {@code this}
         * @param arrayProp This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder arrayProp(final java.util.List<? extends software.amazon.jsii.tests.calculator.DummyObj> arrayProp) {
            this.props().arrayProp(arrayProp);
            return this;
        }

        /**
         * @return {@code this}
         * @param objProp This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder objProp(final java.util.Map<java.lang.String, ? extends software.amazon.jsii.tests.calculator.DummyObj> objProp) {
            this.props().objProp(objProp);
            return this;
        }

        /**
         * @return {@code this}
         * @param recordProp This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder recordProp(final java.util.Map<java.lang.String, ? extends software.amazon.jsii.tests.calculator.DummyObj> recordProp) {
            this.props().recordProp(recordProp);
            return this;
        }

        /**
         * @return a newly built instance of {@link software.amazon.jsii.tests.calculator.ClassWithContainerTypes}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public software.amazon.jsii.tests.calculator.ClassWithContainerTypes build() {
            return new software.amazon.jsii.tests.calculator.ClassWithContainerTypes(
                this.array,
                this.record,
                this.obj,
                this.props != null ? this.props.build() : null
            );
        }

        private software.amazon.jsii.tests.calculator.ContainerProps.Builder props() {
            if (this.props == null) {
                this.props = new software.amazon.jsii.tests.calculator.ContainerProps.Builder();
            }
            return this.props;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithDocs.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * This class has docs.
 * <p>
 * The docs are great. They're a bunch of tags.
 * <p>
 * Example:
 * <p>
 * <blockquote><pre>
 * public void anExample() {
 * }
 * </pre></blockquote>
 * <p>
 * @see <a href="https://aws.amazon.com/">https://aws.amazon.com/</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ClassWithDocs")
public class ClassWithDocs extends software.amazon.jsii.JsiiObject {

    protected ClassWithDocs(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassWithDocs(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassWithDocs() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithJavaReservedWords.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ClassWithJavaReservedWords")
public class ClassWithJavaReservedWords extends software.amazon.jsii.JsiiObject {

    protected ClassWithJavaReservedWords(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassWithJavaReservedWords(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param int This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassWithJavaReservedWords(final @org.jetbrains.annotations.NotNull java.lang.String intValue) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(intValue, "intValue is required") });
    }

    /**
     * @param assert This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String doImport(final @org.jetbrains.annotations.NotNull java.lang.String assertValue) {
        return software.amazon.jsii.Kernel.call(this, "import", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(assertValue, "assertValue is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getIntValue() {
        return software.amazon.jsii.Kernel.get(this, "int", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithMutableObjectLiteralProperty.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ClassWithMutableObjectLiteralProperty")
public class ClassWithMutableObjectLiteralProperty extends software.amazon.jsii.JsiiObject {

    protected ClassWithMutableObjectLiteralProperty(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassWithMutableObjectLiteralProperty(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassWithMutableObjectLiteralProperty() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IMutableObjectLiteral getMutableObject() {
        return software.amazon.jsii.Kernel.get(this, "mutableObject", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IMutableObjectLiteral.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setMutableObject(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IMutableObjectLiteral value) {
        software.amazon.jsii.Kernel.set(this, "mutableObject", java.util.Objects.requireNonNull(value, "mutableObject is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithNestedUnion.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ClassWithNestedUnion")
public class ClassWithNestedUnion extends software.amazon.jsii.JsiiObject {

    protected ClassWithNestedUnion(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassWithNestedUnion(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param unionProperty This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassWithNestedUnion(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> unionProperty) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(unionProperty, "unionProperty is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> getUnionProperty() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "unionProperty", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionProperty(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> value) {
        software.amazon.jsii.Kernel.set(this, "unionProperty", java.util.Objects.requireNonNull(value, "unionProperty is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithPrivateConstructorAndAutomaticProperties.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Class that implements interface properties automatically, but using a private constructor.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ClassWithPrivateConstructorAndAutomaticProperties")
public class ClassWithPrivateConstructorAndAutomaticProperties extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IInterfaceWithProperties {

    protected ClassWithPrivateConstructorAndAutomaticProperties(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassWithPrivateConstructorAndAutomaticProperties(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param readOnlyString This parameter is required.
     * @param readWriteString This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.ClassWithPrivateConstructorAndAutomaticProperties create(final @org.jetbrains.annotations.NotNull java.lang.String readOnlyString, final @org.jetbrains.annotations.NotNull java.lang.String readWriteString) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.ClassWithPrivateConstructorAndAutomaticProperties.class, "create", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.ClassWithPrivateConstructorAndAutomaticProperties.class), new Object[] { java.util.Objects.requireNonNull(readOnlyString, "readOnlyString is required"), java.util.Objects.requireNonNull(readWriteString, "readWriteString is required") });
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getReadOnlyString() {
        return software.amazon.jsii.Kernel.get(this, "readOnlyString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getReadWriteString() {
        return software.amazon.jsii.Kernel.get(this, "readWriteString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setReadWriteString(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "readWriteString", java.util.Objects.requireNonNull(value, "readWriteString is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ConfusingToJackson.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * This tries to confuse Jackson by having overloaded property setters.
 * <p>
 * @see <a href="https://github.com/aws/aws-cdk/issues/4080">https://github.com/aws/aws-cdk/issues/4080</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ConfusingToJackson")
public class ConfusingToJackson extends software.amazon.jsii.JsiiObject {

    protected ConfusingToJackson(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ConfusingToJackson(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.ConfusingToJackson makeInstance() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.ConfusingToJackson.class, "makeInstance", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.ConfusingToJackson.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.ConfusingToJacksonStruct makeStructInstance() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.ConfusingToJackson.class, "makeStructInstance", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.ConfusingToJacksonStruct.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.lang.Object getUnionProperty() {
        return software.amazon.jsii.Kernel.get(this, "unionProperty", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionProperty(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.lib.IFriendly value) {
        software.amazon.jsii.Kernel.set(this, "unionProperty", value);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnionProperty(final @org.jetbrains.annotations.Nullable java.util.List<java.lang.Object> value) {
        software.amazon.jsii.Kernel.set(this, "unionProperty", value);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ConfusingToJacksonStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ConfusingToJacksonStruct")
@software.amazon.jsii.Jsii.Proxy(ConfusingToJacksonStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface ConfusingToJacksonStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Object getUnionProperty() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link ConfusingToJacksonStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ConfusingToJacksonStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<ConfusingToJacksonStruct> {
        java.lang.Object unionProperty;

        /**
         * Sets the value of {@link ConfusingToJacksonStruct#getUnionProperty}
         * @param unionProperty the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder unionProperty(software.amazon.jsii.tests.calculator.lib.IFriendly unionProperty) {
            this.unionProperty = unionProperty;
            return this;
        }

        /**
         * Sets the value of {@link ConfusingToJacksonStruct#getUnionProperty}
         * @param unionProperty the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder unionProperty(java.util.List<? extends java.lang.Object> unionProperty) {
            this.unionProperty = unionProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ConfusingToJacksonStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public ConfusingToJacksonStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ConfusingToJacksonStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ConfusingToJacksonStruct {
        private final java.lang.Object unionProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.unionProperty = software.amazon.jsii.Kernel.get(this, "unionProperty", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.unionProperty = builder.unionProperty;
        }

        @Override
        public final java.lang.Object getUnionProperty() {
            return this.unionProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getUnionProperty() != null) {
                data.set("unionProperty", om.valueToTree(this.getUnionProperty()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.ConfusingToJacksonStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ConfusingToJacksonStruct.Jsii$Proxy that = (ConfusingToJacksonStruct.Jsii$Proxy) o;

            return this.unionProperty != null ? this.unionProperty.equals(that.unionProperty) : that.unionProperty == null;
        }

        @Override
        public final int hashCode() {
            int result = this.unionProperty != null ? this.unionProperty.hashCode() : 0;
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ConstructorPassesThisOut.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ConstructorPassesThisOut")
public class ConstructorPassesThisOut extends software.amazon.jsii.JsiiObject {

    protected ConstructorPassesThisOut(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ConstructorPassesThisOut(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param consumer This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ConstructorPassesThisOut(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.PartiallyInitializedThisConsumer consumer) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(consumer, "consumer is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Constructors.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Constructors")
public class Constructors extends software.amazon.jsii.JsiiObject {

    protected Constructors(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Constructors(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Constructors() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IPublicInterface hiddenInterface() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.Constructors.class, "hiddenInterface", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IPublicInterface.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.IPublicInterface> hiddenInterfaces() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.Constructors.class, "hiddenInterfaces", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IPublicInterface.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.IPublicInterface> hiddenSubInterfaces() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.Constructors.class, "hiddenSubInterfaces", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IPublicInterface.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.PublicClass makeClass() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.Constructors.class, "makeClass", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.PublicClass.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IPublicInterface makeInterface() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.Constructors.class, "makeInterface", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IPublicInterface.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IPublicInterface2 makeInterface2() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.Constructors.class, "makeInterface2", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IPublicInterface2.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.IPublicInterface> makeInterfaces() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.Constructors.class, "makeInterfaces", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IPublicInterface.class))));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ConsumePureInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ConsumePureInterface")
public class ConsumePureInterface extends software.amazon.jsii.JsiiObject {

    protected ConsumePureInterface(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ConsumePureInterface(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param delegate This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ConsumePureInterface(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IStructReturningDelegate delegate) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(delegate, "delegate is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StructB workItBaby() {
        return software.amazon.jsii.Kernel.call(this, "workItBaby", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StructB.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ConsumerCanRingBell.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Test calling back to consumers that implement interfaces.
 * <p>
 * Check that if a JSII consumer implements IConsumerWithInterfaceParam, they can call
 * the method on the argument that they're passed...
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ConsumerCanRingBell")
public class ConsumerCanRingBell extends software.amazon.jsii.JsiiObject {

    protected ConsumerCanRingBell(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ConsumerCanRingBell(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ConsumerCanRingBell() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * ...if the interface is implemented using an object literal.
     * <p>
     * Returns whether the bell was rung.
     * <p>
     * @param ringer This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean staticImplementedByObjectLiteral(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IBellRinger ringer) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.ConsumerCanRingBell.class, "staticImplementedByObjectLiteral", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(ringer, "ringer is required") });
    }

    /**
     * ...if the interface is implemented using a private class.
     * <p>
     * Return whether the bell was rung.
     * <p>
     * @param ringer This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean staticImplementedByPrivateClass(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IBellRinger ringer) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.ConsumerCanRingBell.class, "staticImplementedByPrivateClass", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(ringer, "ringer is required") });
    }

    /**
     * ...if the interface is implemented using a public class.
     * <p>
     * Return whether the bell was rung.
     * <p>
     * @param ringer This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean staticImplementedByPublicClass(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IBellRinger ringer) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.ConsumerCanRingBell.class, "staticImplementedByPublicClass", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(ringer, "ringer is required") });
    }

    /**
     * If the parameter is a concrete class instead of an interface.
     * <p>
     * Return whether the bell was rung.
     * <p>
     * @param ringer This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean staticWhenTypedAsClass(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IConcreteBellRinger ringer) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.ConsumerCanRingBell.class, "staticWhenTypedAsClass", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(ringer, "ringer is required") });
    }

    /**
     * ...if the interface is implemented using an object literal.
     * <p>
     * Returns whether the bell was rung.
     * <p>
     * @param ringer This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean implementedByObjectLiteral(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IBellRinger ringer) {
        return software.amazon.jsii.Kernel.call(this, "implementedByObjectLiteral", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(ringer, "ringer is required") });
    }

    /**
     * ...if the interface is implemented using a private class.
     * <p>
     * Return whether the bell was rung.
     * <p>
     * @param ringer This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean implementedByPrivateClass(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IBellRinger ringer) {
        return software.amazon.jsii.Kernel.call(this, "implementedByPrivateClass", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(ringer, "ringer is required") });
    }

    /**
     * ...if the interface is implemented using a public class.
     * <p>
     * Return whether the bell was rung.
     * <p>
     * @param ringer This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean implementedByPublicClass(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IBellRinger ringer) {
        return software.amazon.jsii.Kernel.call(this, "implementedByPublicClass", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(ringer, "ringer is required") });
    }

    /**
     * If the parameter is a concrete class instead of an interface.
     * <p>
     * Return whether the bell was rung.
     * <p>
     * @param ringer This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean whenTypedAsClass(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IConcreteBellRinger ringer) {
        return software.amazon.jsii.Kernel.call(this, "whenTypedAsClass", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(ringer, "ringer is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ConsumersOfThisCrazyTypeSystem.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ConsumersOfThisCrazyTypeSystem")
public class ConsumersOfThisCrazyTypeSystem extends software.amazon.jsii.JsiiObject {

    protected ConsumersOfThisCrazyTypeSystem(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ConsumersOfThisCrazyTypeSystem(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ConsumersOfThisCrazyTypeSystem() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param obj This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String consumeAnotherPublicInterface(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IAnotherPublicInterface obj) {
        return software.amazon.jsii.Kernel.call(this, "consumeAnotherPublicInterface", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(obj, "obj is required") });
    }

    /**
     * @param obj This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Object consumeNonInternalInterface(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.INonInternalInterface obj) {
        return software.amazon.jsii.Kernel.call(this, "consumeNonInternalInterface", software.amazon.jsii.NativeType.forClass(java.lang.Object.class), new Object[] { java.util.Objects.requireNonNull(obj, "obj is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ContainerProps.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ContainerProps")
@software.amazon.jsii.Jsii.Proxy(ContainerProps.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface ContainerProps extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.DummyObj> getArrayProp();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> getObjProp();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> getRecordProp();

    /**
     * @return a {@link Builder} of {@link ContainerProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ContainerProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<ContainerProps> {
        java.util.List<software.amazon.jsii.tests.calculator.DummyObj> arrayProp;
        java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> objProp;
        java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> recordProp;

        /**
         * Sets the value of {@link ContainerProps#getArrayProp}
         * @param arrayProp the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @SuppressWarnings("unchecked")
        public Builder arrayProp(java.util.List<? extends software.amazon.jsii.tests.calculator.DummyObj> arrayProp) {
            this.arrayProp = (java.util.List<software.amazon.jsii.tests.calculator.DummyObj>)arrayProp;
            return this;
        }

        /**
         * Sets the value of {@link ContainerProps#getObjProp}
         * @param objProp the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @SuppressWarnings("unchecked")
        public Builder objProp(java.util.Map<java.lang.String, ? extends software.amazon.jsii.tests.calculator.DummyObj> objProp) {
            this.objProp = (java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj>)objProp;
            return this;
        }

        /**
         * Sets the value of {@link ContainerProps#getRecordProp}
         * @param recordProp the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @SuppressWarnings("unchecked")
        public Builder recordProp(java.util.Map<java.lang.String, ? extends software.amazon.jsii.tests.calculator.DummyObj> recordProp) {
            this.recordProp = (java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj>)recordProp;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ContainerProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public ContainerProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ContainerProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ContainerProps {
        private final java.util.List<software.amazon.jsii.tests.calculator.DummyObj> arrayProp;
        private final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> objProp;
        private final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> recordProp;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.arrayProp = software.amazon.jsii.Kernel.get(this, "arrayProp", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.DummyObj.class)));
            this.objProp = software.amazon.jsii.Kernel.get(this, "objProp", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.DummyObj.class)));
            this.recordProp = software.amazon.jsii.Kernel.get(this, "recordProp", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.DummyObj.class)));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        @SuppressWarnings("unchecked")
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.arrayProp = (java.util.List<software.amazon.jsii.tests.calculator.DummyObj>)java.util.Objects.requireNonNull(builder.arrayProp, "arrayProp is required");
            this.objProp = (java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj>)java.util.Objects.requireNonNull(builder.objProp, "objProp is required");
            this.recordProp = (java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj>)java.util.Objects.requireNonNull(builder.recordProp, "recordProp is required");
        }

        @Override
        public final java.util.List<software.amazon.jsii.tests.calculator.DummyObj> getArrayProp() {
            return this.arrayProp;
        }

        @Override
        public final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> getObjProp() {
            return this.objProp;
        }

        @Override
        public final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.DummyObj> getRecordProp() {
            return this.recordProp;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("arrayProp", om.valueToTree(this.getArrayProp()));
            data.set("objProp", om.valueToTree(this.getObjProp()));
            data.set("recordProp", om.valueToTree(this.getRecordProp()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.ContainerProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ContainerProps.Jsii$Proxy that = (ContainerProps.Jsii$Proxy) o;

            if (!arrayProp.equals(that.arrayProp)) return false;
            if (!objProp.equals(that.objProp)) return false;
            return this.recordProp.equals(that.recordProp);
        }

        @Override
        public final int hashCode() {
            int result = this.arrayProp.hashCode();
            result = 31 * result + (this.objProp.hashCode());
            result = 31 * result + (this.recordProp.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DataRenderer.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Verifies proper type handling through dynamic overrides.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DataRenderer")
public class DataRenderer extends software.amazon.jsii.JsiiObject {

    protected DataRenderer(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected DataRenderer(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DataRenderer() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param data
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String render(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.lib.MyFirstStruct data) {
        return software.amazon.jsii.Kernel.call(this, "render", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { data });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String render() {
        return software.amazon.jsii.Kernel.call(this, "render", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * @param data This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String renderArbitrary(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> data) {
        return software.amazon.jsii.Kernel.call(this, "renderArbitrary", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(data, "data is required") });
    }

    /**
     * @param map This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String renderMap(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> map) {
        return software.amazon.jsii.Kernel.call(this, "renderMap", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(map, "map is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Default.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * A class named "Default".
 * <p>
 * @see <a href="https://github.com/aws/jsii/issues/2637">https://github.com/aws/jsii/issues/2637</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Default")
public class Default extends software.amazon.jsii.JsiiObject {

    protected Default(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Default(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Default() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void pleaseCompile() {
        software.amazon.jsii.Kernel.call(this, "pleaseCompile", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DefaultedConstructorArgument.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DefaultedConstructorArgument")
public class DefaultedConstructorArgument extends software.amazon.jsii.JsiiObject {

    protected DefaultedConstructorArgument(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected DefaultedConstructorArgument(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param arg1
     * @param arg2
     * @param arg3
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DefaultedConstructorArgument(final @org.jetbrains.annotations.Nullable java.lang.Number arg1, final @org.jetbrains.annotations.Nullable java.lang.String arg2, final @org.jetbrains.annotations.Nullable java.time.Instant arg3) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { arg1, arg2, arg3 });
    }

    /**
     * @param arg1
     * @param arg2
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DefaultedConstructorArgument(final @org.jetbrains.annotations.Nullable java.lang.Number arg1, final @org.jetbrains.annotations.Nullable java.lang.String arg2) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { arg1, arg2 });
    }

    /**
     * @param arg1
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DefaultedConstructorArgument(final @org.jetbrains.annotations.Nullable java.lang.Number arg1) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { arg1 });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DefaultedConstructorArgument() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getArg1() {
        return software.amazon.jsii.Kernel.get(this, "arg1", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.time.Instant getArg3() {
        return software.amazon.jsii.Kernel.get(this, "arg3", software.amazon.jsii.NativeType.forClass(java.time.Instant.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.lang.String getArg2() {
        return software.amazon.jsii.Kernel.get(this, "arg2", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Demonstrate982.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * <ol><li></li></ol>
 * <p>
 * call #takeThis() -&gt; An ObjectRef will be provisioned for the value (it'll be re-used!)
 * 2. call #takeThisToo() -&gt; The ObjectRef from before will need to be down-cased to the ParentStruct982 type
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Demonstrate982")
public class Demonstrate982 extends software.amazon.jsii.JsiiObject {

    protected Demonstrate982(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Demonstrate982(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Demonstrate982() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * It's dangerous to go alone!
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.ChildStruct982 takeThis() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.Demonstrate982.class, "takeThis", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.ChildStruct982.class));
    }

    /**
     * It's dangerous to go alone!
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.ParentStruct982 takeThisToo() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.Demonstrate982.class, "takeThisToo", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.ParentStruct982.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DeprecatedClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * @deprecated a pretty boring class
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DeprecatedClass")
public class DeprecatedClass extends software.amazon.jsii.JsiiObject {

    protected DeprecatedClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected DeprecatedClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @deprecated this constructor is "just" okay
     * @param readonlyString This parameter is required.
     * @param mutableNumber
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public DeprecatedClass(final @org.jetbrains.annotations.NotNull java.lang.String readonlyString, final @org.jetbrains.annotations.Nullable java.lang.Number mutableNumber) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(readonlyString, "readonlyString is required"), mutableNumber });
    }

    /**
     * @deprecated this constructor is "just" okay
     * @param readonlyString This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public DeprecatedClass(final @org.jetbrains.annotations.NotNull java.lang.String readonlyString) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(readonlyString, "readonlyString is required") });
    }

    /**
     * @deprecated it was a bad idea
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public void method() {
        software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
    }

    /**
     * @deprecated this is not always "wazoo", be ready to be disappointed
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public @org.jetbrains.annotations.NotNull java.lang.String getReadonlyProperty() {
        return software.amazon.jsii.Kernel.get(this, "readonlyProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * @deprecated shouldn't have been mutable
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
        return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * @deprecated shouldn't have been mutable
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
        software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DeprecatedEnum.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * @deprecated your deprecated selection of bad options
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DeprecatedEnum")
public enum DeprecatedEnum {
    /**
     * @deprecated option A is not great
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    OPTION_A,
    /**
     * @deprecated option B is kinda bad, too
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    OPTION_B,
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DeprecatedStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * @deprecated it just wraps a string
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DeprecatedStruct")
@software.amazon.jsii.Jsii.Proxy(DeprecatedStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface DeprecatedStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     * @deprecated well, yeah
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @org.jetbrains.annotations.NotNull java.lang.String getReadonlyProperty();

    /**
     * @return a {@link Builder} of {@link DeprecatedStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link DeprecatedStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public static final class Builder implements software.amazon.jsii.Builder<DeprecatedStruct> {
        java.lang.String readonlyProperty;

        /**
         * Sets the value of {@link DeprecatedStruct#getReadonlyProperty}
         * @param readonlyProperty the value to be set. This parameter is required.
         * @return {@code this}
         * @deprecated well, yeah
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder readonlyProperty(java.lang.String readonlyProperty) {
            this.readonlyProperty = readonlyProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link DeprecatedStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public DeprecatedStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link DeprecatedStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements DeprecatedStruct {
        private final java.lang.String readonlyProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.readonlyProperty = software.amazon.jsii.Kernel.get(this, "readonlyProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.readonlyProperty = java.util.Objects.requireNonNull(builder.readonlyProperty, "readonlyProperty is required");
        }

        @Override
        public final java.lang.String getReadonlyProperty() {
            return this.readonlyProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("readonlyProperty", om.valueToTree(this.getReadonlyProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.DeprecatedStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DeprecatedStruct.Jsii$Proxy that = (DeprecatedStruct.Jsii$Proxy) o;

            return this.readonlyProperty.equals(that.readonlyProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.readonlyProperty.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DerivedStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * A struct which derives from another struct.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DerivedStruct")
@software.amazon.jsii.Jsii.Proxy(DerivedStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface DerivedStruct extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.lib.MyFirstStruct {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.time.Instant getAnotherRequired();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Boolean getBool();

    /**
     * An example of a non primitive property.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.DoubleTrouble getNonPrimitive();

    /**
     * This is optional.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.lib.NumericValue> getAnotherOptional() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Object getOptionalAny() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.util.List<java.lang.String> getOptionalArray() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link DerivedStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link DerivedStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<DerivedStruct> {
        java.time.Instant anotherRequired;
        java.lang.Boolean bool;
        software.amazon.jsii.tests.calculator.DoubleTrouble nonPrimitive;
        java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.lib.NumericValue> anotherOptional;
        java.lang.Object optionalAny;
        java.util.List<java.lang.String> optionalArray;
        java.lang.Number anumber;
        java.lang.String astring;
        java.util.List<java.lang.String> firstOptional;

        /**
         * Sets the value of {@link DerivedStruct#getAnotherRequired}
         * @param anotherRequired the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder anotherRequired(java.time.Instant anotherRequired) {
            this.anotherRequired = anotherRequired;
            return this;
        }

        /**
         * Sets the value of {@link DerivedStruct#getBool}
         * @param bool the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bool(java.lang.Boolean bool) {
            this.bool = bool;
            return this;
        }

        /**
         * Sets the value of {@link DerivedStruct#getNonPrimitive}
         * @param nonPrimitive An example of a non primitive property. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder nonPrimitive(software.amazon.jsii.tests.calculator.DoubleTrouble nonPrimitive) {
            this.nonPrimitive = nonPrimitive;
            return this;
        }

        /**
         * Sets the value of {@link DerivedStruct#getAnotherOptional}
         * @param anotherOptional This is optional.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @SuppressWarnings("unchecked")
        public Builder anotherOptional(java.util.Map<java.lang.String, ? extends software.amazon.jsii.tests.calculator.lib.NumericValue> anotherOptional) {
            this.anotherOptional = (java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.lib.NumericValue>)anotherOptional;
            return this;
        }

        /**
         * Sets the value of {@link DerivedStruct#getOptionalAny}
         * @param optionalAny the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder optionalAny(java.lang.Object optionalAny) {
            this.optionalAny = optionalAny;
            return this;
        }

        /**
         * Sets the value of {@link DerivedStruct#getOptionalArray}
         * @param optionalArray the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder optionalArray(java.util.List<java.lang.String> optionalArray) {
            this.optionalArray = optionalArray;
            return this;
        }

        /**
         * Sets the value of {@link DerivedStruct#getAnumber}
         * @param anumber An awesome number value. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder anumber(java.lang.Number anumber) {
            this.anumber = anumber;
            return this;
        }

        /**
         * Sets the value of {@link DerivedStruct#getAstring}
         * @param astring A string value. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder astring(java.lang.String astring) {
            this.astring = astring;
            return this;
        }

        /**
         * Sets the value of {@link DerivedStruct#getFirstOptional}
         * @param firstOptional the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder firstOptional(java.util.List<java.lang.String> firstOptional) {
            this.firstOptional = firstOptional;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link DerivedStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public DerivedStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link DerivedStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements DerivedStruct {
        private final java.time.Instant anotherRequired;
        private final java.lang.Boolean bool;
        private final software.amazon.jsii.tests.calculator.DoubleTrouble nonPrimitive;
        private final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.lib.NumericValue> anotherOptional;
        private final java.lang.Object optionalAny;
        private final java.util.List<java.lang.String> optionalArray;
        private final java.lang.Number anumber;
        private final java.lang.String astring;
        private final java.util.List<java.lang.String> firstOptional;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.anotherRequired = software.amazon.jsii.Kernel.get(this, "anotherRequired", software.amazon.jsii.NativeType.forClass(java.time.Instant.class));
            this.bool = software.amazon.jsii.Kernel.get(this, "bool", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
            this.nonPrimitive = software.amazon.jsii.Kernel.get(this, "nonPrimitive", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.DoubleTrouble.class));
            this.anotherOptional = software.amazon.jsii.Kernel.get(this, "anotherOptional", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class)));
            this.optionalAny = software.amazon.jsii.Kernel.get(this, "optionalAny", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
            this.optionalArray = software.amazon.jsii.Kernel.get(this, "optionalArray", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class)));
            this.anumber = software.amazon.jsii.Kernel.get(this, "anumber", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
            this.astring = software.amazon.jsii.Kernel.get(this, "astring", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.firstOptional = software.amazon.jsii.Kernel.get(this, "firstOptional", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class)));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        @SuppressWarnings("unchecked")
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.anotherRequired = java.util.Objects.requireNonNull(builder.anotherRequired, "anotherRequired is required");
            this.bool = java.util.Objects.requireNonNull(builder.bool, "bool is required");
            this.nonPrimitive = java.util.Objects.requireNonNull(builder.nonPrimitive, "nonPrimitive is required");
            this.anotherOptional = (java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.lib.NumericValue>)builder.anotherOptional;
            this.optionalAny = builder.optionalAny;
            this.optionalArray = builder.optionalArray;
            this.anumber = java.util.Objects.requireNonNull(builder.anumber, "anumber is required");
            this.astring = java.util.Objects.requireNonNull(builder.astring, "astring is required");
            this.firstOptional = builder.firstOptional;
        }

        @Override
        public final java.time.Instant getAnotherRequired() {
            return this.anotherRequired;
        }

        @Override
        public final java.lang.Boolean getBool() {
            return this.bool;
        }

        @Override
        public final software.amazon.jsii.tests.calculator.DoubleTrouble getNonPrimitive() {
            return this.nonPrimitive;
        }

        @Override
        public final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.lib.NumericValue> getAnotherOptional() {
            return this.anotherOptional;
        }

        @Override
        public final java.lang.Object getOptionalAny() {
            return this.optionalAny;
        }

        @Override
        public final java.util.List<java.lang.String> getOptionalArray() {
            return this.optionalArray;
        }

        @Override
        public final java.lang.Number getAnumber() {
            return this.anumber;
        }

        @Override
        public final java.lang.String getAstring() {
            return this.astring;
        }

        @Override
        public final java.util.List<java.lang.String> getFirstOptional() {
            return this.firstOptional;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("anotherRequired", om.valueToTree(this.getAnotherRequired()));
            data.set("bool", om.valueToTree(this.getBool()));
            data.set("nonPrimitive", om.valueToTree(this.getNonPrimitive()));
            if (this.getAnotherOptional() != null) {
                data.set("anotherOptional", om.valueToTree(this.getAnotherOptional()));
            }
            if (this.getOptionalAny() != null) {
                data.set("optionalAny", om.valueToTree(this.getOptionalAny()));
            }
            if (this.getOptionalArray() != null) {
                data.set("optionalArray", om.valueToTree(this.getOptionalArray()));
            }
            data.set("anumber", om.valueToTree(this.getAnumber()));
            data.set("astring", om.valueToTree(this.getAstring()));
            if (this.getFirstOptional() != null) {
                data.set("firstOptional", om.valueToTree(this.getFirstOptional()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.DerivedStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DerivedStruct.Jsii$Proxy that = (DerivedStruct.Jsii$Proxy) o;

            if (!anotherRequired.equals(that.anotherRequired)) return false;
            if (!bool.equals(that.bool)) return false;
            if (!nonPrimitive.equals(that.nonPrimitive)) return false;
            if (this.anotherOptional != null ? !this.anotherOptional.equals(that.anotherOptional) : that.anotherOptional != null) return false;
            if (this.optionalAny != null ? !this.optionalAny.equals(that.optionalAny) : that.optionalAny != null) return false;
            if (this.optionalArray != null ? !this.optionalArray.equals(that.optionalArray) : that.optionalArray != null) return false;
            if (!anumber.equals(that.anumber)) return false;
            if (!astring.equals(that.astring)) return false;
            return this.firstOptional != null ? this.firstOptional.equals(that.firstOptional) : that.firstOptional == null;
        }

        @Override
        public final int hashCode() {
            int result = this.anotherRequired.hashCode();
            result = 31 * result + (this.bool.hashCode());
            result = 31 * result + (this.nonPrimitive.hashCode());
            result = 31 * result + (this.anotherOptional != null ? this.anotherOptional.hashCode() : 0);
            result = 31 * result + (this.optionalAny != null ? this.optionalAny.hashCode() : 0);
            result = 31 * result + (this.optionalArray != null ? this.optionalArray.hashCode() : 0);
            result = 31 * result + (this.anumber.hashCode());
            result = 31 * result + (this.astring.hashCode());
            result = 31 * result + (this.firstOptional != null ? this.firstOptional.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DiamondBottom.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DiamondBottom")
@software.amazon.jsii.Jsii.Proxy(DiamondBottom.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface DiamondBottom extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.lib.DiamondLeft, software.amazon.jsii.tests.calculator.lib.DiamondRight {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.time.Instant getBottom() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    @Override
    default @org.jetbrains.annotations.Nullable java.lang.String getHoistedTop() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link DiamondBottom}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link DiamondBottom}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<DiamondBottom> {
        java.time.Instant bottom;
        java.lang.String hoistedTop;
        java.lang.Number left;
        java.lang.Boolean right;

        /**
         * Sets the value of {@link DiamondBottom#getBottom}
         * @param bottom the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bottom(java.time.Instant bottom) {
            this.bottom = bottom;
            return this;
        }

        /**
         * Sets the value of {@link DiamondBottom#getHoistedTop}
         * @param hoistedTop the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder hoistedTop(java.lang.String hoistedTop) {
            this.hoistedTop = hoistedTop;
            return this;
        }

        /**
         * Sets the value of {@link DiamondBottom#getLeft}
         * @param left the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder left(java.lang.Number left) {
            this.left = left;
            return this;
        }

        /**
         * Sets the value of {@link DiamondBottom#getRight}
         * @param right the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public Builder right(java.lang.Boolean right) {
            this.right = right;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link DiamondBottom}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public DiamondBottom build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link DiamondBottom}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements DiamondBottom {
        private final java.time.Instant bottom;
        private final java.lang.String hoistedTop;
        private final java.lang.Number left;
        private final java.lang.Boolean right;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.bottom = software.amazon.jsii.Kernel.get(this, "bottom", software.amazon.jsii.NativeType.forClass(java.time.Instant.class));
            this.hoistedTop = software.amazon.jsii.Kernel.get(this, "hoistedTop", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.left = software.amazon.jsii.Kernel.get(this, "left", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
            this.right = software.amazon.jsii.Kernel.get(this, "right", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.bottom = builder.bottom;
            this.hoistedTop = builder.hoistedTop;
            this.left = builder.left;
            this.right = builder.right;
        }

        @Override
        public final java.time.Instant getBottom() {
            return this.bottom;
        }

        @Override
        public final java.lang.String getHoistedTop() {
            return this.hoistedTop;
        }

        @Override
        public final java.lang.Number getLeft() {
            return this.left;
        }

        @Override
        public final java.lang.Boolean getRight() {
            return this.right;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getBottom() != null) {
                data.set("bottom", om.valueToTree(this.getBottom()));
            }
            if (this.getHoistedTop() != null) {
                data.set("hoistedTop", om.valueToTree(this.getHoistedTop()));
            }
            if (this.getLeft() != null) {
                data.set("left", om.valueToTree(this.getLeft()));
            }
            if (this.getRight() != null) {
                data.set("right", om.valueToTree(this.getRight()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.DiamondBottom"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DiamondBottom.Jsii$Proxy that = (DiamondBottom.Jsii$Proxy) o;

            if (this.bottom != null ? !this.bottom.equals(that.bottom) : that.bottom != null) return false;
            if (this.hoistedTop != null ? !this.hoistedTop.equals(that.hoistedTop) : that.hoistedTop != null) return false;
            if (this.left != null ? !this.left.equals(that.left) : that.left != null) return false;
            return this.right != null ? this.right.equals(that.right) : that.right == null;
        }

        @Override
        public final int hashCode() {
            int result = this.bottom != null ? this.bottom.hashCode() : 0;
            result = 31 * result + (this.hoistedTop != null ? this.hoistedTop.hashCode() : 0);
            result = 31 * result + (this.left != null ? this.left.hashCode() : 0);
            result = 31 * result + (this.right != null ? this.right.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DiamondInheritanceBaseLevelStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DiamondInheritanceBaseLevelStruct")
@software.amazon.jsii.Jsii.Proxy(DiamondInheritanceBaseLevelStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface DiamondInheritanceBaseLevelStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getBaseLevelProperty();

    /**
     * @return a {@link Builder} of {@link DiamondInheritanceBaseLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link DiamondInheritanceBaseLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<DiamondInheritanceBaseLevelStruct> {
        java.lang.String baseLevelProperty;

        /**
         * Sets the value of {@link DiamondInheritanceBaseLevelStruct#getBaseLevelProperty}
         * @param baseLevelProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder baseLevelProperty(java.lang.String baseLevelProperty) {
            this.baseLevelProperty = baseLevelProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link DiamondInheritanceBaseLevelStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public DiamondInheritanceBaseLevelStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link DiamondInheritanceBaseLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements DiamondInheritanceBaseLevelStruct {
        private final java.lang.String baseLevelProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.baseLevelProperty = software.amazon.jsii.Kernel.get(this, "baseLevelProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.baseLevelProperty = java.util.Objects.requireNonNull(builder.baseLevelProperty, "baseLevelProperty is required");
        }

        @Override
        public final java.lang.String getBaseLevelProperty() {
            return this.baseLevelProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("baseLevelProperty", om.valueToTree(this.getBaseLevelProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.DiamondInheritanceBaseLevelStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DiamondInheritanceBaseLevelStruct.Jsii$Proxy that = (DiamondInheritanceBaseLevelStruct.Jsii$Proxy) o;

            return this.baseLevelProperty.equals(that.baseLevelProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.baseLevelProperty.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DiamondInheritanceFirstMidLevelStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DiamondInheritanceFirstMidLevelStruct")
@software.amazon.jsii.Jsii.Proxy(DiamondInheritanceFirstMidLevelStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface DiamondInheritanceFirstMidLevelStruct extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.DiamondInheritanceBaseLevelStruct {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getFirstMidLevelProperty();

    /**
     * @return a {@link Builder} of {@link DiamondInheritanceFirstMidLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link DiamondInheritanceFirstMidLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<DiamondInheritanceFirstMidLevelStruct> {
        java.lang.String firstMidLevelProperty;
        java.lang.String baseLevelProperty;

        /**
         * Sets the value of {@link DiamondInheritanceFirstMidLevelStruct#getFirstMidLevelProperty}
         * @param firstMidLevelProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder firstMidLevelProperty(java.lang.String firstMidLevelProperty) {
            this.firstMidLevelProperty = firstMidLevelProperty;
            return this;
        }

        /**
         * Sets the value of {@link DiamondInheritanceFirstMidLevelStruct#getBaseLevelProperty}
         * @param baseLevelProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder baseLevelProperty(java.lang.String baseLevelProperty) {
            this.baseLevelProperty = baseLevelProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link DiamondInheritanceFirstMidLevelStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public DiamondInheritanceFirstMidLevelStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link DiamondInheritanceFirstMidLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements DiamondInheritanceFirstMidLevelStruct {
        private final java.lang.String firstMidLevelProperty;
        private final java.lang.String baseLevelProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.firstMidLevelProperty = software.amazon.jsii.Kernel.get(this, "firstMidLevelProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.baseLevelProperty = software.amazon.jsii.Kernel.get(this, "baseLevelProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.firstMidLevelProperty = java.util.Objects.requireNonNull(builder.firstMidLevelProperty, "firstMidLevelProperty is required");
            this.baseLevelProperty = java.util.Objects.requireNonNull(builder.baseLevelProperty, "baseLevelProperty is required");
        }

        @Override
        public final java.lang.String getFirstMidLevelProperty() {
            return this.firstMidLevelProperty;
        }

        @Override
        public final java.lang.String getBaseLevelProperty() {
            return this.baseLevelProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("firstMidLevelProperty", om.valueToTree(this.getFirstMidLevelProperty()));
            data.set("baseLevelProperty", om.valueToTree(this.getBaseLevelProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.DiamondInheritanceFirstMidLevelStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DiamondInheritanceFirstMidLevelStruct.Jsii$Proxy that = (DiamondInheritanceFirstMidLevelStruct.Jsii$Proxy) o;

            if (!firstMidLevelProperty.equals(that.firstMidLevelProperty)) return false;
            return this.baseLevelProperty.equals(that.baseLevelProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.firstMidLevelProperty.hashCode();
            result = 31 * result + (this.baseLevelProperty.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DiamondInheritanceSecondMidLevelStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DiamondInheritanceSecondMidLevelStruct")
@software.amazon.jsii.Jsii.Proxy(DiamondInheritanceSecondMidLevelStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface DiamondInheritanceSecondMidLevelStruct extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.DiamondInheritanceBaseLevelStruct {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getSecondMidLevelProperty();

    /**
     * @return a {@link Builder} of {@link DiamondInheritanceSecondMidLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link DiamondInheritanceSecondMidLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<DiamondInheritanceSecondMidLevelStruct> {
        java.lang.String secondMidLevelProperty;
        java.lang.String baseLevelProperty;

        /**
         * Sets the value of {@link DiamondInheritanceSecondMidLevelStruct#getSecondMidLevelProperty}
         * @param secondMidLevelProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder secondMidLevelProperty(java.lang.String secondMidLevelProperty) {
            this.secondMidLevelProperty = secondMidLevelProperty;
            return this;
        }

        /**
         * Sets the value of {@link DiamondInheritanceSecondMidLevelStruct#getBaseLevelProperty}
         * @param baseLevelProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder baseLevelProperty(java.lang.String baseLevelProperty) {
            this.baseLevelProperty = baseLevelProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link DiamondInheritanceSecondMidLevelStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public DiamondInheritanceSecondMidLevelStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link DiamondInheritanceSecondMidLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements DiamondInheritanceSecondMidLevelStruct {
        private final java.lang.String secondMidLevelProperty;
        private final java.lang.String baseLevelProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.secondMidLevelProperty = software.amazon.jsii.Kernel.get(this, "secondMidLevelProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.baseLevelProperty = software.amazon.jsii.Kernel.get(this, "baseLevelProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.secondMidLevelProperty = java.util.Objects.requireNonNull(builder.secondMidLevelProperty, "secondMidLevelProperty is required");
            this.baseLevelProperty = java.util.Objects.requireNonNull(builder.baseLevelProperty, "baseLevelProperty is required");
        }

        @Override
        public final java.lang.String getSecondMidLevelProperty() {
            return this.secondMidLevelProperty;
        }

        @Override
        public final java.lang.String getBaseLevelProperty() {
            return this.baseLevelProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("secondMidLevelProperty", om.valueToTree(this.getSecondMidLevelProperty()));
            data.set("baseLevelProperty", om.valueToTree(this.getBaseLevelProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.DiamondInheritanceSecondMidLevelStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DiamondInheritanceSecondMidLevelStruct.Jsii$Proxy that = (DiamondInheritanceSecondMidLevelStruct.Jsii$Proxy) o;

            if (!secondMidLevelProperty.equals(that.secondMidLevelProperty)) return false;
            return this.baseLevelProperty.equals(that.baseLevelProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.secondMidLevelProperty.hashCode();
            result = 31 * result + (this.baseLevelProperty.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DiamondInheritanceTopLevelStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DiamondInheritanceTopLevelStruct")
@software.amazon.jsii.Jsii.Proxy(DiamondInheritanceTopLevelStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface DiamondInheritanceTopLevelStruct extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.DiamondInheritanceFirstMidLevelStruct, software.amazon.jsii.tests.calculator.DiamondInheritanceSecondMidLevelStruct {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getTopLevelProperty();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getBaseLevelProperty();

    /**
     * @return a {@link Builder} of {@link DiamondInheritanceTopLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link DiamondInheritanceTopLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<DiamondInheritanceTopLevelStruct> {
        java.lang.String topLevelProperty;
        java.lang.String firstMidLevelProperty;
        java.lang.String baseLevelProperty;
        java.lang.String secondMidLevelProperty;

        /**
         * Sets the value of {@link DiamondInheritanceTopLevelStruct#getTopLevelProperty}
         * @param topLevelProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder topLevelProperty(java.lang.String topLevelProperty) {
            this.topLevelProperty = topLevelProperty;
            return this;
        }

        /**
         * Sets the value of {@link DiamondInheritanceTopLevelStruct#getFirstMidLevelProperty}
         * @param firstMidLevelProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder firstMidLevelProperty(java.lang.String firstMidLevelProperty) {
            this.firstMidLevelProperty = firstMidLevelProperty;
            return this;
        }

        /**
         * Sets the value of {@link DiamondInheritanceTopLevelStruct#getBaseLevelProperty}
         * @param baseLevelProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder baseLevelProperty(java.lang.String baseLevelProperty) {
            this.baseLevelProperty = baseLevelProperty;
            return this;
        }

        /**
         * Sets the value of {@link DiamondInheritanceTopLevelStruct#getSecondMidLevelProperty}
         * @param secondMidLevelProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder secondMidLevelProperty(java.lang.String secondMidLevelProperty) {
            this.secondMidLevelProperty = secondMidLevelProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link DiamondInheritanceTopLevelStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public DiamondInheritanceTopLevelStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link DiamondInheritanceTopLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements DiamondInheritanceTopLevelStruct {
        private final java.lang.String topLevelProperty;
        private final java.lang.String firstMidLevelProperty;
        private final java.lang.String baseLevelProperty;
        private final java.lang.String secondMidLevelProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.topLevelProperty = software.amazon.jsii.Kernel.get(this, "topLevelProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.firstMidLevelProperty = software.amazon.jsii.Kernel.get(this, "firstMidLevelProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.baseLevelProperty = software.amazon.jsii.Kernel.get(this, "baseLevelProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.secondMidLevelProperty = software.amazon.jsii.Kernel.get(this, "secondMidLevelProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.topLevelProperty = java.util.Objects.requireNonNull(builder.topLevelProperty, "topLevelProperty is required");
            this.firstMidLevelProperty = java.util.Objects.requireNonNull(builder.firstMidLevelProperty, "firstMidLevelProperty is required");
            this.baseLevelProperty = java.util.Objects.requireNonNull(builder.baseLevelProperty, "baseLevelProperty is required");
            this.secondMidLevelProperty = java.util.Objects.requireNonNull(builder.secondMidLevelProperty, "secondMidLevelProperty is required");
        }

        @Override
        public final java.lang.String getTopLevelProperty() {
            return this.topLevelProperty;
        }

        @Override
        public final java.lang.String getFirstMidLevelProperty() {
            return this.firstMidLevelProperty;
        }

        @Override
        public final java.lang.String getBaseLevelProperty() {
            return this.baseLevelProperty;
        }

        @Override
        public final java.lang.String getSecondMidLevelProperty() {
            return this.secondMidLevelProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("topLevelProperty", om.valueToTree(this.getTopLevelProperty()));
            data.set("firstMidLevelProperty", om.valueToTree(this.getFirstMidLevelProperty()));
            data.set("baseLevelProperty", om.valueToTree(this.getBaseLevelProperty()));
            data.set("secondMidLevelProperty", om.valueToTree(this.getSecondMidLevelProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.DiamondInheritanceTopLevelStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DiamondInheritanceTopLevelStruct.Jsii$Proxy that = (DiamondInheritanceTopLevelStruct.Jsii$Proxy) o;

            if (!topLevelProperty.equals(that.topLevelProperty)) return false;
            if (!firstMidLevelProperty.equals(that.firstMidLevelProperty)) return false;
            if (!baseLevelProperty.equals(that.baseLevelProperty)) return false;
            return this.secondMidLevelProperty.equals(that.secondMidLevelProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.topLevelProperty.hashCode();
            result = 31 * result + (this.firstMidLevelProperty.hashCode());
            result = 31 * result + (this.baseLevelProperty.hashCode());
            result = 31 * result + (this.secondMidLevelProperty.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DisappointingCollectionSource.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Verifies that null/undefined can be returned for optional collections.
 * <p>
 * This source of collections is disappointing - it'll always give you nothing :(
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DisappointingCollectionSource")
public class DisappointingCollectionSource extends software.amazon.jsii.JsiiObject {

    protected DisappointingCollectionSource(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected DisappointingCollectionSource(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    static {
        MAYBE_LIST = java.util.Optional.ofNullable((java.util.List<java.lang.String>)(software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.DisappointingCollectionSource.class, "maybeList", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))))).map(java.util.Collections::unmodifiableList).orElse(null);
        MAYBE_MAP = java.util.Optional.ofNullable((java.util.Map<java.lang.String, java.lang.Number>)(software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.DisappointingCollectionSource.class, "maybeMap", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.Number.class))))).map(java.util.Collections::unmodifiableMap).orElse(null);
    }

    /**
     * Some List of strings, maybe?
     * <p>
     * (Nah, just a billion dollars mistake!)
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public final static java.util.List<java.lang.String> MAYBE_LIST;

    /**
     * Some Map of strings to numbers, maybe?
     * <p>
     * (Nah, just a billion dollars mistake!)
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public final static java.util.Map<java.lang.String, java.lang.Number> MAYBE_MAP;
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DoNotOverridePrivates.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DoNotOverridePrivates")
public class DoNotOverridePrivates extends software.amazon.jsii.JsiiObject {

    protected DoNotOverridePrivates(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected DoNotOverridePrivates(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DoNotOverridePrivates() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param newValue This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void changePrivatePropertyValue(final @org.jetbrains.annotations.NotNull java.lang.String newValue) {
        software.amazon.jsii.Kernel.call(this, "changePrivatePropertyValue", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(newValue, "newValue is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String privateMethodValue() {
        return software.amazon.jsii.Kernel.call(this, "privateMethodValue", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String privatePropertyValue() {
        return software.amazon.jsii.Kernel.call(this, "privatePropertyValue", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DoNotRecognizeAnyAsOptional.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * jsii#284: do not recognize "any" as an optional argument.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DoNotRecognizeAnyAsOptional")
public class DoNotRecognizeAnyAsOptional extends software.amazon.jsii.JsiiObject {

    protected DoNotRecognizeAnyAsOptional(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected DoNotRecognizeAnyAsOptional(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DoNotRecognizeAnyAsOptional() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param _requiredAny This parameter is required.
     * @param _optionalAny
     * @param _optionalString
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void method(final @org.jetbrains.annotations.NotNull java.lang.Object _requiredAny, final @org.jetbrains.annotations.Nullable java.lang.Object _optionalAny, final @org.jetbrains.annotations.Nullable java.lang.String _optionalString) {
        software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID, new Object[] { _requiredAny, _optionalAny, _optionalString });
    }

    /**
     * @param _requiredAny This parameter is required.
     * @param _optionalAny
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void method(final @org.jetbrains.annotations.NotNull java.lang.Object _requiredAny, final @org.jetbrains.annotations.Nullable java.lang.Object _optionalAny) {
        software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID, new Object[] { _requiredAny, _optionalAny });
    }

    /**
     * @param _requiredAny This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void method(final @org.jetbrains.annotations.NotNull java.lang.Object _requiredAny) {
        software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID, new Object[] { _requiredAny });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DocumentedClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Here's the first line of the TSDoc comment.
 * <p>
 * This is the meat of the TSDoc comment. It may contain
 * multiple lines and multiple paragraphs.
 * <p>
 * Multiple paragraphs are separated by an empty line.
 * <p>
 * Example:
 * <p>
 * <blockquote><pre>
 * Number x = 12 + 44;
 * String s1 = "string";
 * String s2 = "string \\nwith new newlines"; // see https://github.com/aws/jsii/issues/2569
 * String s3 = "string\\n            with\\n            new lines";
 * </pre></blockquote>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DocumentedClass")
public class DocumentedClass extends software.amazon.jsii.JsiiObject {

    protected DocumentedClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected DocumentedClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DocumentedClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * Greet the indicated person.
     * <p>
     * This will print out a friendly greeting intended for the indicated person.
     * <p>
     * @return A number that everyone knows very well and represents the answer
     * to the ultimate question
     * @param greetee The person to be greeted.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number greet(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.Greetee greetee) {
        return software.amazon.jsii.Kernel.call(this, "greet", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { greetee });
    }

    /**
     * Greet the indicated person.
     * <p>
     * This will print out a friendly greeting intended for the indicated person.
     * <p>
     * @return A number that everyone knows very well and represents the answer
     * to the ultimate question
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number greet() {
        return software.amazon.jsii.Kernel.call(this, "greet", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * (experimental) Say ¡Hola!
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    public void hola() {
        software.amazon.jsii.Kernel.call(this, "hola", software.amazon.jsii.NativeType.VOID);
    }

    /**
     * Some comments have an escaped star backslash in them, ending the comment if left unescaped.
     * <p>
     * For example: 'projects/*&#47;global/networks/network-1'.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void moin() {
        software.amazon.jsii.Kernel.call(this, "moin", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DontComplainAboutVariadicAfterOptional.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DontComplainAboutVariadicAfterOptional")
public class DontComplainAboutVariadicAfterOptional extends software.amazon.jsii.JsiiObject {

    protected DontComplainAboutVariadicAfterOptional(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected DontComplainAboutVariadicAfterOptional(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DontComplainAboutVariadicAfterOptional() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param optional
     * @param things This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String optionalAndVariadic(final @org.jetbrains.annotations.Nullable java.lang.String optional, final @org.jetbrains.annotations.NotNull java.lang.String... things) {
        return software.amazon.jsii.Kernel.call(this, "optionalAndVariadic", software.amazon.jsii.NativeType.forClass(java.lang.String.class), java.util.stream.Stream.concat(java.util.Arrays.<Object>stream(new Object[] { optional }), java.util.Arrays.<Object>stream(things)).toArray(Object[]::new));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DontUseMe.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * <blockquote><p>Don't use this interface An interface that shouldn't be used, with the annotation in a weird place.<p></blockquote>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DontUseMe")
@software.amazon.jsii.Jsii.Proxy(DontUseMe.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface DontUseMe extends software.amazon.jsii.JsiiSerializable {

    /**
     * <blockquote><p>Don't set this parameter.<p></blockquote>
     * <p>
     * A parameter that shouldn't be set, with the annotation in a weird place.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getDontSetMe() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link DontUseMe}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link DontUseMe}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<DontUseMe> {
        java.lang.String dontSetMe;

        /**
         * Sets the value of {@link DontUseMe#getDontSetMe}
         * @param dontSetMe <blockquote><p>Don't set this parameter.<p></blockquote>
         *                  A parameter that shouldn't be set, with the annotation in a weird place.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder dontSetMe(java.lang.String dontSetMe) {
            this.dontSetMe = dontSetMe;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link DontUseMe}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public DontUseMe build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link DontUseMe}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements DontUseMe {
        private final java.lang.String dontSetMe;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.dontSetMe = software.amazon.jsii.Kernel.get(this, "dontSetMe", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.dontSetMe = builder.dontSetMe;
        }

        @Override
        public final java.lang.String getDontSetMe() {
            return this.dontSetMe;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getDontSetMe() != null) {
                data.set("dontSetMe", om.valueToTree(this.getDontSetMe()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.DontUseMe"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DontUseMe.Jsii$Proxy that = (DontUseMe.Jsii$Proxy) o;

            return this.dontSetMe != null ? this.dontSetMe.equals(that.dontSetMe) : that.dontSetMe == null;
        }

        @Override
        public final int hashCode() {
            int result = this.dontSetMe != null ? this.dontSetMe.hashCode() : 0;
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DoubleTrouble.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DoubleTrouble")
public class DoubleTrouble extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IFriendlyRandomGenerator {

    protected DoubleTrouble(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected DoubleTrouble(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DoubleTrouble() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * Say hello!
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String hello() {
        return software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * Returns another random number.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.Number next() {
        return software.amazon.jsii.Kernel.call(this, "next", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DummyObj.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DummyObj")
@software.amazon.jsii.Jsii.Proxy(DummyObj.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface DummyObj extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getExample();

    /**
     * @return a {@link Builder} of {@link DummyObj}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link DummyObj}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<DummyObj> {
        java.lang.String example;

        /**
         * Sets the value of {@link DummyObj#getExample}
         * @param example the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder example(java.lang.String example) {
            this.example = example;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link DummyObj}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public DummyObj build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link DummyObj}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements DummyObj {
        private final java.lang.String example;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.example = software.amazon.jsii.Kernel.get(this, "example", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.example = java.util.Objects.requireNonNull(builder.example, "example is required");
        }

        @Override
        public final java.lang.String getExample() {
            return this.example;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("example", om.valueToTree(this.getExample()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.DummyObj"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            DummyObj.Jsii$Proxy that = (DummyObj.Jsii$Proxy) o;

            return this.example.equals(that.example);
        }

        @Override
        public final int hashCode() {
            int result = this.example.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DynamicPropertyBearer.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Ensures we can override a dynamic property that was inherited.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DynamicPropertyBearer")
public class DynamicPropertyBearer extends software.amazon.jsii.JsiiObject {

    protected DynamicPropertyBearer(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected DynamicPropertyBearer(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param valueStore This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DynamicPropertyBearer(final @org.jetbrains.annotations.NotNull java.lang.String valueStore) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(valueStore, "valueStore is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getDynamicProperty() {
        return software.amazon.jsii.Kernel.get(this, "dynamicProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setDynamicProperty(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "dynamicProperty", java.util.Objects.requireNonNull(value, "dynamicProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getValueStore() {
        return software.amazon.jsii.Kernel.get(this, "valueStore", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setValueStore(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "valueStore", java.util.Objects.requireNonNull(value, "valueStore is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/DynamicPropertyBearerChild.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DynamicPropertyBearerChild")
public class DynamicPropertyBearerChild extends software.amazon.jsii.tests.calculator.DynamicPropertyBearer {

    protected DynamicPropertyBearerChild(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected DynamicPropertyBearerChild(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param originalValue This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public DynamicPropertyBearerChild(final @org.jetbrains.annotations.NotNull java.lang.String originalValue) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(originalValue, "originalValue is required") });
    }

    /**
     * Sets <code>this.dynamicProperty</code> to the new value, and returns the old value.
     * <p>
     * @return the old value that was set.
     * @param newValue the new value to be set. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String overrideValue(final @org.jetbrains.annotations.NotNull java.lang.String newValue) {
        return software.amazon.jsii.Kernel.call(this, "overrideValue", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(newValue, "newValue is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getOriginalValue() {
        return software.amazon.jsii.Kernel.get(this, "originalValue", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Entropy.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * This class is used to validate that serialization and deserialization does not interpret ISO-8601-formatted timestampts to the native date/time object, as the jsii protocol has a $jsii$date wrapper for this purpose (node's JSON parsing does <em>NOT</em> detect dates automatically in this way, so host libraries should not either).
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Entropy")
public abstract class Entropy extends software.amazon.jsii.JsiiObject {

    protected Entropy(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Entropy(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * Creates a new instance of Entropy.
     * <p>
     * @param clock your implementation of <code>WallClock</code>. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected Entropy(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IWallClock clock) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(clock, "clock is required") });
    }

    /**
     * Increases entropy by consuming time from the clock (yes, this is a long shot, please don't judge).
     * <p>
     * @return the time from the <code>WallClock</code>.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String increase() {
        return software.amazon.jsii.Kernel.call(this, "increase", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * Implement this method such that it returns <code>word</code>.
     * <p>
     * @return <code>word</code>.
     * @param word the value to return. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public abstract @org.jetbrains.annotations.NotNull java.lang.String repeat(final @org.jetbrains.annotations.NotNull java.lang.String word);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.Entropy {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * Implement this method such that it returns <code>word</code>.
         * <p>
         * @return <code>word</code>.
         * @param word the value to return. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String repeat(final @org.jetbrains.annotations.NotNull java.lang.String word) {
            return software.amazon.jsii.Kernel.call(this, "repeat", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(word, "word is required") });
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/EnumDispenser.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.EnumDispenser")
public class EnumDispenser extends software.amazon.jsii.JsiiObject {

    protected EnumDispenser(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected EnumDispenser(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.AllTypesEnum randomIntegerLikeEnum() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.EnumDispenser.class, "randomIntegerLikeEnum", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.AllTypesEnum.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StringEnum randomStringLikeEnum() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.EnumDispenser.class, "randomStringLikeEnum", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StringEnum.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/EraseUndefinedHashValues.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.EraseUndefinedHashValues")
public class EraseUndefinedHashValues extends software.amazon.jsii.JsiiObject {

    protected EraseUndefinedHashValues(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected EraseUndefinedHashValues(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public EraseUndefinedHashValues() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * Returns <code>true</code> if <code>key</code> is defined in <code>opts</code>.
     * <p>
     * Used to check that undefined/null hash values
     * are being erased when sending values from native code to JS.
     * <p>
     * @param opts This parameter is required.
     * @param key This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean doesKeyExist(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.EraseUndefinedHashValuesOptions opts, final @org.jetbrains.annotations.NotNull java.lang.String key) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.EraseUndefinedHashValues.class, "doesKeyExist", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(opts, "opts is required"), java.util.Objects.requireNonNull(key, "key is required") });
    }

    /**
     * We expect "prop1" to be erased.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> prop1IsNull() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.EraseUndefinedHashValues.class, "prop1IsNull", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class))));
    }

    /**
     * We expect "prop2" to be erased.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> prop2IsUndefined() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.EraseUndefinedHashValues.class, "prop2IsUndefined", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class))));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/EraseUndefinedHashValuesOptions.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.EraseUndefinedHashValuesOptions")
@software.amazon.jsii.Jsii.Proxy(EraseUndefinedHashValuesOptions.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface EraseUndefinedHashValuesOptions extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getOption1() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getOption2() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link EraseUndefinedHashValuesOptions}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link EraseUndefinedHashValuesOptions}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<EraseUndefinedHashValuesOptions> {
        java.lang.String option1;
        java.lang.String option2;

        /**
         * Sets the value of {@link EraseUndefinedHashValuesOptions#getOption1}
         * @param option1 the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder option1(java.lang.String option1) {
            this.option1 = option1;
            return this;
        }

        /**
         * Sets the value of {@link EraseUndefinedHashValuesOptions#getOption2}
         * @param option2 the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder option2(java.lang.String option2) {
            this.option2 = option2;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link EraseUndefinedHashValuesOptions}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public EraseUndefinedHashValuesOptions build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link EraseUndefinedHashValuesOptions}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements EraseUndefinedHashValuesOptions {
        private final java.lang.String option1;
        private final java.lang.String option2;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.option1 = software.amazon.jsii.Kernel.get(this, "option1", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.option2 = software.amazon.jsii.Kernel.get(this, "option2", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.option1 = builder.option1;
            this.option2 = builder.option2;
        }

        @Override
        public final java.lang.String getOption1() {
            return this.option1;
        }

        @Override
        public final java.lang.String getOption2() {
            return this.option2;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getOption1() != null) {
                data.set("option1", om.valueToTree(this.getOption1()));
            }
            if (this.getOption2() != null) {
                data.set("option2", om.valueToTree(this.getOption2()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.EraseUndefinedHashValuesOptions"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            EraseUndefinedHashValuesOptions.Jsii$Proxy that = (EraseUndefinedHashValuesOptions.Jsii$Proxy) o;

            if (this.option1 != null ? !this.option1.equals(that.option1) : that.option1 != null) return false;
            return this.option2 != null ? this.option2.equals(that.option2) : that.option2 == null;
        }

        @Override
        public final int hashCode() {
            int result = this.option1 != null ? this.option1.hashCode() : 0;
            result = 31 * result + (this.option2 != null ? this.option2.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ExperimentalClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ExperimentalClass")
public class ExperimentalClass extends software.amazon.jsii.JsiiObject {

    protected ExperimentalClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ExperimentalClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param readonlyString This parameter is required.
     * @param mutableNumber
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    public ExperimentalClass(final @org.jetbrains.annotations.NotNull java.lang.String readonlyString, final @org.jetbrains.annotations.Nullable java.lang.Number mutableNumber) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(readonlyString, "readonlyString is required"), mutableNumber });
    }

    /**
     * @param readonlyString This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    public ExperimentalClass(final @org.jetbrains.annotations.NotNull java.lang.String readonlyString) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(readonlyString, "readonlyString is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    public void method() {
        software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    public @org.jetbrains.annotations.NotNull java.lang.String getReadonlyProperty() {
        return software.amazon.jsii.Kernel.get(this, "readonlyProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    public @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
        return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    public void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
        software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ExperimentalEnum.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ExperimentalEnum")
public enum ExperimentalEnum {
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    OPTION_A,
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    OPTION_B,
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ExperimentalStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ExperimentalStruct")
@software.amazon.jsii.Jsii.Proxy(ExperimentalStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
public interface ExperimentalStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    @org.jetbrains.annotations.NotNull java.lang.String getReadonlyProperty();

    /**
     * @return a {@link Builder} of {@link ExperimentalStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ExperimentalStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    public static final class Builder implements software.amazon.jsii.Builder<ExperimentalStruct> {
        java.lang.String readonlyProperty;

        /**
         * Sets the value of {@link ExperimentalStruct#getReadonlyProperty}
         * @param readonlyProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
        public Builder readonlyProperty(java.lang.String readonlyProperty) {
            this.readonlyProperty = readonlyProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ExperimentalStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
        @Override
        public ExperimentalStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ExperimentalStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ExperimentalStruct {
        private final java.lang.String readonlyProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.readonlyProperty = software.amazon.jsii.Kernel.get(this, "readonlyProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.readonlyProperty = java.util.Objects.requireNonNull(builder.readonlyProperty, "readonlyProperty is required");
        }

        @Override
        public final java.lang.String getReadonlyProperty() {
            return this.readonlyProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("readonlyProperty", om.valueToTree(this.getReadonlyProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.ExperimentalStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ExperimentalStruct.Jsii$Proxy that = (ExperimentalStruct.Jsii$Proxy) o;

            return this.readonlyProperty.equals(that.readonlyProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.readonlyProperty.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ExportedBaseClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ExportedBaseClass")
public class ExportedBaseClass extends software.amazon.jsii.JsiiObject {

    protected ExportedBaseClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ExportedBaseClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param success This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ExportedBaseClass(final @org.jetbrains.annotations.NotNull java.lang.Boolean success) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(success, "success is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean getSuccess() {
        return software.amazon.jsii.Kernel.get(this, "success", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ExtendsInternalInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ExtendsInternalInterface")
@software.amazon.jsii.Jsii.Proxy(ExtendsInternalInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface ExtendsInternalInterface extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Boolean getBoom();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getProp();

    /**
     * @return a {@link Builder} of {@link ExtendsInternalInterface}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ExtendsInternalInterface}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<ExtendsInternalInterface> {
        java.lang.Boolean boom;
        java.lang.String prop;

        /**
         * Sets the value of {@link ExtendsInternalInterface#getBoom}
         * @param boom the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder boom(java.lang.Boolean boom) {
            this.boom = boom;
            return this;
        }

        /**
         * Sets the value of {@link ExtendsInternalInterface#getProp}
         * @param prop the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder prop(java.lang.String prop) {
            this.prop = prop;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ExtendsInternalInterface}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public ExtendsInternalInterface build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ExtendsInternalInterface}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ExtendsInternalInterface {
        private final java.lang.Boolean boom;
        private final java.lang.String prop;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.boom = software.amazon.jsii.Kernel.get(this, "boom", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
            this.prop = software.amazon.jsii.Kernel.get(this, "prop", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.boom = java.util.Objects.requireNonNull(builder.boom, "boom is required");
            this.prop = java.util.Objects.requireNonNull(builder.prop, "prop is required");
        }

        @Override
        public final java.lang.Boolean getBoom() {
            return this.boom;
        }

        @Override
        public final java.lang.String getProp() {
            return this.prop;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("boom", om.valueToTree(this.getBoom()));
            data.set("prop", om.valueToTree(this.getProp()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.ExtendsInternalInterface"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ExtendsInternalInterface.Jsii$Proxy that = (ExtendsInternalInterface.Jsii$Proxy) o;

            if (!boom.equals(that.boom)) return false;
            return this.prop.equals(that.prop);
        }

        @Override
        public final int hashCode() {
            int result = this.boom.hashCode();
            result = 31 * result + (this.prop.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ExternalClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ExternalClass")
public class ExternalClass extends software.amazon.jsii.JsiiObject {

    protected ExternalClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ExternalClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param readonlyString This parameter is required.
     * @param mutableNumber
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ExternalClass(final @org.jetbrains.annotations.NotNull java.lang.String readonlyString, final @org.jetbrains.annotations.Nullable java.lang.Number mutableNumber) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(readonlyString, "readonlyString is required"), mutableNumber });
    }

    /**
     * @param readonlyString This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ExternalClass(final @org.jetbrains.annotations.NotNull java.lang.String readonlyString) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(readonlyString, "readonlyString is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void method() {
        software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getReadonlyProperty() {
        return software.amazon.jsii.Kernel.get(this, "readonlyProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
        return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
        software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ExternalEnum.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ExternalEnum")
public enum ExternalEnum {
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    OPTION_A,
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    OPTION_B,
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ExternalStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ExternalStruct")
@software.amazon.jsii.Jsii.Proxy(ExternalStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface ExternalStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getReadonlyProperty();

    /**
     * @return a {@link Builder} of {@link ExternalStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ExternalStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<ExternalStruct> {
        java.lang.String readonlyProperty;

        /**
         * Sets the value of {@link ExternalStruct#getReadonlyProperty}
         * @param readonlyProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder readonlyProperty(java.lang.String readonlyProperty) {
            this.readonlyProperty = readonlyProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ExternalStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public ExternalStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ExternalStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ExternalStruct {
        private final java.lang.String readonlyProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.readonlyProperty = software.amazon.jsii.Kernel.get(this, "readonlyProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.readonlyProperty = java.util.Objects.requireNonNull(builder.readonlyProperty, "readonlyProperty is required");
        }

        @Override
        public final java.lang.String getReadonlyProperty() {
            return this.readonlyProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("readonlyProperty", om.valueToTree(this.getReadonlyProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.ExternalStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ExternalStruct.Jsii$Proxy that = (ExternalStruct.Jsii$Proxy) o;

            return this.readonlyProperty.equals(that.readonlyProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.readonlyProperty.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/FullCombo.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.FullCombo")
public class FullCombo extends software.amazon.jsii.tests.calculator.BaseClass implements software.amazon.jsii.tests.calculator.IIndirectlyImplemented {

    protected FullCombo(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected FullCombo(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/GiveMeStructs.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.GiveMeStructs")
public class GiveMeStructs extends software.amazon.jsii.JsiiObject {

    protected GiveMeStructs(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected GiveMeStructs(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public GiveMeStructs() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * Accepts a struct of type DerivedStruct and returns a struct of type FirstStruct.
     * <p>
     * @param derived This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.MyFirstStruct derivedToFirst(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.DerivedStruct derived) {
        return software.amazon.jsii.Kernel.call(this, "derivedToFirst", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.MyFirstStruct.class), new Object[] { java.util.Objects.requireNonNull(derived, "derived is required") });
    }

    /**
     * Returns the boolean from a DerivedStruct struct.
     * <p>
     * @param derived This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.DoubleTrouble readDerivedNonPrimitive(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.DerivedStruct derived) {
        return software.amazon.jsii.Kernel.call(this, "readDerivedNonPrimitive", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.DoubleTrouble.class), new Object[] { java.util.Objects.requireNonNull(derived, "derived is required") });
    }

    /**
     * Returns the "anumber" from a MyFirstStruct struct;
     * <p>
     * @param first This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number readFirstNumber(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.MyFirstStruct first) {
        return software.amazon.jsii.Kernel.call(this, "readFirstNumber", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(first, "first is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.StructWithOnlyOptionals getStructLiteral() {
        return software.amazon.jsii.Kernel.get(this, "structLiteral", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.StructWithOnlyOptionals.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Greetee.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * These are some arguments you can pass to a method.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Greetee")
@software.amazon.jsii.Jsii.Proxy(Greetee.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface Greetee extends software.amazon.jsii.JsiiSerializable {

    /**
     * The name of the greetee.
     * <p>
     * Default: world
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getName() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link Greetee}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link Greetee}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<Greetee> {
        java.lang.String name;

        /**
         * Sets the value of {@link Greetee#getName}
         * @param name The name of the greetee.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder name(java.lang.String name) {
            this.name = name;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link Greetee}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public Greetee build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link Greetee}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements Greetee {
        private final java.lang.String name;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.name = software.amazon.jsii.Kernel.get(this, "name", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.name = builder.name;
        }

        @Override
        public final java.lang.String getName() {
            return this.name;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getName() != null) {
                data.set("name", om.valueToTree(this.getName()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.Greetee"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Greetee.Jsii$Proxy that = (Greetee.Jsii$Proxy) o;

            return this.name != null ? this.name.equals(that.name) : that.name == null;
        }

        @Override
        public final int hashCode() {
            int result = this.name != null ? this.name.hashCode() : 0;
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/GreetingAugmenter.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.GreetingAugmenter")
public class GreetingAugmenter extends software.amazon.jsii.JsiiObject {

    protected GreetingAugmenter(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected GreetingAugmenter(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public GreetingAugmenter() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param friendly This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String betterGreeting(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.IFriendly friendly) {
        return software.amazon.jsii.Kernel.call(this, "betterGreeting", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(friendly, "friendly is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IAnonymousImplementationProvider.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * We can return an anonymous interface implementation from an override without losing the interface declarations.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IAnonymousImplementationProvider")
@software.amazon.jsii.Jsii.Proxy(IAnonymousImplementationProvider.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IAnonymousImplementationProvider extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Implementation provideAsClass();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IAnonymouslyImplementMe provideAsInterface();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IAnonymousImplementationProvider.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Implementation provideAsClass() {
            return software.amazon.jsii.Kernel.call(this, "provideAsClass", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.Implementation.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IAnonymouslyImplementMe provideAsInterface() {
            return software.amazon.jsii.Kernel.call(this, "provideAsInterface", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IAnonymouslyImplementMe.class));
        }
    }

    /**
     * Internal default implementation for {@link IAnonymousImplementationProvider}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IAnonymousImplementationProvider {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Implementation provideAsClass() {
            return software.amazon.jsii.Kernel.call(this, "provideAsClass", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.Implementation.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IAnonymouslyImplementMe provideAsInterface() {
            return software.amazon.jsii.Kernel.call(this, "provideAsInterface", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IAnonymouslyImplementMe.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IAnonymouslyImplementMe.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IAnonymouslyImplementMe")
@software.amazon.jsii.Jsii.Proxy(IAnonymouslyImplementMe.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IAnonymouslyImplementMe extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number getValue();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String verb();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IAnonymouslyImplementMe.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String verb() {
            return software.amazon.jsii.Kernel.call(this, "verb", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IAnonymouslyImplementMe}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IAnonymouslyImplementMe {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String verb() {
            return software.amazon.jsii.Kernel.call(this, "verb", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IAnotherPublicInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IAnotherPublicInterface")
@software.amazon.jsii.Jsii.Proxy(IAnotherPublicInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IAnotherPublicInterface extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getA();

    /**
     */
    void setA(final @org.jetbrains.annotations.NotNull java.lang.String value);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IAnotherPublicInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getA() {
            return software.amazon.jsii.Kernel.get(this, "a", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setA(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "a", java.util.Objects.requireNonNull(value, "a is required"));
        }
    }

    /**
     * Internal default implementation for {@link IAnotherPublicInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IAnotherPublicInterface {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getA() {
            return software.amazon.jsii.Kernel.get(this, "a", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setA(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "a", java.util.Objects.requireNonNull(value, "a is required"));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IBell.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IBell")
@software.amazon.jsii.Jsii.Proxy(IBell.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IBell extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void ring();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IBell.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void ring() {
            software.amazon.jsii.Kernel.call(this, "ring", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IBell}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IBell {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void ring() {
            software.amazon.jsii.Kernel.call(this, "ring", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IBellRinger.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Takes the object parameter as an interface.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IBellRinger")
@software.amazon.jsii.Jsii.Proxy(IBellRinger.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IBellRinger extends software.amazon.jsii.JsiiSerializable {

    /**
     * @param bell This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void yourTurn(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IBell bell);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IBellRinger.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * @param bell This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void yourTurn(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IBell bell) {
            software.amazon.jsii.Kernel.call(this, "yourTurn", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(bell, "bell is required") });
        }
    }

    /**
     * Internal default implementation for {@link IBellRinger}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IBellRinger {

        /**
         * @param bell This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void yourTurn(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IBell bell) {
            software.amazon.jsii.Kernel.call(this, "yourTurn", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(bell, "bell is required") });
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IConcreteBellRinger.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Takes the object parameter as a calss.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IConcreteBellRinger")
@software.amazon.jsii.Jsii.Proxy(IConcreteBellRinger.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IConcreteBellRinger extends software.amazon.jsii.JsiiSerializable {

    /**
     * @param bell This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void yourTurn(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Bell bell);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IConcreteBellRinger.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * @param bell This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void yourTurn(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Bell bell) {
            software.amazon.jsii.Kernel.call(this, "yourTurn", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(bell, "bell is required") });
        }
    }

    /**
     * Internal default implementation for {@link IConcreteBellRinger}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IConcreteBellRinger {

        /**
         * @param bell This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void yourTurn(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Bell bell) {
            software.amazon.jsii.Kernel.call(this, "yourTurn", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(bell, "bell is required") });
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IDeprecatedInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * @deprecated useless interface
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IDeprecatedInterface")
@software.amazon.jsii.Jsii.Proxy(IDeprecatedInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
public interface IDeprecatedInterface extends software.amazon.jsii.JsiiSerializable {

    /**
     * @deprecated could be better
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    default @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
        return null;
    }

    /**
     * @deprecated could be better
     */
    @software.amazon.jsii.Optional
    default void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
        throw new UnsupportedOperationException("'void " + getClass().getCanonicalName() + "#setMutableProperty(@org.jetbrains.annotations.Nullable java.lang.Number)' is not implemented!");
    }

    /**
     * @deprecated services no purpose
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    void method();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IDeprecatedInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * @deprecated could be better
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public final @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
            return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * @deprecated could be better
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public final void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
            software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
        }

        /**
         * @deprecated services no purpose
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public final void method() {
            software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IDeprecatedInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IDeprecatedInterface {

        /**
         * @deprecated could be better
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        default @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
            return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * @deprecated could be better
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        default void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
            software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
        }

        /**
         * @deprecated services no purpose
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        default void method() {
            software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IExperimentalInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IExperimentalInterface")
@software.amazon.jsii.Jsii.Proxy(IExperimentalInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
public interface IExperimentalInterface extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    default @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Optional
    default void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
        throw new UnsupportedOperationException("'void " + getClass().getCanonicalName() + "#setMutableProperty(@org.jetbrains.annotations.Nullable java.lang.Number)' is not implemented!");
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
    void method();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IExperimentalInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
        public final @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
            return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
        public final void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
            software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
        @Override
        public final void method() {
            software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IExperimentalInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IExperimentalInterface {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
        default @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
            return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
        default void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
            software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental)
        @Override
        default void method() {
            software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IExtendsPrivateInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IExtendsPrivateInterface")
@software.amazon.jsii.Jsii.Proxy(IExtendsPrivateInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IExtendsPrivateInterface extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> getMoreThings();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getPrivateValue();

    /**
     */
    void setPrivateValue(final @org.jetbrains.annotations.NotNull java.lang.String value);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IExtendsPrivateInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> getMoreThings() {
            return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "moreThings", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getPrivateValue() {
            return software.amazon.jsii.Kernel.get(this, "private", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setPrivateValue(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "private", java.util.Objects.requireNonNull(value, "private is required"));
        }
    }

    /**
     * Internal default implementation for {@link IExtendsPrivateInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IExtendsPrivateInterface {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> getMoreThings() {
            return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "moreThings", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getPrivateValue() {
            return software.amazon.jsii.Kernel.get(this, "private", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setPrivateValue(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "private", java.util.Objects.requireNonNull(value, "private is required"));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IExternalInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IExternalInterface")
@software.amazon.jsii.Jsii.Proxy(IExternalInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IExternalInterface extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Optional
    default void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
        throw new UnsupportedOperationException("'void " + getClass().getCanonicalName() + "#setMutableProperty(@org.jetbrains.annotations.Nullable java.lang.Number)' is not implemented!");
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void method();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IExternalInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
            return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
            software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void method() {
            software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IExternalInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IExternalInterface {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
            return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
            software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void method() {
            software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IFriendlier.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Even friendlier classes can implement this interface.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IFriendlier")
@software.amazon.jsii.Jsii.Proxy(IFriendlier.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IFriendlier extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.lib.IFriendly {

    /**
     * Say farewell.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String farewell();

    /**
     * Say goodbye.
     * <p>
     * @return A goodbye blessing.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String goodbye();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IFriendlier.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * (deprecated) Say hello!
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String hello() {
            return software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Say farewell.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String farewell() {
            return software.amazon.jsii.Kernel.call(this, "farewell", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Say goodbye.
         * <p>
         * @return A goodbye blessing.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String goodbye() {
            return software.amazon.jsii.Kernel.call(this, "goodbye", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IFriendlier}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IFriendlier, software.amazon.jsii.tests.calculator.lib.IFriendly.Jsii$Default {

        /**
         * (deprecated) Say hello!
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String hello() {
            return software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Say farewell.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String farewell() {
            return software.amazon.jsii.Kernel.call(this, "farewell", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Say goodbye.
         * <p>
         * @return A goodbye blessing.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String goodbye() {
            return software.amazon.jsii.Kernel.call(this, "goodbye", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IFriendlyRandomGenerator.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IFriendlyRandomGenerator")
@software.amazon.jsii.Jsii.Proxy(IFriendlyRandomGenerator.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IFriendlyRandomGenerator extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.IRandomNumberGenerator, software.amazon.jsii.tests.calculator.lib.IFriendly {

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IFriendlyRandomGenerator.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * Returns another random number.
         * <p>
         * @return A random number.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.Number next() {
            return software.amazon.jsii.Kernel.call(this, "next", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * (deprecated) Say hello!
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String hello() {
            return software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IFriendlyRandomGenerator}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IFriendlyRandomGenerator, software.amazon.jsii.tests.calculator.IRandomNumberGenerator.Jsii$Default, software.amazon.jsii.tests.calculator.lib.IFriendly.Jsii$Default {

        /**
         * Returns another random number.
         * <p>
         * @return A random number.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.Number next() {
            return software.amazon.jsii.Kernel.call(this, "next", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * (deprecated) Say hello!
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String hello() {
            return software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IIndirectlyImplemented.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IIndirectlyImplemented")
@software.amazon.jsii.Jsii.Proxy(IIndirectlyImplemented.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IIndirectlyImplemented extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getProperty();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number method();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IIndirectlyImplemented.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getProperty() {
            return software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.Number method() {
            return software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }
    }

    /**
     * Internal default implementation for {@link IIndirectlyImplemented}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IIndirectlyImplemented {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getProperty() {
            return software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.Number method() {
            return software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IInterfaceImplementedByAbstractClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * awslabs/jsii#220 Abstract return type.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IInterfaceImplementedByAbstractClass")
@software.amazon.jsii.Jsii.Proxy(IInterfaceImplementedByAbstractClass.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IInterfaceImplementedByAbstractClass extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getPropFromInterface();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IInterfaceImplementedByAbstractClass.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getPropFromInterface() {
            return software.amazon.jsii.Kernel.get(this, "propFromInterface", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IInterfaceImplementedByAbstractClass}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IInterfaceImplementedByAbstractClass {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getPropFromInterface() {
            return software.amazon.jsii.Kernel.get(this, "propFromInterface", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IInterfaceThatShouldNotBeADataType.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Even though this interface has only properties, it is disqualified from being a datatype because it inherits from an interface that is not a datatype.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IInterfaceThatShouldNotBeADataType")
@software.amazon.jsii.Jsii.Proxy(IInterfaceThatShouldNotBeADataType.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IInterfaceThatShouldNotBeADataType extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.IInterfaceWithMethods {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getOtherValue();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IInterfaceThatShouldNotBeADataType.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getOtherValue() {
            return software.amazon.jsii.Kernel.get(this, "otherValue", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doThings() {
            software.amazon.jsii.Kernel.call(this, "doThings", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IInterfaceThatShouldNotBeADataType}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IInterfaceThatShouldNotBeADataType, software.amazon.jsii.tests.calculator.IInterfaceWithMethods.Jsii$Default {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getOtherValue() {
            return software.amazon.jsii.Kernel.get(this, "otherValue", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doThings() {
            software.amazon.jsii.Kernel.call(this, "doThings", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IInterfaceWithInternal.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IInterfaceWithInternal")
@software.amazon.jsii.Jsii.Proxy(IInterfaceWithInternal.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IInterfaceWithInternal extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void visible();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IInterfaceWithInternal.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void visible() {
            software.amazon.jsii.Kernel.call(this, "visible", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IInterfaceWithInternal}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IInterfaceWithInternal {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void visible() {
            software.amazon.jsii.Kernel.call(this, "visible", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IInterfaceWithMethods.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IInterfaceWithMethods")
@software.amazon.jsii.Jsii.Proxy(IInterfaceWithMethods.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IInterfaceWithMethods extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getValue();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doThings();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IInterfaceWithMethods.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doThings() {
            software.amazon.jsii.Kernel.call(this, "doThings", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IInterfaceWithMethods}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IInterfaceWithMethods {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doThings() {
            software.amazon.jsii.Kernel.call(this, "doThings", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IInterfaceWithOptionalMethodArguments.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * awslabs/jsii#175 Interface proxies (and builders) do not respect optional arguments in methods.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IInterfaceWithOptionalMethodArguments")
@software.amazon.jsii.Jsii.Proxy(IInterfaceWithOptionalMethodArguments.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IInterfaceWithOptionalMethodArguments extends software.amazon.jsii.JsiiSerializable {

    /**
     * @param arg1 This parameter is required.
     * @param arg2
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void hello(final @org.jetbrains.annotations.NotNull java.lang.String arg1, final @org.jetbrains.annotations.Nullable java.lang.Number arg2);

    /**
     * @param arg1 This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void hello(final @org.jetbrains.annotations.NotNull java.lang.String arg1);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IInterfaceWithOptionalMethodArguments.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * @param arg1 This parameter is required.
         * @param arg2
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void hello(final @org.jetbrains.annotations.NotNull java.lang.String arg1, final @org.jetbrains.annotations.Nullable java.lang.Number arg2) {
            software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(arg1, "arg1 is required"), arg2 });
        }

        /**
         * @param arg1 This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void hello(final @org.jetbrains.annotations.NotNull java.lang.String arg1) {
            software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(arg1, "arg1 is required") });
        }
    }

    /**
     * Internal default implementation for {@link IInterfaceWithOptionalMethodArguments}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IInterfaceWithOptionalMethodArguments {

        /**
         * @param arg1 This parameter is required.
         * @param arg2
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void hello(final @org.jetbrains.annotations.NotNull java.lang.String arg1, final @org.jetbrains.annotations.Nullable java.lang.Number arg2) {
            software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(arg1, "arg1 is required"), arg2 });
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IInterfaceWithProperties.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IInterfaceWithProperties")
@software.amazon.jsii.Jsii.Proxy(IInterfaceWithProperties.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IInterfaceWithProperties extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getReadOnlyString();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getReadWriteString();

    /**
     */
    void setReadWriteString(final @org.jetbrains.annotations.NotNull java.lang.String value);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IInterfaceWithProperties.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getReadOnlyString() {
            return software.amazon.jsii.Kernel.get(this, "readOnlyString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getReadWriteString() {
            return software.amazon.jsii.Kernel.get(this, "readWriteString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setReadWriteString(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "readWriteString", java.util.Objects.requireNonNull(value, "readWriteString is required"));
        }
    }

    /**
     * Internal default implementation for {@link IInterfaceWithProperties}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IInterfaceWithProperties {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getReadOnlyString() {
            return software.amazon.jsii.Kernel.get(this, "readOnlyString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getReadWriteString() {
            return software.amazon.jsii.Kernel.get(this, "readWriteString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setReadWriteString(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "readWriteString", java.util.Objects.requireNonNull(value, "readWriteString is required"));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IInterfaceWithPropertiesExtension.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IInterfaceWithPropertiesExtension")
@software.amazon.jsii.Jsii.Proxy(IInterfaceWithPropertiesExtension.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IInterfaceWithPropertiesExtension extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.IInterfaceWithProperties {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number getFoo();

    /**
     */
    void setFoo(final @org.jetbrains.annotations.NotNull java.lang.Number value);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IInterfaceWithPropertiesExtension.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getReadOnlyString() {
            return software.amazon.jsii.Kernel.get(this, "readOnlyString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getReadWriteString() {
            return software.amazon.jsii.Kernel.get(this, "readWriteString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setReadWriteString(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "readWriteString", java.util.Objects.requireNonNull(value, "readWriteString is required"));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.Number getFoo() {
            return software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setFoo(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
            software.amazon.jsii.Kernel.set(this, "foo", java.util.Objects.requireNonNull(value, "foo is required"));
        }
    }

    /**
     * Internal default implementation for {@link IInterfaceWithPropertiesExtension}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IInterfaceWithPropertiesExtension, software.amazon.jsii.tests.calculator.IInterfaceWithProperties.Jsii$Default {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getReadOnlyString() {
            return software.amazon.jsii.Kernel.get(this, "readOnlyString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getReadWriteString() {
            return software.amazon.jsii.Kernel.get(this, "readWriteString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setReadWriteString(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "readWriteString", java.util.Objects.requireNonNull(value, "readWriteString is required"));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.Number getFoo() {
            return software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setFoo(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
            software.amazon.jsii.Kernel.set(this, "foo", java.util.Objects.requireNonNull(value, "foo is required"));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IJSII417Derived.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IJSII417Derived")
@software.amazon.jsii.Jsii.Proxy(IJSII417Derived.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IJSII417Derived extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.IJSII417PublicBaseOfBase {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getProperty();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void bar();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void baz();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IJSII417Derived.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.Boolean getHasRoot() {
            return software.amazon.jsii.Kernel.get(this, "hasRoot", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getProperty() {
            return software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void bar() {
            software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void baz() {
            software.amazon.jsii.Kernel.call(this, "baz", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IJSII417Derived}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IJSII417Derived, software.amazon.jsii.tests.calculator.IJSII417PublicBaseOfBase.Jsii$Default {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.Boolean getHasRoot() {
            return software.amazon.jsii.Kernel.get(this, "hasRoot", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getProperty() {
            return software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void bar() {
            software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void baz() {
            software.amazon.jsii.Kernel.call(this, "baz", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IJSII417PublicBaseOfBase.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IJSII417PublicBaseOfBase")
@software.amazon.jsii.Jsii.Proxy(IJSII417PublicBaseOfBase.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IJSII417PublicBaseOfBase extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Boolean getHasRoot();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void foo();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IJSII417PublicBaseOfBase.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.Boolean getHasRoot() {
            return software.amazon.jsii.Kernel.get(this, "hasRoot", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IJSII417PublicBaseOfBase}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IJSII417PublicBaseOfBase {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.Boolean getHasRoot() {
            return software.amazon.jsii.Kernel.get(this, "hasRoot", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IJavaReservedWordsInAnInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IJavaReservedWordsInAnInterface")
@software.amazon.jsii.Jsii.Proxy(IJavaReservedWordsInAnInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IJavaReservedWordsInAnInterface extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getWhileValue();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doAbstract();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doAssert();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doBoolean();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doBreak();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doByte();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doCase();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doCatch();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doChar();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doClass();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doConst();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doContinue();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doDefault();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doDo();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doDouble();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doElse();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doEnum();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doExtends();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doFalse();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doFinal();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doFinally();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doFloat();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doFor();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doGoto();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doIf();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doImplements();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doImport();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doInstanceof();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doInt();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doInterface();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doLong();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doNative();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doNull();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doPackage();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doPrivate();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doProtected();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doPublic();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doReturn();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doShort();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doStatic();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doStrictfp();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doSuper();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doSwitch();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doSynchronized();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doThis();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doThrow();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doThrows();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doTransient();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doTrue();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doTry();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doVoid();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void doVolatile();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IJavaReservedWordsInAnInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getWhileValue() {
            return software.amazon.jsii.Kernel.get(this, "while", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doAbstract() {
            software.amazon.jsii.Kernel.call(this, "abstract", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doAssert() {
            software.amazon.jsii.Kernel.call(this, "assert", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doBoolean() {
            software.amazon.jsii.Kernel.call(this, "boolean", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doBreak() {
            software.amazon.jsii.Kernel.call(this, "break", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doByte() {
            software.amazon.jsii.Kernel.call(this, "byte", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doCase() {
            software.amazon.jsii.Kernel.call(this, "case", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doCatch() {
            software.amazon.jsii.Kernel.call(this, "catch", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doChar() {
            software.amazon.jsii.Kernel.call(this, "char", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doClass() {
            software.amazon.jsii.Kernel.call(this, "class", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doConst() {
            software.amazon.jsii.Kernel.call(this, "const", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doContinue() {
            software.amazon.jsii.Kernel.call(this, "continue", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doDefault() {
            software.amazon.jsii.Kernel.call(this, "default", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doDo() {
            software.amazon.jsii.Kernel.call(this, "do", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doDouble() {
            software.amazon.jsii.Kernel.call(this, "double", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doElse() {
            software.amazon.jsii.Kernel.call(this, "else", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doEnum() {
            software.amazon.jsii.Kernel.call(this, "enum", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doExtends() {
            software.amazon.jsii.Kernel.call(this, "extends", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doFalse() {
            software.amazon.jsii.Kernel.call(this, "false", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doFinal() {
            software.amazon.jsii.Kernel.call(this, "final", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doFinally() {
            software.amazon.jsii.Kernel.call(this, "finally", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doFloat() {
            software.amazon.jsii.Kernel.call(this, "float", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doFor() {
            software.amazon.jsii.Kernel.call(this, "for", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doGoto() {
            software.amazon.jsii.Kernel.call(this, "goto", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doIf() {
            software.amazon.jsii.Kernel.call(this, "if", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doImplements() {
            software.amazon.jsii.Kernel.call(this, "implements", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doImport() {
            software.amazon.jsii.Kernel.call(this, "import", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doInstanceof() {
            software.amazon.jsii.Kernel.call(this, "instanceof", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doInt() {
            software.amazon.jsii.Kernel.call(this, "int", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doInterface() {
            software.amazon.jsii.Kernel.call(this, "interface", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doLong() {
            software.amazon.jsii.Kernel.call(this, "long", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doNative() {
            software.amazon.jsii.Kernel.call(this, "native", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doNull() {
            software.amazon.jsii.Kernel.call(this, "null", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doPackage() {
            software.amazon.jsii.Kernel.call(this, "package", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doPrivate() {
            software.amazon.jsii.Kernel.call(this, "private", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doProtected() {
            software.amazon.jsii.Kernel.call(this, "protected", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doPublic() {
            software.amazon.jsii.Kernel.call(this, "public", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doReturn() {
            software.amazon.jsii.Kernel.call(this, "return", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doShort() {
            software.amazon.jsii.Kernel.call(this, "short", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doStatic() {
            software.amazon.jsii.Kernel.call(this, "static", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doStrictfp() {
            software.amazon.jsii.Kernel.call(this, "strictfp", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doSuper() {
            software.amazon.jsii.Kernel.call(this, "super", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doSwitch() {
            software.amazon.jsii.Kernel.call(this, "switch", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doSynchronized() {
            software.amazon.jsii.Kernel.call(this, "synchronized", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doThis() {
            software.amazon.jsii.Kernel.call(this, "this", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doThrow() {
            software.amazon.jsii.Kernel.call(this, "throw", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doThrows() {
            software.amazon.jsii.Kernel.call(this, "throws", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doTransient() {
            software.amazon.jsii.Kernel.call(this, "transient", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doTrue() {
            software.amazon.jsii.Kernel.call(this, "true", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doTry() {
            software.amazon.jsii.Kernel.call(this, "try", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doVoid() {
            software.amazon.jsii.Kernel.call(this, "void", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void doVolatile() {
            software.amazon.jsii.Kernel.call(this, "volatile", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IJavaReservedWordsInAnInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IJavaReservedWordsInAnInterface {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getWhileValue() {
            return software.amazon.jsii.Kernel.get(this, "while", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doAbstract() {
            software.amazon.jsii.Kernel.call(this, "abstract", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doAssert() {
            software.amazon.jsii.Kernel.call(this, "assert", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doBoolean() {
            software.amazon.jsii.Kernel.call(this, "boolean", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doBreak() {
            software.amazon.jsii.Kernel.call(this, "break", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doByte() {
            software.amazon.jsii.Kernel.call(this, "byte", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doCase() {
            software.amazon.jsii.Kernel.call(this, "case", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doCatch() {
            software.amazon.jsii.Kernel.call(this, "catch", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doChar() {
            software.amazon.jsii.Kernel.call(this, "char", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doClass() {
            software.amazon.jsii.Kernel.call(this, "class", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doConst() {
            software.amazon.jsii.Kernel.call(this, "const", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doContinue() {
            software.amazon.jsii.Kernel.call(this, "continue", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doDefault() {
            software.amazon.jsii.Kernel.call(this, "default", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doDo() {
            software.amazon.jsii.Kernel.call(this, "do", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doDouble() {
            software.amazon.jsii.Kernel.call(this, "double", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doElse() {
            software.amazon.jsii.Kernel.call(this, "else", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doEnum() {
            software.amazon.jsii.Kernel.call(this, "enum", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doExtends() {
            software.amazon.jsii.Kernel.call(this, "extends", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doFalse() {
            software.amazon.jsii.Kernel.call(this, "false", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doFinal() {
            software.amazon.jsii.Kernel.call(this, "final", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doFinally() {
            software.amazon.jsii.Kernel.call(this, "finally", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doFloat() {
            software.amazon.jsii.Kernel.call(this, "float", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doFor() {
            software.amazon.jsii.Kernel.call(this, "for", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doGoto() {
            software.amazon.jsii.Kernel.call(this, "goto", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doIf() {
            software.amazon.jsii.Kernel.call(this, "if", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doImplements() {
            software.amazon.jsii.Kernel.call(this, "implements", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doImport() {
            software.amazon.jsii.Kernel.call(this, "import", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doInstanceof() {
            software.amazon.jsii.Kernel.call(this, "instanceof", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doInt() {
            software.amazon.jsii.Kernel.call(this, "int", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doInterface() {
            software.amazon.jsii.Kernel.call(this, "interface", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doLong() {
            software.amazon.jsii.Kernel.call(this, "long", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doNative() {
            software.amazon.jsii.Kernel.call(this, "native", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doNull() {
            software.amazon.jsii.Kernel.call(this, "null", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doPackage() {
            software.amazon.jsii.Kernel.call(this, "package", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doPrivate() {
            software.amazon.jsii.Kernel.call(this, "private", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doProtected() {
            software.amazon.jsii.Kernel.call(this, "protected", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doPublic() {
            software.amazon.jsii.Kernel.call(this, "public", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doReturn() {
            software.amazon.jsii.Kernel.call(this, "return", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doShort() {
            software.amazon.jsii.Kernel.call(this, "short", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doStatic() {
            software.amazon.jsii.Kernel.call(this, "static", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doStrictfp() {
            software.amazon.jsii.Kernel.call(this, "strictfp", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doSuper() {
            software.amazon.jsii.Kernel.call(this, "super", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doSwitch() {
            software.amazon.jsii.Kernel.call(this, "switch", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doSynchronized() {
            software.amazon.jsii.Kernel.call(this, "synchronized", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doThis() {
            software.amazon.jsii.Kernel.call(this, "this", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doThrow() {
            software.amazon.jsii.Kernel.call(this, "throw", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doThrows() {
            software.amazon.jsii.Kernel.call(this, "throws", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doTransient() {
            software.amazon.jsii.Kernel.call(this, "transient", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doTrue() {
            software.amazon.jsii.Kernel.call(this, "true", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doTry() {
            software.amazon.jsii.Kernel.call(this, "try", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doVoid() {
            software.amazon.jsii.Kernel.call(this, "void", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void doVolatile() {
            software.amazon.jsii.Kernel.call(this, "volatile", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IJsii487External.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IJsii487External")
@software.amazon.jsii.Jsii.Proxy(IJsii487External.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IJsii487External extends software.amazon.jsii.JsiiSerializable {

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IJsii487External.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }
    }

    /**
     * Internal default implementation for {@link IJsii487External}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IJsii487External {
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IJsii487External2.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IJsii487External2")
@software.amazon.jsii.Jsii.Proxy(IJsii487External2.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IJsii487External2 extends software.amazon.jsii.JsiiSerializable {

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IJsii487External2.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }
    }

    /**
     * Internal default implementation for {@link IJsii487External2}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IJsii487External2 {
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IJsii496.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IJsii496")
@software.amazon.jsii.Jsii.Proxy(IJsii496.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IJsii496 extends software.amazon.jsii.JsiiSerializable {

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IJsii496.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }
    }

    /**
     * Internal default implementation for {@link IJsii496}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IJsii496 {
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IMutableObjectLiteral.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IMutableObjectLiteral")
@software.amazon.jsii.Jsii.Proxy(IMutableObjectLiteral.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IMutableObjectLiteral extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getValue();

    /**
     */
    void setValue(final @org.jetbrains.annotations.NotNull java.lang.String value);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IMutableObjectLiteral.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setValue(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "value", java.util.Objects.requireNonNull(value, "value is required"));
        }
    }

    /**
     * Internal default implementation for {@link IMutableObjectLiteral}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IMutableObjectLiteral {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setValue(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "value", java.util.Objects.requireNonNull(value, "value is required"));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/INonInternalInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.INonInternalInterface")
@software.amazon.jsii.Jsii.Proxy(INonInternalInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface INonInternalInterface extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.IAnotherPublicInterface {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getB();

    /**
     */
    void setB(final @org.jetbrains.annotations.NotNull java.lang.String value);

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getC();

    /**
     */
    void setC(final @org.jetbrains.annotations.NotNull java.lang.String value);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.INonInternalInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getA() {
            return software.amazon.jsii.Kernel.get(this, "a", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setA(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "a", java.util.Objects.requireNonNull(value, "a is required"));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getB() {
            return software.amazon.jsii.Kernel.get(this, "b", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setB(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "b", java.util.Objects.requireNonNull(value, "b is required"));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getC() {
            return software.amazon.jsii.Kernel.get(this, "c", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setC(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "c", java.util.Objects.requireNonNull(value, "c is required"));
        }
    }

    /**
     * Internal default implementation for {@link INonInternalInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends INonInternalInterface, software.amazon.jsii.tests.calculator.IAnotherPublicInterface.Jsii$Default {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getA() {
            return software.amazon.jsii.Kernel.get(this, "a", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setA(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "a", java.util.Objects.requireNonNull(value, "a is required"));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getB() {
            return software.amazon.jsii.Kernel.get(this, "b", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setB(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "b", java.util.Objects.requireNonNull(value, "b is required"));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getC() {
            return software.amazon.jsii.Kernel.get(this, "c", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setC(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "c", java.util.Objects.requireNonNull(value, "c is required"));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IObjectWithProperty.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Make sure that setters are properly called on objects with interfaces.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IObjectWithProperty")
@software.amazon.jsii.Jsii.Proxy(IObjectWithProperty.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IObjectWithProperty extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getProperty();

    /**
     */
    void setProperty(final @org.jetbrains.annotations.NotNull java.lang.String value);

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Boolean wasSet();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IObjectWithProperty.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getProperty() {
            return software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setProperty(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "property", java.util.Objects.requireNonNull(value, "property is required"));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.Boolean wasSet() {
            return software.amazon.jsii.Kernel.call(this, "wasSet", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }
    }

    /**
     * Internal default implementation for {@link IObjectWithProperty}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IObjectWithProperty {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getProperty() {
            return software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setProperty(final @org.jetbrains.annotations.NotNull java.lang.String value) {
            software.amazon.jsii.Kernel.set(this, "property", java.util.Objects.requireNonNull(value, "property is required"));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.Boolean wasSet() {
            return software.amazon.jsii.Kernel.call(this, "wasSet", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IOptionalMethod.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Checks that optional result from interface method code generates correctly.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IOptionalMethod")
@software.amazon.jsii.Jsii.Proxy(IOptionalMethod.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IOptionalMethod extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.Nullable java.lang.String optional();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IOptionalMethod.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.Nullable java.lang.String optional() {
            return software.amazon.jsii.Kernel.call(this, "optional", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IOptionalMethod}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IOptionalMethod {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.Nullable java.lang.String optional() {
            return software.amazon.jsii.Kernel.call(this, "optional", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IPrivatelyImplemented.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IPrivatelyImplemented")
@software.amazon.jsii.Jsii.Proxy(IPrivatelyImplemented.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IPrivatelyImplemented extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Boolean getSuccess();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IPrivatelyImplemented.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.Boolean getSuccess() {
            return software.amazon.jsii.Kernel.get(this, "success", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }
    }

    /**
     * Internal default implementation for {@link IPrivatelyImplemented}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IPrivatelyImplemented {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.Boolean getSuccess() {
            return software.amazon.jsii.Kernel.get(this, "success", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IPublicInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IPublicInterface")
@software.amazon.jsii.Jsii.Proxy(IPublicInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IPublicInterface extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String bye();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IPublicInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String bye() {
            return software.amazon.jsii.Kernel.call(this, "bye", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IPublicInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IPublicInterface {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String bye() {
            return software.amazon.jsii.Kernel.call(this, "bye", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IPublicInterface2.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IPublicInterface2")
@software.amazon.jsii.Jsii.Proxy(IPublicInterface2.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IPublicInterface2 extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String ciao();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IPublicInterface2.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String ciao() {
            return software.amazon.jsii.Kernel.call(this, "ciao", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IPublicInterface2}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IPublicInterface2 {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String ciao() {
            return software.amazon.jsii.Kernel.call(this, "ciao", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IRandomNumberGenerator.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Generates random numbers.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IRandomNumberGenerator")
@software.amazon.jsii.Jsii.Proxy(IRandomNumberGenerator.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IRandomNumberGenerator extends software.amazon.jsii.JsiiSerializable {

    /**
     * Returns another random number.
     * <p>
     * @return A random number.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number next();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IRandomNumberGenerator.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * Returns another random number.
         * <p>
         * @return A random number.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.Number next() {
            return software.amazon.jsii.Kernel.call(this, "next", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }
    }

    /**
     * Internal default implementation for {@link IRandomNumberGenerator}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IRandomNumberGenerator {

        /**
         * Returns another random number.
         * <p>
         * @return A random number.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.Number next() {
            return software.amazon.jsii.Kernel.call(this, "next", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IReturnJsii976.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Returns a subclass of a known class which implements an interface.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IReturnJsii976")
@software.amazon.jsii.Jsii.Proxy(IReturnJsii976.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IReturnJsii976 extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number getFoo();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IReturnJsii976.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.Number getFoo() {
            return software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }
    }

    /**
     * Internal default implementation for {@link IReturnJsii976}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IReturnJsii976 {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.Number getFoo() {
            return software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IReturnsNumber.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IReturnsNumber")
@software.amazon.jsii.Jsii.Proxy(IReturnsNumber.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IReturnsNumber extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.Number getNumberProp();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.IDoublable obtainNumber();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IReturnsNumber.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.Number getNumberProp() {
            return software.amazon.jsii.Kernel.get(this, "numberProp", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.Number.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.IDoublable obtainNumber() {
            return software.amazon.jsii.Kernel.call(this, "obtainNumber", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.IDoublable.class));
        }
    }

    /**
     * Internal default implementation for {@link IReturnsNumber}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IReturnsNumber {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.Number getNumberProp() {
            return software.amazon.jsii.Kernel.get(this, "numberProp", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.Number.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.IDoublable obtainNumber() {
            return software.amazon.jsii.Kernel.call(this, "obtainNumber", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.IDoublable.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IStableInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IStableInterface")
@software.amazon.jsii.Jsii.Proxy(IStableInterface.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IStableInterface extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Optional
    default void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
        throw new UnsupportedOperationException("'void " + getClass().getCanonicalName() + "#setMutableProperty(@org.jetbrains.annotations.Nullable java.lang.Number)' is not implemented!");
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void method();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IStableInterface.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
            return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
            software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void method() {
            software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IStableInterface}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IStableInterface {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
            return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
            software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void method() {
            software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IStructReturningDelegate.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Verifies that a "pure" implementation of an interface works correctly.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IStructReturningDelegate")
@software.amazon.jsii.Jsii.Proxy(IStructReturningDelegate.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IStructReturningDelegate extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StructB returnStruct();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IStructReturningDelegate.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StructB returnStruct() {
            return software.amazon.jsii.Kernel.call(this, "returnStruct", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StructB.class));
        }
    }

    /**
     * Internal default implementation for {@link IStructReturningDelegate}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IStructReturningDelegate {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StructB returnStruct() {
            return software.amazon.jsii.Kernel.call(this, "returnStruct", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StructB.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/IWallClock.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Implement this interface.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.IWallClock")
@software.amazon.jsii.Jsii.Proxy(IWallClock.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IWallClock extends software.amazon.jsii.JsiiSerializable {

    /**
     * Returns the current time, formatted as an ISO-8601 string.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String iso8601Now();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IWallClock.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * Returns the current time, formatted as an ISO-8601 string.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String iso8601Now() {
            return software.amazon.jsii.Kernel.call(this, "iso8601Now", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IWallClock}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IWallClock {

        /**
         * Returns the current time, formatted as an ISO-8601 string.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String iso8601Now() {
            return software.amazon.jsii.Kernel.call(this, "iso8601Now", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ImplementInternalInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ImplementInternalInterface")
public class ImplementInternalInterface extends software.amazon.jsii.JsiiObject {

    protected ImplementInternalInterface(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ImplementInternalInterface(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ImplementInternalInterface() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getProp() {
        return software.amazon.jsii.Kernel.get(this, "prop", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setProp(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "prop", java.util.Objects.requireNonNull(value, "prop is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Implementation.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Implementation")
public class Implementation extends software.amazon.jsii.JsiiObject {

    protected Implementation(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Implementation(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Implementation() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
        return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ImplementsInterfaceWithInternal.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ImplementsInterfaceWithInternal")
public class ImplementsInterfaceWithInternal extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IInterfaceWithInternal {

    protected ImplementsInterfaceWithInternal(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ImplementsInterfaceWithInternal(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ImplementsInterfaceWithInternal() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public void visible() {
        software.amazon.jsii.Kernel.call(this, "visible", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ImplementsInterfaceWithInternalSubclass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ImplementsInterfaceWithInternalSubclass")
public class ImplementsInterfaceWithInternalSubclass extends software.amazon.jsii.tests.calculator.ImplementsInterfaceWithInternal {

    protected ImplementsInterfaceWithInternalSubclass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ImplementsInterfaceWithInternalSubclass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ImplementsInterfaceWithInternalSubclass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ImplementsPrivateInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ImplementsPrivateInterface")
public class ImplementsPrivateInterface extends software.amazon.jsii.JsiiObject {

    protected ImplementsPrivateInterface(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ImplementsPrivateInterface(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ImplementsPrivateInterface() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getPrivateValue() {
        return software.amazon.jsii.Kernel.get(this, "private", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setPrivateValue(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "private", java.util.Objects.requireNonNull(value, "private is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ImplictBaseOfBase.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ImplictBaseOfBase")
@software.amazon.jsii.Jsii.Proxy(ImplictBaseOfBase.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface ImplictBaseOfBase extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.base.BaseProps {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.time.Instant getGoo();

    /**
     * @return a {@link Builder} of {@link ImplictBaseOfBase}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ImplictBaseOfBase}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<ImplictBaseOfBase> {
        java.time.Instant goo;
        java.lang.String bar;
        software.amazon.jsii.tests.calculator.baseofbase.Very foo;

        /**
         * Sets the value of {@link ImplictBaseOfBase#getGoo}
         * @param goo the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder goo(java.time.Instant goo) {
            this.goo = goo;
            return this;
        }

        /**
         * Sets the value of {@link ImplictBaseOfBase#getBar}
         * @param bar the value to be set. This parameter is required.
         * @return {@code this}
         */
        public Builder bar(java.lang.String bar) {
            this.bar = bar;
            return this;
        }

        /**
         * Sets the value of {@link ImplictBaseOfBase#getFoo}
         * @param foo the value to be set. This parameter is required.
         * @return {@code this}
         */
        public Builder foo(software.amazon.jsii.tests.calculator.baseofbase.Very foo) {
            this.foo = foo;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ImplictBaseOfBase}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public ImplictBaseOfBase build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ImplictBaseOfBase}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ImplictBaseOfBase {
        private final java.time.Instant goo;
        private final java.lang.String bar;
        private final software.amazon.jsii.tests.calculator.baseofbase.Very foo;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.goo = software.amazon.jsii.Kernel.get(this, "goo", software.amazon.jsii.NativeType.forClass(java.time.Instant.class));
            this.bar = software.amazon.jsii.Kernel.get(this, "bar", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.foo = software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.baseofbase.Very.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.goo = java.util.Objects.requireNonNull(builder.goo, "goo is required");
            this.bar = java.util.Objects.requireNonNull(builder.bar, "bar is required");
            this.foo = java.util.Objects.requireNonNull(builder.foo, "foo is required");
        }

        @Override
        public final java.time.Instant getGoo() {
            return this.goo;
        }

        @Override
        public final java.lang.String getBar() {
            return this.bar;
        }

        @Override
        public final software.amazon.jsii.tests.calculator.baseofbase.Very getFoo() {
            return this.foo;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("goo", om.valueToTree(this.getGoo()));
            data.set("bar", om.valueToTree(this.getBar()));
            data.set("foo", om.valueToTree(this.getFoo()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.ImplictBaseOfBase"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ImplictBaseOfBase.Jsii$Proxy that = (ImplictBaseOfBase.Jsii$Proxy) o;

            if (!goo.equals(that.goo)) return false;
            if (!bar.equals(that.bar)) return false;
            return this.foo.equals(that.foo);
        }

        @Override
        public final int hashCode() {
            int result = this.goo.hashCode();
            result = 31 * result + (this.bar.hashCode());
            result = 31 * result + (this.foo.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/InbetweenClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.InbetweenClass")
public class InbetweenClass extends software.amazon.jsii.tests.calculator.PublicClass implements software.amazon.jsii.tests.calculator.IPublicInterface2 {

    protected InbetweenClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected InbetweenClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public InbetweenClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String ciao() {
        return software.amazon.jsii.Kernel.call(this, "ciao", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/InterfaceCollections.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Verifies that collections of interfaces or structs are correctly handled.
 * <p>
 * See: https://github.com/aws/jsii/issues/1196
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.InterfaceCollections")
public class InterfaceCollections extends software.amazon.jsii.JsiiObject {

    protected InterfaceCollections(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected InterfaceCollections(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.IBell> listOfInterfaces() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.InterfaceCollections.class, "listOfInterfaces", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IBell.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.StructA> listOfStructs() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.InterfaceCollections.class, "listOfStructs", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StructA.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.IBell> mapOfInterfaces() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.InterfaceCollections.class, "mapOfInterfaces", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IBell.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.StructA> mapOfStructs() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.InterfaceCollections.class, "mapOfStructs", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StructA.class))));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/InterfacesMaker.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * We can return arrays of interfaces See aws/aws-cdk#2362.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.InterfacesMaker")
public class InterfacesMaker extends software.amazon.jsii.JsiiObject {

    protected InterfacesMaker(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected InterfacesMaker(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param count This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.lib.IDoublable> makeInterfaces(final @org.jetbrains.annotations.NotNull java.lang.Number count) {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.InterfacesMaker.class, "makeInterfaces", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.IDoublable.class)), new Object[] { java.util.Objects.requireNonNull(count, "count is required") }));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Isomorphism.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Checks the "same instance" isomorphism is preserved within the constructor.
 * <p>
 * Create a subclass of this, and assert that <code>this.myself()</code> actually returns
 * <code>this</code> from within the constructor.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Isomorphism")
public abstract class Isomorphism extends software.amazon.jsii.JsiiObject {

    protected Isomorphism(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Isomorphism(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected Isomorphism() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Isomorphism myself() {
        return software.amazon.jsii.Kernel.call(this, "myself", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.Isomorphism.class));
    }

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.Isomorphism {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Issue2638.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Docstrings with period.
 * <p>
 * @see <a href="https://github.com/aws/jsii/issues/2638">https://github.com/aws/jsii/issues/2638</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Issue2638")
public class Issue2638 extends software.amazon.jsii.JsiiObject {

    protected Issue2638(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Issue2638(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * First sentence.
     * <p>
     * Second sentence. Third sentence.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Issue2638() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Issue2638B.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Issue2638B")
public class Issue2638B extends software.amazon.jsii.JsiiObject {

    protected Issue2638B(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Issue2638B(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Issue2638B() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/JSII417Derived.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.JSII417Derived")
public class JSII417Derived extends software.amazon.jsii.tests.calculator.JSII417PublicBaseOfBase {

    protected JSII417Derived(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected JSII417Derived(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param property This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public JSII417Derived(final @org.jetbrains.annotations.NotNull java.lang.String property) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(property, "property is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void bar() {
        software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void baz() {
        software.amazon.jsii.Kernel.call(this, "baz", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected @org.jetbrains.annotations.NotNull java.lang.String getProperty() {
        return software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/JSII417PublicBaseOfBase.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.JSII417PublicBaseOfBase")
public class JSII417PublicBaseOfBase extends software.amazon.jsii.JsiiObject {

    protected JSII417PublicBaseOfBase(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected JSII417PublicBaseOfBase(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public JSII417PublicBaseOfBase() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.JSII417PublicBaseOfBase makeInstance() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JSII417PublicBaseOfBase.class, "makeInstance", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.JSII417PublicBaseOfBase.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void foo() {
        software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean getHasRoot() {
        return software.amazon.jsii.Kernel.get(this, "hasRoot", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/JSObjectLiteralForInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.JSObjectLiteralForInterface")
public class JSObjectLiteralForInterface extends software.amazon.jsii.JsiiObject {

    protected JSObjectLiteralForInterface(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected JSObjectLiteralForInterface(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public JSObjectLiteralForInterface() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.IFriendly giveMeFriendly() {
        return software.amazon.jsii.Kernel.call(this, "giveMeFriendly", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.IFriendly.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IFriendlyRandomGenerator giveMeFriendlyGenerator() {
        return software.amazon.jsii.Kernel.call(this, "giveMeFriendlyGenerator", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IFriendlyRandomGenerator.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/JSObjectLiteralToNative.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.JSObjectLiteralToNative")
public class JSObjectLiteralToNative extends software.amazon.jsii.JsiiObject {

    protected JSObjectLiteralToNative(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected JSObjectLiteralToNative(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public JSObjectLiteralToNative() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.JSObjectLiteralToNativeClass returnLiteral() {
        return software.amazon.jsii.Kernel.call(this, "returnLiteral", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.JSObjectLiteralToNativeClass.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/JSObjectLiteralToNativeClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.JSObjectLiteralToNativeClass")
public class JSObjectLiteralToNativeClass extends software.amazon.jsii.JsiiObject {

    protected JSObjectLiteralToNativeClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected JSObjectLiteralToNativeClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public JSObjectLiteralToNativeClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getPropA() {
        return software.amazon.jsii.Kernel.get(this, "propA", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setPropA(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "propA", java.util.Objects.requireNonNull(value, "propA is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getPropB() {
        return software.amazon.jsii.Kernel.get(this, "propB", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setPropB(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        software.amazon.jsii.Kernel.set(this, "propB", java.util.Objects.requireNonNull(value, "propB is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/JavaReservedWords.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.JavaReservedWords")
public class JavaReservedWords extends software.amazon.jsii.JsiiObject {

    protected JavaReservedWords(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected JavaReservedWords(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public JavaReservedWords() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doAbstract() {
        software.amazon.jsii.Kernel.call(this, "abstract", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doAssert() {
        software.amazon.jsii.Kernel.call(this, "assert", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doBoolean() {
        software.amazon.jsii.Kernel.call(this, "boolean", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doBreak() {
        software.amazon.jsii.Kernel.call(this, "break", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doByte() {
        software.amazon.jsii.Kernel.call(this, "byte", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doCase() {
        software.amazon.jsii.Kernel.call(this, "case", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doCatch() {
        software.amazon.jsii.Kernel.call(this, "catch", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doChar() {
        software.amazon.jsii.Kernel.call(this, "char", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doClass() {
        software.amazon.jsii.Kernel.call(this, "class", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doConst() {
        software.amazon.jsii.Kernel.call(this, "const", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doContinue() {
        software.amazon.jsii.Kernel.call(this, "continue", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doDefault() {
        software.amazon.jsii.Kernel.call(this, "default", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doDo() {
        software.amazon.jsii.Kernel.call(this, "do", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doDouble() {
        software.amazon.jsii.Kernel.call(this, "double", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doElse() {
        software.amazon.jsii.Kernel.call(this, "else", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doEnum() {
        software.amazon.jsii.Kernel.call(this, "enum", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doExtends() {
        software.amazon.jsii.Kernel.call(this, "extends", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doFalse() {
        software.amazon.jsii.Kernel.call(this, "false", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doFinal() {
        software.amazon.jsii.Kernel.call(this, "final", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doFinally() {
        software.amazon.jsii.Kernel.call(this, "finally", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doFloat() {
        software.amazon.jsii.Kernel.call(this, "float", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doFor() {
        software.amazon.jsii.Kernel.call(this, "for", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doGoto() {
        software.amazon.jsii.Kernel.call(this, "goto", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doIf() {
        software.amazon.jsii.Kernel.call(this, "if", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doImplements() {
        software.amazon.jsii.Kernel.call(this, "implements", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doImport() {
        software.amazon.jsii.Kernel.call(this, "import", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doInstanceof() {
        software.amazon.jsii.Kernel.call(this, "instanceof", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doInt() {
        software.amazon.jsii.Kernel.call(this, "int", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doInterface() {
        software.amazon.jsii.Kernel.call(this, "interface", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doLong() {
        software.amazon.jsii.Kernel.call(this, "long", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doNative() {
        software.amazon.jsii.Kernel.call(this, "native", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doNew() {
        software.amazon.jsii.Kernel.call(this, "new", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doNull() {
        software.amazon.jsii.Kernel.call(this, "null", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doPackage() {
        software.amazon.jsii.Kernel.call(this, "package", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doPrivate() {
        software.amazon.jsii.Kernel.call(this, "private", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doProtected() {
        software.amazon.jsii.Kernel.call(this, "protected", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doPublic() {
        software.amazon.jsii.Kernel.call(this, "public", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doReturn() {
        software.amazon.jsii.Kernel.call(this, "return", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doShort() {
        software.amazon.jsii.Kernel.call(this, "short", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doStatic() {
        software.amazon.jsii.Kernel.call(this, "static", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doStrictfp() {
        software.amazon.jsii.Kernel.call(this, "strictfp", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doSuper() {
        software.amazon.jsii.Kernel.call(this, "super", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doSwitch() {
        software.amazon.jsii.Kernel.call(this, "switch", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doSynchronized() {
        software.amazon.jsii.Kernel.call(this, "synchronized", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doThis() {
        software.amazon.jsii.Kernel.call(this, "this", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doThrow() {
        software.amazon.jsii.Kernel.call(this, "throw", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doThrows() {
        software.amazon.jsii.Kernel.call(this, "throws", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doTransient() {
        software.amazon.jsii.Kernel.call(this, "transient", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doTrue() {
        software.amazon.jsii.Kernel.call(this, "true", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doTry() {
        software.amazon.jsii.Kernel.call(this, "try", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doVoid() {
        software.amazon.jsii.Kernel.call(this, "void", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doVolatile() {
        software.amazon.jsii.Kernel.call(this, "volatile", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getWhileValue() {
        return software.amazon.jsii.Kernel.get(this, "while", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setWhileValue(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "while", java.util.Objects.requireNonNull(value, "while is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Jsii487Derived.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Jsii487Derived")
public class Jsii487Derived extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IJsii487External2, software.amazon.jsii.tests.calculator.IJsii487External {

    protected Jsii487Derived(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Jsii487Derived(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Jsii487Derived() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Jsii496Derived.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Jsii496Derived")
public class Jsii496Derived extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IJsii496 {

    protected Jsii496Derived(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Jsii496Derived(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Jsii496Derived() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/JsiiAgent.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Host runtime version should be set via JSII_AGENT.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.JsiiAgent")
public class JsiiAgent extends software.amazon.jsii.JsiiObject {

    protected JsiiAgent(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected JsiiAgent(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public JsiiAgent() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * Returns the value of the JSII_AGENT environment variable.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.Nullable java.lang.String getValue() {
        return software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.JsiiAgent.class, "value", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/JsonFormatter.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Make sure structs are un-decorated on the way in.
 * <p>
 * @see <a href="https://github.com/aws/aws-cdk/issues/5066">https://github.com/aws/aws-cdk/issues/5066</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.JsonFormatter")
public class JsonFormatter extends software.amazon.jsii.JsiiObject {

    protected JsonFormatter(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected JsonFormatter(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyArray() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyArray", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyBooleanFalse() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyBooleanFalse", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyBooleanTrue() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyBooleanTrue", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyDate() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyDate", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyEmptyString() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyEmptyString", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyFunction() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyFunction", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyHash() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyHash", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyNull() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyNull", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyNumber() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyNumber", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyRef() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyRef", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyString() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyString", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyUndefined() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyUndefined", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object anyZero() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "anyZero", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     * @param value
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.Nullable java.lang.String stringify(final @org.jetbrains.annotations.Nullable java.lang.Object value) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "stringify", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { value });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.Nullable java.lang.String stringify() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.JsonFormatter.class, "stringify", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/LevelOne.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Validates that nested classes get correct code generation for the occasional forward reference.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.LevelOne")
public class LevelOne extends software.amazon.jsii.JsiiObject {

    protected LevelOne(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected LevelOne(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param props This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public LevelOne(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.LevelOneProps props) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(props, "props is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.LevelOneProps getProps() {
        return software.amazon.jsii.Kernel.get(this, "props", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.LevelOneProps.class));
    }
    /**
     */
    @software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.LevelOne.PropBooleanValue")
    @software.amazon.jsii.Jsii.Proxy(PropBooleanValue.Jsii$Proxy.class)
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static interface PropBooleanValue extends software.amazon.jsii.JsiiSerializable {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @org.jetbrains.annotations.NotNull java.lang.Boolean getValue();

        /**
         * @return a {@link Builder} of {@link PropBooleanValue}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        static Builder builder() {
            return new Builder();
        }
        /**
         * A builder for {@link PropBooleanValue}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static final class Builder implements software.amazon.jsii.Builder<PropBooleanValue> {
            java.lang.Boolean value;

            /**
             * Sets the value of {@link PropBooleanValue#getValue}
             * @param value the value to be set. This parameter is required.
             * @return {@code this}
             */
            @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
            public Builder value(java.lang.Boolean value) {
                this.value = value;
                return this;
            }

            /**
             * Builds the configured instance.
             * @return a new instance of {@link PropBooleanValue}
             * @throws NullPointerException if any required attribute was not provided
             */
            @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
            @Override
            public PropBooleanValue build() {
                return new Jsii$Proxy(this);
            }
        }

        /**
         * An implementation for {@link PropBooleanValue}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @software.amazon.jsii.Internal
        final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements PropBooleanValue {
            private final java.lang.Boolean value;

            /**
             * Constructor that initializes the object based on values retrieved from the JsiiObject.
             * @param objRef Reference to the JSII managed object.
             */
            protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
                super(objRef);
                this.value = software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
            }

            /**
             * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
             */
            protected Jsii$Proxy(final Builder builder) {
                super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
                this.value = java.util.Objects.requireNonNull(builder.value, "value is required");
            }

            @Override
            public final java.lang.Boolean getValue() {
                return this.value;
            }

            @Override
            @software.amazon.jsii.Internal
            public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
                final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
                final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

                data.set("value", om.valueToTree(this.getValue()));

                final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
                struct.set("fqn", om.valueToTree("jsii-calc.LevelOne.PropBooleanValue"));
                struct.set("data", data);

                final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
                obj.set("$jsii.struct", struct);

                return obj;
            }

            @Override
            public final boolean equals(final Object o) {
                if (this == o) return true;
                if (o == null || getClass() != o.getClass()) return false;

                PropBooleanValue.Jsii$Proxy that = (PropBooleanValue.Jsii$Proxy) o;

                return this.value.equals(that.value);
            }

            @Override
            public final int hashCode() {
                int result = this.value.hashCode();
                return result;
            }
        }
    }
    /**
     */
    @software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.LevelOne.PropProperty")
    @software.amazon.jsii.Jsii.Proxy(PropProperty.Jsii$Proxy.class)
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static interface PropProperty extends software.amazon.jsii.JsiiSerializable {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.LevelOne.PropBooleanValue getProp();

        /**
         * @return a {@link Builder} of {@link PropProperty}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        static Builder builder() {
            return new Builder();
        }
        /**
         * A builder for {@link PropProperty}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static final class Builder implements software.amazon.jsii.Builder<PropProperty> {
            software.amazon.jsii.tests.calculator.LevelOne.PropBooleanValue prop;

            /**
             * Sets the value of {@link PropProperty#getProp}
             * @param prop the value to be set. This parameter is required.
             * @return {@code this}
             */
            @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
            public Builder prop(software.amazon.jsii.tests.calculator.LevelOne.PropBooleanValue prop) {
                this.prop = prop;
                return this;
            }

            /**
             * Builds the configured instance.
             * @return a new instance of {@link PropProperty}
             * @throws NullPointerException if any required attribute was not provided
             */
            @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
            @Override
            public PropProperty build() {
                return new Jsii$Proxy(this);
            }
        }

        /**
         * An implementation for {@link PropProperty}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @software.amazon.jsii.Internal
        final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements PropProperty {
            private final software.amazon.jsii.tests.calculator.LevelOne.PropBooleanValue prop;

            /**
             * Constructor that initializes the object based on values retrieved from the JsiiObject.
             * @param objRef Reference to the JSII managed object.
             */
            protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
                super(objRef);
                this.prop = software.amazon.jsii.Kernel.get(this, "prop", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.LevelOne.PropBooleanValue.class));
            }

            /**
             * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
             */
            protected Jsii$Proxy(final Builder builder) {
                super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
                this.prop = java.util.Objects.requireNonNull(builder.prop, "prop is required");
            }

            @Override
            public final software.amazon.jsii.tests.calculator.LevelOne.PropBooleanValue getProp() {
                return this.prop;
            }

            @Override
            @software.amazon.jsii.Internal
            public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
                final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
                final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

                data.set("prop", om.valueToTree(this.getProp()));

                final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
                struct.set("fqn", om.valueToTree("jsii-calc.LevelOne.PropProperty"));
                struct.set("data", data);

                final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
                obj.set("$jsii.struct", struct);

                return obj;
            }

            @Override
            public final boolean equals(final Object o) {
                if (this == o) return true;
                if (o == null || getClass() != o.getClass()) return false;

                PropProperty.Jsii$Proxy that = (PropProperty.Jsii$Proxy) o;

                return this.prop.equals(that.prop);
            }

            @Override
            public final int hashCode() {
                int result = this.prop.hashCode();
                return result;
            }
        }
    }

    /**
     * A fluent builder for {@link software.amazon.jsii.tests.calculator.LevelOne}.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<software.amazon.jsii.tests.calculator.LevelOne> {
        /**
         * @return a new instance of {@link Builder}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create() {
            return new Builder();
        }

        private final software.amazon.jsii.tests.calculator.LevelOneProps.Builder props;

        private Builder() {
            this.props = new software.amazon.jsii.tests.calculator.LevelOneProps.Builder();
        }

        /**
         * @return {@code this}
         * @param prop This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder prop(final software.amazon.jsii.tests.calculator.LevelOne.PropProperty prop) {
            this.props.prop(prop);
            return this;
        }

        /**
         * @return a newly built instance of {@link software.amazon.jsii.tests.calculator.LevelOne}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public software.amazon.jsii.tests.calculator.LevelOne build() {
            return new software.amazon.jsii.tests.calculator.LevelOne(
                this.props.build()
            );
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/LevelOneProps.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.LevelOneProps")
@software.amazon.jsii.Jsii.Proxy(LevelOneProps.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface LevelOneProps extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.LevelOne.PropProperty getProp();

    /**
     * @return a {@link Builder} of {@link LevelOneProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link LevelOneProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<LevelOneProps> {
        software.amazon.jsii.tests.calculator.LevelOne.PropProperty prop;

        /**
         * Sets the value of {@link LevelOneProps#getProp}
         * @param prop the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder prop(software.amazon.jsii.tests.calculator.LevelOne.PropProperty prop) {
            this.prop = prop;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link LevelOneProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public LevelOneProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link LevelOneProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements LevelOneProps {
        private final software.amazon.jsii.tests.calculator.LevelOne.PropProperty prop;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.prop = software.amazon.jsii.Kernel.get(this, "prop", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.LevelOne.PropProperty.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.prop = java.util.Objects.requireNonNull(builder.prop, "prop is required");
        }

        @Override
        public final software.amazon.jsii.tests.calculator.LevelOne.PropProperty getProp() {
            return this.prop;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("prop", om.valueToTree(this.getProp()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.LevelOneProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            LevelOneProps.Jsii$Proxy that = (LevelOneProps.Jsii$Proxy) o;

            return this.prop.equals(that.prop);
        }

        @Override
        public final int hashCode() {
            int result = this.prop.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/LoadBalancedFargateServiceProps.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * jsii#298: show default values in sphinx documentation, and respect newlines.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.LoadBalancedFargateServiceProps")
@software.amazon.jsii.Jsii.Proxy(LoadBalancedFargateServiceProps.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface LoadBalancedFargateServiceProps extends software.amazon.jsii.JsiiSerializable {

    /**
     * The container port of the application load balancer attached to your Fargate service.
     * <p>
     * Corresponds to container port mapping.
     * <p>
     * Default: 80
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Number getContainerPort() {
        return null;
    }

    /**
     * The number of cpu units used by the task.
     * <p>
     * Valid values, which determines your range of valid values for the memory parameter:
     * 256 (.25 vCPU) - Available memory values: 0.5GB, 1GB, 2GB
     * 512 (.5 vCPU) - Available memory values: 1GB, 2GB, 3GB, 4GB
     * 1024 (1 vCPU) - Available memory values: 2GB, 3GB, 4GB, 5GB, 6GB, 7GB, 8GB
     * 2048 (2 vCPU) - Available memory values: Between 4GB and 16GB in 1GB increments
     * 4096 (4 vCPU) - Available memory values: Between 8GB and 30GB in 1GB increments
     * <p>
     * This default is set in the underlying FargateTaskDefinition construct.
     * <p>
     * Default: 256
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getCpu() {
        return null;
    }

    /**
     * The amount (in MiB) of memory used by the task.
     * <p>
     * This field is required and you must use one of the following values, which determines your range of valid values
     * for the cpu parameter:
     * <p>
     * 0.5GB, 1GB, 2GB - Available cpu values: 256 (.25 vCPU)
     * <p>
     * 1GB, 2GB, 3GB, 4GB - Available cpu values: 512 (.5 vCPU)
     * <p>
     * 2GB, 3GB, 4GB, 5GB, 6GB, 7GB, 8GB - Available cpu values: 1024 (1 vCPU)
     * <p>
     * Between 4GB and 16GB in 1GB increments - Available cpu values: 2048 (2 vCPU)
     * <p>
     * Between 8GB and 30GB in 1GB increments - Available cpu values: 4096 (4 vCPU)
     * <p>
     * This default is set in the underlying FargateTaskDefinition construct.
     * <p>
     * Default: 512
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getMemoryMiB() {
        return null;
    }

    /**
     * Determines whether the Application Load Balancer will be internet-facing.
     * <p>
     * Default: true
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Boolean getPublicLoadBalancer() {
        return null;
    }

    /**
     * Determines whether your Fargate Service will be assigned a public IP address.
     * <p>
     * Default: false
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Boolean getPublicTasks() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link LoadBalancedFargateServiceProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link LoadBalancedFargateServiceProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<LoadBalancedFargateServiceProps> {
        java.lang.Number containerPort;
        java.lang.String cpu;
        java.lang.String memoryMiB;
        java.lang.Boolean publicLoadBalancer;
        java.lang.Boolean publicTasks;

        /**
         * Sets the value of {@link LoadBalancedFargateServiceProps#getContainerPort}
         * @param containerPort The container port of the application load balancer attached to your Fargate service.
         *                      Corresponds to container port mapping.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder containerPort(java.lang.Number containerPort) {
            this.containerPort = containerPort;
            return this;
        }

        /**
         * Sets the value of {@link LoadBalancedFargateServiceProps#getCpu}
         * @param cpu The number of cpu units used by the task.
         *            Valid values, which determines your range of valid values for the memory parameter:
         *            256 (.25 vCPU) - Available memory values: 0.5GB, 1GB, 2GB
         *            512 (.5 vCPU) - Available memory values: 1GB, 2GB, 3GB, 4GB
         *            1024 (1 vCPU) - Available memory values: 2GB, 3GB, 4GB, 5GB, 6GB, 7GB, 8GB
         *            2048 (2 vCPU) - Available memory values: Between 4GB and 16GB in 1GB increments
         *            4096 (4 vCPU) - Available memory values: Between 8GB and 30GB in 1GB increments
         *            <p>
         *            This default is set in the underlying FargateTaskDefinition construct.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder cpu(java.lang.String cpu) {
            this.cpu = cpu;
            return this;
        }

        /**
         * Sets the value of {@link LoadBalancedFargateServiceProps#getMemoryMiB}
         * @param memoryMiB The amount (in MiB) of memory used by the task.
         *                  This field is required and you must use one of the following values, which determines your range of valid values
         *                  for the cpu parameter:
         *                  <p>
         *                  0.5GB, 1GB, 2GB - Available cpu values: 256 (.25 vCPU)
         *                  <p>
         *                  1GB, 2GB, 3GB, 4GB - Available cpu values: 512 (.5 vCPU)
         *                  <p>
         *                  2GB, 3GB, 4GB, 5GB, 6GB, 7GB, 8GB - Available cpu values: 1024 (1 vCPU)
         *                  <p>
         *                  Between 4GB and 16GB in 1GB increments - Available cpu values: 2048 (2 vCPU)
         *                  <p>
         *                  Between 8GB and 30GB in 1GB increments - Available cpu values: 4096 (4 vCPU)
         *                  <p>
         *                  This default is set in the underlying FargateTaskDefinition construct.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder memoryMiB(java.lang.String memoryMiB) {
            this.memoryMiB = memoryMiB;
            return this;
        }

        /**
         * Sets the value of {@link LoadBalancedFargateServiceProps#getPublicLoadBalancer}
         * @param publicLoadBalancer Determines whether the Application Load Balancer will be internet-facing.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder publicLoadBalancer(java.lang.Boolean publicLoadBalancer) {
            this.publicLoadBalancer = publicLoadBalancer;
            return this;
        }

        /**
         * Sets the value of {@link LoadBalancedFargateServiceProps#getPublicTasks}
         * @param publicTasks Determines whether your Fargate Service will be assigned a public IP address.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder publicTasks(java.lang.Boolean publicTasks) {
            this.publicTasks = publicTasks;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link LoadBalancedFargateServiceProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public LoadBalancedFargateServiceProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link LoadBalancedFargateServiceProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements LoadBalancedFargateServiceProps {
        private final java.lang.Number containerPort;
        private final java.lang.String cpu;
        private final java.lang.String memoryMiB;
        private final java.lang.Boolean publicLoadBalancer;
        private final java.lang.Boolean publicTasks;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.containerPort = software.amazon.jsii.Kernel.get(this, "containerPort", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
            this.cpu = software.amazon.jsii.Kernel.get(this, "cpu", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.memoryMiB = software.amazon.jsii.Kernel.get(this, "memoryMiB", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.publicLoadBalancer = software.amazon.jsii.Kernel.get(this, "publicLoadBalancer", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
            this.publicTasks = software.amazon.jsii.Kernel.get(this, "publicTasks", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.containerPort = builder.containerPort;
            this.cpu = builder.cpu;
            this.memoryMiB = builder.memoryMiB;
            this.publicLoadBalancer = builder.publicLoadBalancer;
            this.publicTasks = builder.publicTasks;
        }

        @Override
        public final java.lang.Number getContainerPort() {
            return this.containerPort;
        }

        @Override
        public final java.lang.String getCpu() {
            return this.cpu;
        }

        @Override
        public final java.lang.String getMemoryMiB() {
            return this.memoryMiB;
        }

        @Override
        public final java.lang.Boolean getPublicLoadBalancer() {
            return this.publicLoadBalancer;
        }

        @Override
        public final java.lang.Boolean getPublicTasks() {
            return this.publicTasks;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getContainerPort() != null) {
                data.set("containerPort", om.valueToTree(this.getContainerPort()));
            }
            if (this.getCpu() != null) {
                data.set("cpu", om.valueToTree(this.getCpu()));
            }
            if (this.getMemoryMiB() != null) {
                data.set("memoryMiB", om.valueToTree(this.getMemoryMiB()));
            }
            if (this.getPublicLoadBalancer() != null) {
                data.set("publicLoadBalancer", om.valueToTree(this.getPublicLoadBalancer()));
            }
            if (this.getPublicTasks() != null) {
                data.set("publicTasks", om.valueToTree(this.getPublicTasks()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.LoadBalancedFargateServiceProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            LoadBalancedFargateServiceProps.Jsii$Proxy that = (LoadBalancedFargateServiceProps.Jsii$Proxy) o;

            if (this.containerPort != null ? !this.containerPort.equals(that.containerPort) : that.containerPort != null) return false;
            if (this.cpu != null ? !this.cpu.equals(that.cpu) : that.cpu != null) return false;
            if (this.memoryMiB != null ? !this.memoryMiB.equals(that.memoryMiB) : that.memoryMiB != null) return false;
            if (this.publicLoadBalancer != null ? !this.publicLoadBalancer.equals(that.publicLoadBalancer) : that.publicLoadBalancer != null) return false;
            return this.publicTasks != null ? this.publicTasks.equals(that.publicTasks) : that.publicTasks == null;
        }

        @Override
        public final int hashCode() {
            int result = this.containerPort != null ? this.containerPort.hashCode() : 0;
            result = 31 * result + (this.cpu != null ? this.cpu.hashCode() : 0);
            result = 31 * result + (this.memoryMiB != null ? this.memoryMiB.hashCode() : 0);
            result = 31 * result + (this.publicLoadBalancer != null ? this.publicLoadBalancer.hashCode() : 0);
            result = 31 * result + (this.publicTasks != null ? this.publicTasks.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/MethodNamedProperty.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.MethodNamedProperty")
public class MethodNamedProperty extends software.amazon.jsii.JsiiObject {

    protected MethodNamedProperty(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected MethodNamedProperty(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public MethodNamedProperty() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String property() {
        return software.amazon.jsii.Kernel.call(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getElite() {
        return software.amazon.jsii.Kernel.get(this, "elite", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Multiply.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * The "*" binary operation.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Multiply")
public class Multiply extends software.amazon.jsii.tests.calculator.BinaryOperation implements software.amazon.jsii.tests.calculator.IFriendlier, software.amazon.jsii.tests.calculator.IRandomNumberGenerator {

    protected Multiply(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Multiply(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * Creates a BinaryOperation.
     * <p>
     * @param lhs Left-hand side operand. This parameter is required.
     * @param rhs Right-hand side operand. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Multiply(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue lhs, final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue rhs) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(lhs, "lhs is required"), java.util.Objects.requireNonNull(rhs, "rhs is required") });
    }

    /**
     * Say farewell.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String farewell() {
        return software.amazon.jsii.Kernel.call(this, "farewell", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * Say goodbye.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String goodbye() {
        return software.amazon.jsii.Kernel.call(this, "goodbye", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * Returns another random number.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.Number next() {
        return software.amazon.jsii.Kernel.call(this, "next", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * String representation of the value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String toString() {
        return software.amazon.jsii.Kernel.call(this, "toString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * The value.
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
        return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Negate.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * The negation operation ("-value").
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Negate")
public class Negate extends software.amazon.jsii.tests.calculator.UnaryOperation implements software.amazon.jsii.tests.calculator.IFriendlier {

    protected Negate(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Negate(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param operand This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Negate(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue operand) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(operand, "operand is required") });
    }

    /**
     * Say farewell.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String farewell() {
        return software.amazon.jsii.Kernel.call(this, "farewell", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * Say goodbye.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String goodbye() {
        return software.amazon.jsii.Kernel.call(this, "goodbye", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * Say hello!
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String hello() {
        return software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * String representation of the value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String toString() {
        return software.amazon.jsii.Kernel.call(this, "toString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * The value.
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
        return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/NestedClassInstance.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.NestedClassInstance")
public class NestedClassInstance extends software.amazon.jsii.JsiiObject {

    protected NestedClassInstance(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected NestedClassInstance(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.custom_submodule_name.NestingClass.NestedClass makeInstance() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.NestedClassInstance.class, "makeInstance", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.custom_submodule_name.NestingClass.NestedClass.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/NestedStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.NestedStruct")
@software.amazon.jsii.Jsii.Proxy(NestedStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface NestedStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     * When provided, must be &gt; 0.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number getNumberProp();

    /**
     * @return a {@link Builder} of {@link NestedStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link NestedStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<NestedStruct> {
        java.lang.Number numberProp;

        /**
         * Sets the value of {@link NestedStruct#getNumberProp}
         * @param numberProp When provided, must be &gt; 0. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder numberProp(java.lang.Number numberProp) {
            this.numberProp = numberProp;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link NestedStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public NestedStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link NestedStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements NestedStruct {
        private final java.lang.Number numberProp;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.numberProp = software.amazon.jsii.Kernel.get(this, "numberProp", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.numberProp = java.util.Objects.requireNonNull(builder.numberProp, "numberProp is required");
        }

        @Override
        public final java.lang.Number getNumberProp() {
            return this.numberProp;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("numberProp", om.valueToTree(this.getNumberProp()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.NestedStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            NestedStruct.Jsii$Proxy that = (NestedStruct.Jsii$Proxy) o;

            return this.numberProp.equals(that.numberProp);
        }

        @Override
        public final int hashCode() {
            int result = this.numberProp.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/NodeStandardLibrary.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Test fixture to verify that jsii modules can use the node standard library.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.NodeStandardLibrary")
public class NodeStandardLibrary extends software.amazon.jsii.JsiiObject {

    protected NodeStandardLibrary(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected NodeStandardLibrary(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public NodeStandardLibrary() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * Uses node.js "crypto" module to calculate sha256 of a string.
     * <p>
     * @return "6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50"
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String cryptoSha256() {
        return software.amazon.jsii.Kernel.call(this, "cryptoSha256", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * Reads a local resource file (resource.txt) asynchronously.
     * <p>
     * @return "Hello, resource!"
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String fsReadFile() {
        return software.amazon.jsii.Kernel.asyncCall(this, "fsReadFile", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * Sync version of fsReadFile.
     * <p>
     * @return "Hello, resource! SYNC!"
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String fsReadFileSync() {
        return software.amazon.jsii.Kernel.call(this, "fsReadFileSync", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * Returns the current os.platform() from the "os" node module.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getOsPlatform() {
        return software.amazon.jsii.Kernel.get(this, "osPlatform", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/NullShouldBeTreatedAsUndefined.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * jsii#282, aws-cdk#157: null should be treated as "undefined".
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.NullShouldBeTreatedAsUndefined")
public class NullShouldBeTreatedAsUndefined extends software.amazon.jsii.JsiiObject {

    protected NullShouldBeTreatedAsUndefined(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected NullShouldBeTreatedAsUndefined(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param _param1 This parameter is required.
     * @param optional
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public NullShouldBeTreatedAsUndefined(final @org.jetbrains.annotations.NotNull java.lang.String _param1, final @org.jetbrains.annotations.Nullable java.lang.Object optional) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(_param1, "_param1 is required"), optional });
    }

    /**
     * @param _param1 This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public NullShouldBeTreatedAsUndefined(final @org.jetbrains.annotations.NotNull java.lang.String _param1) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(_param1, "_param1 is required") });
    }

    /**
     * @param value
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void giveMeUndefined(final @org.jetbrains.annotations.Nullable java.lang.Object value) {
        software.amazon.jsii.Kernel.call(this, "giveMeUndefined", software.amazon.jsii.NativeType.VOID, new Object[] { value });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void giveMeUndefined() {
        software.amazon.jsii.Kernel.call(this, "giveMeUndefined", software.amazon.jsii.NativeType.VOID);
    }

    /**
     * @param input This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void giveMeUndefinedInsideAnObject(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.NullShouldBeTreatedAsUndefinedData input) {
        software.amazon.jsii.Kernel.call(this, "giveMeUndefinedInsideAnObject", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(input, "input is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void verifyPropertyIsUndefined() {
        software.amazon.jsii.Kernel.call(this, "verifyPropertyIsUndefined", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.lang.String getChangeMeToUndefined() {
        return software.amazon.jsii.Kernel.get(this, "changeMeToUndefined", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setChangeMeToUndefined(final @org.jetbrains.annotations.Nullable java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "changeMeToUndefined", value);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/NullShouldBeTreatedAsUndefinedData.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.NullShouldBeTreatedAsUndefinedData")
@software.amazon.jsii.Jsii.Proxy(NullShouldBeTreatedAsUndefinedData.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface NullShouldBeTreatedAsUndefinedData extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> getArrayWithThreeElementsAndUndefinedAsSecondArgument();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Object getThisShouldBeUndefined() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link NullShouldBeTreatedAsUndefinedData}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link NullShouldBeTreatedAsUndefinedData}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<NullShouldBeTreatedAsUndefinedData> {
        java.util.List<java.lang.Object> arrayWithThreeElementsAndUndefinedAsSecondArgument;
        java.lang.Object thisShouldBeUndefined;

        /**
         * Sets the value of {@link NullShouldBeTreatedAsUndefinedData#getArrayWithThreeElementsAndUndefinedAsSecondArgument}
         * @param arrayWithThreeElementsAndUndefinedAsSecondArgument the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @SuppressWarnings("unchecked")
        public Builder arrayWithThreeElementsAndUndefinedAsSecondArgument(java.util.List<? extends java.lang.Object> arrayWithThreeElementsAndUndefinedAsSecondArgument) {
            this.arrayWithThreeElementsAndUndefinedAsSecondArgument = (java.util.List<java.lang.Object>)arrayWithThreeElementsAndUndefinedAsSecondArgument;
            return this;
        }

        /**
         * Sets the value of {@link NullShouldBeTreatedAsUndefinedData#getThisShouldBeUndefined}
         * @param thisShouldBeUndefined the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder thisShouldBeUndefined(java.lang.Object thisShouldBeUndefined) {
            this.thisShouldBeUndefined = thisShouldBeUndefined;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link NullShouldBeTreatedAsUndefinedData}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public NullShouldBeTreatedAsUndefinedData build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link NullShouldBeTreatedAsUndefinedData}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements NullShouldBeTreatedAsUndefinedData {
        private final java.util.List<java.lang.Object> arrayWithThreeElementsAndUndefinedAsSecondArgument;
        private final java.lang.Object thisShouldBeUndefined;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.arrayWithThreeElementsAndUndefinedAsSecondArgument = software.amazon.jsii.Kernel.get(this, "arrayWithThreeElementsAndUndefinedAsSecondArgument", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class)));
            this.thisShouldBeUndefined = software.amazon.jsii.Kernel.get(this, "thisShouldBeUndefined", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        @SuppressWarnings("unchecked")
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.arrayWithThreeElementsAndUndefinedAsSecondArgument = (java.util.List<java.lang.Object>)java.util.Objects.requireNonNull(builder.arrayWithThreeElementsAndUndefinedAsSecondArgument, "arrayWithThreeElementsAndUndefinedAsSecondArgument is required");
            this.thisShouldBeUndefined = builder.thisShouldBeUndefined;
        }

        @Override
        public final java.util.List<java.lang.Object> getArrayWithThreeElementsAndUndefinedAsSecondArgument() {
            return this.arrayWithThreeElementsAndUndefinedAsSecondArgument;
        }

        @Override
        public final java.lang.Object getThisShouldBeUndefined() {
            return this.thisShouldBeUndefined;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("arrayWithThreeElementsAndUndefinedAsSecondArgument", om.valueToTree(this.getArrayWithThreeElementsAndUndefinedAsSecondArgument()));
            if (this.getThisShouldBeUndefined() != null) {
                data.set("thisShouldBeUndefined", om.valueToTree(this.getThisShouldBeUndefined()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.NullShouldBeTreatedAsUndefinedData"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            NullShouldBeTreatedAsUndefinedData.Jsii$Proxy that = (NullShouldBeTreatedAsUndefinedData.Jsii$Proxy) o;

            if (!arrayWithThreeElementsAndUndefinedAsSecondArgument.equals(that.arrayWithThreeElementsAndUndefinedAsSecondArgument)) return false;
            return this.thisShouldBeUndefined != null ? this.thisShouldBeUndefined.equals(that.thisShouldBeUndefined) : that.thisShouldBeUndefined == null;
        }

        @Override
        public final int hashCode() {
            int result = this.arrayWithThreeElementsAndUndefinedAsSecondArgument.hashCode();
            result = 31 * result + (this.thisShouldBeUndefined != null ? this.thisShouldBeUndefined.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/NumberGenerator.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * This allows us to test that a reference can be stored for objects that implement interfaces.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.NumberGenerator")
public class NumberGenerator extends software.amazon.jsii.JsiiObject {

    protected NumberGenerator(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected NumberGenerator(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param generator This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public NumberGenerator(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IRandomNumberGenerator generator) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(generator, "generator is required") });
    }

    /**
     * @param gen This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean isSameGenerator(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IRandomNumberGenerator gen) {
        return software.amazon.jsii.Kernel.call(this, "isSameGenerator", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(gen, "gen is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number nextTimes100() {
        return software.amazon.jsii.Kernel.call(this, "nextTimes100", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IRandomNumberGenerator getGenerator() {
        return software.amazon.jsii.Kernel.get(this, "generator", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IRandomNumberGenerator.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setGenerator(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IRandomNumberGenerator value) {
        software.amazon.jsii.Kernel.set(this, "generator", java.util.Objects.requireNonNull(value, "generator is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ObjectRefsInCollections.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Verify that object references can be passed inside collections.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ObjectRefsInCollections")
public class ObjectRefsInCollections extends software.amazon.jsii.JsiiObject {

    protected ObjectRefsInCollections(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ObjectRefsInCollections(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ObjectRefsInCollections() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * Returns the sum of all values.
     * <p>
     * @param values This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number sumFromArray(final @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.lib.NumericValue> values) {
        return software.amazon.jsii.Kernel.call(this, "sumFromArray", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(values, "values is required") });
    }

    /**
     * Returns the sum of all values in a map.
     * <p>
     * @param values This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number sumFromMap(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.lib.NumericValue> values) {
        return software.amazon.jsii.Kernel.call(this, "sumFromMap", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(values, "values is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ObjectWithPropertyProvider.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ObjectWithPropertyProvider")
public class ObjectWithPropertyProvider extends software.amazon.jsii.JsiiObject {

    protected ObjectWithPropertyProvider(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ObjectWithPropertyProvider(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IObjectWithProperty provide() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.ObjectWithPropertyProvider.class, "provide", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IObjectWithProperty.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Old.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * (deprecated) Old class.
 * <p>
 * @deprecated Use the new class or the old class whatever you want because
 * whatever you like is always the best
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
@Deprecated
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Old")
public class Old extends software.amazon.jsii.JsiiObject {

    protected Old(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Old(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Old() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * (deprecated) Doo wop that thing.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public void doAThing() {
        software.amazon.jsii.Kernel.call(this, "doAThing", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/OptionalArgumentInvoker.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.OptionalArgumentInvoker")
public class OptionalArgumentInvoker extends software.amazon.jsii.JsiiObject {

    protected OptionalArgumentInvoker(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected OptionalArgumentInvoker(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param delegate This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public OptionalArgumentInvoker(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IInterfaceWithOptionalMethodArguments delegate) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(delegate, "delegate is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void invokeWithOptional() {
        software.amazon.jsii.Kernel.call(this, "invokeWithOptional", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void invokeWithoutOptional() {
        software.amazon.jsii.Kernel.call(this, "invokeWithoutOptional", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/OptionalConstructorArgument.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.OptionalConstructorArgument")
public class OptionalConstructorArgument extends software.amazon.jsii.JsiiObject {

    protected OptionalConstructorArgument(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected OptionalConstructorArgument(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param arg1 This parameter is required.
     * @param arg2 This parameter is required.
     * @param arg3
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public OptionalConstructorArgument(final @org.jetbrains.annotations.NotNull java.lang.Number arg1, final @org.jetbrains.annotations.NotNull java.lang.String arg2, final @org.jetbrains.annotations.Nullable java.time.Instant arg3) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(arg1, "arg1 is required"), java.util.Objects.requireNonNull(arg2, "arg2 is required"), arg3 });
    }

    /**
     * @param arg1 This parameter is required.
     * @param arg2 This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public OptionalConstructorArgument(final @org.jetbrains.annotations.NotNull java.lang.Number arg1, final @org.jetbrains.annotations.NotNull java.lang.String arg2) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(arg1, "arg1 is required"), java.util.Objects.requireNonNull(arg2, "arg2 is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getArg1() {
        return software.amazon.jsii.Kernel.get(this, "arg1", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getArg2() {
        return software.amazon.jsii.Kernel.get(this, "arg2", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.time.Instant getArg3() {
        return software.amazon.jsii.Kernel.get(this, "arg3", software.amazon.jsii.NativeType.forClass(java.time.Instant.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/OptionalStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.OptionalStruct")
@software.amazon.jsii.Jsii.Proxy(OptionalStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface OptionalStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getField() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link OptionalStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link OptionalStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<OptionalStruct> {
        java.lang.String field;

        /**
         * Sets the value of {@link OptionalStruct#getField}
         * @param field the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder field(java.lang.String field) {
            this.field = field;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link OptionalStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public OptionalStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link OptionalStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements OptionalStruct {
        private final java.lang.String field;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.field = software.amazon.jsii.Kernel.get(this, "field", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.field = builder.field;
        }

        @Override
        public final java.lang.String getField() {
            return this.field;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getField() != null) {
                data.set("field", om.valueToTree(this.getField()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.OptionalStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            OptionalStruct.Jsii$Proxy that = (OptionalStruct.Jsii$Proxy) o;

            return this.field != null ? this.field.equals(that.field) : that.field == null;
        }

        @Override
        public final int hashCode() {
            int result = this.field != null ? this.field.hashCode() : 0;
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/OptionalStructConsumer.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.OptionalStructConsumer")
public class OptionalStructConsumer extends software.amazon.jsii.JsiiObject {

    protected OptionalStructConsumer(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected OptionalStructConsumer(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param optionalStruct
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public OptionalStructConsumer(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.OptionalStruct optionalStruct) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { optionalStruct });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public OptionalStructConsumer() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean getParameterWasUndefined() {
        return software.amazon.jsii.Kernel.get(this, "parameterWasUndefined", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.lang.String getFieldValue() {
        return software.amazon.jsii.Kernel.get(this, "fieldValue", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * A fluent builder for {@link software.amazon.jsii.tests.calculator.OptionalStructConsumer}.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<software.amazon.jsii.tests.calculator.OptionalStructConsumer> {
        /**
         * @return a new instance of {@link Builder}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create() {
            return new Builder();
        }

        private software.amazon.jsii.tests.calculator.OptionalStruct.Builder optionalStruct;

        private Builder() {
        }

        /**
         * @return {@code this}
         * @param field This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder field(final java.lang.String field) {
            this.optionalStruct().field(field);
            return this;
        }

        /**
         * @return a newly built instance of {@link software.amazon.jsii.tests.calculator.OptionalStructConsumer}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public software.amazon.jsii.tests.calculator.OptionalStructConsumer build() {
            return new software.amazon.jsii.tests.calculator.OptionalStructConsumer(
                this.optionalStruct != null ? this.optionalStruct.build() : null
            );
        }

        private software.amazon.jsii.tests.calculator.OptionalStruct.Builder optionalStruct() {
            if (this.optionalStruct == null) {
                this.optionalStruct = new software.amazon.jsii.tests.calculator.OptionalStruct.Builder();
            }
            return this.optionalStruct;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/OverridableProtectedMember.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * @see <a href="https://github.com/aws/jsii/issues/903">https://github.com/aws/jsii/issues/903</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.OverridableProtectedMember")
public class OverridableProtectedMember extends software.amazon.jsii.JsiiObject {

    protected OverridableProtectedMember(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected OverridableProtectedMember(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public OverridableProtectedMember() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected @org.jetbrains.annotations.NotNull java.lang.String overrideMe() {
        return software.amazon.jsii.Kernel.call(this, "overrideMe", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void switchModes() {
        software.amazon.jsii.Kernel.call(this, "switchModes", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String valueFromProtected() {
        return software.amazon.jsii.Kernel.call(this, "valueFromProtected", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected @org.jetbrains.annotations.NotNull java.lang.String getOverrideReadOnly() {
        return software.amazon.jsii.Kernel.get(this, "overrideReadOnly", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected @org.jetbrains.annotations.NotNull java.lang.String getOverrideReadWrite() {
        return software.amazon.jsii.Kernel.get(this, "overrideReadWrite", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected void setOverrideReadWrite(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "overrideReadWrite", java.util.Objects.requireNonNull(value, "overrideReadWrite is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/OverrideReturnsObject.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.OverrideReturnsObject")
public class OverrideReturnsObject extends software.amazon.jsii.JsiiObject {

    protected OverrideReturnsObject(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected OverrideReturnsObject(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public OverrideReturnsObject() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param obj This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number test(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IReturnsNumber obj) {
        return software.amazon.jsii.Kernel.call(this, "test", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(obj, "obj is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ParamShadowsBuiltins.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Validate that parameters named "str" or "builtins" do not shadow the actual type names in Python.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ParamShadowsBuiltins")
public class ParamShadowsBuiltins extends software.amazon.jsii.JsiiObject {

    protected ParamShadowsBuiltins(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ParamShadowsBuiltins(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param builtins should be set to something that is NOT a valid expression in Python (e.g: "\${NOPE}""). This parameter is required.
     * @param str should be set to something that is NOT a valid expression in Python (e.g: "\${NOPE}""). This parameter is required.
     * @param props should be set to valid values. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ParamShadowsBuiltins(final @org.jetbrains.annotations.NotNull java.lang.String builtins, final @org.jetbrains.annotations.NotNull java.lang.String str, final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.ParamShadowsBuiltinsProps props) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(builtins, "builtins is required"), java.util.Objects.requireNonNull(str, "str is required"), java.util.Objects.requireNonNull(props, "props is required") });
    }

    /**
     * A fluent builder for {@link software.amazon.jsii.tests.calculator.ParamShadowsBuiltins}.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<software.amazon.jsii.tests.calculator.ParamShadowsBuiltins> {
        /**
         * @return a new instance of {@link Builder}.
         * @param builtins should be set to something that is NOT a valid expression in Python (e.g: "\${NOPE}""). This parameter is required.
         * @param str should be set to something that is NOT a valid expression in Python (e.g: "\${NOPE}""). This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create(final java.lang.String builtins, final java.lang.String str) {
            return new Builder(builtins, str);
        }

        private final java.lang.String builtins;
        private final java.lang.String str;
        private final software.amazon.jsii.tests.calculator.ParamShadowsBuiltinsProps.Builder props;

        private Builder(final java.lang.String builtins, final java.lang.String str) {
            this.builtins = builtins;
            this.str = str;
            this.props = new software.amazon.jsii.tests.calculator.ParamShadowsBuiltinsProps.Builder();
        }

        /**
         * @return {@code this}
         * @param booleanProperty This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder booleanProperty(final java.lang.Boolean booleanProperty) {
            this.props.booleanProperty(booleanProperty);
            return this;
        }

        /**
         * @return {@code this}
         * @param stringProperty This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder stringProperty(final java.lang.String stringProperty) {
            this.props.stringProperty(stringProperty);
            return this;
        }

        /**
         * @return {@code this}
         * @param structProperty This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder structProperty(final software.amazon.jsii.tests.calculator.StructA structProperty) {
            this.props.structProperty(structProperty);
            return this;
        }

        /**
         * @return a newly built instance of {@link software.amazon.jsii.tests.calculator.ParamShadowsBuiltins}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public software.amazon.jsii.tests.calculator.ParamShadowsBuiltins build() {
            return new software.amazon.jsii.tests.calculator.ParamShadowsBuiltins(
                this.builtins,
                this.str,
                this.props.build()
            );
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ParamShadowsBuiltinsProps.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ParamShadowsBuiltinsProps")
@software.amazon.jsii.Jsii.Proxy(ParamShadowsBuiltinsProps.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface ParamShadowsBuiltinsProps extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Boolean getBooleanProperty();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getStringProperty();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StructA getStructProperty();

    /**
     * @return a {@link Builder} of {@link ParamShadowsBuiltinsProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ParamShadowsBuiltinsProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<ParamShadowsBuiltinsProps> {
        java.lang.Boolean booleanProperty;
        java.lang.String stringProperty;
        software.amazon.jsii.tests.calculator.StructA structProperty;

        /**
         * Sets the value of {@link ParamShadowsBuiltinsProps#getBooleanProperty}
         * @param booleanProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder booleanProperty(java.lang.Boolean booleanProperty) {
            this.booleanProperty = booleanProperty;
            return this;
        }

        /**
         * Sets the value of {@link ParamShadowsBuiltinsProps#getStringProperty}
         * @param stringProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder stringProperty(java.lang.String stringProperty) {
            this.stringProperty = stringProperty;
            return this;
        }

        /**
         * Sets the value of {@link ParamShadowsBuiltinsProps#getStructProperty}
         * @param structProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder structProperty(software.amazon.jsii.tests.calculator.StructA structProperty) {
            this.structProperty = structProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ParamShadowsBuiltinsProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public ParamShadowsBuiltinsProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ParamShadowsBuiltinsProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ParamShadowsBuiltinsProps {
        private final java.lang.Boolean booleanProperty;
        private final java.lang.String stringProperty;
        private final software.amazon.jsii.tests.calculator.StructA structProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.booleanProperty = software.amazon.jsii.Kernel.get(this, "booleanProperty", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
            this.stringProperty = software.amazon.jsii.Kernel.get(this, "stringProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.structProperty = software.amazon.jsii.Kernel.get(this, "structProperty", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StructA.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.booleanProperty = java.util.Objects.requireNonNull(builder.booleanProperty, "booleanProperty is required");
            this.stringProperty = java.util.Objects.requireNonNull(builder.stringProperty, "stringProperty is required");
            this.structProperty = java.util.Objects.requireNonNull(builder.structProperty, "structProperty is required");
        }

        @Override
        public final java.lang.Boolean getBooleanProperty() {
            return this.booleanProperty;
        }

        @Override
        public final java.lang.String getStringProperty() {
            return this.stringProperty;
        }

        @Override
        public final software.amazon.jsii.tests.calculator.StructA getStructProperty() {
            return this.structProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("booleanProperty", om.valueToTree(this.getBooleanProperty()));
            data.set("stringProperty", om.valueToTree(this.getStringProperty()));
            data.set("structProperty", om.valueToTree(this.getStructProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.ParamShadowsBuiltinsProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ParamShadowsBuiltinsProps.Jsii$Proxy that = (ParamShadowsBuiltinsProps.Jsii$Proxy) o;

            if (!booleanProperty.equals(that.booleanProperty)) return false;
            if (!stringProperty.equals(that.stringProperty)) return false;
            return this.structProperty.equals(that.structProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.booleanProperty.hashCode();
            result = 31 * result + (this.stringProperty.hashCode());
            result = 31 * result + (this.structProperty.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ParamShadowsScope.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Validate that namespaces being shadowed by local variables does not cause type checking issues.
 * <p>
 * @see <a href="https://github.com/aws/aws-cdk/issues/22975">https://github.com/aws/aws-cdk/issues/22975</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ParamShadowsScope")
public class ParamShadowsScope extends software.amazon.jsii.JsiiObject {

    protected ParamShadowsScope(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ParamShadowsScope(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ParamShadowsScope() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param scope This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.Number useScope(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.Number scope) {
        return software.amazon.jsii.Kernel.call(this, "useScope", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.Number.class), new Object[] { java.util.Objects.requireNonNull(scope, "scope is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ParentStruct982.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * https://github.com/aws/jsii/issues/982.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ParentStruct982")
@software.amazon.jsii.Jsii.Proxy(ParentStruct982.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface ParentStruct982 extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getFoo();

    /**
     * @return a {@link Builder} of {@link ParentStruct982}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ParentStruct982}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<ParentStruct982> {
        java.lang.String foo;

        /**
         * Sets the value of {@link ParentStruct982#getFoo}
         * @param foo the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder foo(java.lang.String foo) {
            this.foo = foo;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ParentStruct982}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public ParentStruct982 build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ParentStruct982}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ParentStruct982 {
        private final java.lang.String foo;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.foo = software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.foo = java.util.Objects.requireNonNull(builder.foo, "foo is required");
        }

        @Override
        public final java.lang.String getFoo() {
            return this.foo;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("foo", om.valueToTree(this.getFoo()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.ParentStruct982"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ParentStruct982.Jsii$Proxy that = (ParentStruct982.Jsii$Proxy) o;

            return this.foo.equals(that.foo);
        }

        @Override
        public final int hashCode() {
            int result = this.foo.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/PartiallyInitializedThisConsumer.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.PartiallyInitializedThisConsumer")
public abstract class PartiallyInitializedThisConsumer extends software.amazon.jsii.JsiiObject {

    protected PartiallyInitializedThisConsumer(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected PartiallyInitializedThisConsumer(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected PartiallyInitializedThisConsumer() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param obj This parameter is required.
     * @param dt This parameter is required.
     * @param ev This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public abstract @org.jetbrains.annotations.NotNull java.lang.String consumePartiallyInitializedThis(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.ConstructorPassesThisOut obj, final @org.jetbrains.annotations.NotNull java.time.Instant dt, final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.AllTypesEnum ev);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.PartiallyInitializedThisConsumer {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * @param obj This parameter is required.
         * @param dt This parameter is required.
         * @param ev This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String consumePartiallyInitializedThis(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.ConstructorPassesThisOut obj, final @org.jetbrains.annotations.NotNull java.time.Instant dt, final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.AllTypesEnum ev) {
            return software.amazon.jsii.Kernel.call(this, "consumePartiallyInitializedThis", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(obj, "obj is required"), java.util.Objects.requireNonNull(dt, "dt is required"), java.util.Objects.requireNonNull(ev, "ev is required") });
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Polymorphism.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Polymorphism")
public class Polymorphism extends software.amazon.jsii.JsiiObject {

    protected Polymorphism(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Polymorphism(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Polymorphism() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param friendly This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String sayHello(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.IFriendly friendly) {
        return software.amazon.jsii.Kernel.call(this, "sayHello", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(friendly, "friendly is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Power.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * The power operation.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Power")
public class Power extends software.amazon.jsii.tests.calculator.composition.CompositeOperation {

    protected Power(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Power(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * Creates a Power operation.
     * <p>
     * @param base The base of the power. This parameter is required.
     * @param pow The number of times to multiply. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Power(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue base, final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue pow) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(base, "base is required"), java.util.Objects.requireNonNull(pow, "pow is required") });
    }

    /**
     * The base of the power.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue getBase() {
        return software.amazon.jsii.Kernel.get(this, "base", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class));
    }

    /**
     * The expression that this operation consists of.
     * <p>
     * Must be implemented by derived classes.
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue getExpression() {
        return software.amazon.jsii.Kernel.get(this, "expression", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class));
    }

    /**
     * The number of times to multiply.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue getPow() {
        return software.amazon.jsii.Kernel.get(this, "pow", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/PromiseNothing.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.PromiseNothing")
public class PromiseNothing extends software.amazon.jsii.JsiiObject {

    protected PromiseNothing(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected PromiseNothing(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public PromiseNothing() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void promiseIt() {
        software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.PromiseNothing.class, "promiseIt", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void instancePromiseIt() {
        software.amazon.jsii.Kernel.asyncCall(this, "instancePromiseIt", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/PropertyNamedProperty.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Reproduction for https://github.com/aws/jsii/issues/1113 Where a method or property named "property" would result in impossible to load Python code.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.PropertyNamedProperty")
public class PropertyNamedProperty extends software.amazon.jsii.JsiiObject {

    protected PropertyNamedProperty(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected PropertyNamedProperty(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public PropertyNamedProperty() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getProperty() {
        return software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean getYetAnoterOne() {
        return software.amazon.jsii.Kernel.get(this, "yetAnoterOne", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/PublicClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.PublicClass")
public class PublicClass extends software.amazon.jsii.JsiiObject {

    protected PublicClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected PublicClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public PublicClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void hello() {
        software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/PythonReservedWords.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.PythonReservedWords")
public class PythonReservedWords extends software.amazon.jsii.JsiiObject {

    protected PythonReservedWords(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected PythonReservedWords(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public PythonReservedWords() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void and() {
        software.amazon.jsii.Kernel.call(this, "and", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void as() {
        software.amazon.jsii.Kernel.call(this, "as", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doAssert() {
        software.amazon.jsii.Kernel.call(this, "assert", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void async() {
        software.amazon.jsii.Kernel.call(this, "async", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void await() {
        software.amazon.jsii.Kernel.call(this, "await", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doBreak() {
        software.amazon.jsii.Kernel.call(this, "break", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doClass() {
        software.amazon.jsii.Kernel.call(this, "class", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doContinue() {
        software.amazon.jsii.Kernel.call(this, "continue", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void def() {
        software.amazon.jsii.Kernel.call(this, "def", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void del() {
        software.amazon.jsii.Kernel.call(this, "del", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void elif() {
        software.amazon.jsii.Kernel.call(this, "elif", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doElse() {
        software.amazon.jsii.Kernel.call(this, "else", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void except() {
        software.amazon.jsii.Kernel.call(this, "except", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doFinally() {
        software.amazon.jsii.Kernel.call(this, "finally", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doFor() {
        software.amazon.jsii.Kernel.call(this, "for", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void from() {
        software.amazon.jsii.Kernel.call(this, "from", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void global() {
        software.amazon.jsii.Kernel.call(this, "global", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doIf() {
        software.amazon.jsii.Kernel.call(this, "if", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doImport() {
        software.amazon.jsii.Kernel.call(this, "import", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void in() {
        software.amazon.jsii.Kernel.call(this, "in", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void is() {
        software.amazon.jsii.Kernel.call(this, "is", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void lambda() {
        software.amazon.jsii.Kernel.call(this, "lambda", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void nonlocal() {
        software.amazon.jsii.Kernel.call(this, "nonlocal", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void not() {
        software.amazon.jsii.Kernel.call(this, "not", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void or() {
        software.amazon.jsii.Kernel.call(this, "or", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void pass() {
        software.amazon.jsii.Kernel.call(this, "pass", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void raise() {
        software.amazon.jsii.Kernel.call(this, "raise", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doReturn() {
        software.amazon.jsii.Kernel.call(this, "return", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doTry() {
        software.amazon.jsii.Kernel.call(this, "try", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void doWhile() {
        software.amazon.jsii.Kernel.call(this, "while", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void with() {
        software.amazon.jsii.Kernel.call(this, "with", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void yield() {
        software.amazon.jsii.Kernel.call(this, "yield", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ReferenceEnumFromScopedPackage.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * See awslabs/jsii#138.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ReferenceEnumFromScopedPackage")
public class ReferenceEnumFromScopedPackage extends software.amazon.jsii.JsiiObject {

    protected ReferenceEnumFromScopedPackage(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ReferenceEnumFromScopedPackage(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ReferenceEnumFromScopedPackage() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.lib.EnumFromScopedModule loadFoo() {
        return software.amazon.jsii.Kernel.call(this, "loadFoo", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.EnumFromScopedModule.class));
    }

    /**
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void saveFoo(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.EnumFromScopedModule value) {
        software.amazon.jsii.Kernel.call(this, "saveFoo", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.lib.EnumFromScopedModule getFoo() {
        return software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.EnumFromScopedModule.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setFoo(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.lib.EnumFromScopedModule value) {
        software.amazon.jsii.Kernel.set(this, "foo", value);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/ReturnsPrivateImplementationOfInterface.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Helps ensure the JSII kernel &amp; runtime cooperate correctly when an un-exported instance of a class is returned with a declared type that is an exported interface, and the instance inherits from an exported class.
 * <p>
 * @return an instance of an un-exported class that extends <code>ExportedBaseClass</code>, declared as <code>IPrivatelyImplemented</code>.
 * @see <a href="https://github.com/aws/jsii/issues/320">https://github.com/aws/jsii/issues/320</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.ReturnsPrivateImplementationOfInterface")
public class ReturnsPrivateImplementationOfInterface extends software.amazon.jsii.JsiiObject {

    protected ReturnsPrivateImplementationOfInterface(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ReturnsPrivateImplementationOfInterface(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ReturnsPrivateImplementationOfInterface() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IPrivatelyImplemented getPrivateImplementation() {
        return software.amazon.jsii.Kernel.get(this, "privateImplementation", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IPrivatelyImplemented.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/RootStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * This is here to check that we can pass a nested struct into a kwargs by specifying it as an in-line dictionary.
 * <p>
 * This is cheating with the (current) declared types, but this is the "more
 * idiomatic" way for Pythonists.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.RootStruct")
@software.amazon.jsii.Jsii.Proxy(RootStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface RootStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     * May not be empty.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getStringProp();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.NestedStruct getNestedStruct() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link RootStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link RootStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<RootStruct> {
        java.lang.String stringProp;
        software.amazon.jsii.tests.calculator.NestedStruct nestedStruct;

        /**
         * Sets the value of {@link RootStruct#getStringProp}
         * @param stringProp May not be empty. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder stringProp(java.lang.String stringProp) {
            this.stringProp = stringProp;
            return this;
        }

        /**
         * Sets the value of {@link RootStruct#getNestedStruct}
         * @param nestedStruct the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder nestedStruct(software.amazon.jsii.tests.calculator.NestedStruct nestedStruct) {
            this.nestedStruct = nestedStruct;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link RootStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public RootStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link RootStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements RootStruct {
        private final java.lang.String stringProp;
        private final software.amazon.jsii.tests.calculator.NestedStruct nestedStruct;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.stringProp = software.amazon.jsii.Kernel.get(this, "stringProp", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.nestedStruct = software.amazon.jsii.Kernel.get(this, "nestedStruct", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.NestedStruct.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.stringProp = java.util.Objects.requireNonNull(builder.stringProp, "stringProp is required");
            this.nestedStruct = builder.nestedStruct;
        }

        @Override
        public final java.lang.String getStringProp() {
            return this.stringProp;
        }

        @Override
        public final software.amazon.jsii.tests.calculator.NestedStruct getNestedStruct() {
            return this.nestedStruct;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("stringProp", om.valueToTree(this.getStringProp()));
            if (this.getNestedStruct() != null) {
                data.set("nestedStruct", om.valueToTree(this.getNestedStruct()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.RootStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            RootStruct.Jsii$Proxy that = (RootStruct.Jsii$Proxy) o;

            if (!stringProp.equals(that.stringProp)) return false;
            return this.nestedStruct != null ? this.nestedStruct.equals(that.nestedStruct) : that.nestedStruct == null;
        }

        @Override
        public final int hashCode() {
            int result = this.stringProp.hashCode();
            result = 31 * result + (this.nestedStruct != null ? this.nestedStruct.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/RootStructValidator.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.RootStructValidator")
public class RootStructValidator extends software.amazon.jsii.JsiiObject {

    protected RootStructValidator(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected RootStructValidator(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param struct This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void validate(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.RootStruct struct) {
        software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.RootStructValidator.class, "validate", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(struct, "struct is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/RuntimeTypeChecking.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.RuntimeTypeChecking")
public class RuntimeTypeChecking extends software.amazon.jsii.JsiiObject {

    protected RuntimeTypeChecking(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected RuntimeTypeChecking(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public RuntimeTypeChecking() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param arg1
     * @param arg2
     * @param arg3
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void methodWithDefaultedArguments(final @org.jetbrains.annotations.Nullable java.lang.Number arg1, final @org.jetbrains.annotations.Nullable java.lang.String arg2, final @org.jetbrains.annotations.Nullable java.time.Instant arg3) {
        software.amazon.jsii.Kernel.call(this, "methodWithDefaultedArguments", software.amazon.jsii.NativeType.VOID, new Object[] { arg1, arg2, arg3 });
    }

    /**
     * @param arg1
     * @param arg2
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void methodWithDefaultedArguments(final @org.jetbrains.annotations.Nullable java.lang.Number arg1, final @org.jetbrains.annotations.Nullable java.lang.String arg2) {
        software.amazon.jsii.Kernel.call(this, "methodWithDefaultedArguments", software.amazon.jsii.NativeType.VOID, new Object[] { arg1, arg2 });
    }

    /**
     * @param arg1
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void methodWithDefaultedArguments(final @org.jetbrains.annotations.Nullable java.lang.Number arg1) {
        software.amazon.jsii.Kernel.call(this, "methodWithDefaultedArguments", software.amazon.jsii.NativeType.VOID, new Object[] { arg1 });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void methodWithDefaultedArguments() {
        software.amazon.jsii.Kernel.call(this, "methodWithDefaultedArguments", software.amazon.jsii.NativeType.VOID);
    }

    /**
     * @param arg
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void methodWithOptionalAnyArgument(final @org.jetbrains.annotations.Nullable java.lang.Object arg) {
        software.amazon.jsii.Kernel.call(this, "methodWithOptionalAnyArgument", software.amazon.jsii.NativeType.VOID, new Object[] { arg });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void methodWithOptionalAnyArgument() {
        software.amazon.jsii.Kernel.call(this, "methodWithOptionalAnyArgument", software.amazon.jsii.NativeType.VOID);
    }

    /**
     * Used to verify verification of number of method arguments.
     * <p>
     * @param arg1 This parameter is required.
     * @param arg2 This parameter is required.
     * @param arg3
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void methodWithOptionalArguments(final @org.jetbrains.annotations.NotNull java.lang.Number arg1, final @org.jetbrains.annotations.NotNull java.lang.String arg2, final @org.jetbrains.annotations.Nullable java.time.Instant arg3) {
        software.amazon.jsii.Kernel.call(this, "methodWithOptionalArguments", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(arg1, "arg1 is required"), java.util.Objects.requireNonNull(arg2, "arg2 is required"), arg3 });
    }

    /**
     * Used to verify verification of number of method arguments.
     * <p>
     * @param arg1 This parameter is required.
     * @param arg2 This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void methodWithOptionalArguments(final @org.jetbrains.annotations.NotNull java.lang.Number arg1, final @org.jetbrains.annotations.NotNull java.lang.String arg2) {
        software.amazon.jsii.Kernel.call(this, "methodWithOptionalArguments", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(arg1, "arg1 is required"), java.util.Objects.requireNonNull(arg2, "arg2 is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SecondLevelStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SecondLevelStruct")
@software.amazon.jsii.Jsii.Proxy(SecondLevelStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface SecondLevelStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     * It's long and required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getDeeperRequiredProp();

    /**
     * It's long, but you'll almost never pass it.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getDeeperOptionalProp() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link SecondLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link SecondLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<SecondLevelStruct> {
        java.lang.String deeperRequiredProp;
        java.lang.String deeperOptionalProp;

        /**
         * Sets the value of {@link SecondLevelStruct#getDeeperRequiredProp}
         * @param deeperRequiredProp It's long and required. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder deeperRequiredProp(java.lang.String deeperRequiredProp) {
            this.deeperRequiredProp = deeperRequiredProp;
            return this;
        }

        /**
         * Sets the value of {@link SecondLevelStruct#getDeeperOptionalProp}
         * @param deeperOptionalProp It's long, but you'll almost never pass it.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder deeperOptionalProp(java.lang.String deeperOptionalProp) {
            this.deeperOptionalProp = deeperOptionalProp;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link SecondLevelStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public SecondLevelStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link SecondLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements SecondLevelStruct {
        private final java.lang.String deeperRequiredProp;
        private final java.lang.String deeperOptionalProp;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.deeperRequiredProp = software.amazon.jsii.Kernel.get(this, "deeperRequiredProp", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.deeperOptionalProp = software.amazon.jsii.Kernel.get(this, "deeperOptionalProp", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.deeperRequiredProp = java.util.Objects.requireNonNull(builder.deeperRequiredProp, "deeperRequiredProp is required");
            this.deeperOptionalProp = builder.deeperOptionalProp;
        }

        @Override
        public final java.lang.String getDeeperRequiredProp() {
            return this.deeperRequiredProp;
        }

        @Override
        public final java.lang.String getDeeperOptionalProp() {
            return this.deeperOptionalProp;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("deeperRequiredProp", om.valueToTree(this.getDeeperRequiredProp()));
            if (this.getDeeperOptionalProp() != null) {
                data.set("deeperOptionalProp", om.valueToTree(this.getDeeperOptionalProp()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.SecondLevelStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            SecondLevelStruct.Jsii$Proxy that = (SecondLevelStruct.Jsii$Proxy) o;

            if (!deeperRequiredProp.equals(that.deeperRequiredProp)) return false;
            return this.deeperOptionalProp != null ? this.deeperOptionalProp.equals(that.deeperOptionalProp) : that.deeperOptionalProp == null;
        }

        @Override
        public final int hashCode() {
            int result = this.deeperRequiredProp.hashCode();
            result = 31 * result + (this.deeperOptionalProp != null ? this.deeperOptionalProp.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SingleInstanceTwoTypes.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Test that a single instance can be returned under two different FQNs.
 * <p>
 * JSII clients can instantiate 2 different strongly-typed wrappers for the same
 * object. Unfortunately, this will break object equality, but if we didn't do
 * this it would break runtime type checks in the JVM or CLR.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SingleInstanceTwoTypes")
public class SingleInstanceTwoTypes extends software.amazon.jsii.JsiiObject {

    protected SingleInstanceTwoTypes(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected SingleInstanceTwoTypes(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public SingleInstanceTwoTypes() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.InbetweenClass interface1() {
        return software.amazon.jsii.Kernel.call(this, "interface1", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.InbetweenClass.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IPublicInterface interface2() {
        return software.amazon.jsii.Kernel.call(this, "interface2", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IPublicInterface.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SingletonInt.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Verifies that singleton enums are handled correctly.
 * <p>
 * https://github.com/aws/jsii/issues/231
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SingletonInt")
public class SingletonInt extends software.amazon.jsii.JsiiObject {

    protected SingletonInt(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected SingletonInt(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean isSingletonInt(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        return software.amazon.jsii.Kernel.call(this, "isSingletonInt", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SingletonIntEnum.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * A singleton integer.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SingletonIntEnum")
public enum SingletonIntEnum {
    /**
     * Elite!
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    SINGLETON_INT,
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SingletonString.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Verifies that singleton enums are handled correctly.
 * <p>
 * https://github.com/aws/jsii/issues/231
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SingletonString")
public class SingletonString extends software.amazon.jsii.JsiiObject {

    protected SingletonString(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected SingletonString(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean isSingletonString(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        return software.amazon.jsii.Kernel.call(this, "isSingletonString", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SingletonStringEnum.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * A singleton string.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SingletonStringEnum")
public enum SingletonStringEnum {
    /**
     * <ol><li></li></ol>
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    SINGLETON_STRING,
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SmellyStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SmellyStruct")
@software.amazon.jsii.Jsii.Proxy(SmellyStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface SmellyStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getProperty();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Boolean getYetAnoterOne();

    /**
     * @return a {@link Builder} of {@link SmellyStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link SmellyStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<SmellyStruct> {
        java.lang.String property;
        java.lang.Boolean yetAnoterOne;

        /**
         * Sets the value of {@link SmellyStruct#getProperty}
         * @param property the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder property(java.lang.String property) {
            this.property = property;
            return this;
        }

        /**
         * Sets the value of {@link SmellyStruct#getYetAnoterOne}
         * @param yetAnoterOne the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder yetAnoterOne(java.lang.Boolean yetAnoterOne) {
            this.yetAnoterOne = yetAnoterOne;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link SmellyStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public SmellyStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link SmellyStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements SmellyStruct {
        private final java.lang.String property;
        private final java.lang.Boolean yetAnoterOne;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.property = software.amazon.jsii.Kernel.get(this, "property", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.yetAnoterOne = software.amazon.jsii.Kernel.get(this, "yetAnoterOne", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.property = java.util.Objects.requireNonNull(builder.property, "property is required");
            this.yetAnoterOne = java.util.Objects.requireNonNull(builder.yetAnoterOne, "yetAnoterOne is required");
        }

        @Override
        public final java.lang.String getProperty() {
            return this.property;
        }

        @Override
        public final java.lang.Boolean getYetAnoterOne() {
            return this.yetAnoterOne;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("property", om.valueToTree(this.getProperty()));
            data.set("yetAnoterOne", om.valueToTree(this.getYetAnoterOne()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.SmellyStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            SmellyStruct.Jsii$Proxy that = (SmellyStruct.Jsii$Proxy) o;

            if (!property.equals(that.property)) return false;
            return this.yetAnoterOne.equals(that.yetAnoterOne);
        }

        @Override
        public final int hashCode() {
            int result = this.property.hashCode();
            result = 31 * result + (this.yetAnoterOne.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SomeTypeJsii976.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SomeTypeJsii976")
public class SomeTypeJsii976 extends software.amazon.jsii.JsiiObject {

    protected SomeTypeJsii976(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected SomeTypeJsii976(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public SomeTypeJsii976() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object returnAnonymous() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.SomeTypeJsii976.class, "returnAnonymous", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IReturnJsii976 returnReturn() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.SomeTypeJsii976.class, "returnReturn", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IReturnJsii976.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StableClass.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StableClass")
public class StableClass extends software.amazon.jsii.JsiiObject {

    protected StableClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected StableClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param readonlyString This parameter is required.
     * @param mutableNumber
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public StableClass(final @org.jetbrains.annotations.NotNull java.lang.String readonlyString, final @org.jetbrains.annotations.Nullable java.lang.Number mutableNumber) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(readonlyString, "readonlyString is required"), mutableNumber });
    }

    /**
     * @param readonlyString This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public StableClass(final @org.jetbrains.annotations.NotNull java.lang.String readonlyString) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(readonlyString, "readonlyString is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void method() {
        software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getReadonlyProperty() {
        return software.amazon.jsii.Kernel.get(this, "readonlyProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.lang.Number getMutableProperty() {
        return software.amazon.jsii.Kernel.get(this, "mutableProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setMutableProperty(final @org.jetbrains.annotations.Nullable java.lang.Number value) {
        software.amazon.jsii.Kernel.set(this, "mutableProperty", value);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StableEnum.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StableEnum")
public enum StableEnum {
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    OPTION_A,
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    OPTION_B,
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StableStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StableStruct")
@software.amazon.jsii.Jsii.Proxy(StableStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface StableStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getReadonlyProperty();

    /**
     * @return a {@link Builder} of {@link StableStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link StableStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<StableStruct> {
        java.lang.String readonlyProperty;

        /**
         * Sets the value of {@link StableStruct#getReadonlyProperty}
         * @param readonlyProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder readonlyProperty(java.lang.String readonlyProperty) {
            this.readonlyProperty = readonlyProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link StableStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public StableStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link StableStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements StableStruct {
        private final java.lang.String readonlyProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.readonlyProperty = software.amazon.jsii.Kernel.get(this, "readonlyProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.readonlyProperty = java.util.Objects.requireNonNull(builder.readonlyProperty, "readonlyProperty is required");
        }

        @Override
        public final java.lang.String getReadonlyProperty() {
            return this.readonlyProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("readonlyProperty", om.valueToTree(this.getReadonlyProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.StableStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            StableStruct.Jsii$Proxy that = (StableStruct.Jsii$Proxy) o;

            return this.readonlyProperty.equals(that.readonlyProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.readonlyProperty.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StaticContext.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * This is used to validate the ability to use <code>this</code> from within a static context.
 * <p>
 * https://github.com/awslabs/aws-cdk/issues/2304
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StaticContext")
public class StaticContext extends software.amazon.jsii.JsiiObject {

    protected StaticContext(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected StaticContext(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean canAccessStaticContext() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.StaticContext.class, "canAccessStaticContext", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean getStaticVariable() {
        return software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.StaticContext.class, "staticVariable", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void setStaticVariable(final @org.jetbrains.annotations.NotNull java.lang.Boolean value) {
        software.amazon.jsii.JsiiObject.jsiiStaticSet(software.amazon.jsii.tests.calculator.StaticContext.class, "staticVariable", java.util.Objects.requireNonNull(value, "staticVariable is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StaticHelloChild.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StaticHelloChild")
public class StaticHelloChild extends software.amazon.jsii.tests.calculator.StaticHelloParent {

    protected StaticHelloChild(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected StaticHelloChild(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void method() {
        software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.StaticHelloChild.class, "method", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Number getProperty() {
        return software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.StaticHelloChild.class, "property", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StaticHelloParent.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Static methods that override parent class are technically overrides (the inheritance of statics is part of the ES6 specification), but certain other languages such as Java do not carry statics in the inheritance chain at all, so they cannot be overridden, only hidden.
 * <p>
 * The difference is fairly minor (for typical use-cases, the end result is the
 * same), however this has implications on what the generated code should look
 * like.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StaticHelloParent")
public class StaticHelloParent extends software.amazon.jsii.JsiiObject {

    protected StaticHelloParent(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected StaticHelloParent(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public StaticHelloParent() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void method() {
        software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.StaticHelloParent.class, "method", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Number getProperty() {
        return software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.StaticHelloParent.class, "property", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Statics.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Statics")
public class Statics extends software.amazon.jsii.JsiiObject {

    protected Statics(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Statics(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    static {
        BAR = software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.Statics.class, "BAR", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        CONST_OBJ = software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.Statics.class, "ConstObj", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.DoubleTrouble.class));
        FOO = software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.Statics.class, "Foo", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        ZOO_BAR = java.util.Collections.unmodifiableMap(software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.Statics.class, "zooBar", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
    }

    /**
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Statics(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     * Jsdocs for static method.
     * <p>
     * @param name The name of the person to say hello to. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.String staticMethod(final @org.jetbrains.annotations.NotNull java.lang.String name) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.Statics.class, "staticMethod", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(name, "name is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String justMethod() {
        return software.amazon.jsii.Kernel.call(this, "justMethod", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * Constants may also use all-caps.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public final static java.lang.Number BAR;

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public final static software.amazon.jsii.tests.calculator.DoubleTrouble CONST_OBJ;

    /**
     * Jsdocs for static property.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public final static java.lang.String FOO;

    /**
     * Constants can also use camelCase.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public final static java.util.Map<java.lang.String, java.lang.String> ZOO_BAR;

    /**
     * Jsdocs for static getter.
     * <p>
     * Jsdocs for static setter.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Statics getInstance() {
        return software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.Statics.class, "instance", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.Statics.class));
    }

    /**
     * Jsdocs for static getter.
     * <p>
     * Jsdocs for static setter.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void setInstance(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.Statics value) {
        software.amazon.jsii.JsiiObject.jsiiStaticSet(software.amazon.jsii.tests.calculator.Statics.class, "instance", java.util.Objects.requireNonNull(value, "instance is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Number getNonConstStatic() {
        return software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.Statics.class, "nonConstStatic", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void setNonConstStatic(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        software.amazon.jsii.JsiiObject.jsiiStaticSet(software.amazon.jsii.tests.calculator.Statics.class, "nonConstStatic", java.util.Objects.requireNonNull(value, "nonConstStatic is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getValue() {
        return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StringEnum.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StringEnum")
public enum StringEnum {
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    A,
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    B,
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    C,
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StripInternal.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StripInternal")
public class StripInternal extends software.amazon.jsii.JsiiObject {

    protected StripInternal(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected StripInternal(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public StripInternal() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getYouSeeMe() {
        return software.amazon.jsii.Kernel.get(this, "youSeeMe", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setYouSeeMe(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "youSeeMe", java.util.Objects.requireNonNull(value, "youSeeMe is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StructA.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * We can serialize and deserialize structs without silently ignoring optional fields.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StructA")
@software.amazon.jsii.Jsii.Proxy(StructA.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface StructA extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getRequiredString();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Number getOptionalNumber() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getOptionalString() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link StructA}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link StructA}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<StructA> {
        java.lang.String requiredString;
        java.lang.Number optionalNumber;
        java.lang.String optionalString;

        /**
         * Sets the value of {@link StructA#getRequiredString}
         * @param requiredString the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder requiredString(java.lang.String requiredString) {
            this.requiredString = requiredString;
            return this;
        }

        /**
         * Sets the value of {@link StructA#getOptionalNumber}
         * @param optionalNumber the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder optionalNumber(java.lang.Number optionalNumber) {
            this.optionalNumber = optionalNumber;
            return this;
        }

        /**
         * Sets the value of {@link StructA#getOptionalString}
         * @param optionalString the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder optionalString(java.lang.String optionalString) {
            this.optionalString = optionalString;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link StructA}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public StructA build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link StructA}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements StructA {
        private final java.lang.String requiredString;
        private final java.lang.Number optionalNumber;
        private final java.lang.String optionalString;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.requiredString = software.amazon.jsii.Kernel.get(this, "requiredString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.optionalNumber = software.amazon.jsii.Kernel.get(this, "optionalNumber", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
            this.optionalString = software.amazon.jsii.Kernel.get(this, "optionalString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.requiredString = java.util.Objects.requireNonNull(builder.requiredString, "requiredString is required");
            this.optionalNumber = builder.optionalNumber;
            this.optionalString = builder.optionalString;
        }

        @Override
        public final java.lang.String getRequiredString() {
            return this.requiredString;
        }

        @Override
        public final java.lang.Number getOptionalNumber() {
            return this.optionalNumber;
        }

        @Override
        public final java.lang.String getOptionalString() {
            return this.optionalString;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("requiredString", om.valueToTree(this.getRequiredString()));
            if (this.getOptionalNumber() != null) {
                data.set("optionalNumber", om.valueToTree(this.getOptionalNumber()));
            }
            if (this.getOptionalString() != null) {
                data.set("optionalString", om.valueToTree(this.getOptionalString()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.StructA"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            StructA.Jsii$Proxy that = (StructA.Jsii$Proxy) o;

            if (!requiredString.equals(that.requiredString)) return false;
            if (this.optionalNumber != null ? !this.optionalNumber.equals(that.optionalNumber) : that.optionalNumber != null) return false;
            return this.optionalString != null ? this.optionalString.equals(that.optionalString) : that.optionalString == null;
        }

        @Override
        public final int hashCode() {
            int result = this.requiredString.hashCode();
            result = 31 * result + (this.optionalNumber != null ? this.optionalNumber.hashCode() : 0);
            result = 31 * result + (this.optionalString != null ? this.optionalString.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StructB.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * This intentionally overlaps with StructA (where only requiredString is provided) to test htat the kernel properly disambiguates those.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StructB")
@software.amazon.jsii.Jsii.Proxy(StructB.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface StructB extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getRequiredString();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Boolean getOptionalBoolean() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.StructA getOptionalStructA() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link StructB}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link StructB}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<StructB> {
        java.lang.String requiredString;
        java.lang.Boolean optionalBoolean;
        software.amazon.jsii.tests.calculator.StructA optionalStructA;

        /**
         * Sets the value of {@link StructB#getRequiredString}
         * @param requiredString the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder requiredString(java.lang.String requiredString) {
            this.requiredString = requiredString;
            return this;
        }

        /**
         * Sets the value of {@link StructB#getOptionalBoolean}
         * @param optionalBoolean the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder optionalBoolean(java.lang.Boolean optionalBoolean) {
            this.optionalBoolean = optionalBoolean;
            return this;
        }

        /**
         * Sets the value of {@link StructB#getOptionalStructA}
         * @param optionalStructA the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder optionalStructA(software.amazon.jsii.tests.calculator.StructA optionalStructA) {
            this.optionalStructA = optionalStructA;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link StructB}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public StructB build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link StructB}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements StructB {
        private final java.lang.String requiredString;
        private final java.lang.Boolean optionalBoolean;
        private final software.amazon.jsii.tests.calculator.StructA optionalStructA;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.requiredString = software.amazon.jsii.Kernel.get(this, "requiredString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.optionalBoolean = software.amazon.jsii.Kernel.get(this, "optionalBoolean", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
            this.optionalStructA = software.amazon.jsii.Kernel.get(this, "optionalStructA", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StructA.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.requiredString = java.util.Objects.requireNonNull(builder.requiredString, "requiredString is required");
            this.optionalBoolean = builder.optionalBoolean;
            this.optionalStructA = builder.optionalStructA;
        }

        @Override
        public final java.lang.String getRequiredString() {
            return this.requiredString;
        }

        @Override
        public final java.lang.Boolean getOptionalBoolean() {
            return this.optionalBoolean;
        }

        @Override
        public final software.amazon.jsii.tests.calculator.StructA getOptionalStructA() {
            return this.optionalStructA;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("requiredString", om.valueToTree(this.getRequiredString()));
            if (this.getOptionalBoolean() != null) {
                data.set("optionalBoolean", om.valueToTree(this.getOptionalBoolean()));
            }
            if (this.getOptionalStructA() != null) {
                data.set("optionalStructA", om.valueToTree(this.getOptionalStructA()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.StructB"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            StructB.Jsii$Proxy that = (StructB.Jsii$Proxy) o;

            if (!requiredString.equals(that.requiredString)) return false;
            if (this.optionalBoolean != null ? !this.optionalBoolean.equals(that.optionalBoolean) : that.optionalBoolean != null) return false;
            return this.optionalStructA != null ? this.optionalStructA.equals(that.optionalStructA) : that.optionalStructA == null;
        }

        @Override
        public final int hashCode() {
            int result = this.requiredString.hashCode();
            result = 31 * result + (this.optionalBoolean != null ? this.optionalBoolean.hashCode() : 0);
            result = 31 * result + (this.optionalStructA != null ? this.optionalStructA.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StructParameterType.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Verifies that, in languages that do keyword lifting (e.g: Python), having a struct member with the same name as a positional parameter results in the correct code being emitted.
 * <p>
 * See: https://github.com/aws/aws-cdk/issues/4302
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StructParameterType")
@software.amazon.jsii.Jsii.Proxy(StructParameterType.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface StructParameterType extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getScope();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Boolean getProps() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link StructParameterType}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link StructParameterType}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<StructParameterType> {
        java.lang.String scope;
        java.lang.Boolean props;

        /**
         * Sets the value of {@link StructParameterType#getScope}
         * @param scope the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder scope(java.lang.String scope) {
            this.scope = scope;
            return this;
        }

        /**
         * Sets the value of {@link StructParameterType#getProps}
         * @param props the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder props(java.lang.Boolean props) {
            this.props = props;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link StructParameterType}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public StructParameterType build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link StructParameterType}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements StructParameterType {
        private final java.lang.String scope;
        private final java.lang.Boolean props;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.scope = software.amazon.jsii.Kernel.get(this, "scope", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.props = software.amazon.jsii.Kernel.get(this, "props", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.scope = java.util.Objects.requireNonNull(builder.scope, "scope is required");
            this.props = builder.props;
        }

        @Override
        public final java.lang.String getScope() {
            return this.scope;
        }

        @Override
        public final java.lang.Boolean getProps() {
            return this.props;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("scope", om.valueToTree(this.getScope()));
            if (this.getProps() != null) {
                data.set("props", om.valueToTree(this.getProps()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.StructParameterType"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            StructParameterType.Jsii$Proxy that = (StructParameterType.Jsii$Proxy) o;

            if (!scope.equals(that.scope)) return false;
            return this.props != null ? this.props.equals(that.props) : that.props == null;
        }

        @Override
        public final int hashCode() {
            int result = this.scope.hashCode();
            result = 31 * result + (this.props != null ? this.props.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StructPassing.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Just because we can.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StructPassing")
public class StructPassing extends software.amazon.jsii.JsiiObject {

    protected StructPassing(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected StructPassing(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public StructPassing() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param _positional This parameter is required.
     * @param inputs This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Number howManyVarArgsDidIPass(final @org.jetbrains.annotations.NotNull java.lang.Number _positional, final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.TopLevelStruct... inputs) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.StructPassing.class, "howManyVarArgsDidIPass", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), java.util.stream.Stream.concat(java.util.Arrays.<Object>stream(new Object[] { java.util.Objects.requireNonNull(_positional, "_positional is required") }), java.util.Arrays.<Object>stream(inputs)).toArray(Object[]::new));
    }

    /**
     * @param _positional This parameter is required.
     * @param input This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.TopLevelStruct roundTrip(final @org.jetbrains.annotations.NotNull java.lang.Number _positional, final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.TopLevelStruct input) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.StructPassing.class, "roundTrip", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.TopLevelStruct.class), new Object[] { java.util.Objects.requireNonNull(_positional, "_positional is required"), java.util.Objects.requireNonNull(input, "input is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StructUnionConsumer.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StructUnionConsumer")
public class StructUnionConsumer extends software.amazon.jsii.JsiiObject {

    protected StructUnionConsumer(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected StructUnionConsumer(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param struct This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean isStructA(final @org.jetbrains.annotations.NotNull java.lang.Object struct) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.StructUnionConsumer.class, "isStructA", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(struct, "struct is required") });
    }

    /**
     * @param struct This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean isStructB(final @org.jetbrains.annotations.NotNull java.lang.Object struct) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.StructUnionConsumer.class, "isStructB", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(struct, "struct is required") });
    }

    /**
     * @param which This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object provideStruct(final @org.jetbrains.annotations.NotNull java.lang.String which) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.StructUnionConsumer.class, "provideStruct", software.amazon.jsii.NativeType.forClass(java.lang.Object.class), new Object[] { java.util.Objects.requireNonNull(which, "which is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StructWithCollectionOfUnionts.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StructWithCollectionOfUnionts")
@software.amazon.jsii.Jsii.Proxy(StructWithCollectionOfUnionts.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface StructWithCollectionOfUnionts extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.util.List<java.util.Map<java.lang.String, java.lang.Object>> getUnionProperty();

    /**
     * @return a {@link Builder} of {@link StructWithCollectionOfUnionts}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link StructWithCollectionOfUnionts}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<StructWithCollectionOfUnionts> {
        java.util.List<java.util.Map<java.lang.String, java.lang.Object>> unionProperty;

        /**
         * Sets the value of {@link StructWithCollectionOfUnionts#getUnionProperty}
         * @param unionProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @SuppressWarnings("unchecked")
        public Builder unionProperty(java.util.List<? extends java.util.Map<java.lang.String, ? extends java.lang.Object>> unionProperty) {
            this.unionProperty = (java.util.List<java.util.Map<java.lang.String, java.lang.Object>>)unionProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link StructWithCollectionOfUnionts}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public StructWithCollectionOfUnionts build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link StructWithCollectionOfUnionts}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements StructWithCollectionOfUnionts {
        private final java.util.List<java.util.Map<java.lang.String, java.lang.Object>> unionProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.unionProperty = software.amazon.jsii.Kernel.get(this, "unionProperty", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class))));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        @SuppressWarnings("unchecked")
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.unionProperty = (java.util.List<java.util.Map<java.lang.String, java.lang.Object>>)java.util.Objects.requireNonNull(builder.unionProperty, "unionProperty is required");
        }

        @Override
        public final java.util.List<java.util.Map<java.lang.String, java.lang.Object>> getUnionProperty() {
            return this.unionProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("unionProperty", om.valueToTree(this.getUnionProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.StructWithCollectionOfUnionts"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            StructWithCollectionOfUnionts.Jsii$Proxy that = (StructWithCollectionOfUnionts.Jsii$Proxy) o;

            return this.unionProperty.equals(that.unionProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.unionProperty.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StructWithEnum.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StructWithEnum")
@software.amazon.jsii.Jsii.Proxy(StructWithEnum.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface StructWithEnum extends software.amazon.jsii.JsiiSerializable {

    /**
     * An enum value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StringEnum getFoo();

    /**
     * Optional enum value (of type integer).
     * <p>
     * Default: AllTypesEnum.YOUR_ENUM_VALUE
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.AllTypesEnum getBar() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link StructWithEnum}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link StructWithEnum}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<StructWithEnum> {
        software.amazon.jsii.tests.calculator.StringEnum foo;
        software.amazon.jsii.tests.calculator.AllTypesEnum bar;

        /**
         * Sets the value of {@link StructWithEnum#getFoo}
         * @param foo An enum value. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder foo(software.amazon.jsii.tests.calculator.StringEnum foo) {
            this.foo = foo;
            return this;
        }

        /**
         * Sets the value of {@link StructWithEnum#getBar}
         * @param bar Optional enum value (of type integer).
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar(software.amazon.jsii.tests.calculator.AllTypesEnum bar) {
            this.bar = bar;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link StructWithEnum}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public StructWithEnum build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link StructWithEnum}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements StructWithEnum {
        private final software.amazon.jsii.tests.calculator.StringEnum foo;
        private final software.amazon.jsii.tests.calculator.AllTypesEnum bar;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.foo = software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StringEnum.class));
            this.bar = software.amazon.jsii.Kernel.get(this, "bar", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.AllTypesEnum.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.foo = java.util.Objects.requireNonNull(builder.foo, "foo is required");
            this.bar = builder.bar;
        }

        @Override
        public final software.amazon.jsii.tests.calculator.StringEnum getFoo() {
            return this.foo;
        }

        @Override
        public final software.amazon.jsii.tests.calculator.AllTypesEnum getBar() {
            return this.bar;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("foo", om.valueToTree(this.getFoo()));
            if (this.getBar() != null) {
                data.set("bar", om.valueToTree(this.getBar()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.StructWithEnum"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            StructWithEnum.Jsii$Proxy that = (StructWithEnum.Jsii$Proxy) o;

            if (!foo.equals(that.foo)) return false;
            return this.bar != null ? this.bar.equals(that.bar) : that.bar == null;
        }

        @Override
        public final int hashCode() {
            int result = this.foo.hashCode();
            result = 31 * result + (this.bar != null ? this.bar.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/StructWithJavaReservedWords.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.StructWithJavaReservedWords")
@software.amazon.jsii.Jsii.Proxy(StructWithJavaReservedWords.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface StructWithJavaReservedWords extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getDefaultValue();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getAssertValue() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getResult() {
        return null;
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getThat() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link StructWithJavaReservedWords}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link StructWithJavaReservedWords}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<StructWithJavaReservedWords> {
        java.lang.String defaultValue;
        java.lang.String assertValue;
        java.lang.String result;
        java.lang.String that;

        /**
         * Sets the value of {@link StructWithJavaReservedWords#getDefaultValue}
         * @param defaultValue the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder defaultValue(java.lang.String defaultValue) {
            this.defaultValue = defaultValue;
            return this;
        }

        /**
         * Sets the value of {@link StructWithJavaReservedWords#getAssertValue}
         * @param assertValue the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder assertValue(java.lang.String assertValue) {
            this.assertValue = assertValue;
            return this;
        }

        /**
         * Sets the value of {@link StructWithJavaReservedWords#getResult}
         * @param result the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder result(java.lang.String result) {
            this.result = result;
            return this;
        }

        /**
         * Sets the value of {@link StructWithJavaReservedWords#getThat}
         * @param that the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder that(java.lang.String that) {
            this.that = that;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link StructWithJavaReservedWords}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public StructWithJavaReservedWords build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link StructWithJavaReservedWords}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements StructWithJavaReservedWords {
        private final java.lang.String defaultValue;
        private final java.lang.String assertValue;
        private final java.lang.String result;
        private final java.lang.String that;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.defaultValue = software.amazon.jsii.Kernel.get(this, "default", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.assertValue = software.amazon.jsii.Kernel.get(this, "assert", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.result = software.amazon.jsii.Kernel.get(this, "result", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.that = software.amazon.jsii.Kernel.get(this, "that", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.defaultValue = java.util.Objects.requireNonNull(builder.defaultValue, "defaultValue is required");
            this.assertValue = builder.assertValue;
            this.result = builder.result;
            this.that = builder.that;
        }

        @Override
        public final java.lang.String getDefaultValue() {
            return this.defaultValue;
        }

        @Override
        public final java.lang.String getAssertValue() {
            return this.assertValue;
        }

        @Override
        public final java.lang.String getResult() {
            return this.result;
        }

        @Override
        public final java.lang.String getThat() {
            return this.that;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("default", om.valueToTree(this.getDefaultValue()));
            if (this.getAssertValue() != null) {
                data.set("assert", om.valueToTree(this.getAssertValue()));
            }
            if (this.getResult() != null) {
                data.set("result", om.valueToTree(this.getResult()));
            }
            if (this.getThat() != null) {
                data.set("that", om.valueToTree(this.getThat()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.StructWithJavaReservedWords"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            StructWithJavaReservedWords.Jsii$Proxy that = (StructWithJavaReservedWords.Jsii$Proxy) o;

            if (!defaultValue.equals(that.defaultValue)) return false;
            if (this.assertValue != null ? !this.assertValue.equals(that.assertValue) : that.assertValue != null) return false;
            if (this.result != null ? !this.result.equals(that.result) : that.result != null) return false;
            return this.that != null ? this.that.equals(that.that) : that.that == null;
        }

        @Override
        public final int hashCode() {
            int result = this.defaultValue.hashCode();
            result = 31 * result + (this.assertValue != null ? this.assertValue.hashCode() : 0);
            result = 31 * result + (this.result != null ? this.result.hashCode() : 0);
            result = 31 * result + (this.that != null ? this.that.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Sum.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * An operation that sums multiple values.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Sum")
public class Sum extends software.amazon.jsii.tests.calculator.composition.CompositeOperation {

    protected Sum(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Sum(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Sum() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * The expression that this operation consists of.
     * <p>
     * Must be implemented by derived classes.
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue getExpression() {
        return software.amazon.jsii.Kernel.get(this, "expression", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class));
    }

    /**
     * The parts to sum.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.lib.NumericValue> getParts() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "parts", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class))));
    }

    /**
     * The parts to sum.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setParts(final @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.lib.NumericValue> value) {
        software.amazon.jsii.Kernel.set(this, "parts", java.util.Objects.requireNonNull(value, "parts is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SupportsNiceJavaBuilder.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SupportsNiceJavaBuilder")
public class SupportsNiceJavaBuilder extends software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderWithRequiredProps {

    protected SupportsNiceJavaBuilder(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected SupportsNiceJavaBuilder(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param id some identifier. This parameter is required.
     * @param defaultBar the default value of <code>bar</code>.
     * @param props some props once can provide.
     * @param rest a variadic continuation. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public SupportsNiceJavaBuilder(final @org.jetbrains.annotations.NotNull java.lang.Number id, final @org.jetbrains.annotations.Nullable java.lang.Number defaultBar, final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderProps props, final @org.jetbrains.annotations.NotNull java.lang.String... rest) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, java.util.stream.Stream.concat(java.util.Arrays.<Object>stream(new Object[] { java.util.Objects.requireNonNull(id, "id is required"), defaultBar, props }), java.util.Arrays.<Object>stream(rest)).toArray(Object[]::new));
    }

    /**
     * some identifier.
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getId() {
        return software.amazon.jsii.Kernel.get(this, "id", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> getRest() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "rest", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
    }

    /**
     * A fluent builder for {@link software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilder}.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilder> {
        /**
         * @return a new instance of {@link Builder}.
         * @param id some identifier. This parameter is required.
         * @param defaultBar the default value of <code>bar</code>.
         * @param rest a variadic continuation. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create(final java.lang.Number id, final java.lang.Number defaultBar, final java.lang.String... rest) {
            return new Builder(id, defaultBar, rest);
        }
        /**
         * @return a new instance of {@link Builder}.
         * @param id some identifier. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create(final java.lang.Number id) {
            return new Builder(id, null, null);
        }

        private final java.lang.Number id;
        private final java.lang.Number defaultBar;
        private final java.lang.String[] rest;
        private software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderProps.Builder props;

        private Builder(final java.lang.Number id, final java.lang.Number defaultBar, final java.lang.String... rest) {
            this.id = id;
            this.defaultBar = defaultBar;
            this.rest = rest;
        }

        /**
         * Some number, like 42.
         * <p>
         * @return {@code this}
         * @param bar Some number, like 42. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar(final java.lang.Number bar) {
            this.props().bar(bar);
            return this;
        }

        /**
         * An <code>id</code> field here is terrible API design, because the constructor of <code>SupportsNiceJavaBuilder</code> already has a parameter named <code>id</code>.
         * <p>
         * But here we are, doing it like we didn't care.
         * <p>
         * @return {@code this}
         * @param id An <code>id</code> field here is terrible API design, because the constructor of <code>SupportsNiceJavaBuilder</code> already has a parameter named <code>id</code>. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder id(final java.lang.String id) {
            this.props().id(id);
            return this;
        }

        /**
         * @return a newly built instance of {@link software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilder}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilder build() {
            return new software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilder(
                this.id,
                this.defaultBar,
                this.props != null ? this.props.build() : null,
                this.rest
            );
        }

        private software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderProps.Builder props() {
            if (this.props == null) {
                this.props = new software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderProps.Builder();
            }
            return this.props;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SupportsNiceJavaBuilderProps.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SupportsNiceJavaBuilderProps")
@software.amazon.jsii.Jsii.Proxy(SupportsNiceJavaBuilderProps.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface SupportsNiceJavaBuilderProps extends software.amazon.jsii.JsiiSerializable {

    /**
     * Some number, like 42.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number getBar();

    /**
     * An <code>id</code> field here is terrible API design, because the constructor of <code>SupportsNiceJavaBuilder</code> already has a parameter named <code>id</code>.
     * <p>
     * But here we are, doing it like we didn't care.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getId() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link SupportsNiceJavaBuilderProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link SupportsNiceJavaBuilderProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<SupportsNiceJavaBuilderProps> {
        java.lang.Number bar;
        java.lang.String id;

        /**
         * Sets the value of {@link SupportsNiceJavaBuilderProps#getBar}
         * @param bar Some number, like 42. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar(java.lang.Number bar) {
            this.bar = bar;
            return this;
        }

        /**
         * Sets the value of {@link SupportsNiceJavaBuilderProps#getId}
         * @param id An <code>id</code> field here is terrible API design, because the constructor of <code>SupportsNiceJavaBuilder</code> already has a parameter named <code>id</code>.
         *           But here we are, doing it like we didn't care.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder id(java.lang.String id) {
            this.id = id;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link SupportsNiceJavaBuilderProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public SupportsNiceJavaBuilderProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link SupportsNiceJavaBuilderProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements SupportsNiceJavaBuilderProps {
        private final java.lang.Number bar;
        private final java.lang.String id;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.bar = software.amazon.jsii.Kernel.get(this, "bar", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
            this.id = software.amazon.jsii.Kernel.get(this, "id", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.bar = java.util.Objects.requireNonNull(builder.bar, "bar is required");
            this.id = builder.id;
        }

        @Override
        public final java.lang.Number getBar() {
            return this.bar;
        }

        @Override
        public final java.lang.String getId() {
            return this.id;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("bar", om.valueToTree(this.getBar()));
            if (this.getId() != null) {
                data.set("id", om.valueToTree(this.getId()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.SupportsNiceJavaBuilderProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            SupportsNiceJavaBuilderProps.Jsii$Proxy that = (SupportsNiceJavaBuilderProps.Jsii$Proxy) o;

            if (!bar.equals(that.bar)) return false;
            return this.id != null ? this.id.equals(that.id) : that.id == null;
        }

        @Override
        public final int hashCode() {
            int result = this.bar.hashCode();
            result = 31 * result + (this.id != null ? this.id.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SupportsNiceJavaBuilderWithRequiredProps.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * We can generate fancy builders in Java for classes which take a mix of positional &amp; struct parameters.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SupportsNiceJavaBuilderWithRequiredProps")
public class SupportsNiceJavaBuilderWithRequiredProps extends software.amazon.jsii.JsiiObject {

    protected SupportsNiceJavaBuilderWithRequiredProps(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected SupportsNiceJavaBuilderWithRequiredProps(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param id some identifier of your choice. This parameter is required.
     * @param props some properties. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public SupportsNiceJavaBuilderWithRequiredProps(final @org.jetbrains.annotations.NotNull java.lang.Number id, final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderProps props) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(id, "id is required"), java.util.Objects.requireNonNull(props, "props is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getBar() {
        return software.amazon.jsii.Kernel.get(this, "bar", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * some identifier of your choice.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getId() {
        return software.amazon.jsii.Kernel.get(this, "id", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.lang.String getPropId() {
        return software.amazon.jsii.Kernel.get(this, "propId", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * A fluent builder for {@link software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderWithRequiredProps}.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderWithRequiredProps> {
        /**
         * @return a new instance of {@link Builder}.
         * @param id some identifier of your choice. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create(final java.lang.Number id) {
            return new Builder(id);
        }

        private final java.lang.Number id;
        private final software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderProps.Builder props;

        private Builder(final java.lang.Number id) {
            this.id = id;
            this.props = new software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderProps.Builder();
        }

        /**
         * Some number, like 42.
         * <p>
         * @return {@code this}
         * @param bar Some number, like 42. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar(final java.lang.Number bar) {
            this.props.bar(bar);
            return this;
        }

        /**
         * An <code>id</code> field here is terrible API design, because the constructor of <code>SupportsNiceJavaBuilder</code> already has a parameter named <code>id</code>.
         * <p>
         * But here we are, doing it like we didn't care.
         * <p>
         * @return {@code this}
         * @param id An <code>id</code> field here is terrible API design, because the constructor of <code>SupportsNiceJavaBuilder</code> already has a parameter named <code>id</code>. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder id(final java.lang.String id) {
            this.props.id(id);
            return this;
        }

        /**
         * @return a newly built instance of {@link software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderWithRequiredProps}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderWithRequiredProps build() {
            return new software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderWithRequiredProps(
                this.id,
                this.props.build()
            );
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/SyncVirtualMethods.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.SyncVirtualMethods")
public class SyncVirtualMethods extends software.amazon.jsii.JsiiObject {

    protected SyncVirtualMethods(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected SyncVirtualMethods(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public SyncVirtualMethods() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number callerIsAsync() {
        return software.amazon.jsii.Kernel.asyncCall(this, "callerIsAsync", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number callerIsMethod() {
        return software.amazon.jsii.Kernel.call(this, "callerIsMethod", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void modifyOtherProperty(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.call(this, "modifyOtherProperty", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void modifyValueOfTheProperty(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.call(this, "modifyValueOfTheProperty", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number readA() {
        return software.amazon.jsii.Kernel.call(this, "readA", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String retrieveOtherProperty() {
        return software.amazon.jsii.Kernel.call(this, "retrieveOtherProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String retrieveReadOnlyProperty() {
        return software.amazon.jsii.Kernel.call(this, "retrieveReadOnlyProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String retrieveValueOfTheProperty() {
        return software.amazon.jsii.Kernel.call(this, "retrieveValueOfTheProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * @param n This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number virtualMethod(final @org.jetbrains.annotations.NotNull java.lang.Number n) {
        return software.amazon.jsii.Kernel.call(this, "virtualMethod", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(n, "n is required") });
    }

    /**
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void writeA(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        software.amazon.jsii.Kernel.call(this, "writeA", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getReadonlyProperty() {
        return software.amazon.jsii.Kernel.get(this, "readonlyProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getA() {
        return software.amazon.jsii.Kernel.get(this, "a", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setA(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        software.amazon.jsii.Kernel.set(this, "a", java.util.Objects.requireNonNull(value, "a is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getCallerIsProperty() {
        return software.amazon.jsii.Kernel.get(this, "callerIsProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setCallerIsProperty(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        software.amazon.jsii.Kernel.set(this, "callerIsProperty", java.util.Objects.requireNonNull(value, "callerIsProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getOtherProperty() {
        return software.amazon.jsii.Kernel.get(this, "otherProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setOtherProperty(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "otherProperty", java.util.Objects.requireNonNull(value, "otherProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getTheProperty() {
        return software.amazon.jsii.Kernel.get(this, "theProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setTheProperty(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "theProperty", java.util.Objects.requireNonNull(value, "theProperty is required"));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getValueOfOtherProperty() {
        return software.amazon.jsii.Kernel.get(this, "valueOfOtherProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setValueOfOtherProperty(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "valueOfOtherProperty", java.util.Objects.requireNonNull(value, "valueOfOtherProperty is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/TestStructWithEnum.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.TestStructWithEnum")
public class TestStructWithEnum extends software.amazon.jsii.JsiiObject {

    protected TestStructWithEnum(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected TestStructWithEnum(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public TestStructWithEnum() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * Returns true if <code>foo</code> is <code>StringEnum.A</code>.
     * <p>
     * @param input This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean isStringEnumA(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StructWithEnum input) {
        return software.amazon.jsii.Kernel.call(this, "isStringEnumA", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(input, "input is required") });
    }

    /**
     * Returns true if <code>foo</code> is <code>StringEnum.B</code> and <code>bar</code> is <code>AllTypesEnum.THIS_IS_GREAT</code>.
     * <p>
     * @param input This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean isStringEnumB(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StructWithEnum input) {
        return software.amazon.jsii.Kernel.call(this, "isStringEnumB", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(input, "input is required") });
    }

    /**
     * Returns <code>foo: StringEnum.A</code>.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StructWithEnum getStructWithFoo() {
        return software.amazon.jsii.Kernel.get(this, "structWithFoo", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StructWithEnum.class));
    }

    /**
     * Returns <code>foo: StringEnum.C</code> and <code>bar: AllTypesEnum.MY_ENUM_VALUE</code>.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.StructWithEnum getStructWithFooBar() {
        return software.amazon.jsii.Kernel.get(this, "structWithFooBar", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.StructWithEnum.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/Thrower.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.Thrower")
public class Thrower extends software.amazon.jsii.JsiiObject {

    protected Thrower(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Thrower(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Thrower() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void throwError() {
        software.amazon.jsii.Kernel.call(this, "throwError", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/TopLevelStruct.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.TopLevelStruct")
@software.amazon.jsii.Jsii.Proxy(TopLevelStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface TopLevelStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     * This is a required field.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getRequired();

    /**
     * A union to really stress test our serialization.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Object getSecondLevel();

    /**
     * You don't have to pass this.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getOptional() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link TopLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link TopLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<TopLevelStruct> {
        java.lang.String required;
        java.lang.Object secondLevel;
        java.lang.String optional;

        /**
         * Sets the value of {@link TopLevelStruct#getRequired}
         * @param required This is a required field. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder required(java.lang.String required) {
            this.required = required;
            return this;
        }

        /**
         * Sets the value of {@link TopLevelStruct#getSecondLevel}
         * @param secondLevel A union to really stress test our serialization. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder secondLevel(java.lang.Number secondLevel) {
            this.secondLevel = secondLevel;
            return this;
        }

        /**
         * Sets the value of {@link TopLevelStruct#getSecondLevel}
         * @param secondLevel A union to really stress test our serialization. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder secondLevel(software.amazon.jsii.tests.calculator.SecondLevelStruct secondLevel) {
            this.secondLevel = secondLevel;
            return this;
        }

        /**
         * Sets the value of {@link TopLevelStruct#getOptional}
         * @param optional You don't have to pass this.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder optional(java.lang.String optional) {
            this.optional = optional;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link TopLevelStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public TopLevelStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link TopLevelStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements TopLevelStruct {
        private final java.lang.String required;
        private final java.lang.Object secondLevel;
        private final java.lang.String optional;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.required = software.amazon.jsii.Kernel.get(this, "required", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.secondLevel = software.amazon.jsii.Kernel.get(this, "secondLevel", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
            this.optional = software.amazon.jsii.Kernel.get(this, "optional", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.required = java.util.Objects.requireNonNull(builder.required, "required is required");
            this.secondLevel = java.util.Objects.requireNonNull(builder.secondLevel, "secondLevel is required");
            this.optional = builder.optional;
        }

        @Override
        public final java.lang.String getRequired() {
            return this.required;
        }

        @Override
        public final java.lang.Object getSecondLevel() {
            return this.secondLevel;
        }

        @Override
        public final java.lang.String getOptional() {
            return this.optional;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("required", om.valueToTree(this.getRequired()));
            data.set("secondLevel", om.valueToTree(this.getSecondLevel()));
            if (this.getOptional() != null) {
                data.set("optional", om.valueToTree(this.getOptional()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.TopLevelStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            TopLevelStruct.Jsii$Proxy that = (TopLevelStruct.Jsii$Proxy) o;

            if (!required.equals(that.required)) return false;
            if (!secondLevel.equals(that.secondLevel)) return false;
            return this.optional != null ? this.optional.equals(that.optional) : that.optional == null;
        }

        @Override
        public final int hashCode() {
            int result = this.required.hashCode();
            result = 31 * result + (this.secondLevel.hashCode());
            result = 31 * result + (this.optional != null ? this.optional.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/TwoMethodsWithSimilarCapitalization.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * In TypeScript it is possible to have two methods with the same name but different capitalization.
 * <p>
 * @see <a href="https://github.com/aws/jsii/issues/2508">https://github.com/aws/jsii/issues/2508</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.TwoMethodsWithSimilarCapitalization")
public class TwoMethodsWithSimilarCapitalization extends software.amazon.jsii.JsiiObject {

    protected TwoMethodsWithSimilarCapitalization(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected TwoMethodsWithSimilarCapitalization(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public TwoMethodsWithSimilarCapitalization() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String toIsoString() {
        return software.amazon.jsii.Kernel.call(this, "toIsoString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * @deprecated python requires that all alternatives are deprecated
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public @org.jetbrains.annotations.NotNull java.lang.String toIsOString() {
        return software.amazon.jsii.Kernel.call(this, "toIsOString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * @deprecated python requires that all alternatives are deprecated
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public @org.jetbrains.annotations.NotNull java.lang.String toISOString() {
        return software.amazon.jsii.Kernel.call(this, "toISOString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getFooBar() {
        return software.amazon.jsii.Kernel.get(this, "fooBar", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * @deprecated YES
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public @org.jetbrains.annotations.NotNull java.lang.Number getFooBAR() {
        return software.amazon.jsii.Kernel.get(this, "fooBAR", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/UmaskCheck.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Checks the current file permissions are cool (no funky UMASK down-scoping happened).
 * <p>
 * @see <a href="https://github.com/aws/jsii/issues/1765">https://github.com/aws/jsii/issues/1765</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.UmaskCheck")
public class UmaskCheck extends software.amazon.jsii.JsiiObject {

    protected UmaskCheck(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected UmaskCheck(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * This should return 0o644 (-rw-r--r--).
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Number mode() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.UmaskCheck.class, "mode", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/UnaryOperation.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * An operation on a single operand.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.UnaryOperation")
public abstract class UnaryOperation extends software.amazon.jsii.tests.calculator.lib.Operation {

    protected UnaryOperation(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected UnaryOperation(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param operand This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected UnaryOperation(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue operand) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(operand, "operand is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue getOperand() {
        return software.amazon.jsii.Kernel.get(this, "operand", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class));
    }

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.UnaryOperation {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * (deprecated) The value.
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        public final @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
            return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * (deprecated) String representation of the value.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
        @Deprecated
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String toString() {
            return software.amazon.jsii.Kernel.call(this, "toString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/UnionProperties.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.UnionProperties")
@software.amazon.jsii.Jsii.Proxy(UnionProperties.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface UnionProperties extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Object getBar();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Object getFoo() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link UnionProperties}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link UnionProperties}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<UnionProperties> {
        java.lang.Object bar;
        java.lang.Object foo;

        /**
         * Sets the value of {@link UnionProperties#getBar}
         * @param bar the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar(java.lang.String bar) {
            this.bar = bar;
            return this;
        }

        /**
         * Sets the value of {@link UnionProperties#getBar}
         * @param bar the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar(java.lang.Number bar) {
            this.bar = bar;
            return this;
        }

        /**
         * Sets the value of {@link UnionProperties#getBar}
         * @param bar the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar(software.amazon.jsii.tests.calculator.AllTypes bar) {
            this.bar = bar;
            return this;
        }

        /**
         * Sets the value of {@link UnionProperties#getFoo}
         * @param foo the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder foo(java.lang.String foo) {
            this.foo = foo;
            return this;
        }

        /**
         * Sets the value of {@link UnionProperties#getFoo}
         * @param foo the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder foo(java.lang.Number foo) {
            this.foo = foo;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link UnionProperties}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public UnionProperties build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link UnionProperties}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements UnionProperties {
        private final java.lang.Object bar;
        private final java.lang.Object foo;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.bar = software.amazon.jsii.Kernel.get(this, "bar", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
            this.foo = software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.bar = java.util.Objects.requireNonNull(builder.bar, "bar is required");
            this.foo = builder.foo;
        }

        @Override
        public final java.lang.Object getBar() {
            return this.bar;
        }

        @Override
        public final java.lang.Object getFoo() {
            return this.foo;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("bar", om.valueToTree(this.getBar()));
            if (this.getFoo() != null) {
                data.set("foo", om.valueToTree(this.getFoo()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.UnionProperties"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            UnionProperties.Jsii$Proxy that = (UnionProperties.Jsii$Proxy) o;

            if (!bar.equals(that.bar)) return false;
            return this.foo != null ? this.foo.equals(that.foo) : that.foo == null;
        }

        @Override
        public final int hashCode() {
            int result = this.bar.hashCode();
            result = 31 * result + (this.foo != null ? this.foo.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/UpcasingReflectable.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Ensures submodule-imported types from dependencies can be used correctly.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.UpcasingReflectable")
public class UpcasingReflectable extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.custom_submodule_name.IReflectable {

    protected UpcasingReflectable(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected UpcasingReflectable(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    static {
        REFLECTOR = software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.UpcasingReflectable.class, "reflector", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.custom_submodule_name.Reflector.class));
    }

    /**
     * @param delegate This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public UpcasingReflectable(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> delegate) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(delegate, "delegate is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public final static software.amazon.jsii.tests.calculator.custom_submodule_name.Reflector REFLECTOR;

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.custom_submodule_name.ReflectableEntry> getEntries() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "entries", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.custom_submodule_name.ReflectableEntry.class))));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/UseBundledDependency.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.UseBundledDependency")
public class UseBundledDependency extends software.amazon.jsii.JsiiObject {

    protected UseBundledDependency(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected UseBundledDependency(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public UseBundledDependency() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Object value() {
        return software.amazon.jsii.Kernel.call(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/UseCalcBase.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Depend on a type from jsii-calc-base as a test for awslabs/jsii#128.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.UseCalcBase")
public class UseCalcBase extends software.amazon.jsii.JsiiObject {

    protected UseCalcBase(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected UseCalcBase(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public UseCalcBase() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.base.Base hello() {
        return software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.base.Base.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/UsesInterfaceWithProperties.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.UsesInterfaceWithProperties")
public class UsesInterfaceWithProperties extends software.amazon.jsii.JsiiObject {

    protected UsesInterfaceWithProperties(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected UsesInterfaceWithProperties(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param obj This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public UsesInterfaceWithProperties(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IInterfaceWithProperties obj) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(obj, "obj is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String justRead() {
        return software.amazon.jsii.Kernel.call(this, "justRead", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * @param ext This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String readStringAndNumber(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IInterfaceWithPropertiesExtension ext) {
        return software.amazon.jsii.Kernel.call(this, "readStringAndNumber", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(ext, "ext is required") });
    }

    /**
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String writeAndRead(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        return software.amazon.jsii.Kernel.call(this, "writeAndRead", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IInterfaceWithProperties getObj() {
        return software.amazon.jsii.Kernel.get(this, "obj", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.IInterfaceWithProperties.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/VariadicInvoker.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.VariadicInvoker")
public class VariadicInvoker extends software.amazon.jsii.JsiiObject {

    protected VariadicInvoker(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected VariadicInvoker(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param method This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public VariadicInvoker(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.VariadicMethod method) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(method, "method is required") });
    }

    /**
     * @param values This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.Number> asArray(final @org.jetbrains.annotations.NotNull java.lang.Number... values) {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.call(this, "asArray", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.Number.class)), java.util.Arrays.<Object>stream(values).toArray(Object[]::new)));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/VariadicMethod.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.VariadicMethod")
public class VariadicMethod extends software.amazon.jsii.JsiiObject {

    protected VariadicMethod(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected VariadicMethod(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param prefix a prefix that will be use for all values returned by <code>#asArray</code>. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public VariadicMethod(final @org.jetbrains.annotations.NotNull java.lang.Number... prefix) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, java.util.Arrays.<Object>stream(prefix).toArray(Object[]::new));
    }

    /**
     * @param first the first element of the array to be returned (after the <code>prefix</code> provided at construction time). This parameter is required.
     * @param others other elements to be included in the array. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.Number> asArray(final @org.jetbrains.annotations.NotNull java.lang.Number first, final @org.jetbrains.annotations.NotNull java.lang.Number... others) {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.call(this, "asArray", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.Number.class)), java.util.stream.Stream.concat(java.util.Arrays.<Object>stream(new Object[] { java.util.Objects.requireNonNull(first, "first is required") }), java.util.Arrays.<Object>stream(others)).toArray(Object[]::new)));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/VariadicTypeUnion.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.VariadicTypeUnion")
public class VariadicTypeUnion extends software.amazon.jsii.JsiiObject {

    protected VariadicTypeUnion(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected VariadicTypeUnion(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param union This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public VariadicTypeUnion(final @org.jetbrains.annotations.NotNull java.lang.Object... union) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, java.util.Arrays.<Object>stream(union).toArray(Object[]::new));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> getUnion() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "union", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.Object.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setUnion(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> value) {
        software.amazon.jsii.Kernel.set(this, "union", java.util.Objects.requireNonNull(value, "union is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/VirtualMethodPlayground.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.VirtualMethodPlayground")
public class VirtualMethodPlayground extends software.amazon.jsii.JsiiObject {

    protected VirtualMethodPlayground(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected VirtualMethodPlayground(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public VirtualMethodPlayground() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param index This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number overrideMeAsync(final @org.jetbrains.annotations.NotNull java.lang.Number index) {
        return software.amazon.jsii.Kernel.asyncCall(this, "overrideMeAsync", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(index, "index is required") });
    }

    /**
     * @param index This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number overrideMeSync(final @org.jetbrains.annotations.NotNull java.lang.Number index) {
        return software.amazon.jsii.Kernel.call(this, "overrideMeSync", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(index, "index is required") });
    }

    /**
     * @param count This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number parallelSumAsync(final @org.jetbrains.annotations.NotNull java.lang.Number count) {
        return software.amazon.jsii.Kernel.asyncCall(this, "parallelSumAsync", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(count, "count is required") });
    }

    /**
     * @param count This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number serialSumAsync(final @org.jetbrains.annotations.NotNull java.lang.Number count) {
        return software.amazon.jsii.Kernel.asyncCall(this, "serialSumAsync", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(count, "count is required") });
    }

    /**
     * @param count This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number sumSync(final @org.jetbrains.annotations.NotNull java.lang.Number count) {
        return software.amazon.jsii.Kernel.call(this, "sumSync", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(count, "count is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/VoidCallback.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * This test is used to validate the runtimes can return correctly from a void callback.
 * <p>
 * <ul>
 * <li>Implement <code>overrideMe</code> (method does not have to do anything).</li>
 * <li>Invoke <code>callMe</code></li>
 * <li>Verify that <code>methodWasCalled</code> is <code>true</code>.</li>
 * </ul>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.VoidCallback")
public abstract class VoidCallback extends software.amazon.jsii.JsiiObject {

    protected VoidCallback(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected VoidCallback(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected VoidCallback() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void callMe() {
        software.amazon.jsii.Kernel.call(this, "callMe", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected abstract void overrideMe();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean getMethodWasCalled() {
        return software.amazon.jsii.Kernel.get(this, "methodWasCalled", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.VoidCallback {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        protected final void overrideMe() {
            software.amazon.jsii.Kernel.call(this, "overrideMe", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/WeirdDocs.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * <blockquote><p>Don't use this class.<p></blockquote>
 * <p>
 * A class that shouldn't be used, with the annotation in a weird place.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.WeirdDocs")
public class WeirdDocs extends software.amazon.jsii.JsiiObject {

    protected WeirdDocs(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected WeirdDocs(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public WeirdDocs() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * <blockquote><p>Don't read this property.<p></blockquote>
     * <p>
     * A property that shouldn't be read, with the annotation in a weird place.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.lang.String getDontReadMe() {
        return software.amazon.jsii.Kernel.get(this, "dontReadMe", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * <blockquote><p>Don't read this property.<p></blockquote>
     * <p>
     * A property that shouldn't be read, with the annotation in a weird place.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setDontReadMe(final @org.jetbrains.annotations.Nullable java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "dontReadMe", value);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/WithPrivatePropertyInConstructor.java 1`] = `
package software.amazon.jsii.tests.calculator;

/**
 * Verifies that private property declarations in constructor arguments are hidden.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.WithPrivatePropertyInConstructor")
public class WithPrivatePropertyInConstructor extends software.amazon.jsii.JsiiObject {

    protected WithPrivatePropertyInConstructor(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected WithPrivatePropertyInConstructor(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param privateField
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public WithPrivatePropertyInConstructor(final @org.jetbrains.annotations.Nullable java.lang.String privateField) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { privateField });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public WithPrivatePropertyInConstructor() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Boolean getSuccess() {
        return software.amazon.jsii.Kernel.get(this, "success", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/anonymous/IOptionA.java 1`] = `
package software.amazon.jsii.tests.calculator.anonymous;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.anonymous.IOptionA")
@software.amazon.jsii.Jsii.Proxy(IOptionA.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IOptionA extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String doSomething();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.anonymous.IOptionA.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String doSomething() {
            return software.amazon.jsii.Kernel.call(this, "doSomething", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IOptionA}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IOptionA {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String doSomething() {
            return software.amazon.jsii.Kernel.call(this, "doSomething", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/anonymous/IOptionB.java 1`] = `
package software.amazon.jsii.tests.calculator.anonymous;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.anonymous.IOptionB")
@software.amazon.jsii.Jsii.Proxy(IOptionB.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IOptionB extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String doSomethingElse();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.anonymous.IOptionB.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String doSomethingElse() {
            return software.amazon.jsii.Kernel.call(this, "doSomethingElse", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IOptionB}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IOptionB {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String doSomethingElse() {
            return software.amazon.jsii.Kernel.call(this, "doSomethingElse", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/anonymous/UseOptions.java 1`] = `
package software.amazon.jsii.tests.calculator.anonymous;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.anonymous.UseOptions")
public class UseOptions extends software.amazon.jsii.JsiiObject {

    protected UseOptions(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected UseOptions(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param option This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.String consume(final @org.jetbrains.annotations.NotNull java.lang.Object option) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.anonymous.UseOptions.class, "consume", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(option, "option is required") });
    }

    /**
     * @param which This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object privideAsAny(final @org.jetbrains.annotations.NotNull java.lang.String which) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.anonymous.UseOptions.class, "privideAsAny", software.amazon.jsii.NativeType.forClass(java.lang.Object.class), new Object[] { java.util.Objects.requireNonNull(which, "which is required") });
    }

    /**
     * @param which This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Object provide(final @org.jetbrains.annotations.NotNull java.lang.String which) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.anonymous.UseOptions.class, "provide", software.amazon.jsii.NativeType.forClass(java.lang.Object.class), new Object[] { java.util.Objects.requireNonNull(which, "which is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/cdk16625/Cdk16625.java 1`] = `
package software.amazon.jsii.tests.calculator.cdk16625;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.cdk16625.Cdk16625")
public abstract class Cdk16625 extends software.amazon.jsii.JsiiObject {

    protected Cdk16625(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Cdk16625(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected Cdk16625() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * Run this function to verify that everything is working as it should.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void test() {
        software.amazon.jsii.Kernel.call(this, "test", software.amazon.jsii.NativeType.VOID);
    }

    /**
     * Implement this functin to return <code>gen.next()</code>. It is extremely important that the <code>donotimport</code> submodule is NEVER explicitly loaded in the testing application (otherwise this test is void).
     * <p>
     * @param gen a VERY pseudo random number generator. This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected abstract @org.jetbrains.annotations.NotNull java.lang.Number unwrap(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IRandomNumberGenerator gen);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.cdk16625.Cdk16625 {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * Implement this functin to return <code>gen.next()</code>. It is extremely important that the <code>donotimport</code> submodule is NEVER explicitly loaded in the testing application (otherwise this test is void).
         * <p>
         * @param gen a VERY pseudo random number generator. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        protected final @org.jetbrains.annotations.NotNull java.lang.Number unwrap(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.IRandomNumberGenerator gen) {
            return software.amazon.jsii.Kernel.call(this, "unwrap", software.amazon.jsii.NativeType.forClass(java.lang.Number.class), new Object[] { java.util.Objects.requireNonNull(gen, "gen is required") });
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/cdk16625/donotimport/UnimportedSubmoduleType.java 1`] = `
package software.amazon.jsii.tests.calculator.cdk16625.donotimport;

/**
 * This type demonstrates the ability to receive a callback argument that has a type from a submodule not explicitly imported in the user's code.
 * <p>
 * This checks
 * that all types available in the assembly can be resolved by the runtime
 * library, regardless of whether they were explicitly referenced or not.
 * <p>
 * @see <a href="https://github.com/aws/aws-cdk/issues/16625">https://github.com/aws/aws-cdk/issues/16625</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.cdk16625.donotimport.UnimportedSubmoduleType")
public class UnimportedSubmoduleType extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.IRandomNumberGenerator {

    protected UnimportedSubmoduleType(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected UnimportedSubmoduleType(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param value This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public UnimportedSubmoduleType(final @org.jetbrains.annotations.NotNull java.lang.Number value) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(value, "value is required") });
    }

    /**
     * Not quite random, but it'll do.
     * <p>
     * @return 1337
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.Number next() {
        return software.amazon.jsii.Kernel.call(this, "next", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/cdk22369/AcceptsPath.java 1`] = `
package software.amazon.jsii.tests.calculator.cdk22369;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.cdk22369.AcceptsPath")
public class AcceptsPath extends software.amazon.jsii.JsiiObject {

    protected AcceptsPath(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected AcceptsPath(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param props This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public AcceptsPath(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.cdk22369.AcceptsPathProps props) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(props, "props is required") });
    }

    /**
     * A fluent builder for {@link software.amazon.jsii.tests.calculator.cdk22369.AcceptsPath}.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<software.amazon.jsii.tests.calculator.cdk22369.AcceptsPath> {
        /**
         * @return a new instance of {@link Builder}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create() {
            return new Builder();
        }

        private final software.amazon.jsii.tests.calculator.cdk22369.AcceptsPathProps.Builder props;

        private Builder() {
            this.props = new software.amazon.jsii.tests.calculator.cdk22369.AcceptsPathProps.Builder();
        }

        /**
         * A path that doesn't exist.
         * <p>
         * @return {@code this}
         * @param sourcePath A path that doesn't exist. This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder sourcePath(final java.lang.String sourcePath) {
            this.props.sourcePath(sourcePath);
            return this;
        }

        /**
         * @return a newly built instance of {@link software.amazon.jsii.tests.calculator.cdk22369.AcceptsPath}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public software.amazon.jsii.tests.calculator.cdk22369.AcceptsPath build() {
            return new software.amazon.jsii.tests.calculator.cdk22369.AcceptsPath(
                this.props.build()
            );
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/cdk22369/AcceptsPathProps.java 1`] = `
package software.amazon.jsii.tests.calculator.cdk22369;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.cdk22369.AcceptsPathProps")
@software.amazon.jsii.Jsii.Proxy(AcceptsPathProps.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface AcceptsPathProps extends software.amazon.jsii.JsiiSerializable {

    /**
     * A path that doesn't exist.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getSourcePath();

    /**
     * @return a {@link Builder} of {@link AcceptsPathProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link AcceptsPathProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<AcceptsPathProps> {
        java.lang.String sourcePath;

        /**
         * Sets the value of {@link AcceptsPathProps#getSourcePath}
         * @param sourcePath A path that doesn't exist. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder sourcePath(java.lang.String sourcePath) {
            this.sourcePath = sourcePath;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link AcceptsPathProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public AcceptsPathProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link AcceptsPathProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements AcceptsPathProps {
        private final java.lang.String sourcePath;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.sourcePath = software.amazon.jsii.Kernel.get(this, "sourcePath", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.sourcePath = java.util.Objects.requireNonNull(builder.sourcePath, "sourcePath is required");
        }

        @Override
        public final java.lang.String getSourcePath() {
            return this.sourcePath;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("sourcePath", om.valueToTree(this.getSourcePath()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.cdk22369.AcceptsPathProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            AcceptsPathProps.Jsii$Proxy that = (AcceptsPathProps.Jsii$Proxy) o;

            return this.sourcePath.equals(that.sourcePath);
        }

        @Override
        public final int hashCode() {
            int result = this.sourcePath.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/composition/CompositeOperation.java 1`] = `
package software.amazon.jsii.tests.calculator.composition;

/**
 * Abstract operation composed from an expression of other operations.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.composition.CompositeOperation")
public abstract class CompositeOperation extends software.amazon.jsii.tests.calculator.lib.Operation {

    protected CompositeOperation(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected CompositeOperation(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    protected CompositeOperation() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * String representation of the value.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String toString() {
        return software.amazon.jsii.Kernel.call(this, "toString", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     * The expression that this operation consists of.
     * <p>
     * Must be implemented by derived classes.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public abstract @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue getExpression();

    /**
     * The value.
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getValue() {
        return software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }

    /**
     * A set of postfixes to include in a decorated .toString().
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> getDecorationPostfixes() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "decorationPostfixes", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
    }

    /**
     * A set of postfixes to include in a decorated .toString().
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setDecorationPostfixes(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> value) {
        software.amazon.jsii.Kernel.set(this, "decorationPostfixes", java.util.Objects.requireNonNull(value, "decorationPostfixes is required"));
    }

    /**
     * A set of prefixes to include in a decorated .toString().
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> getDecorationPrefixes() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "decorationPrefixes", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))));
    }

    /**
     * A set of prefixes to include in a decorated .toString().
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setDecorationPrefixes(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.String> value) {
        software.amazon.jsii.Kernel.set(this, "decorationPrefixes", java.util.Objects.requireNonNull(value, "decorationPrefixes is required"));
    }

    /**
     * The .toString() style.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.composition.CompositeOperation.CompositionStringStyle getStringStyle() {
        return software.amazon.jsii.Kernel.get(this, "stringStyle", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.composition.CompositeOperation.CompositionStringStyle.class));
    }

    /**
     * The .toString() style.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setStringStyle(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.composition.CompositeOperation.CompositionStringStyle value) {
        software.amazon.jsii.Kernel.set(this, "stringStyle", java.util.Objects.requireNonNull(value, "stringStyle is required"));
    }
    /**
     * Style of .toString() output for CompositeOperation.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.composition.CompositeOperation.CompositionStringStyle")
    public enum CompositionStringStyle {
        /**
         * Normal string expression.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        NORMAL,
        /**
         * Decorated string expression.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        DECORATED,
    }

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.composition.CompositeOperation {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * The expression that this operation consists of.
         * <p>
         * Must be implemented by derived classes.
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.lib.NumericValue getExpression() {
            return software.amazon.jsii.Kernel.get(this, "expression", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.NumericValue.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/derived_class_has_no_properties/Base.java 1`] = `
package software.amazon.jsii.tests.calculator.derived_class_has_no_properties;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DerivedClassHasNoProperties.Base")
public class Base extends software.amazon.jsii.JsiiObject {

    protected Base(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Base(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Base() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getProp() {
        return software.amazon.jsii.Kernel.get(this, "prop", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setProp(final @org.jetbrains.annotations.NotNull java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "prop", java.util.Objects.requireNonNull(value, "prop is required"));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/derived_class_has_no_properties/Derived.java 1`] = `
package software.amazon.jsii.tests.calculator.derived_class_has_no_properties;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.DerivedClassHasNoProperties.Derived")
public class Derived extends software.amazon.jsii.tests.calculator.derived_class_has_no_properties.Base {

    protected Derived(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Derived(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Derived() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/homonymous_forward_references/bar/Consumer.java 1`] = `
package software.amazon.jsii.tests.calculator.homonymous_forward_references.bar;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.homonymousForwardReferences.bar.Consumer")
public class Consumer extends software.amazon.jsii.JsiiObject {

    protected Consumer(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Consumer(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param props This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.Homonymous consume(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.ConsumerProps props) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.Consumer.class, "consume", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.Homonymous.class), new Object[] { java.util.Objects.requireNonNull(props, "props is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/homonymous_forward_references/bar/ConsumerProps.java 1`] = `
package software.amazon.jsii.tests.calculator.homonymous_forward_references.bar;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.homonymousForwardReferences.bar.ConsumerProps")
@software.amazon.jsii.Jsii.Proxy(ConsumerProps.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface ConsumerProps extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.Homonymous getHomonymous();

    /**
     * @return a {@link Builder} of {@link ConsumerProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ConsumerProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<ConsumerProps> {
        software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.Homonymous homonymous;

        /**
         * Sets the value of {@link ConsumerProps#getHomonymous}
         * @param homonymous the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder homonymous(software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.Homonymous homonymous) {
            this.homonymous = homonymous;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ConsumerProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public ConsumerProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ConsumerProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ConsumerProps {
        private final software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.Homonymous homonymous;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.homonymous = software.amazon.jsii.Kernel.get(this, "homonymous", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.Homonymous.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.homonymous = java.util.Objects.requireNonNull(builder.homonymous, "homonymous is required");
        }

        @Override
        public final software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.Homonymous getHomonymous() {
            return this.homonymous;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("homonymous", om.valueToTree(this.getHomonymous()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.homonymousForwardReferences.bar.ConsumerProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ConsumerProps.Jsii$Proxy that = (ConsumerProps.Jsii$Proxy) o;

            return this.homonymous.equals(that.homonymous);
        }

        @Override
        public final int hashCode() {
            int result = this.homonymous.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/homonymous_forward_references/bar/Homonymous.java 1`] = `
package software.amazon.jsii.tests.calculator.homonymous_forward_references.bar;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.homonymousForwardReferences.bar.Homonymous")
@software.amazon.jsii.Jsii.Proxy(Homonymous.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface Homonymous extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number getNumericProperty();

    /**
     * @return a {@link Builder} of {@link Homonymous}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link Homonymous}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<Homonymous> {
        java.lang.Number numericProperty;

        /**
         * Sets the value of {@link Homonymous#getNumericProperty}
         * @param numericProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder numericProperty(java.lang.Number numericProperty) {
            this.numericProperty = numericProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link Homonymous}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public Homonymous build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link Homonymous}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements Homonymous {
        private final java.lang.Number numericProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.numericProperty = software.amazon.jsii.Kernel.get(this, "numericProperty", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.numericProperty = java.util.Objects.requireNonNull(builder.numericProperty, "numericProperty is required");
        }

        @Override
        public final java.lang.Number getNumericProperty() {
            return this.numericProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("numericProperty", om.valueToTree(this.getNumericProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.homonymousForwardReferences.bar.Homonymous"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Homonymous.Jsii$Proxy that = (Homonymous.Jsii$Proxy) o;

            return this.numericProperty.equals(that.numericProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.numericProperty.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/homonymous_forward_references/foo/Consumer.java 1`] = `
package software.amazon.jsii.tests.calculator.homonymous_forward_references.foo;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.homonymousForwardReferences.foo.Consumer")
public class Consumer extends software.amazon.jsii.JsiiObject {

    protected Consumer(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Consumer(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param props This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.Homonymous consume(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.ConsumerProps props) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.Consumer.class, "consume", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.Homonymous.class), new Object[] { java.util.Objects.requireNonNull(props, "props is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/homonymous_forward_references/foo/ConsumerProps.java 1`] = `
package software.amazon.jsii.tests.calculator.homonymous_forward_references.foo;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.homonymousForwardReferences.foo.ConsumerProps")
@software.amazon.jsii.Jsii.Proxy(ConsumerProps.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface ConsumerProps extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.Homonymous getHomonymous();

    /**
     * @return a {@link Builder} of {@link ConsumerProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ConsumerProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<ConsumerProps> {
        software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.Homonymous homonymous;

        /**
         * Sets the value of {@link ConsumerProps#getHomonymous}
         * @param homonymous the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder homonymous(software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.Homonymous homonymous) {
            this.homonymous = homonymous;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ConsumerProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public ConsumerProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ConsumerProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ConsumerProps {
        private final software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.Homonymous homonymous;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.homonymous = software.amazon.jsii.Kernel.get(this, "homonymous", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.Homonymous.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.homonymous = java.util.Objects.requireNonNull(builder.homonymous, "homonymous is required");
        }

        @Override
        public final software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.Homonymous getHomonymous() {
            return this.homonymous;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("homonymous", om.valueToTree(this.getHomonymous()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.homonymousForwardReferences.foo.ConsumerProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ConsumerProps.Jsii$Proxy that = (ConsumerProps.Jsii$Proxy) o;

            return this.homonymous.equals(that.homonymous);
        }

        @Override
        public final int hashCode() {
            int result = this.homonymous.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/homonymous_forward_references/foo/Homonymous.java 1`] = `
package software.amazon.jsii.tests.calculator.homonymous_forward_references.foo;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.homonymousForwardReferences.foo.Homonymous")
@software.amazon.jsii.Jsii.Proxy(Homonymous.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface Homonymous extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getStringProperty();

    /**
     * @return a {@link Builder} of {@link Homonymous}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link Homonymous}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<Homonymous> {
        java.lang.String stringProperty;

        /**
         * Sets the value of {@link Homonymous#getStringProperty}
         * @param stringProperty the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder stringProperty(java.lang.String stringProperty) {
            this.stringProperty = stringProperty;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link Homonymous}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public Homonymous build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link Homonymous}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements Homonymous {
        private final java.lang.String stringProperty;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.stringProperty = software.amazon.jsii.Kernel.get(this, "stringProperty", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.stringProperty = java.util.Objects.requireNonNull(builder.stringProperty, "stringProperty is required");
        }

        @Override
        public final java.lang.String getStringProperty() {
            return this.stringProperty;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("stringProperty", om.valueToTree(this.getStringProperty()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.homonymousForwardReferences.foo.Homonymous"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Homonymous.Jsii$Proxy that = (Homonymous.Jsii$Proxy) o;

            return this.stringProperty.equals(that.stringProperty);
        }

        @Override
        public final int hashCode() {
            int result = this.stringProperty.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/homonymous_forward_references/package-info.java 1`] = `
/**
 * Verifies homonymous forward references don't trip the Python type checker
 * <p>
 * This has been an issue when stub functions were introduced to create a reliable source for type checking
 * information, which was reported in https://github.com/aws/jsii/issues/3818.
 */
package software.amazon.jsii.tests.calculator.homonymous_forward_references;

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/interface_in_namespace_includes_classes/Foo.java 1`] = `
package software.amazon.jsii.tests.calculator.interface_in_namespace_includes_classes;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.InterfaceInNamespaceIncludesClasses.Foo")
public class Foo extends software.amazon.jsii.JsiiObject {

    protected Foo(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Foo(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Foo() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable java.lang.String getBar() {
        return software.amazon.jsii.Kernel.get(this, "bar", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setBar(final @org.jetbrains.annotations.Nullable java.lang.String value) {
        software.amazon.jsii.Kernel.set(this, "bar", value);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/interface_in_namespace_includes_classes/Hello.java 1`] = `
package software.amazon.jsii.tests.calculator.interface_in_namespace_includes_classes;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.InterfaceInNamespaceIncludesClasses.Hello")
@software.amazon.jsii.Jsii.Proxy(Hello.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface Hello extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number getFoo();

    /**
     * @return a {@link Builder} of {@link Hello}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link Hello}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<Hello> {
        java.lang.Number foo;

        /**
         * Sets the value of {@link Hello#getFoo}
         * @param foo the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder foo(java.lang.Number foo) {
            this.foo = foo;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link Hello}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public Hello build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link Hello}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements Hello {
        private final java.lang.Number foo;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.foo = software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.foo = java.util.Objects.requireNonNull(builder.foo, "foo is required");
        }

        @Override
        public final java.lang.Number getFoo() {
            return this.foo;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("foo", om.valueToTree(this.getFoo()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.InterfaceInNamespaceIncludesClasses.Hello"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Hello.Jsii$Proxy that = (Hello.Jsii$Proxy) o;

            return this.foo.equals(that.foo);
        }

        @Override
        public final int hashCode() {
            int result = this.foo.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/interface_in_namespace_only_interface/Hello.java 1`] = `
package software.amazon.jsii.tests.calculator.interface_in_namespace_only_interface;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.InterfaceInNamespaceOnlyInterface.Hello")
@software.amazon.jsii.Jsii.Proxy(Hello.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface Hello extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number getFoo();

    /**
     * @return a {@link Builder} of {@link Hello}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link Hello}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<Hello> {
        java.lang.Number foo;

        /**
         * Sets the value of {@link Hello#getFoo}
         * @param foo the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder foo(java.lang.Number foo) {
            this.foo = foo;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link Hello}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public Hello build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link Hello}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements Hello {
        private final java.lang.Number foo;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.foo = software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.foo = java.util.Objects.requireNonNull(builder.foo, "foo is required");
        }

        @Override
        public final java.lang.Number getFoo() {
            return this.foo;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("foo", om.valueToTree(this.getFoo()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.InterfaceInNamespaceOnlyInterface.Hello"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Hello.Jsii$Proxy that = (Hello.Jsii$Proxy) o;

            return this.foo.equals(that.foo);
        }

        @Override
        public final int hashCode() {
            int result = this.foo.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/jsii3656/ImplementMeOpts.java 1`] = `
package software.amazon.jsii.tests.calculator.jsii3656;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.jsii3656.ImplementMeOpts")
@software.amazon.jsii.Jsii.Proxy(ImplementMeOpts.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface ImplementMeOpts extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getName();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.Number getCount() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link ImplementMeOpts}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link ImplementMeOpts}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<ImplementMeOpts> {
        java.lang.String name;
        java.lang.Number count;

        /**
         * Sets the value of {@link ImplementMeOpts#getName}
         * @param name the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder name(java.lang.String name) {
            this.name = name;
            return this;
        }

        /**
         * Sets the value of {@link ImplementMeOpts#getCount}
         * @param count the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder count(java.lang.Number count) {
            this.count = count;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link ImplementMeOpts}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public ImplementMeOpts build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link ImplementMeOpts}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements ImplementMeOpts {
        private final java.lang.String name;
        private final java.lang.Number count;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.name = software.amazon.jsii.Kernel.get(this, "name", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.count = software.amazon.jsii.Kernel.get(this, "count", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.name = java.util.Objects.requireNonNull(builder.name, "name is required");
            this.count = builder.count;
        }

        @Override
        public final java.lang.String getName() {
            return this.name;
        }

        @Override
        public final java.lang.Number getCount() {
            return this.count;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("name", om.valueToTree(this.getName()));
            if (this.getCount() != null) {
                data.set("count", om.valueToTree(this.getCount()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.jsii3656.ImplementMeOpts"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            ImplementMeOpts.Jsii$Proxy that = (ImplementMeOpts.Jsii$Proxy) o;

            if (!name.equals(that.name)) return false;
            return this.count != null ? this.count.equals(that.count) : that.count == null;
        }

        @Override
        public final int hashCode() {
            int result = this.name.hashCode();
            result = 31 * result + (this.count != null ? this.count.hashCode() : 0);
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/jsii3656/OverrideMe.java 1`] = `
package software.amazon.jsii.tests.calculator.jsii3656;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.jsii3656.OverrideMe")
public abstract class OverrideMe extends software.amazon.jsii.JsiiObject {

    protected OverrideMe(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected OverrideMe(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected OverrideMe() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param receiver This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean callAbstract(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.jsii3656.OverrideMe receiver) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.jsii3656.OverrideMe.class, "callAbstract", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(receiver, "receiver is required") });
    }

    /**
     * @param opts This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public abstract @org.jetbrains.annotations.NotNull java.lang.Boolean implementMe(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.jsii3656.ImplementMeOpts opts);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.jsii3656.OverrideMe {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * @param opts This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.Boolean implementMe(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.jsii3656.ImplementMeOpts opts) {
            return software.amazon.jsii.Kernel.call(this, "implementMe", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(opts, "opts is required") });
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2530/MyClass.java 1`] = `
package software.amazon.jsii.tests.calculator.module2530;

/**
 * Verifies a method with parameters "_" can be generated.
 * <p>
 * @see <a href="https://github.com/aws/jsii/issues/2530">https://github.com/aws/jsii/issues/2530</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2530.MyClass")
public class MyClass extends software.amazon.jsii.JsiiObject {

    protected MyClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected MyClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param _ This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public MyClass(final @org.jetbrains.annotations.NotNull java.lang.Number __) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(__, "__ is required") });
    }

    /**
     * @param _ This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void bar(final @org.jetbrains.annotations.NotNull java.lang.Boolean __) {
        software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.module2530.MyClass.class, "bar", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(__, "__ is required") });
    }

    /**
     * @param _ This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void foo(final @org.jetbrains.annotations.NotNull java.lang.String __) {
        software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(__, "__ is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2617/OnlyStatics.java 1`] = `
package software.amazon.jsii.tests.calculator.module2617;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2617.OnlyStatics")
public class OnlyStatics extends software.amazon.jsii.JsiiObject {

    protected OnlyStatics(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected OnlyStatics(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void bar() {
        software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.module2617.OnlyStatics.class, "bar", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void foo() {
        software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.module2617.OnlyStatics.class, "foo", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2647/ExtendAndImplement.java 1`] = `
package software.amazon.jsii.tests.calculator.module2647;

/**
 * This class falls into the category of "multiple bases" from a different module from a go code gen perspective.
 * <p>
 * @see <a href="https://github.com/aws/jsii/issues/2647">https://github.com/aws/jsii/issues/2647</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2647.ExtendAndImplement")
public class ExtendAndImplement extends software.amazon.jsii.tests.calculator.lib.BaseFor2647 implements software.amazon.jsii.tests.calculator.lib.IFriendly {

    protected ExtendAndImplement(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ExtendAndImplement(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param very This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Deprecated)
    @Deprecated
    public ExtendAndImplement(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.baseofbase.Very very) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(very, "very is required") });
    }

    /**
     * Say hello!
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String hello() {
        return software.amazon.jsii.Kernel.call(this, "hello", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String localMethod() {
        return software.amazon.jsii.Kernel.call(this, "localMethod", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2689/methods/MyClass.java 1`] = `
package software.amazon.jsii.tests.calculator.module2689.methods;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2689.methods.MyClass")
public class MyClass extends software.amazon.jsii.JsiiObject {

    protected MyClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected MyClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public MyClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     * @param _bar This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void bar(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.base.BaseProps> _bar) {
        software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(_bar, "_bar is required") });
    }

    /**
     * @param _values This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void foo(final @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.lib.Number> _values) {
        software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(_values, "_values is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2689/props/MyClass.java 1`] = `
package software.amazon.jsii.tests.calculator.module2689.props;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2689.props.MyClass")
public class MyClass extends software.amazon.jsii.JsiiObject {

    protected MyClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected MyClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public MyClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.base.BaseProps> getBar() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.Kernel.get(this, "bar", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.base.BaseProps.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.lib.Number> getFoo() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.Number.class))));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2689/retval/MyClass.java 1`] = `
package software.amazon.jsii.tests.calculator.module2689.retval;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2689.retval.MyClass")
public class MyClass extends software.amazon.jsii.JsiiObject {

    protected MyClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected MyClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public MyClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.base.BaseProps> bar() {
        return java.util.Collections.unmodifiableMap(software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.base.BaseProps.class))));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.lib.Number> foo() {
        return java.util.Collections.unmodifiableList(software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.Number.class))));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2689/structs/MyStruct.java 1`] = `
package software.amazon.jsii.tests.calculator.module2689.structs;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2689.structs.MyStruct")
@software.amazon.jsii.Jsii.Proxy(MyStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface MyStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.base.BaseProps> getBaseMap();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.util.List<software.amazon.jsii.tests.calculator.lib.Number> getNumbers();

    /**
     * @return a {@link Builder} of {@link MyStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link MyStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<MyStruct> {
        java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.base.BaseProps> baseMap;
        java.util.List<software.amazon.jsii.tests.calculator.lib.Number> numbers;

        /**
         * Sets the value of {@link MyStruct#getBaseMap}
         * @param baseMap the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @SuppressWarnings("unchecked")
        public Builder baseMap(java.util.Map<java.lang.String, ? extends software.amazon.jsii.tests.calculator.base.BaseProps> baseMap) {
            this.baseMap = (java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.base.BaseProps>)baseMap;
            return this;
        }

        /**
         * Sets the value of {@link MyStruct#getNumbers}
         * @param numbers the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @SuppressWarnings("unchecked")
        public Builder numbers(java.util.List<? extends software.amazon.jsii.tests.calculator.lib.Number> numbers) {
            this.numbers = (java.util.List<software.amazon.jsii.tests.calculator.lib.Number>)numbers;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link MyStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public MyStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link MyStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements MyStruct {
        private final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.base.BaseProps> baseMap;
        private final java.util.List<software.amazon.jsii.tests.calculator.lib.Number> numbers;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.baseMap = software.amazon.jsii.Kernel.get(this, "baseMap", software.amazon.jsii.NativeType.mapOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.base.BaseProps.class)));
            this.numbers = software.amazon.jsii.Kernel.get(this, "numbers", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.lib.Number.class)));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        @SuppressWarnings("unchecked")
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.baseMap = (java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.base.BaseProps>)java.util.Objects.requireNonNull(builder.baseMap, "baseMap is required");
            this.numbers = (java.util.List<software.amazon.jsii.tests.calculator.lib.Number>)java.util.Objects.requireNonNull(builder.numbers, "numbers is required");
        }

        @Override
        public final java.util.Map<java.lang.String, software.amazon.jsii.tests.calculator.base.BaseProps> getBaseMap() {
            return this.baseMap;
        }

        @Override
        public final java.util.List<software.amazon.jsii.tests.calculator.lib.Number> getNumbers() {
            return this.numbers;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("baseMap", om.valueToTree(this.getBaseMap()));
            data.set("numbers", om.valueToTree(this.getNumbers()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.module2689.structs.MyStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            MyStruct.Jsii$Proxy that = (MyStruct.Jsii$Proxy) o;

            if (!baseMap.equals(that.baseMap)) return false;
            return this.numbers.equals(that.numbers);
        }

        @Override
        public final int hashCode() {
            int result = this.baseMap.hashCode();
            result = 31 * result + (this.numbers.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2692/submodule1/Bar.java 1`] = `
package software.amazon.jsii.tests.calculator.module2692.submodule1;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2692.submodule1.Bar")
@software.amazon.jsii.Jsii.Proxy(Bar.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface Bar extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getBar1();

    /**
     * @return a {@link Builder} of {@link Bar}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link Bar}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<Bar> {
        java.lang.String bar1;

        /**
         * Sets the value of {@link Bar#getBar1}
         * @param bar1 the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar1(java.lang.String bar1) {
            this.bar1 = bar1;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link Bar}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public Bar build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link Bar}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements Bar {
        private final java.lang.String bar1;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.bar1 = software.amazon.jsii.Kernel.get(this, "bar1", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.bar1 = java.util.Objects.requireNonNull(builder.bar1, "bar1 is required");
        }

        @Override
        public final java.lang.String getBar1() {
            return this.bar1;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("bar1", om.valueToTree(this.getBar1()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.module2692.submodule1.Bar"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Bar.Jsii$Proxy that = (Bar.Jsii$Proxy) o;

            return this.bar1.equals(that.bar1);
        }

        @Override
        public final int hashCode() {
            int result = this.bar1.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2692/submodule2/Bar.java 1`] = `
package software.amazon.jsii.tests.calculator.module2692.submodule2;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2692.submodule2.Bar")
@software.amazon.jsii.Jsii.Proxy(Bar.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface Bar extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getBar2();

    /**
     * @return a {@link Builder} of {@link Bar}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link Bar}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<Bar> {
        java.lang.String bar2;

        /**
         * Sets the value of {@link Bar#getBar2}
         * @param bar2 the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar2(java.lang.String bar2) {
            this.bar2 = bar2;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link Bar}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public Bar build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link Bar}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements Bar {
        private final java.lang.String bar2;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.bar2 = software.amazon.jsii.Kernel.get(this, "bar2", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.bar2 = java.util.Objects.requireNonNull(builder.bar2, "bar2 is required");
        }

        @Override
        public final java.lang.String getBar2() {
            return this.bar2;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("bar2", om.valueToTree(this.getBar2()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.module2692.submodule2.Bar"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Bar.Jsii$Proxy that = (Bar.Jsii$Proxy) o;

            return this.bar2.equals(that.bar2);
        }

        @Override
        public final int hashCode() {
            int result = this.bar2.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2692/submodule2/Foo.java 1`] = `
package software.amazon.jsii.tests.calculator.module2692.submodule2;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2692.submodule2.Foo")
@software.amazon.jsii.Jsii.Proxy(Foo.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface Foo extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.module2692.submodule2.Bar, software.amazon.jsii.tests.calculator.module2692.submodule1.Bar {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getFoo2();

    /**
     * @return a {@link Builder} of {@link Foo}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link Foo}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<Foo> {
        java.lang.String foo2;
        java.lang.String bar2;
        java.lang.String bar1;

        /**
         * Sets the value of {@link Foo#getFoo2}
         * @param foo2 the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder foo2(java.lang.String foo2) {
            this.foo2 = foo2;
            return this;
        }

        /**
         * Sets the value of {@link Foo#getBar2}
         * @param bar2 the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar2(java.lang.String bar2) {
            this.bar2 = bar2;
            return this;
        }

        /**
         * Sets the value of {@link Foo#getBar1}
         * @param bar1 the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bar1(java.lang.String bar1) {
            this.bar1 = bar1;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link Foo}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public Foo build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link Foo}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements Foo {
        private final java.lang.String foo2;
        private final java.lang.String bar2;
        private final java.lang.String bar1;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.foo2 = software.amazon.jsii.Kernel.get(this, "foo2", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.bar2 = software.amazon.jsii.Kernel.get(this, "bar2", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.bar1 = software.amazon.jsii.Kernel.get(this, "bar1", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.foo2 = java.util.Objects.requireNonNull(builder.foo2, "foo2 is required");
            this.bar2 = java.util.Objects.requireNonNull(builder.bar2, "bar2 is required");
            this.bar1 = java.util.Objects.requireNonNull(builder.bar1, "bar1 is required");
        }

        @Override
        public final java.lang.String getFoo2() {
            return this.foo2;
        }

        @Override
        public final java.lang.String getBar2() {
            return this.bar2;
        }

        @Override
        public final java.lang.String getBar1() {
            return this.bar1;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("foo2", om.valueToTree(this.getFoo2()));
            data.set("bar2", om.valueToTree(this.getBar2()));
            data.set("bar1", om.valueToTree(this.getBar1()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.module2692.submodule2.Foo"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Foo.Jsii$Proxy that = (Foo.Jsii$Proxy) o;

            if (!foo2.equals(that.foo2)) return false;
            if (!bar2.equals(that.bar2)) return false;
            return this.bar1.equals(that.bar1);
        }

        @Override
        public final int hashCode() {
            int result = this.foo2.hashCode();
            result = 31 * result + (this.bar2.hashCode());
            result = 31 * result + (this.bar1.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2700/Base.java 1`] = `
package software.amazon.jsii.tests.calculator.module2700;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2700.Base")
public class Base extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.module2700.IFoo {

    protected Base(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Base(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Base() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.String bar() {
        return software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.Number getBaz() {
        return software.amazon.jsii.Kernel.get(this, "baz", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2700/Derived.java 1`] = `
package software.amazon.jsii.tests.calculator.module2700;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2700.Derived")
public class Derived extends software.amazon.jsii.tests.calculator.module2700.Base implements software.amazon.jsii.tests.calculator.module2700.IFoo {

    protected Derived(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Derived(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Derived() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String zoo() {
        return software.amazon.jsii.Kernel.call(this, "zoo", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2700/IFoo.java 1`] = `
package software.amazon.jsii.tests.calculator.module2700;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2700.IFoo")
@software.amazon.jsii.Jsii.Proxy(IFoo.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IFoo extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number getBaz();

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String bar();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.module2700.IFoo.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.Number getBaz() {
            return software.amazon.jsii.Kernel.get(this, "baz", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String bar() {
            return software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link IFoo}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IFoo {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.Number getBaz() {
            return software.amazon.jsii.Kernel.get(this, "baz", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String bar() {
            return software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/Baz.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.Baz")
public class Baz extends software.amazon.jsii.tests.calculator.module2702.Class3 implements software.amazon.jsii.tests.calculator.module2702.IBaz {

    protected Baz(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Baz(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Baz() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public void bazMethod() {
        software.amazon.jsii.Kernel.call(this, "bazMethod", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/Class1.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.Class1")
public class Class1 extends software.amazon.jsii.tests.calculator.base.Base {

    protected Class1(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Class1(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    public Class1() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void base() {
        software.amazon.jsii.Kernel.call(this, "base", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/Class2.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.Class2")
public class Class2 extends software.amazon.jsii.tests.calculator.base.Base {

    protected Class2(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Class2(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    public Class2() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getBase() {
        return software.amazon.jsii.Kernel.get(this, "base", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/Class3.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.Class3")
public class Class3 extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.base.IBaseInterface {

    protected Class3(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Class3(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Class3() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public void bar() {
        software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public void foo() {
        software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void iBaseInterface() {
        software.amazon.jsii.Kernel.call(this, "iBaseInterface", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/Construct.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.Construct")
public class Construct extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.module2702.IConstruct {

    protected Construct(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Construct(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Construct() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public void constructMethod() {
        software.amazon.jsii.Kernel.call(this, "constructMethod", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/IBaz.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.IBaz")
@software.amazon.jsii.Jsii.Proxy(IBaz.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IBaz extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.base.IBaseInterface {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void bazMethod();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.module2702.IBaz.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        @Override
        public final void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }

        @Override
        public final void bar() {
            software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void bazMethod() {
            software.amazon.jsii.Kernel.call(this, "bazMethod", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IBaz}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IBaz, software.amazon.jsii.tests.calculator.baseofbase.IVeryBaseInterface.Jsii$Default {

        @Override
        default void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }

        @Override
        default void bar() {
            software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void bazMethod() {
            software.amazon.jsii.Kernel.call(this, "bazMethod", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/IConstruct.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.IConstruct")
@software.amazon.jsii.Jsii.Proxy(IConstruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IConstruct extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void constructMethod();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.module2702.IConstruct.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void constructMethod() {
            software.amazon.jsii.Kernel.call(this, "constructMethod", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IConstruct}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IConstruct {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void constructMethod() {
            software.amazon.jsii.Kernel.call(this, "constructMethod", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/IFoo.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.IFoo")
@software.amazon.jsii.Jsii.Proxy(IFoo.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IFoo extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.base.IBaseInterface {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getIBaseInterface();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.module2702.IFoo.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getIBaseInterface() {
            return software.amazon.jsii.Kernel.get(this, "iBaseInterface", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        @Override
        public final void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }

        @Override
        public final void bar() {
            software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IFoo}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IFoo, software.amazon.jsii.tests.calculator.baseofbase.IVeryBaseInterface.Jsii$Default {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getIBaseInterface() {
            return software.amazon.jsii.Kernel.get(this, "iBaseInterface", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        @Override
        default void foo() {
            software.amazon.jsii.Kernel.call(this, "foo", software.amazon.jsii.NativeType.VOID);
        }

        @Override
        default void bar() {
            software.amazon.jsii.Kernel.call(this, "bar", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/IResource.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.IResource")
@software.amazon.jsii.Jsii.Proxy(IResource.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IResource extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.module2702.IConstruct {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void resourceMethod();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.module2702.IResource.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void constructMethod() {
            software.amazon.jsii.Kernel.call(this, "constructMethod", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void resourceMethod() {
            software.amazon.jsii.Kernel.call(this, "resourceMethod", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IResource}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IResource, software.amazon.jsii.tests.calculator.module2702.IConstruct.Jsii$Default {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void constructMethod() {
            software.amazon.jsii.Kernel.call(this, "constructMethod", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void resourceMethod() {
            software.amazon.jsii.Kernel.call(this, "resourceMethod", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/IVpc.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.IVpc")
@software.amazon.jsii.Jsii.Proxy(IVpc.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IVpc extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.module2702.IResource {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    void vpcMethod();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.module2702.IVpc.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void constructMethod() {
            software.amazon.jsii.Kernel.call(this, "constructMethod", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void resourceMethod() {
            software.amazon.jsii.Kernel.call(this, "resourceMethod", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final void vpcMethod() {
            software.amazon.jsii.Kernel.call(this, "vpcMethod", software.amazon.jsii.NativeType.VOID);
        }
    }

    /**
     * Internal default implementation for {@link IVpc}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IVpc, software.amazon.jsii.tests.calculator.module2702.IResource.Jsii$Default {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void constructMethod() {
            software.amazon.jsii.Kernel.call(this, "constructMethod", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void resourceMethod() {
            software.amazon.jsii.Kernel.call(this, "resourceMethod", software.amazon.jsii.NativeType.VOID);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default void vpcMethod() {
            software.amazon.jsii.Kernel.call(this, "vpcMethod", software.amazon.jsii.NativeType.VOID);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/Resource.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.Resource")
public abstract class Resource extends software.amazon.jsii.tests.calculator.module2702.Construct implements software.amazon.jsii.tests.calculator.module2702.IResource {

    protected Resource(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Resource(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    protected Resource() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public void resourceMethod() {
        software.amazon.jsii.Kernel.call(this, "resourceMethod", software.amazon.jsii.NativeType.VOID);
    }

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.module2702.Resource implements software.amazon.jsii.tests.calculator.module2702.IResource.Jsii$Default, software.amazon.jsii.tests.calculator.module2702.IConstruct.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/module2702/Vpc.java 1`] = `
package software.amazon.jsii.tests.calculator.module2702;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.module2702.Vpc")
public class Vpc extends software.amazon.jsii.tests.calculator.module2702.Resource implements software.amazon.jsii.tests.calculator.module2702.IVpc {

    protected Vpc(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Vpc(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public Vpc() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public void vpcMethod() {
        software.amazon.jsii.Kernel.call(this, "vpcMethod", software.amazon.jsii.NativeType.VOID);
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/nodirect/sub1/TypeFromSub1.java 1`] = `
package software.amazon.jsii.tests.calculator.nodirect.sub1;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.nodirect.sub1.TypeFromSub1")
public class TypeFromSub1 extends software.amazon.jsii.JsiiObject {

    protected TypeFromSub1(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected TypeFromSub1(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public TypeFromSub1() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String sub1() {
        return software.amazon.jsii.Kernel.call(this, "sub1", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/nodirect/sub2/TypeFromSub2.java 1`] = `
package software.amazon.jsii.tests.calculator.nodirect.sub2;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.nodirect.sub2.TypeFromSub2")
public class TypeFromSub2 extends software.amazon.jsii.JsiiObject {

    protected TypeFromSub2(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected TypeFromSub2(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public TypeFromSub2() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String sub2() {
        return software.amazon.jsii.Kernel.call(this, "sub2", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/onlystatic/OnlyStaticMethods.java 1`] = `
package software.amazon.jsii.tests.calculator.onlystatic;

/**
 * Test for https://github.com/aws/jsii/issues/2617.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.onlystatic.OnlyStaticMethods")
public class OnlyStaticMethods extends software.amazon.jsii.JsiiObject {

    protected OnlyStaticMethods(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected OnlyStaticMethods(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.String staticMethod() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.onlystatic.OnlyStaticMethods.class, "staticMethod", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/package-info.java 1`] = `
/**
 * <h1>jsii Calculator</h1>
 * <p>
 * This library is used to demonstrate and test the features of JSII
 * <p>
 * <h2>How to use running sum API:</h2>
 * <p>
 * First, create a calculator:
 * <p>
 * <blockquote><pre>
 * Calculator calculator = new Calculator();
 * </pre></blockquote>
 * <p>
 * Then call some operations:
 * <p>
 * <blockquote><pre>
 * calculator.add(10);
 * </pre></blockquote>
 * <p>
 * <h2>Code Samples</h2>
 * <p>
 * <blockquote><pre>
 * /* This is totes a magic comment in here, just you wait! *&#47;
 * String foo = "bar";
 * </pre></blockquote>
 */
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
package software.amazon.jsii.tests.calculator;

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/python_self/ClassWithSelf.java 1`] = `
package software.amazon.jsii.tests.calculator.python_self;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.PythonSelf.ClassWithSelf")
public class ClassWithSelf extends software.amazon.jsii.JsiiObject {

    protected ClassWithSelf(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassWithSelf(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param self This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassWithSelf(final @org.jetbrains.annotations.NotNull java.lang.String self) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(self, "self is required") });
    }

    /**
     * @param self This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String method(final @org.jetbrains.annotations.NotNull java.lang.Number self) {
        return software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(self, "self is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getSelf() {
        return software.amazon.jsii.Kernel.get(this, "self", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/python_self/ClassWithSelfKwarg.java 1`] = `
package software.amazon.jsii.tests.calculator.python_self;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.PythonSelf.ClassWithSelfKwarg")
public class ClassWithSelfKwarg extends software.amazon.jsii.JsiiObject {

    protected ClassWithSelfKwarg(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ClassWithSelfKwarg(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param props This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ClassWithSelfKwarg(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.python_self.StructWithSelf props) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(props, "props is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.python_self.StructWithSelf getProps() {
        return software.amazon.jsii.Kernel.get(this, "props", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.python_self.StructWithSelf.class));
    }

    /**
     * A fluent builder for {@link software.amazon.jsii.tests.calculator.python_self.ClassWithSelfKwarg}.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<software.amazon.jsii.tests.calculator.python_self.ClassWithSelfKwarg> {
        /**
         * @return a new instance of {@link Builder}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create() {
            return new Builder();
        }

        private final software.amazon.jsii.tests.calculator.python_self.StructWithSelf.Builder props;

        private Builder() {
            this.props = new software.amazon.jsii.tests.calculator.python_self.StructWithSelf.Builder();
        }

        /**
         * @return {@code this}
         * @param self This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder self(final java.lang.String self) {
            this.props.self(self);
            return this;
        }

        /**
         * @return a newly built instance of {@link software.amazon.jsii.tests.calculator.python_self.ClassWithSelfKwarg}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public software.amazon.jsii.tests.calculator.python_self.ClassWithSelfKwarg build() {
            return new software.amazon.jsii.tests.calculator.python_self.ClassWithSelfKwarg(
                this.props.build()
            );
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/python_self/IInterfaceWithSelf.java 1`] = `
package software.amazon.jsii.tests.calculator.python_self;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.PythonSelf.IInterfaceWithSelf")
@software.amazon.jsii.Jsii.Proxy(IInterfaceWithSelf.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IInterfaceWithSelf extends software.amazon.jsii.JsiiSerializable {

    /**
     * @param self This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String method(final @org.jetbrains.annotations.NotNull java.lang.Number self);

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.python_self.IInterfaceWithSelf.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         * @param self This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.String method(final @org.jetbrains.annotations.NotNull java.lang.Number self) {
            return software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(self, "self is required") });
        }
    }

    /**
     * Internal default implementation for {@link IInterfaceWithSelf}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IInterfaceWithSelf {

        /**
         * @param self This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.String method(final @org.jetbrains.annotations.NotNull java.lang.Number self) {
            return software.amazon.jsii.Kernel.call(this, "method", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(self, "self is required") });
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/python_self/StructWithSelf.java 1`] = `
package software.amazon.jsii.tests.calculator.python_self;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.PythonSelf.StructWithSelf")
@software.amazon.jsii.Jsii.Proxy(StructWithSelf.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface StructWithSelf extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getSelf();

    /**
     * @return a {@link Builder} of {@link StructWithSelf}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link StructWithSelf}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<StructWithSelf> {
        java.lang.String self;

        /**
         * Sets the value of {@link StructWithSelf#getSelf}
         * @param self the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder self(java.lang.String self) {
            this.self = self;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link StructWithSelf}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public StructWithSelf build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link StructWithSelf}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements StructWithSelf {
        private final java.lang.String self;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.self = software.amazon.jsii.Kernel.get(this, "self", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.self = java.util.Objects.requireNonNull(builder.self, "self is required");
        }

        @Override
        public final java.lang.String getSelf() {
            return this.self;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("self", om.valueToTree(this.getSelf()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.PythonSelf.StructWithSelf"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            StructWithSelf.Jsii$Proxy that = (StructWithSelf.Jsii$Proxy) o;

            return this.self.equals(that.self);
        }

        @Override
        public final int hashCode() {
            int result = this.self.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/Default.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule;

/**
 * A struct named "Default".
 * <p>
 * @see <a href="https://github.com/aws/jsii/issues/2637">https://github.com/aws/jsii/issues/2637</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.Default")
@software.amazon.jsii.Jsii.Proxy(Default.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface Default extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Number getFoo();

    /**
     * @return a {@link Builder} of {@link Default}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link Default}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<Default> {
        java.lang.Number foo;

        /**
         * Sets the value of {@link Default#getFoo}
         * @param foo the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder foo(java.lang.Number foo) {
            this.foo = foo;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link Default}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public Default build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link Default}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements Default {
        private final java.lang.Number foo;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.foo = software.amazon.jsii.Kernel.get(this, "foo", software.amazon.jsii.NativeType.forClass(java.lang.Number.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.foo = java.util.Objects.requireNonNull(builder.foo, "foo is required");
        }

        @Override
        public final java.lang.Number getFoo() {
            return this.foo;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("foo", om.valueToTree(this.getFoo()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.submodule.Default"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Default.Jsii$Proxy that = (Default.Jsii$Proxy) o;

            return this.foo.equals(that.foo);
        }

        @Override
        public final int hashCode() {
            int result = this.foo.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/MyClass.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.MyClass")
public class MyClass extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.submodule.nested_submodule.deeply_nested.INamespaced {

    protected MyClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected MyClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param props This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public MyClass(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.submodule.child.SomeStruct props) {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(props, "props is required") });
    }

    /**
     * @param param This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String methodWithSpecialParam(final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.submodule.param.SpecialParameter param) {
        return software.amazon.jsii.Kernel.call(this, "methodWithSpecialParam", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(param, "param is required") });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.submodule.child.Awesomeness getAwesomeness() {
        return software.amazon.jsii.Kernel.get(this, "awesomeness", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.submodule.child.Awesomeness.class));
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getDefinedAt() {
        return software.amazon.jsii.Kernel.get(this, "definedAt", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.submodule.child.Goodness getGoodness() {
        return software.amazon.jsii.Kernel.get(this, "goodness", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.submodule.child.Goodness.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.submodule.child.SomeStruct getProps() {
        return software.amazon.jsii.Kernel.get(this, "props", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.submodule.child.SomeStruct.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.AllTypes getAllTypes() {
        return software.amazon.jsii.Kernel.get(this, "allTypes", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.AllTypes.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public void setAllTypes(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.AllTypes value) {
        software.amazon.jsii.Kernel.set(this, "allTypes", value);
    }

    /**
     * A fluent builder for {@link software.amazon.jsii.tests.calculator.submodule.MyClass}.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<software.amazon.jsii.tests.calculator.submodule.MyClass> {
        /**
         * @return a new instance of {@link Builder}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public static Builder create() {
            return new Builder();
        }

        private final software.amazon.jsii.tests.calculator.submodule.child.SomeStruct.Builder props;

        private Builder() {
            this.props = new software.amazon.jsii.tests.calculator.submodule.child.SomeStruct.Builder();
        }

        /**
         * @return {@code this}
         * @param prop This parameter is required.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder prop(final software.amazon.jsii.tests.calculator.submodule.child.SomeEnum prop) {
            this.props.prop(prop);
            return this;
        }

        /**
         * @return a newly built instance of {@link software.amazon.jsii.tests.calculator.submodule.MyClass}.
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public software.amazon.jsii.tests.calculator.submodule.MyClass build() {
            return new software.amazon.jsii.tests.calculator.submodule.MyClass(
                this.props.build()
            );
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/back_references/MyClassReference.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.back_references;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.back_references.MyClassReference")
@software.amazon.jsii.Jsii.Proxy(MyClassReference.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface MyClassReference extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.submodule.MyClass getReference();

    /**
     * @return a {@link Builder} of {@link MyClassReference}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link MyClassReference}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<MyClassReference> {
        software.amazon.jsii.tests.calculator.submodule.MyClass reference;

        /**
         * Sets the value of {@link MyClassReference#getReference}
         * @param reference the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder reference(software.amazon.jsii.tests.calculator.submodule.MyClass reference) {
            this.reference = reference;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link MyClassReference}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public MyClassReference build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link MyClassReference}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements MyClassReference {
        private final software.amazon.jsii.tests.calculator.submodule.MyClass reference;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.reference = software.amazon.jsii.Kernel.get(this, "reference", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.submodule.MyClass.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.reference = java.util.Objects.requireNonNull(builder.reference, "reference is required");
        }

        @Override
        public final software.amazon.jsii.tests.calculator.submodule.MyClass getReference() {
            return this.reference;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("reference", om.valueToTree(this.getReference()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.submodule.back_references.MyClassReference"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            MyClassReference.Jsii$Proxy that = (MyClassReference.Jsii$Proxy) o;

            return this.reference.equals(that.reference);
        }

        @Override
        public final int hashCode() {
            int result = this.reference.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/child/Awesomeness.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.child;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.child.Awesomeness")
public enum Awesomeness {
    /**
     * It was awesome!
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    AWESOME,
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/child/Goodness.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.child;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.child.Goodness")
public enum Goodness {
    /**
     * It's pretty good.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    PRETTY_GOOD,
    /**
     * It's really good.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    REALLY_GOOD,
    /**
     * It's amazingly good.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    AMAZINGLY_GOOD,
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/child/InnerClass.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.child;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.child.InnerClass")
public class InnerClass extends software.amazon.jsii.JsiiObject {

    protected InnerClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected InnerClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    static {
        STATIC_PROP = software.amazon.jsii.JsiiObject.jsiiStaticGet(software.amazon.jsii.tests.calculator.submodule.child.InnerClass.class, "staticProp", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.submodule.child.SomeStruct.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public InnerClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public final static software.amazon.jsii.tests.calculator.submodule.child.SomeStruct STATIC_PROP;
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/child/KwargsProps.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.child;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.child.KwargsProps")
@software.amazon.jsii.Jsii.Proxy(KwargsProps.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface KwargsProps extends software.amazon.jsii.JsiiSerializable, software.amazon.jsii.tests.calculator.submodule.child.SomeStruct {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    default @org.jetbrains.annotations.Nullable java.lang.String getExtra() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link KwargsProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link KwargsProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<KwargsProps> {
        java.lang.String extra;
        software.amazon.jsii.tests.calculator.submodule.child.SomeEnum prop;

        /**
         * Sets the value of {@link KwargsProps#getExtra}
         * @param extra the value to be set.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder extra(java.lang.String extra) {
            this.extra = extra;
            return this;
        }

        /**
         * Sets the value of {@link KwargsProps#getProp}
         * @param prop the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder prop(software.amazon.jsii.tests.calculator.submodule.child.SomeEnum prop) {
            this.prop = prop;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link KwargsProps}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public KwargsProps build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link KwargsProps}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements KwargsProps {
        private final java.lang.String extra;
        private final software.amazon.jsii.tests.calculator.submodule.child.SomeEnum prop;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.extra = software.amazon.jsii.Kernel.get(this, "extra", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.prop = software.amazon.jsii.Kernel.get(this, "prop", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.submodule.child.SomeEnum.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.extra = builder.extra;
            this.prop = java.util.Objects.requireNonNull(builder.prop, "prop is required");
        }

        @Override
        public final java.lang.String getExtra() {
            return this.extra;
        }

        @Override
        public final software.amazon.jsii.tests.calculator.submodule.child.SomeEnum getProp() {
            return this.prop;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            if (this.getExtra() != null) {
                data.set("extra", om.valueToTree(this.getExtra()));
            }
            data.set("prop", om.valueToTree(this.getProp()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.submodule.child.KwargsProps"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            KwargsProps.Jsii$Proxy that = (KwargsProps.Jsii$Proxy) o;

            if (this.extra != null ? !this.extra.equals(that.extra) : that.extra != null) return false;
            return this.prop.equals(that.prop);
        }

        @Override
        public final int hashCode() {
            int result = this.extra != null ? this.extra.hashCode() : 0;
            result = 31 * result + (this.prop.hashCode());
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/child/OuterClass.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.child;

/**
 * Checks that classes can self-reference during initialization.
 * <p>
 * @see <a href=": https://github.com/aws/jsii/pull/1706">: https://github.com/aws/jsii/pull/1706</a>
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.child.OuterClass")
public class OuterClass extends software.amazon.jsii.JsiiObject {

    protected OuterClass(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected OuterClass(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public OuterClass() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.submodule.child.InnerClass getInnerClass() {
        return software.amazon.jsii.Kernel.get(this, "innerClass", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.submodule.child.InnerClass.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/child/SomeEnum.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.child;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.child.SomeEnum")
public enum SomeEnum {
    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    SOME,
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/child/SomeStruct.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.child;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.child.SomeStruct")
@software.amazon.jsii.Jsii.Proxy(SomeStruct.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface SomeStruct extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.submodule.child.SomeEnum getProp();

    /**
     * @return a {@link Builder} of {@link SomeStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link SomeStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<SomeStruct> {
        software.amazon.jsii.tests.calculator.submodule.child.SomeEnum prop;

        /**
         * Sets the value of {@link SomeStruct#getProp}
         * @param prop the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder prop(software.amazon.jsii.tests.calculator.submodule.child.SomeEnum prop) {
            this.prop = prop;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link SomeStruct}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public SomeStruct build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link SomeStruct}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements SomeStruct {
        private final software.amazon.jsii.tests.calculator.submodule.child.SomeEnum prop;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.prop = software.amazon.jsii.Kernel.get(this, "prop", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.submodule.child.SomeEnum.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.prop = java.util.Objects.requireNonNull(builder.prop, "prop is required");
        }

        @Override
        public final software.amazon.jsii.tests.calculator.submodule.child.SomeEnum getProp() {
            return this.prop;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("prop", om.valueToTree(this.getProp()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.submodule.child.SomeStruct"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            SomeStruct.Jsii$Proxy that = (SomeStruct.Jsii$Proxy) o;

            return this.prop.equals(that.prop);
        }

        @Override
        public final int hashCode() {
            int result = this.prop.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/child/Structure.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.child;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.child.Structure")
@software.amazon.jsii.Jsii.Proxy(Structure.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface Structure extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Boolean getBool();

    /**
     * @return a {@link Builder} of {@link Structure}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link Structure}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<Structure> {
        java.lang.Boolean bool;

        /**
         * Sets the value of {@link Structure#getBool}
         * @param bool the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder bool(java.lang.Boolean bool) {
            this.bool = bool;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link Structure}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public Structure build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link Structure}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements Structure {
        private final java.lang.Boolean bool;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.bool = software.amazon.jsii.Kernel.get(this, "bool", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.bool = java.util.Objects.requireNonNull(builder.bool, "bool is required");
        }

        @Override
        public final java.lang.Boolean getBool() {
            return this.bool;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("bool", om.valueToTree(this.getBool()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.submodule.child.Structure"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Structure.Jsii$Proxy that = (Structure.Jsii$Proxy) o;

            return this.bool.equals(that.bool);
        }

        @Override
        public final int hashCode() {
            int result = this.bool.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/isolated/Kwargs.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.isolated;

/**
 * Ensures imports are correctly registered for kwargs lifted properties from super-structs.
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.isolated.Kwargs")
public class Kwargs extends software.amazon.jsii.JsiiObject {

    protected Kwargs(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Kwargs(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param props
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean method(final @org.jetbrains.annotations.Nullable software.amazon.jsii.tests.calculator.submodule.child.KwargsProps props) {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.submodule.isolated.Kwargs.class, "method", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { props });
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static @org.jetbrains.annotations.NotNull java.lang.Boolean method() {
        return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.submodule.isolated.Kwargs.class, "method", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/isolated/package-info.java 1`] = `
/**
 * <h1>Read you, read me</h1>
 * <p>
 * This is the readme of the <code>jsii-calc.submodule.isolated</code> module.
 */
package software.amazon.jsii.tests.calculator.submodule.isolated;

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/nested_submodule/Namespaced.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.nested_submodule;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.nested_submodule.Namespaced")
public abstract class Namespaced extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.submodule.nested_submodule.deeply_nested.INamespaced {

    protected Namespaced(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Namespaced(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @Override
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull java.lang.String getDefinedAt() {
        return software.amazon.jsii.Kernel.get(this, "definedAt", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public abstract @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.submodule.child.Goodness getGoodness();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    private static final class Jsii$Proxy extends software.amazon.jsii.tests.calculator.submodule.nested_submodule.Namespaced implements software.amazon.jsii.tests.calculator.submodule.nested_submodule.deeply_nested.INamespaced.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.submodule.child.Goodness getGoodness() {
            return software.amazon.jsii.Kernel.get(this, "goodness", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.submodule.child.Goodness.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/nested_submodule/deeply_nested/INamespaced.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.nested_submodule.deeply_nested;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.nested_submodule.deeplyNested.INamespaced")
@software.amazon.jsii.Jsii.Proxy(INamespaced.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface INamespaced extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getDefinedAt();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.submodule.nested_submodule.deeply_nested.INamespaced.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public final @org.jetbrains.annotations.NotNull java.lang.String getDefinedAt() {
            return software.amazon.jsii.Kernel.get(this, "definedAt", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }

    /**
     * Internal default implementation for {@link INamespaced}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends INamespaced {

        /**
         */
        @Override
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        default @org.jetbrains.annotations.NotNull java.lang.String getDefinedAt() {
            return software.amazon.jsii.Kernel.get(this, "definedAt", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/package-info.java 1`] = `
/**
 * <h1>Read you, read me</h1>
 * <p>
 * This is the readme of the <code>jsii-calc.submodule</code> module.
 */
package software.amazon.jsii.tests.calculator.submodule;

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/param/SpecialParameter.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.param;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.param.SpecialParameter")
@software.amazon.jsii.Jsii.Proxy(SpecialParameter.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface SpecialParameter extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.String getValue();

    /**
     * @return a {@link Builder} of {@link SpecialParameter}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link SpecialParameter}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static final class Builder implements software.amazon.jsii.Builder<SpecialParameter> {
        java.lang.String value;

        /**
         * Sets the value of {@link SpecialParameter#getValue}
         * @param value the value to be set. This parameter is required.
         * @return {@code this}
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        public Builder value(java.lang.String value) {
            this.value = value;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link SpecialParameter}
         * @throws NullPointerException if any required attribute was not provided
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public SpecialParameter build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link SpecialParameter}
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements SpecialParameter {
        private final java.lang.String value;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.value = software.amazon.jsii.Kernel.get(this, "value", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.value = java.util.Objects.requireNonNull(builder.value, "value is required");
        }

        @Override
        public final java.lang.String getValue() {
            return this.value;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set("value", om.valueToTree(this.getValue()));

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set("fqn", om.valueToTree("jsii-calc.submodule.param.SpecialParameter"));
            struct.set("data", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set("$jsii.struct", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            SpecialParameter.Jsii$Proxy that = (SpecialParameter.Jsii$Proxy) o;

            return this.value.equals(that.value);
        }

        @Override
        public final int hashCode() {
            int result = this.value.hashCode();
            return result;
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/submodule/returnsparam/ReturnsSpecialParameter.java 1`] = `
package software.amazon.jsii.tests.calculator.submodule.returnsparam;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.submodule.returnsparam.ReturnsSpecialParameter")
public class ReturnsSpecialParameter extends software.amazon.jsii.JsiiObject {

    protected ReturnsSpecialParameter(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ReturnsSpecialParameter(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public ReturnsSpecialParameter() {
        super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
        software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public @org.jetbrains.annotations.NotNull software.amazon.jsii.tests.calculator.submodule.param.SpecialParameter returnsSpecialParam() {
        return software.amazon.jsii.Kernel.call(this, "returnsSpecialParam", software.amazon.jsii.NativeType.forClass(software.amazon.jsii.tests.calculator.submodule.param.SpecialParameter.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/union/ConsumesUnion.java 1`] = `
package software.amazon.jsii.tests.calculator.union;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.union.ConsumesUnion")
public class ConsumesUnion extends software.amazon.jsii.JsiiObject {

    protected ConsumesUnion(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected ConsumesUnion(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     * @param param This parameter is required.
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    public static void unionType(final @org.jetbrains.annotations.NotNull java.lang.Object param) {
        software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.union.ConsumesUnion.class, "unionType", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(param, "param is required") });
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/union/IResolvable.java 1`] = `
package software.amazon.jsii.tests.calculator.union;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.union.IResolvable")
@software.amazon.jsii.Jsii.Proxy(IResolvable.Jsii$Proxy.class)
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
public interface IResolvable extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @org.jetbrains.annotations.NotNull java.lang.Object resolve();

    /**
     * A proxy class which represents a concrete javascript instance of this type.
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.union.IResolvable.Jsii$Default {
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
        }

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        public final @org.jetbrains.annotations.NotNull java.lang.Object resolve() {
            return software.amazon.jsii.Kernel.call(this, "resolve", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
        }
    }

    /**
     * Internal default implementation for {@link IResolvable}.
     */
    @software.amazon.jsii.Internal
    interface Jsii$Default extends IResolvable {

        /**
         */
        @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
        @Override
        default @org.jetbrains.annotations.NotNull java.lang.Object resolve() {
            return software.amazon.jsii.Kernel.call(this, "resolve", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
        }
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/java/software/amazon/jsii/tests/calculator/union/Resolvable.java 1`] = `
package software.amazon.jsii.tests.calculator.union;

/**
 */
@javax.annotation.Generated(value = "jsii-pacmak")
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
@software.amazon.jsii.Jsii(module = software.amazon.jsii.tests.calculator.$Module.class, fqn = "jsii-calc.union.Resolvable")
public class Resolvable extends software.amazon.jsii.JsiiObject implements software.amazon.jsii.tests.calculator.union.IResolvable {

    protected Resolvable(final software.amazon.jsii.JsiiObjectRef objRef) {
        super(objRef);
    }

    protected Resolvable(final software.amazon.jsii.JsiiObject.InitializationMode initializationMode) {
        super(initializationMode);
    }

    /**
     */
    @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
    @Override
    public @org.jetbrains.annotations.NotNull java.lang.Object resolve() {
        return software.amazon.jsii.Kernel.call(this, "resolve", software.amazon.jsii.NativeType.forClass(java.lang.Object.class));
    }
}

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/resources/software/amazon/jsii/tests/calculator/$Module.txt 1`] = `
jsii-calc.AbstractClass=software.amazon.jsii.tests.calculator.AbstractClass
jsii-calc.AbstractClassBase=software.amazon.jsii.tests.calculator.AbstractClassBase
jsii-calc.AbstractClassReturner=software.amazon.jsii.tests.calculator.AbstractClassReturner
jsii-calc.AbstractSuite=software.amazon.jsii.tests.calculator.AbstractSuite
jsii-calc.Add=software.amazon.jsii.tests.calculator.Add
jsii-calc.AllTypes=software.amazon.jsii.tests.calculator.AllTypes
jsii-calc.AllTypesEnum=software.amazon.jsii.tests.calculator.AllTypesEnum
jsii-calc.AllowedMethodNames=software.amazon.jsii.tests.calculator.AllowedMethodNames
jsii-calc.AmbiguousParameters=software.amazon.jsii.tests.calculator.AmbiguousParameters
jsii-calc.AnonymousImplementationProvider=software.amazon.jsii.tests.calculator.AnonymousImplementationProvider
jsii-calc.AnyPropertyAccess=software.amazon.jsii.tests.calculator.AnyPropertyAccess
jsii-calc.AsyncVirtualMethods=software.amazon.jsii.tests.calculator.AsyncVirtualMethods
jsii-calc.AugmentableClass=software.amazon.jsii.tests.calculator.AugmentableClass
jsii-calc.BaseClass=software.amazon.jsii.tests.calculator.BaseClass
jsii-calc.BaseJsii976=software.amazon.jsii.tests.calculator.BaseJsii976
jsii-calc.Bell=software.amazon.jsii.tests.calculator.Bell
jsii-calc.BinaryOperation=software.amazon.jsii.tests.calculator.BinaryOperation
jsii-calc.BurriedAnonymousObject=software.amazon.jsii.tests.calculator.BurriedAnonymousObject
jsii-calc.Calculator=software.amazon.jsii.tests.calculator.Calculator
jsii-calc.CalculatorProps=software.amazon.jsii.tests.calculator.CalculatorProps
jsii-calc.ChildStruct982=software.amazon.jsii.tests.calculator.ChildStruct982
jsii-calc.ClassThatImplementsTheInternalInterface=software.amazon.jsii.tests.calculator.ClassThatImplementsTheInternalInterface
jsii-calc.ClassThatImplementsThePrivateInterface=software.amazon.jsii.tests.calculator.ClassThatImplementsThePrivateInterface
jsii-calc.ClassWithCollectionOfUnions=software.amazon.jsii.tests.calculator.ClassWithCollectionOfUnions
jsii-calc.ClassWithCollections=software.amazon.jsii.tests.calculator.ClassWithCollections
jsii-calc.ClassWithContainerTypes=software.amazon.jsii.tests.calculator.ClassWithContainerTypes
jsii-calc.ClassWithDocs=software.amazon.jsii.tests.calculator.ClassWithDocs
jsii-calc.ClassWithJavaReservedWords=software.amazon.jsii.tests.calculator.ClassWithJavaReservedWords
jsii-calc.ClassWithMutableObjectLiteralProperty=software.amazon.jsii.tests.calculator.ClassWithMutableObjectLiteralProperty
jsii-calc.ClassWithNestedUnion=software.amazon.jsii.tests.calculator.ClassWithNestedUnion
jsii-calc.ClassWithPrivateConstructorAndAutomaticProperties=software.amazon.jsii.tests.calculator.ClassWithPrivateConstructorAndAutomaticProperties
jsii-calc.ConfusingToJackson=software.amazon.jsii.tests.calculator.ConfusingToJackson
jsii-calc.ConfusingToJacksonStruct=software.amazon.jsii.tests.calculator.ConfusingToJacksonStruct
jsii-calc.ConstructorPassesThisOut=software.amazon.jsii.tests.calculator.ConstructorPassesThisOut
jsii-calc.Constructors=software.amazon.jsii.tests.calculator.Constructors
jsii-calc.ConsumePureInterface=software.amazon.jsii.tests.calculator.ConsumePureInterface
jsii-calc.ConsumerCanRingBell=software.amazon.jsii.tests.calculator.ConsumerCanRingBell
jsii-calc.ConsumersOfThisCrazyTypeSystem=software.amazon.jsii.tests.calculator.ConsumersOfThisCrazyTypeSystem
jsii-calc.ContainerProps=software.amazon.jsii.tests.calculator.ContainerProps
jsii-calc.DataRenderer=software.amazon.jsii.tests.calculator.DataRenderer
jsii-calc.Default=software.amazon.jsii.tests.calculator.Default
jsii-calc.DefaultedConstructorArgument=software.amazon.jsii.tests.calculator.DefaultedConstructorArgument
jsii-calc.Demonstrate982=software.amazon.jsii.tests.calculator.Demonstrate982
jsii-calc.DeprecatedClass=software.amazon.jsii.tests.calculator.DeprecatedClass
jsii-calc.DeprecatedEnum=software.amazon.jsii.tests.calculator.DeprecatedEnum
jsii-calc.DeprecatedStruct=software.amazon.jsii.tests.calculator.DeprecatedStruct
jsii-calc.DerivedClassHasNoProperties.Base=software.amazon.jsii.tests.calculator.derived_class_has_no_properties.Base
jsii-calc.DerivedClassHasNoProperties.Derived=software.amazon.jsii.tests.calculator.derived_class_has_no_properties.Derived
jsii-calc.DerivedStruct=software.amazon.jsii.tests.calculator.DerivedStruct
jsii-calc.DiamondBottom=software.amazon.jsii.tests.calculator.DiamondBottom
jsii-calc.DiamondInheritanceBaseLevelStruct=software.amazon.jsii.tests.calculator.DiamondInheritanceBaseLevelStruct
jsii-calc.DiamondInheritanceFirstMidLevelStruct=software.amazon.jsii.tests.calculator.DiamondInheritanceFirstMidLevelStruct
jsii-calc.DiamondInheritanceSecondMidLevelStruct=software.amazon.jsii.tests.calculator.DiamondInheritanceSecondMidLevelStruct
jsii-calc.DiamondInheritanceTopLevelStruct=software.amazon.jsii.tests.calculator.DiamondInheritanceTopLevelStruct
jsii-calc.DisappointingCollectionSource=software.amazon.jsii.tests.calculator.DisappointingCollectionSource
jsii-calc.DoNotOverridePrivates=software.amazon.jsii.tests.calculator.DoNotOverridePrivates
jsii-calc.DoNotRecognizeAnyAsOptional=software.amazon.jsii.tests.calculator.DoNotRecognizeAnyAsOptional
jsii-calc.DocumentedClass=software.amazon.jsii.tests.calculator.DocumentedClass
jsii-calc.DontComplainAboutVariadicAfterOptional=software.amazon.jsii.tests.calculator.DontComplainAboutVariadicAfterOptional
jsii-calc.DontUseMe=software.amazon.jsii.tests.calculator.DontUseMe
jsii-calc.DoubleTrouble=software.amazon.jsii.tests.calculator.DoubleTrouble
jsii-calc.DummyObj=software.amazon.jsii.tests.calculator.DummyObj
jsii-calc.DynamicPropertyBearer=software.amazon.jsii.tests.calculator.DynamicPropertyBearer
jsii-calc.DynamicPropertyBearerChild=software.amazon.jsii.tests.calculator.DynamicPropertyBearerChild
jsii-calc.Entropy=software.amazon.jsii.tests.calculator.Entropy
jsii-calc.EnumDispenser=software.amazon.jsii.tests.calculator.EnumDispenser
jsii-calc.EraseUndefinedHashValues=software.amazon.jsii.tests.calculator.EraseUndefinedHashValues
jsii-calc.EraseUndefinedHashValuesOptions=software.amazon.jsii.tests.calculator.EraseUndefinedHashValuesOptions
jsii-calc.ExperimentalClass=software.amazon.jsii.tests.calculator.ExperimentalClass
jsii-calc.ExperimentalEnum=software.amazon.jsii.tests.calculator.ExperimentalEnum
jsii-calc.ExperimentalStruct=software.amazon.jsii.tests.calculator.ExperimentalStruct
jsii-calc.ExportedBaseClass=software.amazon.jsii.tests.calculator.ExportedBaseClass
jsii-calc.ExtendsInternalInterface=software.amazon.jsii.tests.calculator.ExtendsInternalInterface
jsii-calc.ExternalClass=software.amazon.jsii.tests.calculator.ExternalClass
jsii-calc.ExternalEnum=software.amazon.jsii.tests.calculator.ExternalEnum
jsii-calc.ExternalStruct=software.amazon.jsii.tests.calculator.ExternalStruct
jsii-calc.FullCombo=software.amazon.jsii.tests.calculator.FullCombo
jsii-calc.GiveMeStructs=software.amazon.jsii.tests.calculator.GiveMeStructs
jsii-calc.Greetee=software.amazon.jsii.tests.calculator.Greetee
jsii-calc.GreetingAugmenter=software.amazon.jsii.tests.calculator.GreetingAugmenter
jsii-calc.IAnonymousImplementationProvider=software.amazon.jsii.tests.calculator.IAnonymousImplementationProvider
jsii-calc.IAnonymouslyImplementMe=software.amazon.jsii.tests.calculator.IAnonymouslyImplementMe
jsii-calc.IAnotherPublicInterface=software.amazon.jsii.tests.calculator.IAnotherPublicInterface
jsii-calc.IBell=software.amazon.jsii.tests.calculator.IBell
jsii-calc.IBellRinger=software.amazon.jsii.tests.calculator.IBellRinger
jsii-calc.IConcreteBellRinger=software.amazon.jsii.tests.calculator.IConcreteBellRinger
jsii-calc.IDeprecatedInterface=software.amazon.jsii.tests.calculator.IDeprecatedInterface
jsii-calc.IExperimentalInterface=software.amazon.jsii.tests.calculator.IExperimentalInterface
jsii-calc.IExtendsPrivateInterface=software.amazon.jsii.tests.calculator.IExtendsPrivateInterface
jsii-calc.IExternalInterface=software.amazon.jsii.tests.calculator.IExternalInterface
jsii-calc.IFriendlier=software.amazon.jsii.tests.calculator.IFriendlier
jsii-calc.IFriendlyRandomGenerator=software.amazon.jsii.tests.calculator.IFriendlyRandomGenerator
jsii-calc.IIndirectlyImplemented=software.amazon.jsii.tests.calculator.IIndirectlyImplemented
jsii-calc.IInterfaceImplementedByAbstractClass=software.amazon.jsii.tests.calculator.IInterfaceImplementedByAbstractClass
jsii-calc.IInterfaceThatShouldNotBeADataType=software.amazon.jsii.tests.calculator.IInterfaceThatShouldNotBeADataType
jsii-calc.IInterfaceWithInternal=software.amazon.jsii.tests.calculator.IInterfaceWithInternal
jsii-calc.IInterfaceWithMethods=software.amazon.jsii.tests.calculator.IInterfaceWithMethods
jsii-calc.IInterfaceWithOptionalMethodArguments=software.amazon.jsii.tests.calculator.IInterfaceWithOptionalMethodArguments
jsii-calc.IInterfaceWithProperties=software.amazon.jsii.tests.calculator.IInterfaceWithProperties
jsii-calc.IInterfaceWithPropertiesExtension=software.amazon.jsii.tests.calculator.IInterfaceWithPropertiesExtension
jsii-calc.IJSII417Derived=software.amazon.jsii.tests.calculator.IJSII417Derived
jsii-calc.IJSII417PublicBaseOfBase=software.amazon.jsii.tests.calculator.IJSII417PublicBaseOfBase
jsii-calc.IJavaReservedWordsInAnInterface=software.amazon.jsii.tests.calculator.IJavaReservedWordsInAnInterface
jsii-calc.IJsii487External=software.amazon.jsii.tests.calculator.IJsii487External
jsii-calc.IJsii487External2=software.amazon.jsii.tests.calculator.IJsii487External2
jsii-calc.IJsii496=software.amazon.jsii.tests.calculator.IJsii496
jsii-calc.IMutableObjectLiteral=software.amazon.jsii.tests.calculator.IMutableObjectLiteral
jsii-calc.INonInternalInterface=software.amazon.jsii.tests.calculator.INonInternalInterface
jsii-calc.IObjectWithProperty=software.amazon.jsii.tests.calculator.IObjectWithProperty
jsii-calc.IOptionalMethod=software.amazon.jsii.tests.calculator.IOptionalMethod
jsii-calc.IPrivatelyImplemented=software.amazon.jsii.tests.calculator.IPrivatelyImplemented
jsii-calc.IPublicInterface=software.amazon.jsii.tests.calculator.IPublicInterface
jsii-calc.IPublicInterface2=software.amazon.jsii.tests.calculator.IPublicInterface2
jsii-calc.IRandomNumberGenerator=software.amazon.jsii.tests.calculator.IRandomNumberGenerator
jsii-calc.IReturnJsii976=software.amazon.jsii.tests.calculator.IReturnJsii976
jsii-calc.IReturnsNumber=software.amazon.jsii.tests.calculator.IReturnsNumber
jsii-calc.IStableInterface=software.amazon.jsii.tests.calculator.IStableInterface
jsii-calc.IStructReturningDelegate=software.amazon.jsii.tests.calculator.IStructReturningDelegate
jsii-calc.IWallClock=software.amazon.jsii.tests.calculator.IWallClock
jsii-calc.ImplementInternalInterface=software.amazon.jsii.tests.calculator.ImplementInternalInterface
jsii-calc.Implementation=software.amazon.jsii.tests.calculator.Implementation
jsii-calc.ImplementsInterfaceWithInternal=software.amazon.jsii.tests.calculator.ImplementsInterfaceWithInternal
jsii-calc.ImplementsInterfaceWithInternalSubclass=software.amazon.jsii.tests.calculator.ImplementsInterfaceWithInternalSubclass
jsii-calc.ImplementsPrivateInterface=software.amazon.jsii.tests.calculator.ImplementsPrivateInterface
jsii-calc.ImplictBaseOfBase=software.amazon.jsii.tests.calculator.ImplictBaseOfBase
jsii-calc.InbetweenClass=software.amazon.jsii.tests.calculator.InbetweenClass
jsii-calc.InterfaceCollections=software.amazon.jsii.tests.calculator.InterfaceCollections
jsii-calc.InterfaceInNamespaceIncludesClasses.Foo=software.amazon.jsii.tests.calculator.interface_in_namespace_includes_classes.Foo
jsii-calc.InterfaceInNamespaceIncludesClasses.Hello=software.amazon.jsii.tests.calculator.interface_in_namespace_includes_classes.Hello
jsii-calc.InterfaceInNamespaceOnlyInterface.Hello=software.amazon.jsii.tests.calculator.interface_in_namespace_only_interface.Hello
jsii-calc.InterfacesMaker=software.amazon.jsii.tests.calculator.InterfacesMaker
jsii-calc.Isomorphism=software.amazon.jsii.tests.calculator.Isomorphism
jsii-calc.Issue2638=software.amazon.jsii.tests.calculator.Issue2638
jsii-calc.Issue2638B=software.amazon.jsii.tests.calculator.Issue2638B
jsii-calc.JSII417Derived=software.amazon.jsii.tests.calculator.JSII417Derived
jsii-calc.JSII417PublicBaseOfBase=software.amazon.jsii.tests.calculator.JSII417PublicBaseOfBase
jsii-calc.JSObjectLiteralForInterface=software.amazon.jsii.tests.calculator.JSObjectLiteralForInterface
jsii-calc.JSObjectLiteralToNative=software.amazon.jsii.tests.calculator.JSObjectLiteralToNative
jsii-calc.JSObjectLiteralToNativeClass=software.amazon.jsii.tests.calculator.JSObjectLiteralToNativeClass
jsii-calc.JavaReservedWords=software.amazon.jsii.tests.calculator.JavaReservedWords
jsii-calc.Jsii487Derived=software.amazon.jsii.tests.calculator.Jsii487Derived
jsii-calc.Jsii496Derived=software.amazon.jsii.tests.calculator.Jsii496Derived
jsii-calc.JsiiAgent=software.amazon.jsii.tests.calculator.JsiiAgent
jsii-calc.JsonFormatter=software.amazon.jsii.tests.calculator.JsonFormatter
jsii-calc.LevelOne=software.amazon.jsii.tests.calculator.LevelOne
jsii-calc.LevelOne.PropBooleanValue=software.amazon.jsii.tests.calculator.LevelOne$PropBooleanValue
jsii-calc.LevelOne.PropProperty=software.amazon.jsii.tests.calculator.LevelOne$PropProperty
jsii-calc.LevelOneProps=software.amazon.jsii.tests.calculator.LevelOneProps
jsii-calc.LoadBalancedFargateServiceProps=software.amazon.jsii.tests.calculator.LoadBalancedFargateServiceProps
jsii-calc.MethodNamedProperty=software.amazon.jsii.tests.calculator.MethodNamedProperty
jsii-calc.Multiply=software.amazon.jsii.tests.calculator.Multiply
jsii-calc.Negate=software.amazon.jsii.tests.calculator.Negate
jsii-calc.NestedClassInstance=software.amazon.jsii.tests.calculator.NestedClassInstance
jsii-calc.NestedStruct=software.amazon.jsii.tests.calculator.NestedStruct
jsii-calc.NodeStandardLibrary=software.amazon.jsii.tests.calculator.NodeStandardLibrary
jsii-calc.NullShouldBeTreatedAsUndefined=software.amazon.jsii.tests.calculator.NullShouldBeTreatedAsUndefined
jsii-calc.NullShouldBeTreatedAsUndefinedData=software.amazon.jsii.tests.calculator.NullShouldBeTreatedAsUndefinedData
jsii-calc.NumberGenerator=software.amazon.jsii.tests.calculator.NumberGenerator
jsii-calc.ObjectRefsInCollections=software.amazon.jsii.tests.calculator.ObjectRefsInCollections
jsii-calc.ObjectWithPropertyProvider=software.amazon.jsii.tests.calculator.ObjectWithPropertyProvider
jsii-calc.Old=software.amazon.jsii.tests.calculator.Old
jsii-calc.OptionalArgumentInvoker=software.amazon.jsii.tests.calculator.OptionalArgumentInvoker
jsii-calc.OptionalConstructorArgument=software.amazon.jsii.tests.calculator.OptionalConstructorArgument
jsii-calc.OptionalStruct=software.amazon.jsii.tests.calculator.OptionalStruct
jsii-calc.OptionalStructConsumer=software.amazon.jsii.tests.calculator.OptionalStructConsumer
jsii-calc.OverridableProtectedMember=software.amazon.jsii.tests.calculator.OverridableProtectedMember
jsii-calc.OverrideReturnsObject=software.amazon.jsii.tests.calculator.OverrideReturnsObject
jsii-calc.ParamShadowsBuiltins=software.amazon.jsii.tests.calculator.ParamShadowsBuiltins
jsii-calc.ParamShadowsBuiltinsProps=software.amazon.jsii.tests.calculator.ParamShadowsBuiltinsProps
jsii-calc.ParamShadowsScope=software.amazon.jsii.tests.calculator.ParamShadowsScope
jsii-calc.ParentStruct982=software.amazon.jsii.tests.calculator.ParentStruct982
jsii-calc.PartiallyInitializedThisConsumer=software.amazon.jsii.tests.calculator.PartiallyInitializedThisConsumer
jsii-calc.Polymorphism=software.amazon.jsii.tests.calculator.Polymorphism
jsii-calc.Power=software.amazon.jsii.tests.calculator.Power
jsii-calc.PromiseNothing=software.amazon.jsii.tests.calculator.PromiseNothing
jsii-calc.PropertyNamedProperty=software.amazon.jsii.tests.calculator.PropertyNamedProperty
jsii-calc.PublicClass=software.amazon.jsii.tests.calculator.PublicClass
jsii-calc.PythonReservedWords=software.amazon.jsii.tests.calculator.PythonReservedWords
jsii-calc.PythonSelf.ClassWithSelf=software.amazon.jsii.tests.calculator.python_self.ClassWithSelf
jsii-calc.PythonSelf.ClassWithSelfKwarg=software.amazon.jsii.tests.calculator.python_self.ClassWithSelfKwarg
jsii-calc.PythonSelf.IInterfaceWithSelf=software.amazon.jsii.tests.calculator.python_self.IInterfaceWithSelf
jsii-calc.PythonSelf.StructWithSelf=software.amazon.jsii.tests.calculator.python_self.StructWithSelf
jsii-calc.ReferenceEnumFromScopedPackage=software.amazon.jsii.tests.calculator.ReferenceEnumFromScopedPackage
jsii-calc.ReturnsPrivateImplementationOfInterface=software.amazon.jsii.tests.calculator.ReturnsPrivateImplementationOfInterface
jsii-calc.RootStruct=software.amazon.jsii.tests.calculator.RootStruct
jsii-calc.RootStructValidator=software.amazon.jsii.tests.calculator.RootStructValidator
jsii-calc.RuntimeTypeChecking=software.amazon.jsii.tests.calculator.RuntimeTypeChecking
jsii-calc.SecondLevelStruct=software.amazon.jsii.tests.calculator.SecondLevelStruct
jsii-calc.SingleInstanceTwoTypes=software.amazon.jsii.tests.calculator.SingleInstanceTwoTypes
jsii-calc.SingletonInt=software.amazon.jsii.tests.calculator.SingletonInt
jsii-calc.SingletonIntEnum=software.amazon.jsii.tests.calculator.SingletonIntEnum
jsii-calc.SingletonString=software.amazon.jsii.tests.calculator.SingletonString
jsii-calc.SingletonStringEnum=software.amazon.jsii.tests.calculator.SingletonStringEnum
jsii-calc.SmellyStruct=software.amazon.jsii.tests.calculator.SmellyStruct
jsii-calc.SomeTypeJsii976=software.amazon.jsii.tests.calculator.SomeTypeJsii976
jsii-calc.StableClass=software.amazon.jsii.tests.calculator.StableClass
jsii-calc.StableEnum=software.amazon.jsii.tests.calculator.StableEnum
jsii-calc.StableStruct=software.amazon.jsii.tests.calculator.StableStruct
jsii-calc.StaticContext=software.amazon.jsii.tests.calculator.StaticContext
jsii-calc.StaticHelloChild=software.amazon.jsii.tests.calculator.StaticHelloChild
jsii-calc.StaticHelloParent=software.amazon.jsii.tests.calculator.StaticHelloParent
jsii-calc.Statics=software.amazon.jsii.tests.calculator.Statics
jsii-calc.StringEnum=software.amazon.jsii.tests.calculator.StringEnum
jsii-calc.StripInternal=software.amazon.jsii.tests.calculator.StripInternal
jsii-calc.StructA=software.amazon.jsii.tests.calculator.StructA
jsii-calc.StructB=software.amazon.jsii.tests.calculator.StructB
jsii-calc.StructParameterType=software.amazon.jsii.tests.calculator.StructParameterType
jsii-calc.StructPassing=software.amazon.jsii.tests.calculator.StructPassing
jsii-calc.StructUnionConsumer=software.amazon.jsii.tests.calculator.StructUnionConsumer
jsii-calc.StructWithCollectionOfUnionts=software.amazon.jsii.tests.calculator.StructWithCollectionOfUnionts
jsii-calc.StructWithEnum=software.amazon.jsii.tests.calculator.StructWithEnum
jsii-calc.StructWithJavaReservedWords=software.amazon.jsii.tests.calculator.StructWithJavaReservedWords
jsii-calc.Sum=software.amazon.jsii.tests.calculator.Sum
jsii-calc.SupportsNiceJavaBuilder=software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilder
jsii-calc.SupportsNiceJavaBuilderProps=software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderProps
jsii-calc.SupportsNiceJavaBuilderWithRequiredProps=software.amazon.jsii.tests.calculator.SupportsNiceJavaBuilderWithRequiredProps
jsii-calc.SyncVirtualMethods=software.amazon.jsii.tests.calculator.SyncVirtualMethods
jsii-calc.TestStructWithEnum=software.amazon.jsii.tests.calculator.TestStructWithEnum
jsii-calc.Thrower=software.amazon.jsii.tests.calculator.Thrower
jsii-calc.TopLevelStruct=software.amazon.jsii.tests.calculator.TopLevelStruct
jsii-calc.TwoMethodsWithSimilarCapitalization=software.amazon.jsii.tests.calculator.TwoMethodsWithSimilarCapitalization
jsii-calc.UmaskCheck=software.amazon.jsii.tests.calculator.UmaskCheck
jsii-calc.UnaryOperation=software.amazon.jsii.tests.calculator.UnaryOperation
jsii-calc.UnionProperties=software.amazon.jsii.tests.calculator.UnionProperties
jsii-calc.UpcasingReflectable=software.amazon.jsii.tests.calculator.UpcasingReflectable
jsii-calc.UseBundledDependency=software.amazon.jsii.tests.calculator.UseBundledDependency
jsii-calc.UseCalcBase=software.amazon.jsii.tests.calculator.UseCalcBase
jsii-calc.UsesInterfaceWithProperties=software.amazon.jsii.tests.calculator.UsesInterfaceWithProperties
jsii-calc.VariadicInvoker=software.amazon.jsii.tests.calculator.VariadicInvoker
jsii-calc.VariadicMethod=software.amazon.jsii.tests.calculator.VariadicMethod
jsii-calc.VariadicTypeUnion=software.amazon.jsii.tests.calculator.VariadicTypeUnion
jsii-calc.VirtualMethodPlayground=software.amazon.jsii.tests.calculator.VirtualMethodPlayground
jsii-calc.VoidCallback=software.amazon.jsii.tests.calculator.VoidCallback
jsii-calc.WeirdDocs=software.amazon.jsii.tests.calculator.WeirdDocs
jsii-calc.WithPrivatePropertyInConstructor=software.amazon.jsii.tests.calculator.WithPrivatePropertyInConstructor
jsii-calc.anonymous.IOptionA=software.amazon.jsii.tests.calculator.anonymous.IOptionA
jsii-calc.anonymous.IOptionB=software.amazon.jsii.tests.calculator.anonymous.IOptionB
jsii-calc.anonymous.UseOptions=software.amazon.jsii.tests.calculator.anonymous.UseOptions
jsii-calc.cdk16625.Cdk16625=software.amazon.jsii.tests.calculator.cdk16625.Cdk16625
jsii-calc.cdk16625.donotimport.UnimportedSubmoduleType=software.amazon.jsii.tests.calculator.cdk16625.donotimport.UnimportedSubmoduleType
jsii-calc.cdk22369.AcceptsPath=software.amazon.jsii.tests.calculator.cdk22369.AcceptsPath
jsii-calc.cdk22369.AcceptsPathProps=software.amazon.jsii.tests.calculator.cdk22369.AcceptsPathProps
jsii-calc.composition.CompositeOperation=software.amazon.jsii.tests.calculator.composition.CompositeOperation
jsii-calc.composition.CompositeOperation.CompositionStringStyle=software.amazon.jsii.tests.calculator.composition.CompositeOperation$CompositionStringStyle
jsii-calc.homonymousForwardReferences.bar.Consumer=software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.Consumer
jsii-calc.homonymousForwardReferences.bar.ConsumerProps=software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.ConsumerProps
jsii-calc.homonymousForwardReferences.bar.Homonymous=software.amazon.jsii.tests.calculator.homonymous_forward_references.bar.Homonymous
jsii-calc.homonymousForwardReferences.foo.Consumer=software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.Consumer
jsii-calc.homonymousForwardReferences.foo.ConsumerProps=software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.ConsumerProps
jsii-calc.homonymousForwardReferences.foo.Homonymous=software.amazon.jsii.tests.calculator.homonymous_forward_references.foo.Homonymous
jsii-calc.jsii3656.ImplementMeOpts=software.amazon.jsii.tests.calculator.jsii3656.ImplementMeOpts
jsii-calc.jsii3656.OverrideMe=software.amazon.jsii.tests.calculator.jsii3656.OverrideMe
jsii-calc.module2530.MyClass=software.amazon.jsii.tests.calculator.module2530.MyClass
jsii-calc.module2617.OnlyStatics=software.amazon.jsii.tests.calculator.module2617.OnlyStatics
jsii-calc.module2647.ExtendAndImplement=software.amazon.jsii.tests.calculator.module2647.ExtendAndImplement
jsii-calc.module2689.methods.MyClass=software.amazon.jsii.tests.calculator.module2689.methods.MyClass
jsii-calc.module2689.props.MyClass=software.amazon.jsii.tests.calculator.module2689.props.MyClass
jsii-calc.module2689.retval.MyClass=software.amazon.jsii.tests.calculator.module2689.retval.MyClass
jsii-calc.module2689.structs.MyStruct=software.amazon.jsii.tests.calculator.module2689.structs.MyStruct
jsii-calc.module2692.submodule1.Bar=software.amazon.jsii.tests.calculator.module2692.submodule1.Bar
jsii-calc.module2692.submodule2.Bar=software.amazon.jsii.tests.calculator.module2692.submodule2.Bar
jsii-calc.module2692.submodule2.Foo=software.amazon.jsii.tests.calculator.module2692.submodule2.Foo
jsii-calc.module2700.Base=software.amazon.jsii.tests.calculator.module2700.Base
jsii-calc.module2700.Derived=software.amazon.jsii.tests.calculator.module2700.Derived
jsii-calc.module2700.IFoo=software.amazon.jsii.tests.calculator.module2700.IFoo
jsii-calc.module2702.Baz=software.amazon.jsii.tests.calculator.module2702.Baz
jsii-calc.module2702.Class1=software.amazon.jsii.tests.calculator.module2702.Class1
jsii-calc.module2702.Class2=software.amazon.jsii.tests.calculator.module2702.Class2
jsii-calc.module2702.Class3=software.amazon.jsii.tests.calculator.module2702.Class3
jsii-calc.module2702.Construct=software.amazon.jsii.tests.calculator.module2702.Construct
jsii-calc.module2702.IBaz=software.amazon.jsii.tests.calculator.module2702.IBaz
jsii-calc.module2702.IConstruct=software.amazon.jsii.tests.calculator.module2702.IConstruct
jsii-calc.module2702.IFoo=software.amazon.jsii.tests.calculator.module2702.IFoo
jsii-calc.module2702.IResource=software.amazon.jsii.tests.calculator.module2702.IResource
jsii-calc.module2702.IVpc=software.amazon.jsii.tests.calculator.module2702.IVpc
jsii-calc.module2702.Resource=software.amazon.jsii.tests.calculator.module2702.Resource
jsii-calc.module2702.Vpc=software.amazon.jsii.tests.calculator.module2702.Vpc
jsii-calc.nodirect.sub1.TypeFromSub1=software.amazon.jsii.tests.calculator.nodirect.sub1.TypeFromSub1
jsii-calc.nodirect.sub2.TypeFromSub2=software.amazon.jsii.tests.calculator.nodirect.sub2.TypeFromSub2
jsii-calc.onlystatic.OnlyStaticMethods=software.amazon.jsii.tests.calculator.onlystatic.OnlyStaticMethods
jsii-calc.submodule.Default=software.amazon.jsii.tests.calculator.submodule.Default
jsii-calc.submodule.MyClass=software.amazon.jsii.tests.calculator.submodule.MyClass
jsii-calc.submodule.back_references.MyClassReference=software.amazon.jsii.tests.calculator.submodule.back_references.MyClassReference
jsii-calc.submodule.child.Awesomeness=software.amazon.jsii.tests.calculator.submodule.child.Awesomeness
jsii-calc.submodule.child.Goodness=software.amazon.jsii.tests.calculator.submodule.child.Goodness
jsii-calc.submodule.child.InnerClass=software.amazon.jsii.tests.calculator.submodule.child.InnerClass
jsii-calc.submodule.child.KwargsProps=software.amazon.jsii.tests.calculator.submodule.child.KwargsProps
jsii-calc.submodule.child.OuterClass=software.amazon.jsii.tests.calculator.submodule.child.OuterClass
jsii-calc.submodule.child.SomeEnum=software.amazon.jsii.tests.calculator.submodule.child.SomeEnum
jsii-calc.submodule.child.SomeStruct=software.amazon.jsii.tests.calculator.submodule.child.SomeStruct
jsii-calc.submodule.child.Structure=software.amazon.jsii.tests.calculator.submodule.child.Structure
jsii-calc.submodule.isolated.Kwargs=software.amazon.jsii.tests.calculator.submodule.isolated.Kwargs
jsii-calc.submodule.nested_submodule.Namespaced=software.amazon.jsii.tests.calculator.submodule.nested_submodule.Namespaced
jsii-calc.submodule.nested_submodule.deeplyNested.INamespaced=software.amazon.jsii.tests.calculator.submodule.nested_submodule.deeply_nested.INamespaced
jsii-calc.submodule.param.SpecialParameter=software.amazon.jsii.tests.calculator.submodule.param.SpecialParameter
jsii-calc.submodule.returnsparam.ReturnsSpecialParameter=software.amazon.jsii.tests.calculator.submodule.returnsparam.ReturnsSpecialParameter
jsii-calc.union.ConsumesUnion=software.amazon.jsii.tests.calculator.union.ConsumesUnion
jsii-calc.union.IResolvable=software.amazon.jsii.tests.calculator.union.IResolvable
jsii-calc.union.Resolvable=software.amazon.jsii.tests.calculator.union.Resolvable

`;

exports[`Generated code for "jsii-calc": <outDir>/java/src/main/resources/software/amazon/jsii/tests/calculator/jsii-calc@3.20.120.jsii.tgz 1`] = `java/src/main/resources/software/amazon/jsii/tests/calculator/jsii-calc@3.20.120.jsii.tgz is a tarball`;

exports[`Generated code for "jsii-calc": <runtime-type-check-diff>/ 1`] = `
<runtime-type-check-diff>
 ┗━ 📁 java
    ┗━ 📁 src
       ┗━ 📁 main
          ┗━ 📁 java
             ┗━ 📁 software
                ┗━ 📁 amazon
                   ┗━ 📁 jsii
                      ┗━ 📁 tests
                         ┗━ 📁 calculator
                            ┣━ 📄 AllTypes.java.diff
                            ┣━ 📁 anonymous
                            ┃  ┗━ 📄 UseOptions.java.diff
                            ┣━ 📄 ClassWithCollectionOfUnions.java.diff
                            ┣━ 📄 ClassWithNestedUnion.java.diff
                            ┣━ 📄 ConfusingToJackson.java.diff
                            ┣━ 📄 StructUnionConsumer.java.diff
                            ┣━ 📁 union
                            ┃  ┗━ 📄 ConsumesUnion.java.diff
                            ┗━ 📄 VariadicTypeUnion.java.diff
`;

exports[`Generated code for "jsii-calc": <runtime-type-check-diff>/java/src/main/java/software/amazon/jsii/tests/calculator/AllTypes.java.diff 1`] = `
--- java/src/main/java/software/amazon/jsii/tests/calculator/AllTypes.java	--no-runtime-type-checking
+++ java/src/main/java/software/amazon/jsii/tests/calculator/AllTypes.java	--runtime-type-checking
@@ -220,10 +220,25 @@
 
     /**
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public void setUnionArrayProperty(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> value) {
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            for (int __idx_ac66f0 = 0; __idx_ac66f0 < value.size(); __idx_ac66f0++) {
+                final java.lang.Object __val_ac66f0 = value.get(__idx_ac66f0);
+                if (
+                     !(__val_ac66f0 instanceof java.lang.Number)
+                    && !(__val_ac66f0 instanceof software.amazon.jsii.tests.calculator.lib.NumericValue)
+                ) {
+                    throw new IllegalArgumentException(
+                        new java.lang.StringBuilder("Expected ")
+                            .append("value").append(".get(").append(__idx_ac66f0).append(")")
+                            .append(" to be one of: java.lang.Number, software.amazon.jsii.tests.calculator.lib.NumericValue; received ")
+                            .append(__val_ac66f0.getClass()).toString());
+                }
+            }
+        }
         software.amazon.jsii.Kernel.set(this, "unionArrayProperty", java.util.Objects.requireNonNull(value, "unionArrayProperty is required"));
     }
 
     /**
      */
@@ -234,10 +249,33 @@
 
     /**
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public void setUnionMapProperty(final @org.jetbrains.annotations.NotNull java.util.Map<java.lang.String, java.lang.Object> value) {
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            if (!(value.keySet().toArray()[0] instanceof String)) {
+                throw new IllegalArgumentException(
+                    new java.lang.StringBuilder("Expected ")
+                        .append("value").append(".keySet()")
+                        .append(" to contain class String; received ")
+                        .append(value.keySet().toArray()[0].getClass()).toString());
+            }
+            for (final java.util.Map.Entry<String, java.lang.Object> __item_ac66f0: value.entrySet()) {
+                final java.lang.Object __val_ac66f0 = __item_ac66f0.getValue();
+                if (
+                     !(__val_ac66f0 instanceof java.lang.String)
+                    && !(__val_ac66f0 instanceof java.lang.Number)
+                    && !(__val_ac66f0 instanceof software.amazon.jsii.tests.calculator.lib.Number)
+                ) {
+                    throw new IllegalArgumentException(
+                        new java.lang.StringBuilder("Expected ")
+                            .append("value").append(".get(\\"").append((__item_ac66f0.getKey())).append("\\")")
+                            .append(" to be one of: java.lang.String, java.lang.Number, software.amazon.jsii.tests.calculator.lib.Number; received ")
+                            .append(__val_ac66f0.getClass()).toString());
+                }
+            }
+        }
         software.amazon.jsii.Kernel.set(this, "unionMapProperty", java.util.Objects.requireNonNull(value, "unionMapProperty is required"));
     }
 
     /**
      */
`;

exports[`Generated code for "jsii-calc": <runtime-type-check-diff>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithCollectionOfUnions.java.diff 1`] = `
--- java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithCollectionOfUnions.java	--no-runtime-type-checking
+++ java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithCollectionOfUnions.java	--runtime-type-checking
@@ -19,10 +19,36 @@
      * @param unionProperty This parameter is required.
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public ClassWithCollectionOfUnions(final @org.jetbrains.annotations.NotNull java.util.List<java.util.Map<java.lang.String, java.lang.Object>> unionProperty) {
         super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            for (int __idx_1ccdf0 = 0; __idx_1ccdf0 < unionProperty.size(); __idx_1ccdf0++) {
+                final java.util.Map<java.lang.String, java.lang.Object> __val_1ccdf0 = unionProperty.get(__idx_1ccdf0);
+                if (!(__val_1ccdf0.keySet().toArray()[0] instanceof String)) {
+                    throw new IllegalArgumentException(
+                        new java.lang.StringBuilder("Expected ")
+                            .append("unionProperty").append(".get(").append(__idx_1ccdf0).append(")").append(".keySet()")
+                            .append(" to contain class String; received ")
+                            .append(__val_1ccdf0.keySet().toArray()[0].getClass()).toString());
+                }
+                for (final java.util.Map.Entry<String, java.lang.Object> __item_fb617d: __val_1ccdf0.entrySet()) {
+                    final java.lang.Object __val_fb617d = __item_fb617d.getValue();
+                    if (
+                         !(__val_fb617d instanceof software.amazon.jsii.tests.calculator.StructA)
+                        && !(__val_fb617d instanceof software.amazon.jsii.tests.calculator.StructB)
+                        && !(__val_fb617d.getClass().equals(software.amazon.jsii.JsiiObject.class))
+                    ) {
+                        throw new IllegalArgumentException(
+                            new java.lang.StringBuilder("Expected ")
+                                .append("unionProperty").append(".get(").append(__idx_1ccdf0).append(")").append(".get(\\"").append((__item_fb617d.getKey())).append("\\")")
+                                .append(" to be one of: software.amazon.jsii.tests.calculator.StructA, software.amazon.jsii.tests.calculator.StructB; received ")
+                                .append(__val_fb617d.getClass()).toString());
+                    }
+                }
+            }
+        }
         software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(unionProperty, "unionProperty is required") });
     }
 
     /**
      */
@@ -33,8 +59,34 @@
 
     /**
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public void setUnionProperty(final @org.jetbrains.annotations.NotNull java.util.List<java.util.Map<java.lang.String, java.lang.Object>> value) {
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            for (int __idx_ac66f0 = 0; __idx_ac66f0 < value.size(); __idx_ac66f0++) {
+                final java.util.Map<java.lang.String, java.lang.Object> __val_ac66f0 = value.get(__idx_ac66f0);
+                if (!(__val_ac66f0.keySet().toArray()[0] instanceof String)) {
+                    throw new IllegalArgumentException(
+                        new java.lang.StringBuilder("Expected ")
+                            .append("value").append(".get(").append(__idx_ac66f0).append(")").append(".keySet()")
+                            .append(" to contain class String; received ")
+                            .append(__val_ac66f0.keySet().toArray()[0].getClass()).toString());
+                }
+                for (final java.util.Map.Entry<String, java.lang.Object> __item_58ec25: __val_ac66f0.entrySet()) {
+                    final java.lang.Object __val_58ec25 = __item_58ec25.getValue();
+                    if (
+                         !(__val_58ec25 instanceof software.amazon.jsii.tests.calculator.StructA)
+                        && !(__val_58ec25 instanceof software.amazon.jsii.tests.calculator.StructB)
+                        && !(__val_58ec25.getClass().equals(software.amazon.jsii.JsiiObject.class))
+                    ) {
+                        throw new IllegalArgumentException(
+                            new java.lang.StringBuilder("Expected ")
+                                .append("value").append(".get(").append(__idx_ac66f0).append(")").append(".get(\\"").append((__item_58ec25.getKey())).append("\\")")
+                                .append(" to be one of: software.amazon.jsii.tests.calculator.StructA, software.amazon.jsii.tests.calculator.StructB; received ")
+                                .append(__val_58ec25.getClass()).toString());
+                    }
+                }
+            }
+        }
         software.amazon.jsii.Kernel.set(this, "unionProperty", java.util.Objects.requireNonNull(value, "unionProperty is required"));
     }
 }
`;

exports[`Generated code for "jsii-calc": <runtime-type-check-diff>/java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithNestedUnion.java.diff 1`] = `
--- java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithNestedUnion.java	--no-runtime-type-checking
+++ java/src/main/java/software/amazon/jsii/tests/calculator/ClassWithNestedUnion.java	--runtime-type-checking
@@ -19,10 +19,68 @@
      * @param unionProperty This parameter is required.
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public ClassWithNestedUnion(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> unionProperty) {
         super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            for (int __idx_1ccdf0 = 0; __idx_1ccdf0 < unionProperty.size(); __idx_1ccdf0++) {
+                final java.lang.Object __val_1ccdf0 = unionProperty.get(__idx_1ccdf0);
+                if (
+                     !(__val_1ccdf0 instanceof java.util.Map)
+                    && !(__val_1ccdf0 instanceof java.util.List)
+                ) {
+                    throw new IllegalArgumentException(
+                        new java.lang.StringBuilder("Expected ")
+                            .append("unionProperty").append(".get(").append(__idx_1ccdf0).append(")")
+                            .append(" to be one of: java.util.Map<java.lang.String, java.lang.Object>, java.util.List<java.lang.Object>; received ")
+                            .append(__val_1ccdf0.getClass()).toString());
+                }
+                if (__val_1ccdf0 instanceof java.util.Map) {
+                    @SuppressWarnings("unchecked")
+                    final java.util.Map<java.lang.String, java.lang.Object> __cast_7c6d77 = (java.util.Map<java.lang.String, java.lang.Object>)__val_1ccdf0;
+                    if (!(__cast_7c6d77.keySet().toArray()[0] instanceof String)) {
+                        throw new IllegalArgumentException(
+                            new java.lang.StringBuilder("Expected ")
+                                .append("unionProperty").append(".get(").append(__idx_1ccdf0).append(")").append(".keySet()")
+                                .append(" to contain class String; received ")
+                                .append(__cast_7c6d77.keySet().toArray()[0].getClass()).toString());
+                    }
+                    for (final java.util.Map.Entry<String, java.lang.Object> __item_fb617d: __cast_7c6d77.entrySet()) {
+                        final java.lang.Object __val_fb617d = __item_fb617d.getValue();
+                        if (
+                             !(__val_fb617d instanceof software.amazon.jsii.tests.calculator.StructA)
+                            && !(__val_fb617d instanceof software.amazon.jsii.tests.calculator.StructB)
+                            && !(__val_fb617d.getClass().equals(software.amazon.jsii.JsiiObject.class))
+                        ) {
+                            throw new IllegalArgumentException(
+                                new java.lang.StringBuilder("Expected ")
+                                    .append("unionProperty").append(".get(").append(__idx_1ccdf0).append(")").append(".get(\\"").append((__item_fb617d.getKey())).append("\\")")
+                                    .append(" to be one of: software.amazon.jsii.tests.calculator.StructA, software.amazon.jsii.tests.calculator.StructB; received ")
+                                    .append(__val_fb617d.getClass()).toString());
+                        }
+                    }
+                }
+                if (__val_1ccdf0 instanceof java.util.List) {
+                    @SuppressWarnings("unchecked")
+                    final java.util.List<java.lang.Object> __cast_7c6d77 = (java.util.List<java.lang.Object>)__val_1ccdf0;
+                    for (int __idx_fb617d = 0; __idx_fb617d < __cast_7c6d77.size(); __idx_fb617d++) {
+                        final java.lang.Object __val_fb617d = __cast_7c6d77.get(__idx_fb617d);
+                        if (
+                             !(__val_fb617d instanceof software.amazon.jsii.tests.calculator.StructA)
+                            && !(__val_fb617d instanceof software.amazon.jsii.tests.calculator.StructB)
+                            && !(__val_fb617d.getClass().equals(software.amazon.jsii.JsiiObject.class))
+                        ) {
+                            throw new IllegalArgumentException(
+                                new java.lang.StringBuilder("Expected ")
+                                    .append("unionProperty").append(".get(").append(__idx_1ccdf0).append(")").append(".get(").append(__idx_fb617d).append(")")
+                                    .append(" to be one of: software.amazon.jsii.tests.calculator.StructA, software.amazon.jsii.tests.calculator.StructB; received ")
+                                    .append(__val_fb617d.getClass()).toString());
+                        }
+                    }
+                }
+            }
+        }
         software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, new Object[] { java.util.Objects.requireNonNull(unionProperty, "unionProperty is required") });
     }
 
     /**
      */
@@ -33,8 +91,66 @@
 
     /**
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public void setUnionProperty(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> value) {
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            for (int __idx_ac66f0 = 0; __idx_ac66f0 < value.size(); __idx_ac66f0++) {
+                final java.lang.Object __val_ac66f0 = value.get(__idx_ac66f0);
+                if (
+                     !(__val_ac66f0 instanceof java.util.Map)
+                    && !(__val_ac66f0 instanceof java.util.List)
+                ) {
+                    throw new IllegalArgumentException(
+                        new java.lang.StringBuilder("Expected ")
+                            .append("value").append(".get(").append(__idx_ac66f0).append(")")
+                            .append(" to be one of: java.util.Map<java.lang.String, java.lang.Object>, java.util.List<java.lang.Object>; received ")
+                            .append(__val_ac66f0.getClass()).toString());
+                }
+                if (__val_ac66f0 instanceof java.util.Map) {
+                    @SuppressWarnings("unchecked")
+                    final java.util.Map<java.lang.String, java.lang.Object> __cast_7fc174 = (java.util.Map<java.lang.String, java.lang.Object>)__val_ac66f0;
+                    if (!(__cast_7fc174.keySet().toArray()[0] instanceof String)) {
+                        throw new IllegalArgumentException(
+                            new java.lang.StringBuilder("Expected ")
+                                .append("value").append(".get(").append(__idx_ac66f0).append(")").append(".keySet()")
+                                .append(" to contain class String; received ")
+                                .append(__cast_7fc174.keySet().toArray()[0].getClass()).toString());
+                    }
+                    for (final java.util.Map.Entry<String, java.lang.Object> __item_58ec25: __cast_7fc174.entrySet()) {
+                        final java.lang.Object __val_58ec25 = __item_58ec25.getValue();
+                        if (
+                             !(__val_58ec25 instanceof software.amazon.jsii.tests.calculator.StructA)
+                            && !(__val_58ec25 instanceof software.amazon.jsii.tests.calculator.StructB)
+                            && !(__val_58ec25.getClass().equals(software.amazon.jsii.JsiiObject.class))
+                        ) {
+                            throw new IllegalArgumentException(
+                                new java.lang.StringBuilder("Expected ")
+                                    .append("value").append(".get(").append(__idx_ac66f0).append(")").append(".get(\\"").append((__item_58ec25.getKey())).append("\\")")
+                                    .append(" to be one of: software.amazon.jsii.tests.calculator.StructA, software.amazon.jsii.tests.calculator.StructB; received ")
+                                    .append(__val_58ec25.getClass()).toString());
+                        }
+                    }
+                }
+                if (__val_ac66f0 instanceof java.util.List) {
+                    @SuppressWarnings("unchecked")
+                    final java.util.List<java.lang.Object> __cast_7fc174 = (java.util.List<java.lang.Object>)__val_ac66f0;
+                    for (int __idx_58ec25 = 0; __idx_58ec25 < __cast_7fc174.size(); __idx_58ec25++) {
+                        final java.lang.Object __val_58ec25 = __cast_7fc174.get(__idx_58ec25);
+                        if (
+                             !(__val_58ec25 instanceof software.amazon.jsii.tests.calculator.StructA)
+                            && !(__val_58ec25 instanceof software.amazon.jsii.tests.calculator.StructB)
+                            && !(__val_58ec25.getClass().equals(software.amazon.jsii.JsiiObject.class))
+                        ) {
+                            throw new IllegalArgumentException(
+                                new java.lang.StringBuilder("Expected ")
+                                    .append("value").append(".get(").append(__idx_ac66f0).append(")").append(".get(").append(__idx_58ec25).append(")")
+                                    .append(" to be one of: software.amazon.jsii.tests.calculator.StructA, software.amazon.jsii.tests.calculator.StructB; received ")
+                                    .append(__val_58ec25.getClass()).toString());
+                        }
+                    }
+                }
+            }
+        }
         software.amazon.jsii.Kernel.set(this, "unionProperty", java.util.Objects.requireNonNull(value, "unionProperty is required"));
     }
 }
`;

exports[`Generated code for "jsii-calc": <runtime-type-check-diff>/java/src/main/java/software/amazon/jsii/tests/calculator/ConfusingToJackson.java.diff 1`] = `
--- java/src/main/java/software/amazon/jsii/tests/calculator/ConfusingToJackson.java	--no-runtime-type-checking
+++ java/src/main/java/software/amazon/jsii/tests/calculator/ConfusingToJackson.java	--runtime-type-checking
@@ -48,8 +48,24 @@
 
     /**
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public void setUnionProperty(final @org.jetbrains.annotations.Nullable java.util.List<java.lang.Object> value) {
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            for (int __idx_ac66f0 = 0; __idx_ac66f0 < value.size(); __idx_ac66f0++) {
+                final java.lang.Object __val_ac66f0 = value.get(__idx_ac66f0);
+                if (
+                     !(__val_ac66f0 instanceof software.amazon.jsii.tests.calculator.lib.IFriendly)
+                    && !(__val_ac66f0 instanceof software.amazon.jsii.tests.calculator.AbstractClass)
+                    && !(__val_ac66f0.getClass().equals(software.amazon.jsii.JsiiObject.class))
+                ) {
+                    throw new IllegalArgumentException(
+                        new java.lang.StringBuilder("Expected ")
+                            .append("value").append(".get(").append(__idx_ac66f0).append(")")
+                            .append(" to be one of: software.amazon.jsii.tests.calculator.lib.IFriendly, software.amazon.jsii.tests.calculator.AbstractClass; received ")
+                            .append(__val_ac66f0.getClass()).toString());
+                }
+            }
+        }
         software.amazon.jsii.Kernel.set(this, "unionProperty", value);
     }
 }
`;

exports[`Generated code for "jsii-calc": <runtime-type-check-diff>/java/src/main/java/software/amazon/jsii/tests/calculator/StructUnionConsumer.java.diff 1`] = `
--- java/src/main/java/software/amazon/jsii/tests/calculator/StructUnionConsumer.java	--no-runtime-type-checking
+++ java/src/main/java/software/amazon/jsii/tests/calculator/StructUnionConsumer.java	--runtime-type-checking
@@ -18,18 +18,44 @@
     /**
      * @param struct This parameter is required.
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public static @org.jetbrains.annotations.NotNull java.lang.Boolean isStructA(final @org.jetbrains.annotations.NotNull java.lang.Object struct) {
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            if (
+                 !(struct instanceof software.amazon.jsii.tests.calculator.StructA)
+                && !(struct instanceof software.amazon.jsii.tests.calculator.StructB)
+                && !(struct.getClass().equals(software.amazon.jsii.JsiiObject.class))
+            ) {
+                throw new IllegalArgumentException(
+                    new java.lang.StringBuilder("Expected ")
+                        .append("struct")
+                        .append(" to be one of: software.amazon.jsii.tests.calculator.StructA, software.amazon.jsii.tests.calculator.StructB; received ")
+                        .append(struct.getClass()).toString());
+            }
+        }
         return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.StructUnionConsumer.class, "isStructA", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(struct, "struct is required") });
     }
 
     /**
      * @param struct This parameter is required.
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public static @org.jetbrains.annotations.NotNull java.lang.Boolean isStructB(final @org.jetbrains.annotations.NotNull java.lang.Object struct) {
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            if (
+                 !(struct instanceof software.amazon.jsii.tests.calculator.StructA)
+                && !(struct instanceof software.amazon.jsii.tests.calculator.StructB)
+                && !(struct.getClass().equals(software.amazon.jsii.JsiiObject.class))
+            ) {
+                throw new IllegalArgumentException(
+                    new java.lang.StringBuilder("Expected ")
+                        .append("struct")
+                        .append(" to be one of: software.amazon.jsii.tests.calculator.StructA, software.amazon.jsii.tests.calculator.StructB; received ")
+                        .append(struct.getClass()).toString());
+            }
+        }
         return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.StructUnionConsumer.class, "isStructB", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class), new Object[] { java.util.Objects.requireNonNull(struct, "struct is required") });
     }
 
     /**
      * @param which This parameter is required.
`;

exports[`Generated code for "jsii-calc": <runtime-type-check-diff>/java/src/main/java/software/amazon/jsii/tests/calculator/VariadicTypeUnion.java.diff 1`] = `
--- java/src/main/java/software/amazon/jsii/tests/calculator/VariadicTypeUnion.java	--no-runtime-type-checking
+++ java/src/main/java/software/amazon/jsii/tests/calculator/VariadicTypeUnion.java	--runtime-type-checking
@@ -19,10 +19,27 @@
      * @param union This parameter is required.
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public VariadicTypeUnion(final @org.jetbrains.annotations.NotNull java.lang.Object... union) {
         super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            final java.util.List<java.lang.Object> __union__asList = java.util.Arrays.asList(union);
+            for (int __idx_1046bb = 0; __idx_1046bb < __union__asList.size(); __idx_1046bb++) {
+                final java.lang.Object __val_1046bb = __union__asList.get(__idx_1046bb);
+                if (
+                     !(__val_1046bb instanceof software.amazon.jsii.tests.calculator.StructA)
+                    && !(__val_1046bb instanceof software.amazon.jsii.tests.calculator.StructB)
+                    && !(__val_1046bb.getClass().equals(software.amazon.jsii.JsiiObject.class))
+                ) {
+                    throw new IllegalArgumentException(
+                        new java.lang.StringBuilder("Expected ")
+                            .append("union").append("[").append(__idx_1046bb).append("]")
+                            .append(" to be one of: software.amazon.jsii.tests.calculator.StructA, software.amazon.jsii.tests.calculator.StructB; received ")
+                            .append(__val_1046bb.getClass()).toString());
+                }
+            }
+        }
         software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this, java.util.Arrays.<Object>stream(union).toArray(Object[]::new));
     }
 
     /**
      */
@@ -33,8 +50,24 @@
 
     /**
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public void setUnion(final @org.jetbrains.annotations.NotNull java.util.List<java.lang.Object> value) {
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            for (int __idx_ac66f0 = 0; __idx_ac66f0 < value.size(); __idx_ac66f0++) {
+                final java.lang.Object __val_ac66f0 = value.get(__idx_ac66f0);
+                if (
+                     !(__val_ac66f0 instanceof software.amazon.jsii.tests.calculator.StructA)
+                    && !(__val_ac66f0 instanceof software.amazon.jsii.tests.calculator.StructB)
+                    && !(__val_ac66f0.getClass().equals(software.amazon.jsii.JsiiObject.class))
+                ) {
+                    throw new IllegalArgumentException(
+                        new java.lang.StringBuilder("Expected ")
+                            .append("value").append(".get(").append(__idx_ac66f0).append(")")
+                            .append(" to be one of: software.amazon.jsii.tests.calculator.StructA, software.amazon.jsii.tests.calculator.StructB; received ")
+                            .append(__val_ac66f0.getClass()).toString());
+                }
+            }
+        }
         software.amazon.jsii.Kernel.set(this, "union", java.util.Objects.requireNonNull(value, "union is required"));
     }
 }
`;

exports[`Generated code for "jsii-calc": <runtime-type-check-diff>/java/src/main/java/software/amazon/jsii/tests/calculator/anonymous/UseOptions.java.diff 1`] = `
--- java/src/main/java/software/amazon/jsii/tests/calculator/anonymous/UseOptions.java	--no-runtime-type-checking
+++ java/src/main/java/software/amazon/jsii/tests/calculator/anonymous/UseOptions.java	--runtime-type-checking
@@ -18,10 +18,23 @@
     /**
      * @param option This parameter is required.
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public static @org.jetbrains.annotations.NotNull java.lang.String consume(final @org.jetbrains.annotations.NotNull java.lang.Object option) {
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            if (
+                 !(option instanceof software.amazon.jsii.tests.calculator.anonymous.IOptionA)
+                && !(option instanceof software.amazon.jsii.tests.calculator.anonymous.IOptionB)
+                && !(option.getClass().equals(software.amazon.jsii.JsiiObject.class))
+            ) {
+                throw new IllegalArgumentException(
+                    new java.lang.StringBuilder("Expected ")
+                        .append("option")
+                        .append(" to be one of: software.amazon.jsii.tests.calculator.anonymous.IOptionA, software.amazon.jsii.tests.calculator.anonymous.IOptionB; received ")
+                        .append(option.getClass()).toString());
+            }
+        }
         return software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.anonymous.UseOptions.class, "consume", software.amazon.jsii.NativeType.forClass(java.lang.String.class), new Object[] { java.util.Objects.requireNonNull(option, "option is required") });
     }
 
     /**
      * @param which This parameter is required.
`;

exports[`Generated code for "jsii-calc": <runtime-type-check-diff>/java/src/main/java/software/amazon/jsii/tests/calculator/union/ConsumesUnion.java.diff 1`] = `
--- java/src/main/java/software/amazon/jsii/tests/calculator/union/ConsumesUnion.java	--no-runtime-type-checking
+++ java/src/main/java/software/amazon/jsii/tests/calculator/union/ConsumesUnion.java	--runtime-type-checking
@@ -18,8 +18,22 @@
     /**
      * @param param This parameter is required.
      */
     @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
     public static void unionType(final @org.jetbrains.annotations.NotNull java.lang.Object param) {
+        if (software.amazon.jsii.Configuration.getRuntimeTypeChecking()) {
+            if (
+                 !(param instanceof software.amazon.jsii.tests.calculator.union.IResolvable)
+                && !(param instanceof software.amazon.jsii.tests.calculator.union.Resolvable)
+                && !(param instanceof software.amazon.jsii.tests.calculator.lib.IFriendly)
+                && !(param.getClass().equals(software.amazon.jsii.JsiiObject.class))
+            ) {
+                throw new IllegalArgumentException(
+                    new java.lang.StringBuilder("Expected ")
+                        .append("param")
+                        .append(" to be one of: software.amazon.jsii.tests.calculator.union.IResolvable, software.amazon.jsii.tests.calculator.union.Resolvable, software.amazon.jsii.tests.calculator.lib.IFriendly; received ")
+                        .append(param.getClass()).toString());
+            }
+        }
         software.amazon.jsii.JsiiObject.jsiiStaticCall(software.amazon.jsii.tests.calculator.union.ConsumesUnion.class, "unionType", software.amazon.jsii.NativeType.VOID, new Object[] { java.util.Objects.requireNonNull(param, "param is required") });
     }
 }
`;