Skip to content

Commit 00c1eb1

Browse files
committed
feat(gapic-generator-java): Cause a noop when no services are found
1 parent 5f17e62 commit 00c1eb1

File tree

5 files changed

+29
-7
lines changed

5 files changed

+29
-7
lines changed

gapic-generator-java/src/main/java/com/google/api/generator/Main.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package com.google.api.generator;
1616

1717
import com.google.api.generator.gapic.Generator;
18+
import com.google.api.generator.gapic.protoparser.NoServicesFoundException;
1819
import com.google.protobuf.ExtensionRegistry;
1920
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorRequest;
2021
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse;
@@ -25,7 +26,12 @@ public static void main(String[] args) throws IOException {
2526
ExtensionRegistry registry = ExtensionRegistry.newInstance();
2627
ProtoRegistry.registerAllExtensions(registry);
2728
CodeGeneratorRequest request = CodeGeneratorRequest.parseFrom(System.in, registry);
28-
CodeGeneratorResponse response = Generator.generateGapic(request);
29-
response.writeTo(System.out);
29+
try {
30+
CodeGeneratorResponse response = Generator.generateGapic(request);
31+
response.writeTo(System.out);
32+
} catch (NoServicesFoundException ex) {
33+
// If no services are found in the protos we will no-op
34+
System.err.println("No services found to generate");
35+
}
3036
}
3137
}

gapic-generator-java/src/main/java/com/google/api/generator/gapic/Generator.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,22 @@
1414

1515
package com.google.api.generator.gapic;
1616

17+
import com.google.api.gax.rpc.StatusCode.Code;
1718
import com.google.api.generator.gapic.composer.Composer;
1819
import com.google.api.generator.gapic.model.GapicClass;
1920
import com.google.api.generator.gapic.model.GapicContext;
2021
import com.google.api.generator.gapic.model.GapicPackageInfo;
2122
import com.google.api.generator.gapic.model.ReflectConfig;
23+
import com.google.api.generator.gapic.protoparser.NoServicesFoundException;
2224
import com.google.api.generator.gapic.protoparser.Parser;
2325
import com.google.api.generator.gapic.protowriter.Writer;
2426
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorRequest;
2527
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse;
2628
import java.util.List;
2729

2830
public class Generator {
29-
public static CodeGeneratorResponse generateGapic(CodeGeneratorRequest request) {
31+
public static CodeGeneratorResponse generateGapic(CodeGeneratorRequest request)
32+
throws NoServicesFoundException {
3033
GapicContext context = Parser.parse(request);
3134
List<GapicClass> clazzes = Composer.composeServiceClasses(context);
3235
GapicPackageInfo packageInfo = Composer.composePackageInfo(context);

gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/ClientLibraryPackageInfoComposer.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import com.google.api.generator.gapic.model.GapicPackageInfo;
3030
import com.google.api.generator.gapic.model.Sample;
3131
import com.google.api.generator.gapic.model.Service;
32-
import com.google.common.base.Preconditions;
32+
import com.google.api.generator.gapic.protoparser.NoServicesFoundException;
3333
import com.google.common.base.Strings;
3434
import javax.annotation.Generated;
3535

@@ -44,7 +44,9 @@ public class ClientLibraryPackageInfoComposer {
4444
private static final String SERVICE_DESCRIPTION_HEADER_PATTERN = "Service Description: %s";
4545

4646
public static GapicPackageInfo generatePackageInfo(GapicContext context) {
47-
Preconditions.checkState(!context.services().isEmpty(), "No services found to generate");
47+
if (context.services().isEmpty()) {
48+
throw new NoServicesFoundException("No services found to generate");
49+
}
4850
// Pick some service's package, as we assume they are all the same.
4951
String libraryPakkage = context.services().get(0).pakkage();
5052

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.google.api.generator.gapic.protoparser;
2+
3+
public class NoServicesFoundException extends IllegalStateException {
4+
5+
public NoServicesFoundException() {}
6+
public NoServicesFoundException(String message) {
7+
super(message);
8+
}
9+
}

gapic-generator-java/src/main/java/com/google/api/generator/gapic/protoparser/Parser.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public GapicParserException(String errorMessage) {
115115
}
116116
}
117117

118-
public static GapicContext parse(CodeGeneratorRequest request) {
118+
public static GapicContext parse(CodeGeneratorRequest request) throws NoServicesFoundException {
119119
Optional<String> gapicYamlConfigPathOpt =
120120
PluginArgumentParser.parseGapicYamlConfigPath(request);
121121
Optional<List<GapicBatchingSettings>> batchingSettingsOpt =
@@ -175,7 +175,9 @@ public static GapicContext parse(CodeGeneratorRequest request) {
175175
mixinServices,
176176
transport);
177177

178-
Preconditions.checkState(!services.isEmpty(), "No services found to generate");
178+
if (services.isEmpty()) {
179+
throw new NoServicesFoundException();
180+
}
179181

180182
// TODO(vam-google): Figure out whether we should keep this allowlist or bring
181183
// back the unused resource names for all APIs.

0 commit comments

Comments
 (0)