class ActorInterfaceGeneratedImpl implements ActorInterfaceGenerator {

    @NotNull
    public JavaFile generate(NamesProvider namesProvider) {
        TypeSpec.Builder _class = TypeSpec.classBuilder(getProxyName());
        _class.addModifiers(Modifier.FINAL, Modifier.PUBLIC);
        _class.addField(MessageSender.class, MESSAGE_SENDER_FIELD, Modifier.PRIVATE, Modifier.FINAL);
        _class.addSuperinterface(ClassName.get(mActor));
        _class.addJavadoc("@hide");

        _class.addMethod(generateConstructor());
        _class.addMethod(generateCompareMethod());

        TypeName actorType = TypeName.get(mActor.asType());
        for (Message message : mMessages) {
            TypeSpec messageType = message.generate(actorType, namesProvider);
            _class.addType(messageType);
            _class.addMethod(generateMethod(message, messageType));

        }

        return JavaFile.builder(extractActorPackage(mActor), _class.build()).build();
    }

      ActorInterfaceGeneratedImpl(@NotNull ActorInterfaceDescription _interface);

}