class ActorsPackageGenerated implements ActorsPackageGenerator {

    @NotNull
    @Override
    public JavaFile generate(@NonNull List<? extends ActorInterfaceGenerated> interfaces) {
        final ClassName builderClass = ClassName.get(mPackageName, mClassName);
        final TypeSpec.Builder builder = TypeSpec.classBuilder(mClassName);

        builder.addModifiers(Modifier.FINAL);
        if (mAccessLevel == ActorsPackage.AccessLevel.Public) {
            builder.addModifiers(Modifier.PUBLIC);
        }

        builder.addField(FailureHandler.class, FIELD_ERROR_HANDLER, Modifier.PRIVATE);
        builder.addField(ProxyFactoryBase.class, FIELD_PROXY_FACTORY, Modifier.PRIVATE);

        builder.addMethod(generateHandlerSetter(builderClass));
        builder.addMethod(generateProxyFactorySetter(builderClass));

        TypeSpec threads = generateThreadsClass();
        TypeSpec proxyFactory = generateProxyFactory(interfaces);

        builder.addMethod(generateBuild(threads, proxyFactory, ClassName.get(CrashEarlyFailureHandler.class)));

        builder.addType(threads);
        builder.addType(proxyFactory);

        return JavaFile.builder(mPackageName, builder.build()).build();
    }

      ActorsPackageGenerated(@NotNull ActorsPackageDescription description);

}