-
Notifications
You must be signed in to change notification settings - Fork 69
[composer][samplecode]Implement Setting Class Header Comment Sample Code #487
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
42 commits
Select commit
Hold shift + click to select a range
2cb0d9f
draft version
summer-ji-eng 2bf804e
Add unit test for long line
summer-ji-eng b0c6b47
Implement formatter for code snippet
summer-ji-eng 94bd9ed
Add license and comment
summer-ji-eng 209ec9d
Merge branch 'master' into sample_code_formatter
summer-ji-eng 7176a85
Use string as input parameters
summer-ji-eng 62da37b
remove unused dep
summer-ji-eng c9213eb
Merge branch 'master' into sample_code_formatter
summer-ji-eng 07d9d21
draft version
summer-ji-eng 55c7604
Add unit test for long line
summer-ji-eng 9f1b49d
Implement formatter for code snippet
summer-ji-eng 3126e5f
Add license and comment
summer-ji-eng 308e6cf
Use string as input parameters
summer-ji-eng e2f99ab
remove unused dep
summer-ji-eng e2d2a40
move utils to composer/samplecode
summer-ji-eng 875794f
Merge branch 'sample_code_formatter' of github.com:googleapis/gapic-g…
summer-ji-eng 40977cf
remove utils files
summer-ji-eng ad842eb
revert BUILD in test
summer-ji-eng 4426dd2
Merge branch 'master' into sample_code_formatter
summer-ji-eng 2cfa86f
Merge branch 'master' into sample_code_formatter
summer-ji-eng 222c910
Add comment and rephrase static string
summer-ji-eng 7ca32d8
simplify the wrapper
summer-ji-eng 4f91c12
Merge branch 'master' into sample_code_formatter
summer-ji-eng ef1a81d
Merge branch 'master' into sample_code_formatter
summer-ji-eng 67a66e5
compose sample code for settings and stub settings
summer-ji-eng dadd3b8
Pick first pure unary method
summer-ji-eng 219fca1
resolve merge master
summer-ji-eng efcd9d8
Add license for new file
summer-ji-eng dd1c881
pick first unary rpc for setting class
summer-ji-eng cbeabad
Add comment for method pick
summer-ji-eng 5b602b5
Merge branch 'master' into setting_comment_sample_code_1
summer-ji-eng 38bd06c
Update code mark in sample code
summer-ji-eng be274d6
move out from samplecode
summer-ji-eng 1798c01
Merge branch 'master' into setting_comment_sample_code_1
summer-ji-eng 95019b0
Add comments in composing sample code
summer-ji-eng 801939a
Merge branch 'setting_comment_sample_code_1' of github.com:googleapis…
summer-ji-eng 210f606
Merge branch 'master' into setting_comment_sample_code_1
summer-ji-eng 06cb0f8
replace reduce by filter
summer-ji-eng 2c111d1
simplify the orElse
summer-ji-eng 39749d1
Merge branch 'master' into setting_comment_sample_code_1
summer-ji-eng 933db28
Merge branch 'master' into setting_comment_sample_code_1
summer-ji-eng 39457ef
Merge branch 'master' into setting_comment_sample_code_1
summer-ji-eng File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
163 changes: 163 additions & 0 deletions
163
src/main/java/com/google/api/generator/gapic/composer/SettingsSampleCodeComposer.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,163 @@ | ||
| // Copyright 2020 Google LLC | ||
| // | ||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||
| // you may not use this file except in compliance with the License. | ||
| // You may obtain a copy of the License at | ||
| // | ||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||
| // | ||
| // Unless required by applicable law or agreed to in writing, software | ||
| // distributed under the License 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 com.google.api.generator.gapic.composer; | ||
|
|
||
| import com.google.api.generator.engine.ast.AssignmentExpr; | ||
| import com.google.api.generator.engine.ast.ConcreteReference; | ||
| import com.google.api.generator.engine.ast.Expr; | ||
| import com.google.api.generator.engine.ast.ExprStatement; | ||
| import com.google.api.generator.engine.ast.MethodInvocationExpr; | ||
| import com.google.api.generator.engine.ast.PrimitiveValue; | ||
| import com.google.api.generator.engine.ast.Statement; | ||
| import com.google.api.generator.engine.ast.TypeNode; | ||
| import com.google.api.generator.engine.ast.ValueExpr; | ||
| import com.google.api.generator.engine.ast.VaporReference; | ||
| import com.google.api.generator.engine.ast.Variable; | ||
| import com.google.api.generator.engine.ast.VariableExpr; | ||
| import com.google.api.generator.engine.writer.JavaWriterVisitor; | ||
| import com.google.api.generator.gapic.composer.samplecode.SampleCodeJavaFormatter; | ||
| import com.google.api.generator.gapic.model.Method; | ||
| import com.google.api.generator.gapic.utils.JavaStyle; | ||
| import java.time.Duration; | ||
| import java.util.Arrays; | ||
| import java.util.List; | ||
| import java.util.stream.Collectors; | ||
|
|
||
| public final class SettingsSampleCodeComposer { | ||
summer-ji-eng marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| // TODO(summerji): Add unit tests | ||
|
|
||
| private static final String BUILDER_NAME_PATTERN = "%sBuilder"; | ||
| private static final String STUB = "Stub"; | ||
| private static final String EMPTY_STRING = ""; | ||
|
|
||
| public static String composeSettingClassHeaderSampleCode(Method method, TypeNode classType) { | ||
| // Initialize services settingsBuilder with newBuilder() | ||
| // e.g. FoobarSettings.Builder foobarSettingsBuilder = FoobarSettings.newBuilder(); | ||
| String className = classType.reference().name(); | ||
summer-ji-eng marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| TypeNode builderType = | ||
| TypeNode.withReference( | ||
| VaporReference.builder() | ||
| .setEnclosingClassNames(classType.reference().name()) | ||
| .setName("Builder") | ||
| .setPakkage(classType.reference().pakkage()) | ||
| .build()); | ||
| Variable builderVar = | ||
| Variable.builder() | ||
| .setName(getClassSettingsBuilderName(className)) | ||
| .setType(builderType) | ||
| .build(); | ||
| VariableExpr localSettingsVarExpr = VariableExpr.withVariable(builderVar); | ||
| Expr settingsBuilderExpr = | ||
| MethodInvocationExpr.builder() | ||
| .setStaticReferenceType(classType) | ||
| .setMethodName("newBuilder") | ||
| .setReturnType(builderType) | ||
| .build(); | ||
| Expr initLocalSettingsExpr = | ||
| AssignmentExpr.builder() | ||
| .setVariableExpr(localSettingsVarExpr.toBuilder().setIsDecl(true).build()) | ||
| .setValueExpr(settingsBuilderExpr) | ||
| .build(); | ||
|
|
||
| // Builder with set value method | ||
| // e.g foobarSettingBuilder.fooSetting().setRetrySettings( | ||
| // echoSettingsBuilder.echoSettings().getRetrySettings().toBuilder().setTotalTimeout(Duration.ofSeconds(30)).build()); | ||
| MethodInvocationExpr retrySettingsMethodExpr = | ||
| MethodInvocationExpr.builder() | ||
| .setExprReferenceExpr(localSettingsVarExpr) | ||
| .setMethodName(JavaStyle.toLowerCamelCase(String.format("%sSettings", method.name()))) | ||
| .setReturnType(method.outputType()) | ||
| .build(); | ||
| MethodInvocationExpr timeoutArExpr = | ||
| MethodInvocationExpr.builder() | ||
| .setStaticReferenceType( | ||
| TypeNode.withReference(ConcreteReference.withClazz(Duration.class))) | ||
| .setMethodName("ofSeconds") | ||
| .setArguments( | ||
| ValueExpr.withValue( | ||
| PrimitiveValue.builder().setType(TypeNode.INT).setValue("30").build())) | ||
| .build(); | ||
| MethodInvocationExpr timeoutBuilderMethodExpr = | ||
| MethodInvocationExpr.builder() | ||
| .setExprReferenceExpr( | ||
| MethodInvocationExpr.builder() | ||
| .setExprReferenceExpr( | ||
| MethodInvocationExpr.builder() | ||
| .setExprReferenceExpr(retrySettingsMethodExpr) | ||
| .setMethodName("getRetrySettings") | ||
| .build()) | ||
| .setMethodName("toBuilder") | ||
| .build()) | ||
| .setMethodName("setTotalTimeout") | ||
| .setArguments(Arrays.asList(timeoutArExpr)) | ||
| .build(); | ||
| MethodInvocationExpr retrySettingsArgExpr = | ||
| MethodInvocationExpr.builder() | ||
| .setExprReferenceExpr(timeoutBuilderMethodExpr) | ||
| .setMethodName("build") | ||
| .build(); | ||
| MethodInvocationExpr settingBuilderMethodExpr = | ||
| MethodInvocationExpr.builder() | ||
| .setExprReferenceExpr(retrySettingsMethodExpr) | ||
| .setMethodName("setRetrySettings") | ||
| .setArguments(Arrays.asList(retrySettingsArgExpr)) | ||
| .build(); | ||
|
|
||
| // Initialize clientSetting with builder() method. | ||
| // e.g: Foobar<Stub>Settings foobarSettings = foobarSettingsBuilder.build(); | ||
| VariableExpr settingsVarExpr = | ||
| VariableExpr.withVariable( | ||
| Variable.builder() | ||
| .setType(classType) | ||
| .setName(getServiceSettingsName(className)) | ||
| .build()); | ||
| AssignmentExpr settingBuildAssignmentExpr = | ||
| AssignmentExpr.builder() | ||
| .setVariableExpr(settingsVarExpr.toBuilder().setIsDecl(true).build()) | ||
| .setValueExpr( | ||
| MethodInvocationExpr.builder() | ||
| .setExprReferenceExpr(localSettingsVarExpr) | ||
| .setMethodName("build") | ||
| .setReturnType(classType) | ||
| .build()) | ||
| .build(); | ||
|
|
||
| List<Statement> statements = | ||
| Arrays.asList(initLocalSettingsExpr, settingBuilderMethodExpr, settingBuildAssignmentExpr) | ||
| .stream() | ||
| .map(e -> ExprStatement.withExpr(e)) | ||
| .collect(Collectors.toList()); | ||
| return SampleCodeJavaFormatter.format(writeStatements(statements)); | ||
| } | ||
|
|
||
| private static String getServiceSettingsName(String className) { | ||
| return JavaStyle.toLowerCamelCase(className).replace(STUB, EMPTY_STRING); | ||
| } | ||
|
|
||
| private static String getClassSettingsBuilderName(String className) { | ||
| return JavaStyle.toLowerCamelCase( | ||
| String.format(BUILDER_NAME_PATTERN, JavaStyle.toLowerCamelCase(className))) | ||
| .replace(STUB, EMPTY_STRING); | ||
| } | ||
|
|
||
| // TODO(summerji): Refactor to use writeSampleCode method after PR#499 merged. | ||
| private static String writeStatements(List<Statement> statements) { | ||
summer-ji-eng marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| JavaWriterVisitor visitor = new JavaWriterVisitor(); | ||
| for (Statement statement : statements) { | ||
| statement.accept(visitor); | ||
| } | ||
| return visitor.write(); | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.