diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/paginators/PaginatorsClassSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/paginators/PaginatorsClassSpec.java index a88d363f3e52..8312100b6de8 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/paginators/PaginatorsClassSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/paginators/PaginatorsClassSpec.java @@ -63,6 +63,9 @@ public PaginatorsClassSpec(IntermediateModel model, String c2jOperationName, Pag this.poetExtensions = new PoetExtension(model); this.typeProvider = new TypeProvider(model); this.operationModel = model.getOperation(c2jOperationName); + if (operationModel == null) { + throw new IllegalArgumentException("The service model does not model an operation '" + c2jOperationName + "'"); + } this.paginationDocs = new PaginationDocs(model, operationModel, paginatorDefinition); } diff --git a/codegen/src/test/java/software/amazon/awssdk/codegen/poet/paginators/PaginatorsClassSpecTest.java b/codegen/src/test/java/software/amazon/awssdk/codegen/poet/paginators/PaginatorsClassSpecTest.java new file mode 100644 index 000000000000..9aefa55086bd --- /dev/null +++ b/codegen/src/test/java/software/amazon/awssdk/codegen/poet/paginators/PaginatorsClassSpecTest.java @@ -0,0 +1,52 @@ +/* + * Copyright 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. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file 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. + */ + +package software.amazon.awssdk.codegen.poet.paginators; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.TypeSpec; +import org.junit.jupiter.api.Test; +import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; +import software.amazon.awssdk.codegen.model.service.PaginatorDefinition; +import software.amazon.awssdk.codegen.poet.ClientTestModels; + +public class PaginatorsClassSpecTest { + @Test + public void constructor_unknownOperationName_throws() { + assertThatThrownBy(() -> new TestPaginatorSpec(ClientTestModels.awsJsonServiceModels(), + "~~DoesNotExist", + new PaginatorDefinition())) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("The service model does not model an operation '~~DoesNotExist'"); + } + + private static class TestPaginatorSpec extends PaginatorsClassSpec { + TestPaginatorSpec(IntermediateModel model, String c2jOperationName, PaginatorDefinition paginatorDefinition) { + super(model, c2jOperationName, paginatorDefinition); + } + + @Override + public TypeSpec poetSpec() { + throw new UnsupportedOperationException(); + } + + @Override + public ClassName className() { + throw new UnsupportedOperationException(); + } + } +}