Java源码示例:com.google.protobuf.compiler.PluginProtos

示例1
private static PluginProtos.CodeGeneratorResponse generate(
        @Nonnull List<Generator> generators,
        @Nonnull PluginProtos.CodeGeneratorRequest request) {
    checkNotNull(generators, "generators");
    checkArgument(!generators.isEmpty(), "generators.isEmpty()");
    checkNotNull(request, "request");

    // Run each file generator, collecting the output
    Stream<PluginProtos.CodeGeneratorResponse.File> oldWay = generators
            .stream()
            .flatMap(gen -> gen.generate(request));

    Stream<PluginProtos.CodeGeneratorResponse.File> newWay = generators
            .stream()
            .flatMap(gen -> gen.generateFiles(request).stream());

    // Send the files back to protoc
    return PluginProtos.CodeGeneratorResponse
            .newBuilder()
            .addAllFile(Stream.concat(oldWay, newWay).collect(Collectors.toList()))
            .build();
}
 
示例2
@Override
public List<PluginProtos.CodeGeneratorResponse.File> generateFiles(PluginProtos.CodeGeneratorRequest request)
        throws GeneratorException {
    ProtoTypeMap typeMap = ProtoTypeMap.of(request.getProtoFileList());

    List<DescriptorProtos.FileDescriptorProto> protosToGenerate = request.getProtoFileList().stream()
            .filter(protoFile -> request.getFileToGenerateList().contains(protoFile.getName()))
            .collect(Collectors.toList());

    List<ServiceContext> services = findServices(protosToGenerate, typeMap);
    return generateFiles(services);
}
 
示例3
private PluginProtos.CodeGeneratorResponse.File buildFile(ServiceContext context) {
    String content = applyTemplate("MutinyStub.mustache", context);
    return PluginProtos.CodeGeneratorResponse.File
            .newBuilder()
            .setName(absoluteFileName(context))
            .setContent(content)
            .build();
}
 
示例4
@Override
public List<PluginProtos.CodeGeneratorResponse.File> generateFiles(PluginProtos.CodeGeneratorRequest request)
        throws GeneratorException {
    final ProtoTypeMap typeMap = ProtoTypeMap.of(request.getProtoFileList());

    List<FileDescriptorProto> protosToGenerate = new ArrayList<>();
    for (FileDescriptorProto protoFile : request.getProtoFileList()) {
        if (request.getFileToGenerateList().contains(protoFile.getName())) {
            protosToGenerate.add(protoFile);
        }
    }

    List<ServiceContext> services = findServices(protosToGenerate, typeMap);
    return generateFiles(services);
}
 
示例5
/**
 * generate file
 *
 * @param services
 * @return
 */
private List<PluginProtos.CodeGeneratorResponse.File> generateFiles(List<ServiceContext> services) {
    List<PluginProtos.CodeGeneratorResponse.File> list = new ArrayList<>();
    for (ServiceContext service : services) {
        PluginProtos.CodeGeneratorResponse.File file = buildFile(service);
        list.add(file);
    }
    return list;
}
 
示例6
/**
 * 构造文件了
 *
 * @param context
 * @return
 */
private PluginProtos.CodeGeneratorResponse.File buildFile(ServiceContext context) {
    final String mustAcheFile = getClassPrefix() + getClassSuffix() + "Stub.mustache";
    String content = applyTemplate(mustAcheFile, context);
    return PluginProtos.CodeGeneratorResponse.File.newBuilder()
        .setName(constructAbsoluteFileName(context)).setContent(content).build();
}
 
示例7
@Override
public List<PluginProtos.CodeGeneratorResponse.File> generateFiles(PluginProtos.CodeGeneratorRequest request) throws GeneratorException {
    final ProtoTypeMap typeMap = ProtoTypeMap.of(request.getProtoFileList());

    List<FileDescriptorProto> protosToGenerate = request.getProtoFileList().stream()
            .filter(protoFile -> request.getFileToGenerateList().contains(protoFile.getName()))
            .collect(Collectors.toList());

    List<ServiceContext> services = findServices(protosToGenerate, typeMap);
    return generateFiles(services);
}
 
示例8
private PluginProtos.CodeGeneratorResponse.File buildFile(ServiceContext context) {
    String content = applyTemplate(getClassPrefix() + "Stub.mustache", context);
    return PluginProtos.CodeGeneratorResponse.File
            .newBuilder()
            .setName(absoluteFileName(context))
            .setContent(content)
            .build();
}
 
示例9
@Override
public List<PluginProtos.CodeGeneratorResponse.File> generateFiles(PluginProtos.CodeGeneratorRequest request) throws GeneratorException {
    try {
        return Arrays.asList(
                makeFile("descriptor_dump", request.toByteArray()),
                makeFile("descriptor_dump.json", JsonFormat.printer().print(request))
        );
    } catch (InvalidProtocolBufferException e) {
        throw new GeneratorException(e.getMessage());
    }
}
 
示例10
@Override
public List<PluginProtos.CodeGeneratorResponse.File> generateFiles(PluginProtos.CodeGeneratorRequest request) throws GeneratorException {
    final ProtoTypeMap protoTypeMap = ProtoTypeMap.of(request.getProtoFileList());
    List<PluginProtos.CodeGeneratorResponse.File> files = new ArrayList<>();

    for (DescriptorProtos.FileDescriptorProto protoFile : request.getProtoFileList()) {
        if (request.getFileToGenerateList().contains(protoFile.getName())) {
            for (ServiceContext ctx : extractContext(protoTypeMap, protoFile)) {
                files.add(buildFile(ctx));
            }
        }
    }

    return files;
}
 
示例11
/**
 * Creates a protobuf file message from a given name and content.
 * @param fileName The name of the file to generate.
 * @param fileContent The content of the generated file.
 * @return The protobuf file.
 */
protected PluginProtos.CodeGeneratorResponse.File makeFile(String fileName, String fileContent) {
    return PluginProtos.CodeGeneratorResponse.File
            .newBuilder()
            .setName(fileName)
            .setContent(fileContent)
            .build();
}
 
示例12
/**
 * Creates a protobuf file message from a given name and content.
 * @param fileName The name of the file to generate.
 * @param fileContent The content of the generated file.
 * @return The protobuf file.
 */
protected PluginProtos.CodeGeneratorResponse.File makeFile(String fileName, byte[] fileContent) {
    return PluginProtos.CodeGeneratorResponse.File
            .newBuilder()
            .setName(fileName)
            .setContentBytes(ByteString.copyFrom(fileContent))
            .build();
}
 
示例13
@BeforeClass
public static void buildProtoTypeMap() throws IOException {
    // Dump file generated during the maven generate-test-sources phase
    final String dumpPath = "target/generated-test-sources/protobuf/dump/descriptor_dump";

    byte[] generatorRequestBytes = ByteStreams.toByteArray(new FileInputStream(new File(dumpPath)));
    PluginProtos.CodeGeneratorRequest request = PluginProtos.CodeGeneratorRequest.parseFrom(
            generatorRequestBytes, ExtensionRegistry.newInstance());
    List<DescriptorProtos.FileDescriptorProto> fileProtos = request.getProtoFileList();
    protoTypeMap =  ProtoTypeMap.of(fileProtos);
}
 
示例14
private List<PluginProtos.CodeGeneratorResponse.File> generateFiles(List<ServiceContext> services) {
    return services.stream()
            .map(this::buildFile)
            .collect(Collectors.toList());
}
 
示例15
private List<PluginProtos.CodeGeneratorResponse.File> generateFiles(List<ServiceContext> services) {
    return services.stream()
            .map(this::buildFile)
            .collect(Collectors.toList());
}
 
示例16
private PluginProtos.CodeGeneratorResponse.File buildFile(ServiceContext context) {
    return makeFile(absoluteFileName(context), applyTemplate("Jdk8Stub.mustache", context));
}
 
示例17
/**
 * Processes a generator request into a set of files to output.
 *
 * @deprecated use {@link #generateFiles(PluginProtos.CodeGeneratorRequest)} and return a List instead of a Stream.
 * @param request The raw generator request from protoc.
 * @return The completed files to write out.
 */
@Deprecated()
public Stream<PluginProtos.CodeGeneratorResponse.File> generate(PluginProtos.CodeGeneratorRequest request) throws GeneratorException {
    return Stream.empty();
}
 
示例18
/**
 * Processes a generator request into a set of files to output.
 *
 * @param request The raw generator request from protoc.
 * @return The completed files to write out.
 */
public List<PluginProtos.CodeGeneratorResponse.File> generateFiles(PluginProtos.CodeGeneratorRequest request) throws GeneratorException {
    return Collections.emptyList();
}