From 6b436d44fd327bd03354fc779eccfb4af6b32672 Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Wed, 13 Oct 2021 12:02:26 -0700 Subject: [PATCH 001/168] fix: class "prettyprint" not "pretty-print" --- .../src/main/java/com/microsoft/util/YamlUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java index dad67134..ac53be5c 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java @@ -28,7 +28,7 @@ public static String cleanupHtml(String text) { return text; } return text.replaceAll("
([^<]+)
","$1") - .replaceAll("
", "
")
+                .replaceAll("
", "
")
                 .replaceAll("`([^`]+)`", "$1")
                 .replaceAll("\\[([^]]+)]\\(([^)]+)\\)", "$1")
                 .replaceAll("\\[([^]]+)]\\[([^]]+)\\]", "$1")

From 12ec6ccedd08544ac03ff66abbd88c1e9a855d5a Mon Sep 17 00:00:00 2001
From: Emily Ball 
Date: Wed, 13 Oct 2021 12:09:04 -0700
Subject: [PATCH 002/168] chore: update prettyprint class

---
 ...ft.samples.google.ProductSearchSettings.yml |  2 +-
 ...m.microsoft.samples.google.SpeechClient.yml | 18 +++++++++---------
 ...microsoft.samples.google.SpeechSettings.yml |  2 +-
 ...soft.samples.google.v1beta.SpeechClient.yml | 18 +++++++++---------
 ...t.samples.google.v1p1alpha.SpeechClient.yml | 18 +++++++++---------
 .../com.microsoft.samples.yml                  |  2 +-
 6 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml
index 06c92b5d..e59c4b09 100644
--- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml
+++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml
@@ -45,7 +45,7 @@ items:
   fullName: "com.microsoft.samples.google.ProductSearchSettings"
   type: "Class"
   package: "com.microsoft.samples.google"
-  summary: "Settings class to configure an instance of ProductSearchClient.\n\n 

The default instance has everything set to sensible defaults:\n\n

    \n
  • The default service address (vision.googleapis.com) and default port (443) are used.\n
  • Credentials are acquired automatically through Application Default Credentials.\n
  • Retries are configured for idempotent methods but not for non-idempotent methods.\n
\n\n

The builder of this class is recursive, so contained classes are themselves builders. When\n build() is called, the tree of builders is called to create the complete settings object.\n\n

For example, to set the total timeout of createProductSet to 30 seconds:\n\n

\n ProductSearchSettings.Builder productSearchSettingsBuilder = ProductSearchSettings.newBuilder();\n productSearchSettingsBuilder\n     .createProductSetSettings()\n     .setRetrySettings(\n         productSearchSettingsBuilder\n             .createProductSetSettings()\n             .getRetrySettings()\n             .toBuilder()\n             .setTotalTimeout(Duration.ofSeconds(30))\n             .build());\n ProductSearchSettings productSearchSettings = productSearchSettingsBuilder.build();\n 
" + summary: "Settings class to configure an instance of ProductSearchClient.\n\n

The default instance has everything set to sensible defaults:\n\n

    \n
  • The default service address (vision.googleapis.com) and default port (443) are used.\n
  • Credentials are acquired automatically through Application Default Credentials.\n
  • Retries are configured for idempotent methods but not for non-idempotent methods.\n
\n\n

The builder of this class is recursive, so contained classes are themselves builders. When\n build() is called, the tree of builders is called to create the complete settings object.\n\n

For example, to set the total timeout of createProductSet to 30 seconds:\n\n

\n ProductSearchSettings.Builder productSearchSettingsBuilder = ProductSearchSettings.newBuilder();\n productSearchSettingsBuilder\n     .createProductSetSettings()\n     .setRetrySettings(\n         productSearchSettingsBuilder\n             .createProductSetSettings()\n             .getRetrySettings()\n             .toBuilder()\n             .setTotalTimeout(Duration.ofSeconds(30))\n             .build());\n ProductSearchSettings productSearchSettings = productSearchSettingsBuilder.build();\n 
" syntax: content: "public class ProductSearchSettings extends ClientSettings" inheritance: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml index 8b438158..f8965b77 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml @@ -33,7 +33,7 @@ items: fullName: "com.microsoft.samples.google.SpeechClient" type: "Class" package: "com.microsoft.samples.google" - summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." + summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." syntax: content: "public class SpeechClient implements BackgroundResource" inheritance: @@ -265,7 +265,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(LongRunningRecognizeRequest request)" parameters: @@ -285,7 +285,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -308,7 +308,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.longRunningRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable longRunningRecognizeCallable()" return: @@ -324,7 +324,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.longRunningRecognizeOperationCallable*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final OperationCallable longRunningRecognizeOperationCallable()" return: @@ -340,7 +340,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -363,7 +363,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognizeRequest request)" parameters: @@ -383,7 +383,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.recognizeCallable*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable recognizeCallable()" return: @@ -425,7 +425,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.streamingRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" + summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" syntax: content: "public final BidiStreamingCallable streamingRecognizeCallable()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml index d2e8047b..72220248 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml @@ -28,7 +28,7 @@ items: fullName: "com.microsoft.samples.google.SpeechSettings" type: "Class" package: "com.microsoft.samples.google" - summary: "Settings class to configure an instance of SpeechClient.\n\n

The default instance has everything set to sensible defaults:\n\n

    \n
  • The default service address (speech.googleapis.com) and default port (443) are used.\n
  • Credentials are acquired automatically through Application Default Credentials.\n
  • Retries are configured for idempotent methods but not for non-idempotent methods.\n
\n\n

The builder of this class is recursive, so contained classes are themselves builders. When\n build() is called, the tree of builders is called to create the complete settings object.\n\n

For example, to set the total timeout of recognize to 30 seconds:\n\n

\n SpeechSettings.Builder speechSettingsBuilder = SpeechSettings.newBuilder();\n speechSettingsBuilder\n     .recognizeSettings()\n     .setRetrySettings(\n         speechSettingsBuilder\n             .recognizeSettings()\n             .getRetrySettings()\n             .toBuilder()\n             .setTotalTimeout(Duration.ofSeconds(30))\n             .build());\n SpeechSettings speechSettings = speechSettingsBuilder.build();\n 
" + summary: "Settings class to configure an instance of SpeechClient.\n\n

The default instance has everything set to sensible defaults:\n\n

    \n
  • The default service address (speech.googleapis.com) and default port (443) are used.\n
  • Credentials are acquired automatically through Application Default Credentials.\n
  • Retries are configured for idempotent methods but not for non-idempotent methods.\n
\n\n

The builder of this class is recursive, so contained classes are themselves builders. When\n build() is called, the tree of builders is called to create the complete settings object.\n\n

For example, to set the total timeout of recognize to 30 seconds:\n\n

\n SpeechSettings.Builder speechSettingsBuilder = SpeechSettings.newBuilder();\n speechSettingsBuilder\n     .recognizeSettings()\n     .setRetrySettings(\n         speechSettingsBuilder\n             .recognizeSettings()\n             .getRetrySettings()\n             .toBuilder()\n             .setTotalTimeout(Duration.ofSeconds(30))\n             .build());\n SpeechSettings speechSettings = speechSettingsBuilder.build();\n 
" syntax: content: "public class SpeechSettings extends ClientSettings" inheritance: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml index 38c3a709..6839651f 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml @@ -33,7 +33,7 @@ items: fullName: "com.microsoft.samples.google.v1beta.SpeechClient" type: "Class" package: "com.microsoft.samples.google.v1beta" - summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." + summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." syntax: content: "public class SpeechClient implements BackgroundResource" inheritance: @@ -265,7 +265,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(LongRunningRecognizeRequest request)" parameters: @@ -285,7 +285,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -308,7 +308,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.longRunningRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable longRunningRecognizeCallable()" return: @@ -324,7 +324,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.longRunningRecognizeOperationCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final OperationCallable longRunningRecognizeOperationCallable()" return: @@ -340,7 +340,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -363,7 +363,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognizeRequest request)" parameters: @@ -383,7 +383,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.recognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable recognizeCallable()" return: @@ -425,7 +425,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.streamingRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" + summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" syntax: content: "public final BidiStreamingCallable streamingRecognizeCallable()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml index 0a5497ec..e03c37e9 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml @@ -33,7 +33,7 @@ items: fullName: "com.microsoft.samples.google.v1p1alpha.SpeechClient" type: "Class" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." + summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." syntax: content: "public class SpeechClient implements BackgroundResource" inheritance: @@ -265,7 +265,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(LongRunningRecognizeRequest request)" parameters: @@ -285,7 +285,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -308,7 +308,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.longRunningRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable longRunningRecognizeCallable()" return: @@ -324,7 +324,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.longRunningRecognizeOperationCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final OperationCallable longRunningRecognizeOperationCallable()" return: @@ -340,7 +340,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -363,7 +363,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognizeRequest request)" parameters: @@ -383,7 +383,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.recognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable recognizeCallable()" return: @@ -425,7 +425,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.streamingRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" + summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" syntax: content: "public final BidiStreamingCallable streamingRecognizeCallable()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml index cf863b10..bd34b118 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml @@ -16,7 +16,7 @@ items: nameWithType: "com.microsoft.samples" fullName: "com.microsoft.samples" type: "Namespace" - summary: "The interfaces provided are listed below, along with usage samples.\n\n

SpeechClient

\n\n

Service Description: Service that implements Google Cloud Speech API.\n\n

Sample for SpeechClient:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

AdaptationClient

\n\n

Service Description: Service that implements Google Cloud Speech Adaptation API.\n\n

Sample for AdaptationClient:\n\n

\n try (AdaptationClient adaptationClient = AdaptationClient.create()) {\n   LocationName parent = LocationName.of(\"[PROJECT]\", \"[LOCATION]\");\n   PhraseSet phraseSet = PhraseSet.newBuilder().build();\n   String phraseSetId = \"phraseSetId959902180\";\n   PhraseSet response = adaptationClient.createPhraseSet(parent, phraseSet, phraseSetId);\n }\n 
" + summary: "The interfaces provided are listed below, along with usage samples.\n\n

SpeechClient

\n\n

Service Description: Service that implements Google Cloud Speech API.\n\n

Sample for SpeechClient:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

AdaptationClient

\n\n

Service Description: Service that implements Google Cloud Speech Adaptation API.\n\n

Sample for AdaptationClient:\n\n

\n try (AdaptationClient adaptationClient = AdaptationClient.create()) {\n   LocationName parent = LocationName.of(\"[PROJECT]\", \"[LOCATION]\");\n   PhraseSet phraseSet = PhraseSet.newBuilder().build();\n   String phraseSetId = \"phraseSetId959902180\";\n   PhraseSet response = adaptationClient.createPhraseSet(parent, phraseSet, phraseSetId);\n }\n 
" syntax: content: "package com.microsoft.samples" references: From 5732491da14c88c0afaaacdc9af761f9ccdbcb9f Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Wed, 13 Oct 2021 12:18:55 -0700 Subject: [PATCH 003/168] fix: update test --- .../src/test/java/com/microsoft/util/YamlUtilTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java index 7b290f56..3484ccbf 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java @@ -72,7 +72,7 @@ public void cleanupHtmlRemoveLonePreTagsTest() { @Test public void cleanupHtmlIncludePrettyPrintTest() { String expectedActual = "
";
-        String expectedResult = "
";
+        String expectedResult = "
";
         String random = UUID.randomUUID().toString();
 
         assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual));

From 137f1a1b186b09bd78da99a4c6a384390a122f33 Mon Sep 17 00:00:00 2001
From: Emily Ball 
Date: Wed, 13 Oct 2021 12:29:08 -0700
Subject: [PATCH 004/168] chore: update test

---
 .../src/test/java/com/microsoft/util/YamlUtilTest.java          | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java
index 3484ccbf..ab0fe04a 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java
@@ -79,7 +79,7 @@ public void cleanupHtmlIncludePrettyPrintTest() {
         assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random));
         assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual));
         assertNotEquals(expectedResult, YamlUtil.cleanupHtml("
" + random + ""));
-        assertFalse(YamlUtil.cleanupHtml("
" + random + "").contains("class=\"pretty-print\""));
+        assertFalse(YamlUtil.cleanupHtml("
" + random + "").contains("class=\"prettyprint lang-java\""));
     }
 
     @Test

From 061140eacdf4a095e52e1ce53c7262998b697fb7 Mon Sep 17 00:00:00 2001
From: WhiteSource Renovate 
Date: Wed, 20 Oct 2021 05:03:02 +0200
Subject: [PATCH 005/168] chore(deps): update dependency
 com.google.cloud:google-cloud-speech to v2.1.2 (#77)

---
 third_party/docfx-doclet-143274/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml
index 4d1f749c..2816d740 100644
--- a/third_party/docfx-doclet-143274/pom.xml
+++ b/third_party/docfx-doclet-143274/pom.xml
@@ -155,7 +155,7 @@
     
       com.google.cloud
       google-cloud-speech
-      2.1.1
+      2.1.2
       test
     
   

From 0fc551a29a7520cd24006758c6d76ee1d9e04e1b Mon Sep 17 00:00:00 2001
From: Emily Ball 
Date: Mon, 15 Nov 2021 11:49:21 -0800
Subject: [PATCH 006/168] feat: generate overview + include javaType (#80)

* feat: generate overvew + include javaType

* chore: fix class pretty-print should be on pre not code

* only include javaType if using in template
---
 .../com/microsoft/build/YmlFilesBuilder.java  | 39 ++++++++++++--
 .../java/com/microsoft/lookup/BaseLookup.java | 14 +++++
 .../microsoft/lookup/ClassItemsLookup.java    |  1 +
 .../com/microsoft/lookup/ClassLookup.java     |  2 +
 .../com/microsoft/lookup/PackageLookup.java   |  1 +
 .../main/java/com/microsoft/model/Guide.java  |  2 +-
 .../com/microsoft/model/MetadataFileItem.java | 11 +++-
 .../java/com/microsoft/model/TocContents.java |  1 +
 .../java/com/microsoft/util/YamlUtil.java     |  2 +-
 .../com/microsoft/lookup/BaseLookupTest.java  | 29 +++++++++++
 .../microsoft/model/MetadataFileItemTest.java |  8 +++
 .../com/microsoft/model/TocContentsTest.java  | 14 +++--
 .../java/com/microsoft/util/YamlUtilTest.java |  4 +-
 .../com.microsoft.samples.agreements.yml      |  1 +
 ...m.microsoft.samples.commentinheritance.yml |  1 +
 .../com.microsoft.samples.google.BetaApi.yml  |  1 +
 ...t.samples.google.ProductSearchSettings.yml |  2 +-
 ....microsoft.samples.google.SpeechClient.yml | 18 +++----
 ...icrosoft.samples.google.SpeechSettings.yml |  2 +-
 ...oft.samples.google.ValidationException.yml |  1 +
 ...oft.samples.google.v1beta.SpeechClient.yml | 18 +++----
 .../com.microsoft.samples.google.v1beta.yml   |  1 +
 ....samples.google.v1p1alpha.SpeechClient.yml | 18 +++----
 ...com.microsoft.samples.google.v1p1alpha.yml |  1 +
 .../com.microsoft.samples.google.yml          |  1 +
 .../com.microsoft.samples.offers.yml          |  1 +
 ....microsoft.samples.subpackage(package).yml |  1 +
 ...oft.samples.subpackage.CustomException.yml |  1 +
 .../com.microsoft.samples.yml                 |  3 +-
 .../expected-generated-files/overview.yml     | 51 +++++++++++++++++++
 .../expected-generated-files/toc.yml          |  2 +
 31 files changed, 209 insertions(+), 43 deletions(-)
 create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml

diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java
index 0733bb61..6a8ff1b2 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java
@@ -59,6 +59,8 @@ public YmlFilesBuilder(DocletEnvironment environment, String outputPath,
     }
 
     public boolean build() {
+        MetadataFile projectMetadataFile = new MetadataFile(outputPath,"overview.yml");;
+        List packageItems = new ArrayList<>();
         List packageMetadataFiles = new ArrayList<>();
         List classMetadataFiles = new ArrayList<>();
 
@@ -78,6 +80,7 @@ public boolean build() {
         }
 
         for (MetadataFile packageFile : packageMetadataFiles) {
+            packageItems.addAll(packageFile.getItems());
             String packageFileName = packageFile.getFileName();
             for (MetadataFile classFile : classMetadataFiles) {
                 String classFileName = classFile.getFileName();
@@ -88,10 +91,11 @@ public boolean build() {
                 }
             }
         }
-
+        buildProjectMetadataFile(packageItems, projectMetadataFile);
         populateUidValues(packageMetadataFiles, classMetadataFiles);
         updateExternalReferences(classMetadataFiles);
 
+        FileUtil.dumpToFile(projectMetadataFile);
         packageMetadataFiles.forEach(FileUtil::dumpToFile);
         classMetadataFiles.forEach(FileUtil::dumpToFile);
         FileUtil.dumpToFile(tocFile);
@@ -129,6 +133,30 @@ void buildFilesForInnerClasses(Element element, TocTypeMap tocTypeMap, List packageItems, MetadataFile projectMetadataFile) {
+        MetadataFileItem projectItem = new MetadataFileItem(LANGS, projectName);
+        projectItem.setNameWithType(projectName);
+        projectItem.setFullName(projectName);
+        projectItem.setType("Namespace");
+        projectItem.setJavaType("overview");
+
+        List children = new ArrayList<>();
+        List references = new ArrayList<>();
+        packageItems.stream().forEach(i ->  {
+            children.add(i.getUid());
+            MetadataFileItem refItem = new MetadataFileItem(i.getUid());
+            refItem.setName(i.getName());
+            refItem.setNameWithType(i.getNameWithType());
+            refItem.setFullName(i.getFullName());
+            references.add(refItem);
+        });
+
+        projectItem.getChildren().addAll(children);
+        projectMetadataFile.getReferences().addAll(references);
+        projectMetadataFile.getItems().add(projectItem);
+    }
+
     MetadataFile buildPackageMetadataFile(PackageElement packageElement) {
         String fileName = packageLookup.extractHref(packageElement);
         MetadataFile packageMetadataFile = new MetadataFile(outputPath, fileName);
@@ -159,10 +187,13 @@ MetadataFileItem buildClassReference(TypeElement classElement) {
     }
 
      void populateItemFields(MetadataFileItem item, BaseLookup lookup, T element) {
-        item.setName(lookup.extractName(element));
+        String name = lookup.extractName(element);
+        item.setName(name);
         item.setNameWithType(lookup.extractNameWithType(element));
         item.setFullName(lookup.extractFullName(element));
         item.setType(lookup.extractType(element));
+        String javatype = lookup.extractJavaType(element,name);
+        item.setJavaType(javatype);
         item.setSummary(lookup.extractSummary(element));
         item.setContent(lookup.extractContent(element));
     }
@@ -301,12 +332,14 @@ void addReferencesInfo(TypeElement classElement, MetadataFile classMetadataFile)
 
     MetadataFileItem buildMetadataFileItem(Element element) {
         return new MetadataFileItem(LANGS, classItemsLookup.extractUid(element)) {{
+            String name = classItemsLookup.extractName(element);
             setId(classItemsLookup.extractId(element));
             setParent(classItemsLookup.extractParent(element));
-            setName(classItemsLookup.extractName(element));
+            setName(name);
             setNameWithType(classItemsLookup.extractNameWithType(element));
             setFullName(classItemsLookup.extractFullName(element));
             setType(classItemsLookup.extractType(element));
+            setJavaType(classItemsLookup.extractJavaType(element, name));
             setPackageName(classItemsLookup.extractPackageName(element));
             setSummary(classItemsLookup.extractSummary(element));
         }};
diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java
index 7084318f..ff5cc116 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java
@@ -13,6 +13,8 @@
 
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.TypeElement;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -117,6 +119,18 @@ public String extractType(T key) {
         return resolve(key).getType();
     }
 
+    public String extractJavaType(T element, String name) {
+        if (element.getKind().name().equals(ElementKind.CLASS.name()) && name.contains("Exception")){
+            return "exception";
+        }
+        String javatype = element.getKind().name().toLowerCase().replaceAll("_","");
+
+        if (javatype.equals("package") || javatype.equals("overview") || javatype.equals("annotationtype")){
+            return javatype;
+        }
+        return null;
+    }
+
     public String extractContent(T key) {
         return resolve(key).getContent();
     }
diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java
index 009b67dd..7f2bf25c 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java
@@ -40,6 +40,7 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) {
             setHref(classQName + ".yml");
             setName(elementQName);
             setType(determineType(element));
+            setJavaType(extractJavaType(element, elementQName));
             setPackageName(packageName);
             setSummary(determineComment(element));
         }};
diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java
index 406a3d6f..6c907940 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java
@@ -13,6 +13,7 @@
 
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Modifier;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.type.TypeKind;
 import javax.lang.model.type.TypeMirror;
@@ -45,6 +46,7 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(TypeElement classElemen
         result.setNameWithType(classSNameWithGenericsSupport);
         result.setFullName(classQNameWithGenericsSupport);
         result.setType(determineType(classElement));
+        result.setJavaType(extractJavaType(classElement, classSNameWithGenericsSupport));
         result.setPackageName(packageName);
         result.setSummary(determineComment(classElement));
         result.setSuperclass(determineNestedSuperclass(classElement, result, inheritedMethods));
diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java
index ca9738fd..8de6714f 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java
@@ -26,6 +26,7 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(PackageElement packageE
         result.setNameWithType(qName);
         result.setFullName(qName);
         result.setType(determineType(packageElement));
+        result.setJavaType(extractJavaType(packageElement, qName));
         result.setSummary(determineComment(packageElement));
         result.setContent(determinePackageContent(packageElement));
         return result;
diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Guide.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Guide.java
index 22310a0d..55708f69 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Guide.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Guide.java
@@ -18,7 +18,7 @@
 
 //  for including guides with toc items
 // [items: [name: Overview,
-//          href: index.md,
+//          href: overview.html,
 //          name: Version history,
 //          href: history.md,
 //          name: name,
diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java
index 02e9be9c..a608148c 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java
@@ -9,7 +9,7 @@
 import java.util.List;
 
 @JsonPropertyOrder({"uid", "id", "parent", "children", "href", "langs", "isExternal", "name", "nameWithType",
-        "fullName", "overload", "overridden", "type", "package", "summary", "syntax", "inheritance", "implements", "exceptions",
+        "fullName", "overload", "overridden", "type", "javatype", "package", "summary", "syntax", "inheritance", "implements", "exceptions",
         "spec.java", "inheritedMembers", "status"})
 public class MetadataFileItem implements Comparable {
 
@@ -25,6 +25,7 @@ public class MetadataFileItem implements Comparable {
     private String overload;
     private String overridden;
     private String type;
+    private String javatype;
     @JsonProperty("package")
     private String packageName;
     private String summary;
@@ -140,10 +141,18 @@ public String getType() {
         return type;
     }
 
+    public String getJavaType() {
+        return javatype;
+    }
+
     public void setType(String type) {
         this.type = type;
     }
 
+    public void setJavaType(String javaType) {
+        this.javatype = javaType;
+    }
+
     public String getPackageName() {
         return packageName;
     }
diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java
index 4ee95c89..d55c027d 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java
@@ -37,6 +37,7 @@ public TocContents(String projectName, List items) {
     private void createTocContents(String projectName, List items) {
         List tocItems = new ArrayList<>();
         // combine guides and tocItems
+        tocItems.add(new Guide("Overview", "overview.html"));
         tocItems.add(new Guide("Version history", "history.md"));
         tocItems.addAll(items);
         // wrap guides + tocItems with product hierarchy
diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java
index ac53be5c..6995648e 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java
@@ -28,7 +28,7 @@ public static String cleanupHtml(String text) {
             return text;
         }
         return text.replaceAll("
([^<]+)
","$1") - .replaceAll("
", "
")
+                .replaceAll("
", "
")
                 .replaceAll("`([^`]+)`", "$1")
                 .replaceAll("\\[([^]]+)]\\(([^)]+)\\)", "$1")
                 .replaceAll("\\[([^]]+)]\\[([^]]+)\\]", "$1")
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java
index f41140fd..6301d56d 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java
@@ -15,10 +15,13 @@
 import org.mockito.junit.MockitoJUnitRunner;
 
 import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.PackageElement;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.util.Elements;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Set;
 
 import static org.junit.Assert.assertEquals;
@@ -38,6 +41,7 @@ public class BaseLookupTest {
     private LinkTree linkTree;
     private ReferenceTree referenceTree;
     private LiteralTree literalTree;
+    private TypeElement typeElement;
     private BaseLookup baseLookup;
     private ExtendedMetadataFileItem lastBuiltItem;
 
@@ -51,6 +55,7 @@ public void setup() {
         linkTree = Mockito.mock(LinkTree.class);
         referenceTree = Mockito.mock(ReferenceTree.class);
         literalTree = Mockito.mock(LiteralTree.class);
+        typeElement = Mockito.mock(TypeElement.class);
 
         baseLookup = new BaseLookup<>(environment) {
             @Override
@@ -217,6 +222,29 @@ public void testExtractMethods() {
         assertEquals("Wrong references", baseLookup.extractReferences(element), lastBuiltItem.getReferences());
     }
 
+    @Test
+    public void testExtractJavaType() {
+        String name = "com.microsoft.samples.google.ValidationException";
+        when(typeElement.getKind()).thenReturn(ElementKind.CLASS);
+        assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), "exception");
+
+        name = "com.microsoft.samples.google.BetaApi";
+        when(typeElement.getKind()).thenReturn(ElementKind.ANNOTATION_TYPE);
+        assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), "annotationtype");
+
+        name = "com.microsoft.samples.google";
+        when(typeElement.getKind()).thenReturn(ElementKind.PACKAGE);
+        assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), "package");
+
+        name = "com.microsoft.samples.google.SpeechClient";
+        when(typeElement.getKind()).thenReturn(ElementKind.CLASS);
+        assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), null);
+
+        name = "com.microsoft.samples.google.ValidationException.Supplier";
+        when(typeElement.getKind()).thenReturn(ElementKind.INTERFACE);
+        assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), null);
+    }
+
     private ExtendedMetadataFileItem buildExtendedMetadataFileItem(Element element) {
         ExtendedMetadataFileItem result = new ExtendedMetadataFileItem(String.valueOf(element));
         result.setPackageName("Some package name");
@@ -235,6 +263,7 @@ private ExtendedMetadataFileItem buildExtendedMetadataFileItem(Element element)
         result.setReturn(new Return("return type", "return desc"));
         result.setSummary("Some summary");
         result.setType("Some type");
+        result.setJavaType("Some type");
         result.setContent("Some content");
         result.setTypeParameters(Arrays.asList(new TypeParameter("type param id")));
         result.setSuperclass(Arrays.asList("Some "));
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/MetadataFileItemTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/MetadataFileItemTest.java
index 422fdca3..534be760 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/MetadataFileItemTest.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/MetadataFileItemTest.java
@@ -152,4 +152,12 @@ public void getIsExternal() {
         assertTrue("Wrong isExternal when true", (new MetadataFileItem("123", "name", true)).getIsExternal());
         assertNull("Wrong isExternal when false", (new MetadataFileItem("123", "name", false)).getIsExternal());
     }
+
+    @Test
+    public void setJavaType() {
+        MetadataFileItem metadataFileItem = new MetadataFileItem("123");
+        assertNull("Wrong javaType when null", metadataFileItem.getJavaType());
+        metadataFileItem.setJavaType("javaType");
+        assertEquals("Wrong javaType when set","javaType", metadataFileItem.getJavaType());
+    }
 }
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java
index 63d50d25..d1d5965d 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java
@@ -56,15 +56,19 @@ public void getContentsWithProjectName() {
         assertEquals(contents.getName(), "google-cloud-project");
 
         List items = contents.getItems();
-        assertEquals("Should be 4 items", items.size(), 4);
+        assertEquals("Should be 5 items", items.size(), 5);
 
         assertEquals("Guide should be first", items.get(0).getClass(), Guide.class);
-        Guide history = (Guide) items.get(0);
+        Guide overview = (Guide) items.get(0);
+        assertEquals("First guide should be Overview", overview.getName(), "Overview");
+
+        assertEquals("Guide should be second", items.get(1).getClass(), Guide.class);
+        Guide history = (Guide) items.get(1);
         assertEquals("Second guide should be Version History", history.getName(), "Version history");
 
-        assertEquals("Item A should be second", items.get(1), tocItemA);
-        assertEquals("Item B should be third", items.get(2), tocItemB);
-        assertEquals("Item C should be fourth", items.get(3), tocItemC);
+        assertEquals("Item A should be third", items.get(2), tocItemA);
+        assertEquals("Item B should be fourth", items.get(3), tocItemB);
+        assertEquals("Item C should be fifth", items.get(4), tocItemC);
     }
 
     @Test
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java
index ab0fe04a..24d3ef05 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java
@@ -60,7 +60,7 @@ private MetadataFileItem buildMetadataFileItem(int seed) {
     public void cleanupHtmlRemoveLonePreTagsTest() {
         String expectedActual = "
text
"; String expectedResult = "text"; - String expectedWithCode = "
text
"; + String expectedWithCode = "
text
"; String random = UUID.randomUUID().toString(); assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); @@ -72,7 +72,7 @@ public void cleanupHtmlRemoveLonePreTagsTest() { @Test public void cleanupHtmlIncludePrettyPrintTest() { String expectedActual = "
";
-        String expectedResult = "
";
+        String expectedResult = "
";
         String random = UUID.randomUUID().toString();
 
         assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual));
diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.yml
index ba14b3a2..aa019f1d 100644
--- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.yml
+++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.yml
@@ -15,6 +15,7 @@ items:
   type: "Namespace"
   syntax:
     content: "package com.microsoft.samples.agreements"
+  javaType: "package"
 references:
 - uid: "com.microsoft.samples.agreements.AgreementDetailsCollectionOperations"
   name: "AgreementDetailsCollectionOperations"
diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.yml
index 5842c9d6..eb3f4e84 100644
--- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.yml
+++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.yml
@@ -20,6 +20,7 @@ items:
   type: "Namespace"
   syntax:
     content: "package com.microsoft.samples.commentinheritance"
+  javaType: "package"
 references:
 - uid: "com.microsoft.samples.commentinheritance.Animal"
   name: "Animal"
diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml
index b4c65868..d70e3939 100644
--- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml
+++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml
@@ -17,6 +17,7 @@ items:
     content: "public interface BetaApi implements Annotation"
   implements:
   - "java.lang.annotation.Annotation"
+  javaType: "annotationtype"
 - uid: "com.microsoft.samples.google.BetaApi.value()"
   id: "value()"
   parent: "com.microsoft.samples.google.BetaApi"
diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml
index e59c4b09..fcb4b7e9 100644
--- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml
+++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml
@@ -45,7 +45,7 @@ items:
   fullName: "com.microsoft.samples.google.ProductSearchSettings"
   type: "Class"
   package: "com.microsoft.samples.google"
-  summary: "Settings class to configure an instance of ProductSearchClient.\n\n 

The default instance has everything set to sensible defaults:\n\n

    \n
  • The default service address (vision.googleapis.com) and default port (443) are used.\n
  • Credentials are acquired automatically through Application Default Credentials.\n
  • Retries are configured for idempotent methods but not for non-idempotent methods.\n
\n\n

The builder of this class is recursive, so contained classes are themselves builders. When\n build() is called, the tree of builders is called to create the complete settings object.\n\n

For example, to set the total timeout of createProductSet to 30 seconds:\n\n

\n ProductSearchSettings.Builder productSearchSettingsBuilder = ProductSearchSettings.newBuilder();\n productSearchSettingsBuilder\n     .createProductSetSettings()\n     .setRetrySettings(\n         productSearchSettingsBuilder\n             .createProductSetSettings()\n             .getRetrySettings()\n             .toBuilder()\n             .setTotalTimeout(Duration.ofSeconds(30))\n             .build());\n ProductSearchSettings productSearchSettings = productSearchSettingsBuilder.build();\n 
" + summary: "Settings class to configure an instance of ProductSearchClient.\n\n

The default instance has everything set to sensible defaults:\n\n

    \n
  • The default service address (vision.googleapis.com) and default port (443) are used.\n
  • Credentials are acquired automatically through Application Default Credentials.\n
  • Retries are configured for idempotent methods but not for non-idempotent methods.\n
\n\n

The builder of this class is recursive, so contained classes are themselves builders. When\n build() is called, the tree of builders is called to create the complete settings object.\n\n

For example, to set the total timeout of createProductSet to 30 seconds:\n\n

\n ProductSearchSettings.Builder productSearchSettingsBuilder = ProductSearchSettings.newBuilder();\n productSearchSettingsBuilder\n     .createProductSetSettings()\n     .setRetrySettings(\n         productSearchSettingsBuilder\n             .createProductSetSettings()\n             .getRetrySettings()\n             .toBuilder()\n             .setTotalTimeout(Duration.ofSeconds(30))\n             .build());\n ProductSearchSettings productSearchSettings = productSearchSettingsBuilder.build();\n 
" syntax: content: "public class ProductSearchSettings extends ClientSettings" inheritance: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml index f8965b77..6da8b2e8 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml @@ -33,7 +33,7 @@ items: fullName: "com.microsoft.samples.google.SpeechClient" type: "Class" package: "com.microsoft.samples.google" - summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." + summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." syntax: content: "public class SpeechClient implements BackgroundResource" inheritance: @@ -265,7 +265,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(LongRunningRecognizeRequest request)" parameters: @@ -285,7 +285,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -308,7 +308,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.longRunningRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable longRunningRecognizeCallable()" return: @@ -324,7 +324,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.longRunningRecognizeOperationCallable*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final OperationCallable longRunningRecognizeOperationCallable()" return: @@ -340,7 +340,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -363,7 +363,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognizeRequest request)" parameters: @@ -383,7 +383,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.recognizeCallable*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable recognizeCallable()" return: @@ -425,7 +425,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.streamingRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" + summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" syntax: content: "public final BidiStreamingCallable streamingRecognizeCallable()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml index 72220248..16a482b0 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml @@ -28,7 +28,7 @@ items: fullName: "com.microsoft.samples.google.SpeechSettings" type: "Class" package: "com.microsoft.samples.google" - summary: "Settings class to configure an instance of SpeechClient.\n\n

The default instance has everything set to sensible defaults:\n\n

    \n
  • The default service address (speech.googleapis.com) and default port (443) are used.\n
  • Credentials are acquired automatically through Application Default Credentials.\n
  • Retries are configured for idempotent methods but not for non-idempotent methods.\n
\n\n

The builder of this class is recursive, so contained classes are themselves builders. When\n build() is called, the tree of builders is called to create the complete settings object.\n\n

For example, to set the total timeout of recognize to 30 seconds:\n\n

\n SpeechSettings.Builder speechSettingsBuilder = SpeechSettings.newBuilder();\n speechSettingsBuilder\n     .recognizeSettings()\n     .setRetrySettings(\n         speechSettingsBuilder\n             .recognizeSettings()\n             .getRetrySettings()\n             .toBuilder()\n             .setTotalTimeout(Duration.ofSeconds(30))\n             .build());\n SpeechSettings speechSettings = speechSettingsBuilder.build();\n 
" + summary: "Settings class to configure an instance of SpeechClient.\n\n

The default instance has everything set to sensible defaults:\n\n

    \n
  • The default service address (speech.googleapis.com) and default port (443) are used.\n
  • Credentials are acquired automatically through Application Default Credentials.\n
  • Retries are configured for idempotent methods but not for non-idempotent methods.\n
\n\n

The builder of this class is recursive, so contained classes are themselves builders. When\n build() is called, the tree of builders is called to create the complete settings object.\n\n

For example, to set the total timeout of recognize to 30 seconds:\n\n

\n SpeechSettings.Builder speechSettingsBuilder = SpeechSettings.newBuilder();\n speechSettingsBuilder\n     .recognizeSettings()\n     .setRetrySettings(\n         speechSettingsBuilder\n             .recognizeSettings()\n             .getRetrySettings()\n             .toBuilder()\n             .setTotalTimeout(Duration.ofSeconds(30))\n             .build());\n SpeechSettings speechSettings = speechSettingsBuilder.build();\n 
" syntax: content: "public class SpeechSettings extends ClientSettings" inheritance: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml index 988e632b..ac1fa8b9 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml @@ -49,6 +49,7 @@ items: - "java.lang.Throwable.printStackTrace(java.io.PrintWriter)" - "java.lang.Throwable.setStackTrace(java.lang.StackTraceElement[])" - "java.lang.Throwable.toString()" + javaType: "exception" - uid: "com.microsoft.samples.google.ValidationException.ValidationException(java.lang.String,java.lang.Object...)" id: "ValidationException(java.lang.String,java.lang.Object...)" parent: "com.microsoft.samples.google.ValidationException" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml index 6839651f..d22fb904 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml @@ -33,7 +33,7 @@ items: fullName: "com.microsoft.samples.google.v1beta.SpeechClient" type: "Class" package: "com.microsoft.samples.google.v1beta" - summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." + summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." syntax: content: "public class SpeechClient implements BackgroundResource" inheritance: @@ -265,7 +265,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(LongRunningRecognizeRequest request)" parameters: @@ -285,7 +285,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -308,7 +308,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.longRunningRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable longRunningRecognizeCallable()" return: @@ -324,7 +324,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.longRunningRecognizeOperationCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final OperationCallable longRunningRecognizeOperationCallable()" return: @@ -340,7 +340,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -363,7 +363,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognizeRequest request)" parameters: @@ -383,7 +383,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.recognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable recognizeCallable()" return: @@ -425,7 +425,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.streamingRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" + summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" syntax: content: "public final BidiStreamingCallable streamingRecognizeCallable()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml index c5c77b4d..2fe445d3 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml @@ -12,6 +12,7 @@ items: type: "Namespace" syntax: content: "package com.microsoft.samples.google.v1beta" + javaType: "package" references: - uid: "com.microsoft.samples.google.v1beta.SpeechClient" name: "SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml index e03c37e9..ab98a426 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml @@ -33,7 +33,7 @@ items: fullName: "com.microsoft.samples.google.v1p1alpha.SpeechClient" type: "Class" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." + summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." syntax: content: "public class SpeechClient implements BackgroundResource" inheritance: @@ -265,7 +265,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(LongRunningRecognizeRequest request)" parameters: @@ -285,7 +285,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.longRunningRecognizeAsync*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" syntax: content: "public final OperationFuture longRunningRecognizeAsync(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -308,7 +308,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.longRunningRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable longRunningRecognizeCallable()" return: @@ -324,7 +324,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.longRunningRecognizeOperationCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final OperationCallable longRunningRecognizeOperationCallable()" return: @@ -340,7 +340,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognitionConfig config, RecognitionAudio audio)" parameters: @@ -363,7 +363,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.recognize*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" syntax: content: "public final RecognizeResponse recognize(RecognizeRequest request)" parameters: @@ -383,7 +383,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.recognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable recognizeCallable()" return: @@ -425,7 +425,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.streamingRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" + summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" syntax: content: "public final BidiStreamingCallable streamingRecognizeCallable()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml index 08ba1571..19fbd1f3 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml @@ -12,6 +12,7 @@ items: type: "Namespace" syntax: content: "package com.microsoft.samples.google.v1p1alpha" + javaType: "package" references: - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient" name: "SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.yml index 88353eca..390f1b73 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.yml @@ -21,6 +21,7 @@ items: type: "Namespace" syntax: content: "package com.microsoft.samples.google" + javaType: "package" references: - uid: "com.microsoft.samples.google.BetaApi" name: "BetaApi" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.yml index d046aa55..6afdce97 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.yml @@ -12,6 +12,7 @@ items: type: "Namespace" syntax: content: "package com.microsoft.samples.offers" + javaType: "package" references: - uid: "com.microsoft.samples.offers.Offer" name: "Offer" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage(package).yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage(package).yml index 89d9b4ce..19b835a1 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage(package).yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage(package).yml @@ -18,6 +18,7 @@ items: summary: "This subpackage contains the sample set of classes for testing DocFx doclet." syntax: content: "package com.microsoft.samples.subpackage" + javaType: "package" references: - uid: "com.microsoft.samples.subpackage.CustomException" name: "CustomException" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.CustomException.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.CustomException.yml index 9ecf8bd3..0ff94f3c 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.CustomException.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.CustomException.yml @@ -43,6 +43,7 @@ items: - "java.lang.Throwable.printStackTrace(java.io.PrintWriter)" - "java.lang.Throwable.setStackTrace(java.lang.StackTraceElement[])" - "java.lang.Throwable.toString()" + javaType: "exception" - uid: "com.microsoft.samples.subpackage.CustomException.CustomException(java.lang.String)" id: "CustomException(java.lang.String)" parent: "com.microsoft.samples.subpackage.CustomException" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml index bd34b118..b6c5a0ad 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml @@ -16,9 +16,10 @@ items: nameWithType: "com.microsoft.samples" fullName: "com.microsoft.samples" type: "Namespace" - summary: "The interfaces provided are listed below, along with usage samples.\n\n

SpeechClient

\n\n

Service Description: Service that implements Google Cloud Speech API.\n\n

Sample for SpeechClient:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

AdaptationClient

\n\n

Service Description: Service that implements Google Cloud Speech Adaptation API.\n\n

Sample for AdaptationClient:\n\n

\n try (AdaptationClient adaptationClient = AdaptationClient.create()) {\n   LocationName parent = LocationName.of(\"[PROJECT]\", \"[LOCATION]\");\n   PhraseSet phraseSet = PhraseSet.newBuilder().build();\n   String phraseSetId = \"phraseSetId959902180\";\n   PhraseSet response = adaptationClient.createPhraseSet(parent, phraseSet, phraseSetId);\n }\n 
" + summary: "The interfaces provided are listed below, along with usage samples.\n\n

SpeechClient

\n\n

Service Description: Service that implements Google Cloud Speech API.\n\n

Sample for SpeechClient:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

AdaptationClient

\n\n

Service Description: Service that implements Google Cloud Speech Adaptation API.\n\n

Sample for AdaptationClient:\n\n

\n try (AdaptationClient adaptationClient = AdaptationClient.create()) {\n   LocationName parent = LocationName.of(\"[PROJECT]\", \"[LOCATION]\");\n   PhraseSet phraseSet = PhraseSet.newBuilder().build();\n   String phraseSetId = \"phraseSetId959902180\";\n   PhraseSet response = adaptationClient.createPhraseSet(parent, phraseSet, phraseSetId);\n }\n 
" syntax: content: "package com.microsoft.samples" + javaType: "package" references: - uid: "com.microsoft.samples.BasePartnerComponent" name: "BasePartnerComponent" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml new file mode 100644 index 00000000..ea4eedf2 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml @@ -0,0 +1,51 @@ +### YamlMime:ManagedReference +items: +- uid: "google-cloud-project" + children: + - "com.microsoft.samples" + - "com.microsoft.samples.agreements" + - "com.microsoft.samples.commentinheritance" + - "com.microsoft.samples.google" + - "com.microsoft.samples.google.v1beta" + - "com.microsoft.samples.google.v1p1alpha" + - "com.microsoft.samples.offers" + - "com.microsoft.samples.subpackage" + langs: + - "java" + nameWithType: "google-cloud-project" + fullName: "google-cloud-project" + type: "Namespace" + javaType: "overview" +references: +- uid: "com.microsoft.samples.agreements" + name: "com.microsoft.samples.agreements" + nameWithType: "com.microsoft.samples.agreements" + fullName: "com.microsoft.samples.agreements" +- uid: "com.microsoft.samples.commentinheritance" + name: "com.microsoft.samples.commentinheritance" + nameWithType: "com.microsoft.samples.commentinheritance" + fullName: "com.microsoft.samples.commentinheritance" +- uid: "com.microsoft.samples.google" + name: "com.microsoft.samples.google" + nameWithType: "com.microsoft.samples.google" + fullName: "com.microsoft.samples.google" +- uid: "com.microsoft.samples.offers" + name: "com.microsoft.samples.offers" + nameWithType: "com.microsoft.samples.offers" + fullName: "com.microsoft.samples.offers" +- uid: "com.microsoft.samples" + name: "com.microsoft.samples" + nameWithType: "com.microsoft.samples" + fullName: "com.microsoft.samples" +- uid: "com.microsoft.samples.subpackage" + name: "com.microsoft.samples.subpackage" + nameWithType: "com.microsoft.samples.subpackage" + fullName: "com.microsoft.samples.subpackage" +- uid: "com.microsoft.samples.google.v1beta" + name: "com.microsoft.samples.google.v1beta" + nameWithType: "com.microsoft.samples.google.v1beta" + fullName: "com.microsoft.samples.google.v1beta" +- uid: "com.microsoft.samples.google.v1p1alpha" + name: "com.microsoft.samples.google.v1p1alpha" + nameWithType: "com.microsoft.samples.google.v1p1alpha" + fullName: "com.microsoft.samples.google.v1p1alpha" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml index c460a0f6..e03f636c 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml @@ -1,6 +1,8 @@ ### YamlMime:TableOfContent - name: "google-cloud-project" items: + - name: "Overview" + href: "overview.html" - name: "Version history" href: "history.md" - uid: "com.microsoft.samples" From 8dc54b8cc3808414bcc10304a4b240c58ca08a53 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 22 Nov 2021 18:36:35 +0100 Subject: [PATCH 007/168] chore(deps): update dependency org.mockito:mockito-core to v4.1.0 (#81) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 2816d740..ed0b67e0 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -137,7 +137,7 @@ org.mockito mockito-core - 4.0.0 + 4.1.0 test From 6cc48f16d187f56fe690a82a91484f4717c116e1 Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Tue, 23 Nov 2021 14:36:33 -0800 Subject: [PATCH 008/168] fix: fix cutoff snippets & incorrect exceptions (#82) * fix: fix cutoff snippets by encoding brackets b/207418908 * fix: update how exceptions are determined fixes b/207531331 --- .../com/microsoft/build/YmlFilesBuilder.java | 5 +- .../java/com/microsoft/lookup/BaseLookup.java | 12 +- .../microsoft/lookup/ClassItemsLookup.java | 1 - .../com/microsoft/lookup/ClassLookup.java | 15 +- .../com/microsoft/lookup/PackageLookup.java | 13 +- .../java/com/microsoft/util/YamlUtil.java | 1 + .../com/microsoft/lookup/BaseLookupTest.java | 28 +- .../com/microsoft/lookup/ClassLookupTest.java | 20 +- .../microsoft/lookup/PackageLookupTest.java | 6 + .../microsoft/samples/ExceptionHandler.java | 297 ++++++++++++++++ .../java/com/microsoft/util/YamlUtilTest.java | 10 + ...osoft.samples.ExceptionHandler.Builder.yml | 250 ++++++++++++++ ...ceptionHandler.Interceptor.RetryResult.yml | 265 +++++++++++++++ ...t.samples.ExceptionHandler.Interceptor.yml | 93 ++++++ ...com.microsoft.samples.ExceptionHandler.yml | 316 ++++++++++++++++++ ....microsoft.samples.google.SpeechClient.yml | 2 +- ...oft.samples.google.v1beta.SpeechClient.yml | 2 +- ....samples.google.v1p1alpha.SpeechClient.yml | 2 +- .../com.microsoft.samples.yml | 20 ++ .../expected-generated-files/toc.yml | 10 + 20 files changed, 1322 insertions(+), 46 deletions(-) create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/ExceptionHandler.java create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Builder.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 6a8ff1b2..98d434d3 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -192,8 +192,7 @@ void populateItemFields(MetadataFileItem item, BaseLookup item.setNameWithType(lookup.extractNameWithType(element)); item.setFullName(lookup.extractFullName(element)); item.setType(lookup.extractType(element)); - String javatype = lookup.extractJavaType(element,name); - item.setJavaType(javatype); + item.setJavaType(lookup.extractJavaType(element)); item.setSummary(lookup.extractSummary(element)); item.setContent(lookup.extractContent(element)); } @@ -339,7 +338,7 @@ MetadataFileItem buildMetadataFileItem(Element element) { setNameWithType(classItemsLookup.extractNameWithType(element)); setFullName(classItemsLookup.extractFullName(element)); setType(classItemsLookup.extractType(element)); - setJavaType(classItemsLookup.extractJavaType(element, name)); + setJavaType(classItemsLookup.extractJavaType(element)); setPackageName(classItemsLookup.extractPackageName(element)); setSummary(classItemsLookup.extractSummary(element)); }}; diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java index ff5cc116..c386302c 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java @@ -119,17 +119,7 @@ public String extractType(T key) { return resolve(key).getType(); } - public String extractJavaType(T element, String name) { - if (element.getKind().name().equals(ElementKind.CLASS.name()) && name.contains("Exception")){ - return "exception"; - } - String javatype = element.getKind().name().toLowerCase().replaceAll("_",""); - - if (javatype.equals("package") || javatype.equals("overview") || javatype.equals("annotationtype")){ - return javatype; - } - return null; - } + public String extractJavaType(T element) {return null;} public String extractContent(T key) { return resolve(key).getContent(); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java index 7f2bf25c..009b67dd 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java @@ -40,7 +40,6 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) { setHref(classQName + ".yml"); setName(elementQName); setType(determineType(element)); - setJavaType(extractJavaType(element, elementQName)); setPackageName(packageName); setSummary(determineComment(element)); }}; diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java index 6c907940..2d323863 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java @@ -46,12 +46,12 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(TypeElement classElemen result.setNameWithType(classSNameWithGenericsSupport); result.setFullName(classQNameWithGenericsSupport); result.setType(determineType(classElement)); - result.setJavaType(extractJavaType(classElement, classSNameWithGenericsSupport)); result.setPackageName(packageName); result.setSummary(determineComment(classElement)); result.setSuperclass(determineNestedSuperclass(classElement, result, inheritedMethods)); result.setTypeParameters(determineTypeParameters(classElement)); result.setInheritedMethods(determineInheritedMembers(inheritedMethods)); + result.setJavaType(extractJavaType(classElement)); populateContent(classElement, classSNameWithGenericsSupport, result); result.setTocName(classQName.replace(packageName.concat("."), "")); return result; @@ -220,4 +220,17 @@ List determineInheritedMembers(List inheritedM } return new ArrayList<>(); } + + public String extractJavaType(TypeElement element) { + String superClass = determineSuperclass(element); + if (superClass != null && superClass.contains("Exception")) { + return "exception"; + } + + String javatype = element.getKind().name().toLowerCase().replaceAll("_",""); + if (javatype.equals("annotationtype")){ + return javatype; + } + return null; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java index 8de6714f..9d1e9216 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java @@ -2,11 +2,10 @@ import com.microsoft.lookup.model.ExtendedMetadataFileItem; import com.microsoft.model.Status; -import com.sun.source.doctree.DeprecatedTree; -import com.sun.source.doctree.DocTree; import jdk.javadoc.doclet.DocletEnvironment; import javax.lang.model.element.PackageElement; +import javax.lang.model.element.TypeElement; public class PackageLookup extends BaseLookup { @@ -26,7 +25,7 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(PackageElement packageE result.setNameWithType(qName); result.setFullName(qName); result.setType(determineType(packageElement)); - result.setJavaType(extractJavaType(packageElement, qName)); + result.setJavaType(extractJavaType(packageElement)); result.setSummary(determineComment(packageElement)); result.setContent(determinePackageContent(packageElement)); return result; @@ -45,4 +44,12 @@ public String extractStatus(String name) { String determinePackageContent(PackageElement packageElement) { return "package " + packageElement.getQualifiedName(); } + + public String extractJavaType(PackageElement element) { + String javatype = element.getKind().name().toLowerCase().replaceAll("_",""); + if (javatype.equals("package")){ + return javatype; + } + return null; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java index 6995648e..9487aba6 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java @@ -29,6 +29,7 @@ public static String cleanupHtml(String text) { } return text.replaceAll("
([^<]+)
","$1") .replaceAll("
", "
")
+                .replaceAll("<([A-Z][a-z]+||)>", "<$1>")
                 .replaceAll("`([^`]+)`", "$1")
                 .replaceAll("\\[([^]]+)]\\(([^)]+)\\)", "$1")
                 .replaceAll("\\[([^]]+)]\\[([^]]+)\\]", "$1")
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java
index 6301d56d..c978e643 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java
@@ -222,29 +222,6 @@ public void testExtractMethods() {
         assertEquals("Wrong references", baseLookup.extractReferences(element), lastBuiltItem.getReferences());
     }
 
-    @Test
-    public void testExtractJavaType() {
-        String name = "com.microsoft.samples.google.ValidationException";
-        when(typeElement.getKind()).thenReturn(ElementKind.CLASS);
-        assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), "exception");
-
-        name = "com.microsoft.samples.google.BetaApi";
-        when(typeElement.getKind()).thenReturn(ElementKind.ANNOTATION_TYPE);
-        assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), "annotationtype");
-
-        name = "com.microsoft.samples.google";
-        when(typeElement.getKind()).thenReturn(ElementKind.PACKAGE);
-        assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), "package");
-
-        name = "com.microsoft.samples.google.SpeechClient";
-        when(typeElement.getKind()).thenReturn(ElementKind.CLASS);
-        assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), null);
-
-        name = "com.microsoft.samples.google.ValidationException.Supplier";
-        when(typeElement.getKind()).thenReturn(ElementKind.INTERFACE);
-        assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), null);
-    }
-
     private ExtendedMetadataFileItem buildExtendedMetadataFileItem(Element element) {
         ExtendedMetadataFileItem result = new ExtendedMetadataFileItem(String.valueOf(element));
         result.setPackageName("Some package name");
@@ -272,4 +249,9 @@ private ExtendedMetadataFileItem buildExtendedMetadataFileItem(Element element)
         result.addReferences(Set.of(new MetadataFileItem("ref uid")));
         return result;
     }
+
+    @Test
+    public void testExtractJavaType() {
+        assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement), null);
+    }
 }
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java
index d8cf88e3..21d9a2c6 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java
@@ -17,11 +17,12 @@
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 
+import javax.lang.model.element.ElementKind;
 import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeMirror;
 import javax.lang.model.util.Elements;
 import java.util.Arrays;
 import java.util.List;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.*;
@@ -39,6 +40,7 @@ public class ClassLookupTest {
     private DocCommentTree docCommentTree;
     private DeprecatedTree deprecatedTree;
     private TextTree textTree;
+    private TypeMirror typeMirror;
 
     @Before
     public void setup() {
@@ -50,6 +52,7 @@ public void setup() {
         docCommentTree = Mockito.mock(DocCommentTree.class);
         deprecatedTree = Mockito.mock(DeprecatedTree.class);
         textTree = Mockito.mock(TextTree.class);
+        typeMirror = Mockito.mock(TypeMirror.class);
     }
 
     @Test
@@ -237,4 +240,19 @@ public void extractStatusNotDeprecated() {
         verify(docCommentTree).getBlockTags();
         assertEquals("Wrong description", result, null);
     }
+
+    @Test
+    public void testExtractJavaType() {
+        TypeElement typeElement = elements.getTypeElement("com.microsoft.samples.google.ValidationException");
+        assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), "exception");
+
+        typeElement = elements.getTypeElement("com.microsoft.samples.google.RecognitionAudio");
+        assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), null);
+
+        typeElement = elements.getTypeElement("com.microsoft.samples.google.BetaApi");
+        assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), "annotationtype");
+
+        typeElement = elements.getTypeElement("com.microsoft.samples.IPartner");
+        assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), null);
+    }
 }
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java
index 4a381022..77fb3684 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java
@@ -11,6 +11,7 @@
 import org.mockito.junit.MockitoJUnitRunner;
 
 import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
 import javax.lang.model.util.Elements;
 
 import static org.junit.Assert.assertEquals;
@@ -52,4 +53,9 @@ public void extractPackageStatus() {
         assertEquals("Wrong result", resultB, Status.BETA.toString());
     }
 
+    @Test
+    public void testExtractJavaType() {
+        PackageElement packageElement = elements.getPackageElement("com.microsoft.samples.google.v1beta");
+        assertEquals("Wrong javaType", packageLookup.extractJavaType(packageElement), "package");
+    }
 }
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/ExceptionHandler.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/ExceptionHandler.java
new file mode 100644
index 00000000..693090ab
--- /dev/null
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/ExceptionHandler.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright 2015 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.microsoft.samples;
+
+import com.google.api.core.BetaApi;
+import com.google.api.gax.retrying.ResultRetryAlgorithm;
+import com.google.api.gax.retrying.TimedAttemptSettings;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.Callable;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/** Exception retry algorithm implementation used by {@link RetryHelper}. */
+@BetaApi
+public final class ExceptionHandler implements ResultRetryAlgorithm, Serializable {
+
+  private static final long serialVersionUID = -2460707015779532919L;
+
+  private static final ExceptionHandler DEFAULT_INSTANCE =
+      newBuilder().retryOn(Exception.class).abortOn(RuntimeException.class).build();
+
+  private final ImmutableList interceptors;
+  private final ImmutableSet> retriableExceptions;
+  private final ImmutableSet> nonRetriableExceptions;
+  private final Set retryInfo = Sets.newHashSet();
+
+  public interface Interceptor extends Serializable {
+
+    enum RetryResult {
+      NO_RETRY,
+      RETRY,
+      CONTINUE_EVALUATION;
+    }
+
+    /**
+     * This method is called before exception evaluation and could short-circuit the process.
+     *
+     * @param exception the exception that is being evaluated
+     * @return {@link RetryResult} to indicate if the exception should be ignored ( {@link
+     *     RetryResult#RETRY}), propagated ({@link RetryResult#NO_RETRY}), or evaluation should
+     *     proceed ({@link RetryResult#CONTINUE_EVALUATION}).
+     */
+    RetryResult beforeEval(Exception exception);
+
+    /**
+     * This method is called after the evaluation and could alter its result.
+     *
+     * @param exception the exception that is being evaluated
+     * @param retryResult the result of the evaluation so far
+     * @return {@link RetryResult} to indicate if the exception should be ignored ( {@link
+     *     RetryResult#RETRY}), propagated ({@link RetryResult#NO_RETRY}), or evaluation should
+     *     proceed ({@link RetryResult#CONTINUE_EVALUATION}).
+     */
+    RetryResult afterEval(Exception exception, RetryResult retryResult);
+  }
+
+  /** ExceptionHandler builder. */
+  public static class Builder {
+
+    private final ImmutableList.Builder interceptors = ImmutableList.builder();
+    private final ImmutableSet.Builder> retriableExceptions =
+        ImmutableSet.builder();
+    private final ImmutableSet.Builder> nonRetriableExceptions =
+        ImmutableSet.builder();
+
+    private Builder() {}
+
+    /**
+     * Adds the exception handler interceptors. Call order will be maintained.
+     *
+     * @param interceptors the interceptors for this exception handler
+     * @return the Builder for chaining
+     */
+    public Builder addInterceptors(Interceptor... interceptors) {
+      for (Interceptor interceptor : interceptors) {
+        this.interceptors.add(interceptor);
+      }
+      return this;
+    }
+
+    /**
+     * Add the exceptions to ignore/retry-on.
+     *
+     * @param exceptions retry should continue when such exceptions are thrown
+     * @return the Builder for chaining
+     */
+    @SafeVarargs
+    public final Builder retryOn(Class... exceptions) {
+      for (Class exception : exceptions) {
+        retriableExceptions.add(checkNotNull(exception));
+      }
+      return this;
+    }
+
+    /**
+     * Adds the exceptions to abort on.
+     *
+     * @param exceptions retry should abort when such exceptions are thrown
+     * @return the Builder for chaining
+     */
+    @SafeVarargs
+    public final Builder abortOn(Class... exceptions) {
+      for (Class exception : exceptions) {
+        nonRetriableExceptions.add(checkNotNull(exception));
+      }
+      return this;
+    }
+
+    /** Returns a new ExceptionHandler instance. */
+    public ExceptionHandler build() {
+      return new ExceptionHandler(this);
+    }
+  }
+
+  @VisibleForTesting
+  static final class RetryInfo implements Serializable {
+
+    private static final long serialVersionUID = -4264634837841455974L;
+    private final Class exception;
+    private final Interceptor.RetryResult retry;
+    private final Set children = Sets.newHashSet();
+
+    RetryInfo(Class exception, Interceptor.RetryResult retry) {
+      this.exception = checkNotNull(exception);
+      this.retry = checkNotNull(retry);
+    }
+
+    @Override
+    public int hashCode() {
+      return exception.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+      if (obj == this) {
+        return true;
+      }
+      if (!(obj instanceof RetryInfo)) {
+        return false;
+      }
+      // We only care about exception in equality as we allow only one instance per exception
+      return ((RetryInfo) obj).exception.equals(exception);
+    }
+  }
+
+  private ExceptionHandler(Builder builder) {
+    interceptors = builder.interceptors.build();
+    retriableExceptions = builder.retriableExceptions.build();
+    nonRetriableExceptions = builder.nonRetriableExceptions.build();
+    Preconditions.checkArgument(
+        Sets.intersection(retriableExceptions, nonRetriableExceptions).isEmpty(),
+        "Same exception was found in both retryable and non-retryable sets");
+    for (Class exception : retriableExceptions) {
+      addRetryInfo(new RetryInfo(exception, Interceptor.RetryResult.RETRY), retryInfo);
+    }
+    for (Class exception : nonRetriableExceptions) {
+      addRetryInfo(new RetryInfo(exception, Interceptor.RetryResult.NO_RETRY), retryInfo);
+    }
+  }
+
+  private static void addRetryInfo(RetryInfo retryInfo, Set dest) {
+    for (RetryInfo current : dest) {
+      if (current.exception.isAssignableFrom(retryInfo.exception)) {
+        addRetryInfo(retryInfo, current.children);
+        return;
+      }
+      if (retryInfo.exception.isAssignableFrom(current.exception)) {
+        retryInfo.children.add(current);
+      }
+    }
+    dest.removeAll(retryInfo.children);
+    dest.add(retryInfo);
+  }
+
+  private static RetryInfo findMostSpecificRetryInfo(
+      Set retryInfo, Class exception) {
+    for (RetryInfo current : retryInfo) {
+      if (current.exception.isAssignableFrom(exception)) {
+        RetryInfo match = findMostSpecificRetryInfo(current.children, exception);
+        return match == null ? current : match;
+      }
+    }
+    return null;
+  }
+
+  // called for Class, therefore a "call" method must be found.
+  private static Method getCallableMethod(Class clazz) {
+    try {
+      return clazz.getDeclaredMethod("call");
+    } catch (NoSuchMethodException e) {
+      // check parent
+      return getCallableMethod(clazz.getSuperclass());
+    } catch (SecurityException e) {
+      // This should never happen
+      throw new IllegalStateException("Unexpected exception", e);
+    }
+  }
+
+  void verifyCaller(Callable callable) {
+    Method callMethod = getCallableMethod(callable.getClass());
+    for (Class exceptionOrError : callMethod.getExceptionTypes()) {
+      Preconditions.checkArgument(
+          Exception.class.isAssignableFrom(exceptionOrError),
+          "Callable method exceptions must be derived from Exception");
+      @SuppressWarnings("unchecked")
+      Class exception = (Class) exceptionOrError;
+      Preconditions.checkArgument(
+          findMostSpecificRetryInfo(retryInfo, exception) != null,
+          "Declared exception '" + exception + "' is not covered by exception handler");
+    }
+  }
+
+  @Override
+  public boolean shouldRetry(Throwable prevThrowable, Object prevResponse) {
+    if (!(prevThrowable instanceof Exception)) {
+      return false;
+    }
+    Exception ex = (Exception) prevThrowable;
+    for (Interceptor interceptor : interceptors) {
+      Interceptor.RetryResult retryResult = checkNotNull(interceptor.beforeEval(ex));
+      if (retryResult != Interceptor.RetryResult.CONTINUE_EVALUATION) {
+        return retryResult == Interceptor.RetryResult.RETRY;
+      }
+    }
+    RetryInfo retryInfo = findMostSpecificRetryInfo(this.retryInfo, ex.getClass());
+    Interceptor.RetryResult retryResult =
+        retryInfo == null ? Interceptor.RetryResult.NO_RETRY : retryInfo.retry;
+    for (Interceptor interceptor : interceptors) {
+      Interceptor.RetryResult interceptorRetry =
+          checkNotNull(interceptor.afterEval(ex, retryResult));
+      if (interceptorRetry != Interceptor.RetryResult.CONTINUE_EVALUATION) {
+        retryResult = interceptorRetry;
+      }
+    }
+    return retryResult == Interceptor.RetryResult.RETRY;
+  }
+
+  @Override
+  public TimedAttemptSettings createNextAttempt(
+      Throwable prevThrowable, Object prevResponse, TimedAttemptSettings prevSettings) {
+    // Return null to indicate that this implementation does not provide any specific attempt
+    // settings, so by default the TimedRetryAlgorithm options can be used instead.
+    return null;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(interceptors, retriableExceptions, nonRetriableExceptions, retryInfo);
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof ExceptionHandler)) {
+      return false;
+    }
+    ExceptionHandler other = (ExceptionHandler) obj;
+    return Objects.equals(interceptors, other.interceptors)
+        && Objects.equals(retriableExceptions, other.retriableExceptions)
+        && Objects.equals(nonRetriableExceptions, other.nonRetriableExceptions)
+        && Objects.equals(retryInfo, other.retryInfo);
+  }
+
+  /** Returns an instance which retry any checked exception and abort on any runtime exception. */
+  public static ExceptionHandler getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  public static Builder newBuilder() {
+    return new Builder();
+  }
+}
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java
index 24d3ef05..d6889fac 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java
@@ -82,6 +82,16 @@ public void cleanupHtmlIncludePrettyPrintTest() {
         assertFalse(YamlUtil.cleanupHtml("
" + random + "").contains("class=\"prettyprint lang-java\""));
     }
 
+    @Test
+    public void cleanupHtmlEncodeBracketsTest() {
+        String expectedActual = " List things = new ArrayList<>(); \n  

text

" ; + String expectedResult = " List<String> things = new ArrayList<>(); \n

text

<Object>"; + String random = UUID.randomUUID().toString(); + + assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); + assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); + } + @Test public void cleanupHtmlAddCodeTagsTest() { String expectedActual = "`text`"; diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Builder.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Builder.yml new file mode 100644 index 00000000..9cebcb52 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Builder.yml @@ -0,0 +1,250 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.ExceptionHandler.Builder" + id: "Builder" + parent: "com.microsoft.samples" + children: + - "com.microsoft.samples.ExceptionHandler.Builder.abortOn(java.lang.Class...)" + - "com.microsoft.samples.ExceptionHandler.Builder.addInterceptors(com.microsoft.samples.ExceptionHandler.Interceptor...)" + - "com.microsoft.samples.ExceptionHandler.Builder.build()" + - "com.microsoft.samples.ExceptionHandler.Builder.retryOn(java.lang.Class...)" + langs: + - "java" + name: "ExceptionHandler.Builder" + nameWithType: "ExceptionHandler.Builder" + fullName: "com.microsoft.samples.ExceptionHandler.Builder" + type: "Class" + package: "com.microsoft.samples" + summary: "ExceptionHandler builder." + syntax: + content: "public static class ExceptionHandler.Builder" + inheritance: + - "java.lang.Object" + inheritedMembers: + - "java.lang.Object.clone()" + - "java.lang.Object.equals(java.lang.Object)" + - "java.lang.Object.finalize()" + - "java.lang.Object.getClass()" + - "java.lang.Object.hashCode()" + - "java.lang.Object.notify()" + - "java.lang.Object.notifyAll()" + - "java.lang.Object.toString()" + - "java.lang.Object.wait()" + - "java.lang.Object.wait(long)" + - "java.lang.Object.wait(long,int)" +- uid: "com.microsoft.samples.ExceptionHandler.Builder.Builder()" + id: "Builder()" + parent: "com.microsoft.samples.ExceptionHandler.Builder" + langs: + - "java" + name: "Builder()" + nameWithType: "ExceptionHandler.Builder.Builder()" + fullName: "com.microsoft.samples.ExceptionHandler.Builder.Builder()" + overload: "com.microsoft.samples.ExceptionHandler.Builder.Builder*" + type: "Constructor" + package: "com.microsoft.samples" + syntax: + content: "private Builder()" +- uid: "com.microsoft.samples.ExceptionHandler.Builder.abortOn(java.lang.Class...)" + id: "abortOn(java.lang.Class...)" + parent: "com.microsoft.samples.ExceptionHandler.Builder" + langs: + - "java" + name: "abortOn(Class[] exceptions)" + nameWithType: "ExceptionHandler.Builder.abortOn(Class[] exceptions)" + fullName: "com.microsoft.samples.ExceptionHandler.Builder.abortOn(Class[] exceptions)" + overload: "com.microsoft.samples.ExceptionHandler.Builder.abortOn*" + type: "Method" + package: "com.microsoft.samples" + summary: "Adds the exceptions to abort on." + syntax: + content: "public final ExceptionHandler.Builder abortOn(Class[] exceptions)" + parameters: + - id: "exceptions" + type: "java.lang.Class[]" + description: "retry should abort when such exceptions are thrown" + return: + type: "com.microsoft.samples.ExceptionHandler.Builder" + description: "the Builder for chaining" +- uid: "com.microsoft.samples.ExceptionHandler.Builder.addInterceptors(com.microsoft.samples.ExceptionHandler.Interceptor...)" + id: "addInterceptors(com.microsoft.samples.ExceptionHandler.Interceptor...)" + parent: "com.microsoft.samples.ExceptionHandler.Builder" + langs: + - "java" + name: "addInterceptors(ExceptionHandler.Interceptor[] interceptors)" + nameWithType: "ExceptionHandler.Builder.addInterceptors(ExceptionHandler.Interceptor[] interceptors)" + fullName: "com.microsoft.samples.ExceptionHandler.Builder.addInterceptors(ExceptionHandler.Interceptor[] interceptors)" + overload: "com.microsoft.samples.ExceptionHandler.Builder.addInterceptors*" + type: "Method" + package: "com.microsoft.samples" + summary: "Adds the exception handler interceptors. Call order will be maintained." + syntax: + content: "public ExceptionHandler.Builder addInterceptors(ExceptionHandler.Interceptor[] interceptors)" + parameters: + - id: "interceptors" + type: "com.microsoft.samples.ExceptionHandler.Interceptor[]" + description: "the interceptors for this exception handler" + return: + type: "com.microsoft.samples.ExceptionHandler.Builder" + description: "the Builder for chaining" +- uid: "com.microsoft.samples.ExceptionHandler.Builder.build()" + id: "build()" + parent: "com.microsoft.samples.ExceptionHandler.Builder" + langs: + - "java" + name: "build()" + nameWithType: "ExceptionHandler.Builder.build()" + fullName: "com.microsoft.samples.ExceptionHandler.Builder.build()" + overload: "com.microsoft.samples.ExceptionHandler.Builder.build*" + type: "Method" + package: "com.microsoft.samples" + summary: "Returns a new ExceptionHandler instance." + syntax: + content: "public ExceptionHandler build()" + return: + type: "com.microsoft.samples.ExceptionHandler" +- uid: "com.microsoft.samples.ExceptionHandler.Builder.retryOn(java.lang.Class...)" + id: "retryOn(java.lang.Class...)" + parent: "com.microsoft.samples.ExceptionHandler.Builder" + langs: + - "java" + name: "retryOn(Class[] exceptions)" + nameWithType: "ExceptionHandler.Builder.retryOn(Class[] exceptions)" + fullName: "com.microsoft.samples.ExceptionHandler.Builder.retryOn(Class[] exceptions)" + overload: "com.microsoft.samples.ExceptionHandler.Builder.retryOn*" + type: "Method" + package: "com.microsoft.samples" + summary: "Add the exceptions to ignore/retry-on." + syntax: + content: "public final ExceptionHandler.Builder retryOn(Class[] exceptions)" + parameters: + - id: "exceptions" + type: "java.lang.Class[]" + description: "retry should continue when such exceptions are thrown" + return: + type: "com.microsoft.samples.ExceptionHandler.Builder" + description: "the Builder for chaining" +references: +- uid: "com.microsoft.samples.ExceptionHandler.Builder.Builder*" + name: "Builder" + nameWithType: "ExceptionHandler.Builder.Builder" + fullName: "com.microsoft.samples.ExceptionHandler.Builder.Builder" + package: "com.microsoft.samples" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor[]" + spec.java: + - uid: "com.microsoft.samples.ExceptionHandler.Interceptor" + name: "Interceptor" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor" + isExternal: false + - name: "[]" + fullName: "[]" + isExternal: false +- uid: "com.microsoft.samples.ExceptionHandler.Builder.addInterceptors*" + name: "addInterceptors" + nameWithType: "ExceptionHandler.Builder.addInterceptors" + fullName: "com.microsoft.samples.ExceptionHandler.Builder.addInterceptors" + package: "com.microsoft.samples" +- uid: "java.lang.Class[]" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Class[].html" + spec.java: + - uid: "java.lang.Class" + name: "Class" + fullName: "java.lang.Class" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html" + - name: "<" + fullName: "<" + isExternal: false + - uid: "? extends java.lang.Exception" + name: "Exception" + fullName: "? extends java.lang.Exception" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false + - name: "[]" + fullName: "[]" + isExternal: false +- uid: "com.microsoft.samples.ExceptionHandler.Builder.retryOn*" + name: "retryOn" + nameWithType: "ExceptionHandler.Builder.retryOn" + fullName: "com.microsoft.samples.ExceptionHandler.Builder.retryOn" + package: "com.microsoft.samples" +- uid: "com.microsoft.samples.ExceptionHandler.Builder.abortOn*" + name: "abortOn" + nameWithType: "ExceptionHandler.Builder.abortOn" + fullName: "com.microsoft.samples.ExceptionHandler.Builder.abortOn" + package: "com.microsoft.samples" +- uid: "com.microsoft.samples.ExceptionHandler" + name: "ExceptionHandler" + nameWithType: "ExceptionHandler" + fullName: "com.microsoft.samples.ExceptionHandler" +- uid: "com.microsoft.samples.ExceptionHandler.Builder.build*" + name: "build" + nameWithType: "ExceptionHandler.Builder.build" + fullName: "com.microsoft.samples.ExceptionHandler.Builder.build" + package: "com.microsoft.samples" +- uid: "java.lang.Object.notify()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" + name: "Object.notify()" + nameWithType: "Object.notify()" + fullName: "java.lang.Object.notify()" +- uid: "java.lang.Object.wait()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" + name: "Object.wait()" + nameWithType: "Object.wait()" + fullName: "java.lang.Object.wait()" +- uid: "java.lang.Object.finalize()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--" + name: "Object.finalize()" + nameWithType: "Object.finalize()" + fullName: "java.lang.Object.finalize()" +- uid: "java.lang.Object.clone()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--" + name: "Object.clone()" + nameWithType: "Object.clone()" + fullName: "java.lang.Object.clone()" +- uid: "java.lang.Object.notifyAll()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" + name: "Object.notifyAll()" + nameWithType: "Object.notifyAll()" + fullName: "java.lang.Object.notifyAll()" +- uid: "java.lang.Object.equals(java.lang.Object)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" + name: "Object.equals(Object)" + nameWithType: "Object.equals(Object)" + fullName: "java.lang.Object.equals(java.lang.Object)" +- uid: "java.lang.Object.getClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" + name: "Object.getClass()" + nameWithType: "Object.getClass()" + fullName: "java.lang.Object.getClass()" +- uid: "java.lang.Object.wait(long)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" + name: "Object.wait(long)" + nameWithType: "Object.wait(long)" + fullName: "java.lang.Object.wait(long)" +- uid: "java.lang.Object.hashCode()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--" + name: "Object.hashCode()" + nameWithType: "Object.hashCode()" + fullName: "java.lang.Object.hashCode()" +- uid: "java.lang.Object.wait(long,int)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-" + name: "Object.wait(long,int)" + nameWithType: "Object.wait(long,int)" + fullName: "java.lang.Object.wait(long,int)" +- uid: "java.lang.Object.toString()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--" + name: "Object.toString()" + nameWithType: "Object.toString()" + fullName: "java.lang.Object.toString()" +- uid: "java.lang.Class" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html" + name: "Class" + nameWithType: "Class" + fullName: "java.lang.Class" +- uid: "? extends java.lang.Exception>[]" + name: "? extends Exception>[]" + nameWithType: "? extends Exception>[]" + fullName: "? extends java.lang.Exception>[]" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml new file mode 100644 index 00000000..870375f3 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml @@ -0,0 +1,265 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + id: "RetryResult" + parent: "com.microsoft.samples" + children: + - "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.CONTINUE_EVALUATION" + - "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.NO_RETRY" + - "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.RETRY" + - "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.valueOf(java.lang.String)" + - "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.values()" + langs: + - "java" + name: "ExceptionHandler.Interceptor.RetryResult" + nameWithType: "ExceptionHandler.Interceptor.RetryResult" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + type: "Enum" + package: "com.microsoft.samples" + syntax: + content: "public enum ExceptionHandler.Interceptor.RetryResult extends Enum" + inheritance: + - "java.lang.Object" + - "java.lang.Enum" + inheritedMembers: + - "java.lang.Enum.valueOf(java.lang.Class,java.lang.String)" + - "java.lang.Enum.clone()" + - "java.lang.Enum.compareTo(E)" + - "java.lang.Enum.equals(java.lang.Object)" + - "java.lang.Enum.finalize()" + - "java.lang.Enum.getDeclaringClass()" + - "java.lang.Enum.hashCode()" + - "java.lang.Enum.name()" + - "java.lang.Enum.ordinal()" + - "java.lang.Enum.toString()" + - "java.lang.Object.getClass()" + - "java.lang.Object.notify()" + - "java.lang.Object.notifyAll()" + - "java.lang.Object.wait()" + - "java.lang.Object.wait(long)" + - "java.lang.Object.wait(long,int)" + javaType: "exception" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.CONTINUE_EVALUATION" + id: "CONTINUE_EVALUATION" + parent: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + langs: + - "java" + name: "CONTINUE_EVALUATION" + nameWithType: "ExceptionHandler.Interceptor.RetryResult.CONTINUE_EVALUATION" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.CONTINUE_EVALUATION" + type: "Field" + package: "com.microsoft.samples" + syntax: + content: "public static final ExceptionHandler.Interceptor.RetryResult CONTINUE_EVALUATION" + return: + type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.NO_RETRY" + id: "NO_RETRY" + parent: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + langs: + - "java" + name: "NO_RETRY" + nameWithType: "ExceptionHandler.Interceptor.RetryResult.NO_RETRY" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.NO_RETRY" + type: "Field" + package: "com.microsoft.samples" + syntax: + content: "public static final ExceptionHandler.Interceptor.RetryResult NO_RETRY" + return: + type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.RETRY" + id: "RETRY" + parent: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + langs: + - "java" + name: "RETRY" + nameWithType: "ExceptionHandler.Interceptor.RetryResult.RETRY" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.RETRY" + type: "Field" + package: "com.microsoft.samples" + syntax: + content: "public static final ExceptionHandler.Interceptor.RetryResult RETRY" + return: + type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.RetryResult()" + id: "RetryResult()" + parent: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + langs: + - "java" + name: "RetryResult()" + nameWithType: "ExceptionHandler.Interceptor.RetryResult.RetryResult()" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.RetryResult()" + overload: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.RetryResult*" + type: "Constructor" + package: "com.microsoft.samples" + syntax: + content: "private RetryResult()" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.valueOf(java.lang.String)" + id: "valueOf(java.lang.String)" + parent: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + langs: + - "java" + name: "valueOf(String name)" + nameWithType: "ExceptionHandler.Interceptor.RetryResult.valueOf(String name)" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.valueOf(String name)" + overload: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.valueOf*" + type: "Method" + package: "com.microsoft.samples" + syntax: + content: "public static ExceptionHandler.Interceptor.RetryResult valueOf(String name)" + parameters: + - id: "name" + type: "java.lang.String" + return: + type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.values()" + id: "values()" + parent: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + langs: + - "java" + name: "values()" + nameWithType: "ExceptionHandler.Interceptor.RetryResult.values()" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.values()" + overload: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.values*" + type: "Method" + package: "com.microsoft.samples" + syntax: + content: "public static ExceptionHandler.Interceptor.RetryResult[] values()" + return: + type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult[]" +references: +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.RetryResult*" + name: "RetryResult" + nameWithType: "ExceptionHandler.Interceptor.RetryResult.RetryResult" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.RetryResult" + package: "com.microsoft.samples" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult[]" + spec.java: + - uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + name: "RetryResult" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + isExternal: false + - name: "[]" + fullName: "[]" + isExternal: false +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.values*" + name: "values" + nameWithType: "ExceptionHandler.Interceptor.RetryResult.values" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.values" + package: "com.microsoft.samples" +- uid: "java.lang.String" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/String.html" + spec.java: + - uid: "java.lang.String" + name: "String" + fullName: "java.lang.String" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/String.html" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.valueOf*" + name: "valueOf" + nameWithType: "ExceptionHandler.Interceptor.RetryResult.valueOf" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.valueOf" + package: "com.microsoft.samples" +- uid: "java.lang.Enum" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html" + name: "Enum" + nameWithType: "Enum" + fullName: "java.lang.Enum" +- uid: "java.lang.Object.notify()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" + name: "Object.notify()" + nameWithType: "Object.notify()" + fullName: "java.lang.Object.notify()" +- uid: "java.lang.Enum.toString()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#toString--" + name: "Enum.toString()" + nameWithType: "Enum.toString()" + fullName: "java.lang.Enum.toString()" +- uid: "java.lang.Object.wait()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" + name: "Object.wait()" + nameWithType: "Object.wait()" + fullName: "java.lang.Object.wait()" +- uid: "java.lang.Enum.clone()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#clone--" + name: "Enum.clone()" + nameWithType: "Enum.clone()" + fullName: "java.lang.Enum.clone()" +- uid: "java.lang.Enum.finalize()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#finalize--" + name: "Enum.finalize()" + nameWithType: "Enum.finalize()" + fullName: "java.lang.Enum.finalize()" +- uid: "java.lang.Object.notifyAll()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" + name: "Object.notifyAll()" + nameWithType: "Object.notifyAll()" + fullName: "java.lang.Object.notifyAll()" +- uid: "java.lang.Enum.compareTo(E)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#compareTo-E-" + name: "Enum.compareTo(E)" + nameWithType: "Enum.compareTo(E)" + fullName: "java.lang.Enum.compareTo(E)" +- uid: "java.lang.Enum.name()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#name--" + name: "Enum.name()" + nameWithType: "Enum.name()" + fullName: "java.lang.Enum.name()" +- uid: "java.lang.Enum.valueOf(java.lang.Class,java.lang.String)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#valueOf-java.lang.Class-java.lang.String-" + name: "Enum.valueOf(Class,String)" + nameWithType: "Enum.valueOf(Class,String)" + fullName: "java.lang.Enum.valueOf(java.lang.Class,java.lang.String)" +- uid: "java.lang.Object.getClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" + name: "Object.getClass()" + nameWithType: "Object.getClass()" + fullName: "java.lang.Object.getClass()" +- uid: "java.lang.Enum.getDeclaringClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#getDeclaringClass--" + name: "Enum.getDeclaringClass()" + nameWithType: "Enum.getDeclaringClass()" + fullName: "java.lang.Enum.getDeclaringClass()" +- uid: "java.lang.Object.wait(long)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" + name: "Object.wait(long)" + nameWithType: "Object.wait(long)" + fullName: "java.lang.Object.wait(long)" +- uid: "java.lang.Enum.ordinal()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#ordinal--" + name: "Enum.ordinal()" + nameWithType: "Enum.ordinal()" + fullName: "java.lang.Enum.ordinal()" +- uid: "java.lang.Enum.hashCode()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#hashCode--" + name: "Enum.hashCode()" + nameWithType: "Enum.hashCode()" + fullName: "java.lang.Enum.hashCode()" +- uid: "java.lang.Object.wait(long,int)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-" + name: "Object.wait(long,int)" + nameWithType: "Object.wait(long,int)" + fullName: "java.lang.Object.wait(long,int)" +- uid: "java.lang.Enum.equals(java.lang.Object)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#equals-java.lang.Object-" + name: "Enum.equals(Object)" + nameWithType: "Enum.equals(Object)" + fullName: "java.lang.Enum.equals(java.lang.Object)" +- uid: "java.lang.Enum" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html" + name: "Enum" + nameWithType: "Enum" + fullName: "java.lang.Enum" +- uid: "java.lang.Enum." + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum/.html" + name: "Enum." + nameWithType: "Enum." + fullName: "java.lang.Enum." +- uid: "T>,java.lang.String)" + name: "T>,String)" + nameWithType: "T>,String)" + fullName: "T>,java.lang.String)" +- uid: "T>valueOf(java.lang.Class" + name: "T>valueOf(Class" + nameWithType: "T>valueOf(Class" + fullName: "T>valueOf(java.lang.Class" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.yml new file mode 100644 index 00000000..3fdd3ed2 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.yml @@ -0,0 +1,93 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor" + id: "Interceptor" + parent: "com.microsoft.samples" + children: + - "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + - "com.microsoft.samples.ExceptionHandler.Interceptor.afterEval(java.lang.Exception,com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult)" + - "com.microsoft.samples.ExceptionHandler.Interceptor.beforeEval(java.lang.Exception)" + langs: + - "java" + name: "ExceptionHandler.Interceptor" + nameWithType: "ExceptionHandler.Interceptor" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor" + type: "Interface" + package: "com.microsoft.samples" + syntax: + content: "public static interface ExceptionHandler.Interceptor extends Serializable" + implements: + - "java.io.Serializable" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.afterEval(java.lang.Exception,com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult)" + id: "afterEval(java.lang.Exception,com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult)" + parent: "com.microsoft.samples.ExceptionHandler.Interceptor" + langs: + - "java" + name: "afterEval(Exception exception, ExceptionHandler.Interceptor.RetryResult retryResult)" + nameWithType: "ExceptionHandler.Interceptor.afterEval(Exception exception, ExceptionHandler.Interceptor.RetryResult retryResult)" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.afterEval(Exception exception, ExceptionHandler.Interceptor.RetryResult retryResult)" + overload: "com.microsoft.samples.ExceptionHandler.Interceptor.afterEval*" + type: "Method" + package: "com.microsoft.samples" + summary: "This method is called after the evaluation and could alter its result." + syntax: + content: "public abstract ExceptionHandler.Interceptor.RetryResult afterEval(Exception exception, ExceptionHandler.Interceptor.RetryResult retryResult)" + parameters: + - id: "exception" + type: "java.lang.Exception" + description: "the exception that is being evaluated" + - id: "retryResult" + type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + description: "the result of the evaluation so far" + return: + type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + description: "RetryResult to indicate if the exception should be ignored ( RetryResult#RETRY), propagated (RetryResult#NO_RETRY), or evaluation should\n proceed (RetryResult#CONTINUE_EVALUATION)." +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.beforeEval(java.lang.Exception)" + id: "beforeEval(java.lang.Exception)" + parent: "com.microsoft.samples.ExceptionHandler.Interceptor" + langs: + - "java" + name: "beforeEval(Exception exception)" + nameWithType: "ExceptionHandler.Interceptor.beforeEval(Exception exception)" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.beforeEval(Exception exception)" + overload: "com.microsoft.samples.ExceptionHandler.Interceptor.beforeEval*" + type: "Method" + package: "com.microsoft.samples" + summary: "This method is called before exception evaluation and could short-circuit the process." + syntax: + content: "public abstract ExceptionHandler.Interceptor.RetryResult beforeEval(Exception exception)" + parameters: + - id: "exception" + type: "java.lang.Exception" + description: "the exception that is being evaluated" + return: + type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + description: "RetryResult to indicate if the exception should be ignored ( RetryResult#RETRY), propagated (RetryResult#NO_RETRY), or evaluation should\n proceed (RetryResult#CONTINUE_EVALUATION)." +references: +- uid: "java.lang.Exception" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html" + spec.java: + - uid: "java.lang.Exception" + name: "Exception" + fullName: "java.lang.Exception" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + name: "ExceptionHandler.Interceptor.RetryResult" + nameWithType: "ExceptionHandler.Interceptor.RetryResult" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.beforeEval*" + name: "beforeEval" + nameWithType: "ExceptionHandler.Interceptor.beforeEval" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.beforeEval" + package: "com.microsoft.samples" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.afterEval*" + name: "afterEval" + nameWithType: "ExceptionHandler.Interceptor.afterEval" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.afterEval" + package: "com.microsoft.samples" +- uid: "java.io.Serializable" + href: "https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html" + name: "Serializable" + nameWithType: "Serializable" + fullName: "java.io.Serializable" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml new file mode 100644 index 00000000..d1928ffb --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml @@ -0,0 +1,316 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.ExceptionHandler" + id: "ExceptionHandler" + parent: "com.microsoft.samples" + children: + - "com.microsoft.samples.ExceptionHandler.Builder" + - "com.microsoft.samples.ExceptionHandler.Interceptor" + - "com.microsoft.samples.ExceptionHandler.createNextAttempt(java.lang.Throwable,java.lang.Object,com.google.api.gax.retrying.TimedAttemptSettings)" + - "com.microsoft.samples.ExceptionHandler.equals(java.lang.Object)" + - "com.microsoft.samples.ExceptionHandler.getDefaultInstance()" + - "com.microsoft.samples.ExceptionHandler.hashCode()" + - "com.microsoft.samples.ExceptionHandler.newBuilder()" + - "com.microsoft.samples.ExceptionHandler.shouldRetry(java.lang.Throwable,java.lang.Object)" + langs: + - "java" + name: "ExceptionHandler" + nameWithType: "ExceptionHandler" + fullName: "com.microsoft.samples.ExceptionHandler" + type: "Class" + package: "com.microsoft.samples" + summary: "Exception retry algorithm implementation used by RetryHelper." + syntax: + content: "public final class ExceptionHandler implements ResultRetryAlgorithm, Serializable" + inheritance: + - "java.lang.Object" + implements: + - "com.google.api.gax.retrying.ResultRetryAlgorithm" + - "java.io.Serializable" + inheritedMembers: + - "java.lang.Object.clone()" + - "java.lang.Object.equals(java.lang.Object)" + - "java.lang.Object.finalize()" + - "java.lang.Object.getClass()" + - "java.lang.Object.hashCode()" + - "java.lang.Object.notify()" + - "java.lang.Object.notifyAll()" + - "java.lang.Object.toString()" + - "java.lang.Object.wait()" + - "java.lang.Object.wait(long)" + - "java.lang.Object.wait(long,int)" +- uid: "com.microsoft.samples.ExceptionHandler.ExceptionHandler(com.microsoft.samples.ExceptionHandler.Builder)" + id: "ExceptionHandler(com.microsoft.samples.ExceptionHandler.Builder)" + parent: "com.microsoft.samples.ExceptionHandler" + langs: + - "java" + name: "ExceptionHandler(ExceptionHandler.Builder builder)" + nameWithType: "ExceptionHandler.ExceptionHandler(ExceptionHandler.Builder builder)" + fullName: "com.microsoft.samples.ExceptionHandler.ExceptionHandler(ExceptionHandler.Builder builder)" + overload: "com.microsoft.samples.ExceptionHandler.ExceptionHandler*" + type: "Constructor" + package: "com.microsoft.samples" + syntax: + content: "private ExceptionHandler(ExceptionHandler.Builder builder)" + parameters: + - id: "builder" + type: "com.microsoft.samples.ExceptionHandler.Builder" +- uid: "com.microsoft.samples.ExceptionHandler.createNextAttempt(java.lang.Throwable,java.lang.Object,com.google.api.gax.retrying.TimedAttemptSettings)" + id: "createNextAttempt(java.lang.Throwable,java.lang.Object,com.google.api.gax.retrying.TimedAttemptSettings)" + parent: "com.microsoft.samples.ExceptionHandler" + langs: + - "java" + name: "createNextAttempt(Throwable prevThrowable, Object prevResponse, TimedAttemptSettings prevSettings)" + nameWithType: "ExceptionHandler.createNextAttempt(Throwable prevThrowable, Object prevResponse, TimedAttemptSettings prevSettings)" + fullName: "com.microsoft.samples.ExceptionHandler.createNextAttempt(Throwable prevThrowable, Object prevResponse, TimedAttemptSettings prevSettings)" + overload: "com.microsoft.samples.ExceptionHandler.createNextAttempt*" + type: "Method" + package: "com.microsoft.samples" + syntax: + content: "public TimedAttemptSettings createNextAttempt(Throwable prevThrowable, Object prevResponse, TimedAttemptSettings prevSettings)" + parameters: + - id: "prevThrowable" + type: "java.lang.Throwable" + - id: "prevResponse" + type: "java.lang.Object" + - id: "prevSettings" + type: "com.google.api.gax.retrying.TimedAttemptSettings" + return: + type: "com.google.api.gax.retrying.TimedAttemptSettings" +- uid: "com.microsoft.samples.ExceptionHandler.equals(java.lang.Object)" + id: "equals(java.lang.Object)" + parent: "com.microsoft.samples.ExceptionHandler" + langs: + - "java" + name: "equals(Object obj)" + nameWithType: "ExceptionHandler.equals(Object obj)" + fullName: "com.microsoft.samples.ExceptionHandler.equals(Object obj)" + overload: "com.microsoft.samples.ExceptionHandler.equals*" + overridden: "java.lang.Object.equals(java.lang.Object)" + type: "Method" + package: "com.microsoft.samples" + syntax: + content: "public boolean equals(Object obj)" + parameters: + - id: "obj" + type: "java.lang.Object" + return: + type: "boolean" +- uid: "com.microsoft.samples.ExceptionHandler.getDefaultInstance()" + id: "getDefaultInstance()" + parent: "com.microsoft.samples.ExceptionHandler" + langs: + - "java" + name: "getDefaultInstance()" + nameWithType: "ExceptionHandler.getDefaultInstance()" + fullName: "com.microsoft.samples.ExceptionHandler.getDefaultInstance()" + overload: "com.microsoft.samples.ExceptionHandler.getDefaultInstance*" + type: "Method" + package: "com.microsoft.samples" + summary: "Returns an instance which retry any checked exception and abort on any runtime exception." + syntax: + content: "public static ExceptionHandler getDefaultInstance()" + return: + type: "com.microsoft.samples.ExceptionHandler" +- uid: "com.microsoft.samples.ExceptionHandler.hashCode()" + id: "hashCode()" + parent: "com.microsoft.samples.ExceptionHandler" + langs: + - "java" + name: "hashCode()" + nameWithType: "ExceptionHandler.hashCode()" + fullName: "com.microsoft.samples.ExceptionHandler.hashCode()" + overload: "com.microsoft.samples.ExceptionHandler.hashCode*" + overridden: "java.lang.Object.hashCode()" + type: "Method" + package: "com.microsoft.samples" + syntax: + content: "public int hashCode()" + return: + type: "int" +- uid: "com.microsoft.samples.ExceptionHandler.newBuilder()" + id: "newBuilder()" + parent: "com.microsoft.samples.ExceptionHandler" + langs: + - "java" + name: "newBuilder()" + nameWithType: "ExceptionHandler.newBuilder()" + fullName: "com.microsoft.samples.ExceptionHandler.newBuilder()" + overload: "com.microsoft.samples.ExceptionHandler.newBuilder*" + type: "Method" + package: "com.microsoft.samples" + syntax: + content: "public static ExceptionHandler.Builder newBuilder()" + return: + type: "com.microsoft.samples.ExceptionHandler.Builder" +- uid: "com.microsoft.samples.ExceptionHandler.shouldRetry(java.lang.Throwable,java.lang.Object)" + id: "shouldRetry(java.lang.Throwable,java.lang.Object)" + parent: "com.microsoft.samples.ExceptionHandler" + langs: + - "java" + name: "shouldRetry(Throwable prevThrowable, Object prevResponse)" + nameWithType: "ExceptionHandler.shouldRetry(Throwable prevThrowable, Object prevResponse)" + fullName: "com.microsoft.samples.ExceptionHandler.shouldRetry(Throwable prevThrowable, Object prevResponse)" + overload: "com.microsoft.samples.ExceptionHandler.shouldRetry*" + type: "Method" + package: "com.microsoft.samples" + syntax: + content: "public boolean shouldRetry(Throwable prevThrowable, Object prevResponse)" + parameters: + - id: "prevThrowable" + type: "java.lang.Throwable" + - id: "prevResponse" + type: "java.lang.Object" + return: + type: "boolean" +references: +- uid: "com.microsoft.samples.ExceptionHandler.Builder" + name: "ExceptionHandler.Builder" + nameWithType: "ExceptionHandler.Builder" + fullName: "com.microsoft.samples.ExceptionHandler.Builder" +- uid: "com.microsoft.samples.ExceptionHandler.ExceptionHandler*" + name: "ExceptionHandler" + nameWithType: "ExceptionHandler.ExceptionHandler" + fullName: "com.microsoft.samples.ExceptionHandler.ExceptionHandler" + package: "com.microsoft.samples" +- uid: "java.lang.Throwable" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html" + spec.java: + - uid: "java.lang.Throwable" + name: "Throwable" + fullName: "java.lang.Throwable" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html" +- uid: "java.lang.Object" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html" + spec.java: + - uid: "java.lang.Object" + name: "Object" + fullName: "java.lang.Object" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html" +- uid: "boolean" + href: "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html" + spec.java: + - uid: "boolean" + name: "boolean" + fullName: "boolean" + isExternal: false +- uid: "com.microsoft.samples.ExceptionHandler.shouldRetry*" + name: "shouldRetry" + nameWithType: "ExceptionHandler.shouldRetry" + fullName: "com.microsoft.samples.ExceptionHandler.shouldRetry" + package: "com.microsoft.samples" +- uid: "com.google.api.gax.retrying.TimedAttemptSettings" + isExternal: true + spec.java: + - uid: "com.google.api.gax.retrying.TimedAttemptSettings" + name: "TimedAttemptSettings" + fullName: "com.google.api.gax.retrying.TimedAttemptSettings" + isExternal: true +- uid: "com.microsoft.samples.ExceptionHandler.createNextAttempt*" + name: "createNextAttempt" + nameWithType: "ExceptionHandler.createNextAttempt" + fullName: "com.microsoft.samples.ExceptionHandler.createNextAttempt" + package: "com.microsoft.samples" +- uid: "int" + href: "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html" + spec.java: + - uid: "int" + name: "int" + fullName: "int" + isExternal: false +- uid: "com.microsoft.samples.ExceptionHandler.hashCode*" + name: "hashCode" + nameWithType: "ExceptionHandler.hashCode" + fullName: "com.microsoft.samples.ExceptionHandler.hashCode" + package: "com.microsoft.samples" +- uid: "com.microsoft.samples.ExceptionHandler.equals*" + name: "equals" + nameWithType: "ExceptionHandler.equals" + fullName: "com.microsoft.samples.ExceptionHandler.equals" + package: "com.microsoft.samples" +- uid: "com.microsoft.samples.ExceptionHandler.getDefaultInstance*" + name: "getDefaultInstance" + nameWithType: "ExceptionHandler.getDefaultInstance" + fullName: "com.microsoft.samples.ExceptionHandler.getDefaultInstance" + package: "com.microsoft.samples" +- uid: "com.microsoft.samples.ExceptionHandler.newBuilder*" + name: "newBuilder" + nameWithType: "ExceptionHandler.newBuilder" + fullName: "com.microsoft.samples.ExceptionHandler.newBuilder" + package: "com.microsoft.samples" +- uid: "com.google.api.gax.retrying.ResultRetryAlgorithm" + isExternal: true + name: "ResultRetryAlgorithm" + nameWithType: "ResultRetryAlgorithm" + fullName: "com.google.api.gax.retrying.ResultRetryAlgorithm" +- uid: "java.io.Serializable" + href: "https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html" + name: "Serializable" + nameWithType: "Serializable" + fullName: "java.io.Serializable" +- uid: "java.lang.Object.notify()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" + name: "Object.notify()" + nameWithType: "Object.notify()" + fullName: "java.lang.Object.notify()" +- uid: "java.lang.Object.wait()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" + name: "Object.wait()" + nameWithType: "Object.wait()" + fullName: "java.lang.Object.wait()" +- uid: "java.lang.Object.finalize()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--" + name: "Object.finalize()" + nameWithType: "Object.finalize()" + fullName: "java.lang.Object.finalize()" +- uid: "java.lang.Object.clone()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--" + name: "Object.clone()" + nameWithType: "Object.clone()" + fullName: "java.lang.Object.clone()" +- uid: "java.lang.Object.notifyAll()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" + name: "Object.notifyAll()" + nameWithType: "Object.notifyAll()" + fullName: "java.lang.Object.notifyAll()" +- uid: "java.lang.Object.equals(java.lang.Object)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" + name: "Object.equals(Object)" + nameWithType: "Object.equals(Object)" + fullName: "java.lang.Object.equals(java.lang.Object)" +- uid: "java.lang.Object.getClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" + name: "Object.getClass()" + nameWithType: "Object.getClass()" + fullName: "java.lang.Object.getClass()" +- uid: "java.lang.Object.wait(long)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" + name: "Object.wait(long)" + nameWithType: "Object.wait(long)" + fullName: "java.lang.Object.wait(long)" +- uid: "java.lang.Object.hashCode()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--" + name: "Object.hashCode()" + nameWithType: "Object.hashCode()" + fullName: "java.lang.Object.hashCode()" +- uid: "java.lang.Object.wait(long,int)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-" + name: "Object.wait(long,int)" + nameWithType: "Object.wait(long,int)" + fullName: "java.lang.Object.wait(long,int)" +- uid: "java.lang.Object.toString()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--" + name: "Object.toString()" + nameWithType: "Object.toString()" + fullName: "java.lang.Object.toString()" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor" + name: "ExceptionHandler.Interceptor" + nameWithType: "ExceptionHandler.Interceptor" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor" +- uid: "com.google.api.gax.retrying.ResultRetryAlgorithm" + isExternal: true + name: "ResultRetryAlgorithm" + nameWithType: "ResultRetryAlgorithm" + fullName: "com.google.api.gax.retrying.ResultRetryAlgorithm" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml index 6da8b2e8..2b5f6b5b 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml @@ -308,7 +308,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.longRunningRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture<Operation> future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable longRunningRecognizeCallable()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml index d22fb904..6a6c1f22 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml @@ -308,7 +308,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.longRunningRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture<Operation> future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable longRunningRecognizeCallable()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml index ab98a426..f19a072a 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml @@ -308,7 +308,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.longRunningRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture<Operation> future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable longRunningRecognizeCallable()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml index b6c5a0ad..c1395567 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml @@ -5,6 +5,10 @@ items: children: - "com.microsoft.samples.BasePartnerComponent" - "com.microsoft.samples.BasePartnerComponentString" + - "com.microsoft.samples.ExceptionHandler" + - "com.microsoft.samples.ExceptionHandler.Builder" + - "com.microsoft.samples.ExceptionHandler.Interceptor" + - "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" - "com.microsoft.samples.IPartner" - "com.microsoft.samples.KeyValuePair" - "com.microsoft.samples.Link" @@ -29,6 +33,22 @@ references: name: "BasePartnerComponentString" nameWithType: "BasePartnerComponentString" fullName: "com.microsoft.samples.BasePartnerComponentString" +- uid: "com.microsoft.samples.ExceptionHandler" + name: "ExceptionHandler" + nameWithType: "ExceptionHandler" + fullName: "com.microsoft.samples.ExceptionHandler" +- uid: "com.microsoft.samples.ExceptionHandler.Builder" + name: "ExceptionHandler.Builder" + nameWithType: "ExceptionHandler.Builder" + fullName: "com.microsoft.samples.ExceptionHandler.Builder" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor" + name: "ExceptionHandler.Interceptor" + nameWithType: "ExceptionHandler.Interceptor" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor" +- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + name: "ExceptionHandler.Interceptor.RetryResult" + nameWithType: "ExceptionHandler.Interceptor.RetryResult" + fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" - uid: "com.microsoft.samples.IPartner" name: "IPartner" nameWithType: "IPartner" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml index e03f636c..d2bbf837 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml @@ -11,6 +11,8 @@ - uid: "com.microsoft.samples" name: "Package summary" - heading: "Interfaces" + - uid: "com.microsoft.samples.ExceptionHandler.Interceptor" + name: "ExceptionHandler.Interceptor" - uid: "com.microsoft.samples.IPartner" name: "IPartner" - heading: "Classes" @@ -26,6 +28,14 @@ name: "Subpackage" - uid: "com.microsoft.samples.SuperHero" name: "SuperHero" + - heading: "Enums" + - uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + name: "ExceptionHandler.Interceptor.RetryResult" + - heading: "Exceptions" + - uid: "com.microsoft.samples.ExceptionHandler" + name: "ExceptionHandler" + - uid: "com.microsoft.samples.ExceptionHandler.Builder" + name: "ExceptionHandler.Builder" - uid: "com.microsoft.samples.agreements" name: "com.microsoft.samples.agreements" items: From e2798a783b5824879f67e072000e1bedff3b5f04 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 6 Dec 2021 23:36:52 +0100 Subject: [PATCH 009/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.2.0 (#84) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index ed0b67e0..0396b4e3 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.1.2 + 2.2.0 test From c428362080cb55bb43dcfd992948d9c44f39dd4f Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 9 Dec 2021 00:17:33 +0100 Subject: [PATCH 010/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.2.1 (#85) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 0396b4e3..07726370 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.2.0 + 2.2.1 test From 21c0db6d31967491cba8ac7f3518ec9fd586ed45 Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Fri, 10 Dec 2021 16:11:12 -0800 Subject: [PATCH 011/168] chore: Update readme link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ca6356fb..94f2a191 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## JavaDoc Doclet for DocFX for Google -Designed to generate YAML files from Javadoc output for DocFX consumption. While the doclet helps output docfx yml, there are some differences in the way Google needs this outputed to align with the other languages and look appropriate on devsite. +Designed to generate YAML files from Javadoc output for DocFX consumption. While the doclet helps output docfx yml, there are some differences in the way Google needs this outputed to align with the other languages and look appropriate on [cloud.google.com](https://cloud.google.com/java/docs/reference). The original github repository for the doclet can be found at [github.com/docascode/docfx-doclet](https://github.com/docascode/docfx-doclet). From 45bfc2e16a017d29530e0c25accb3bd72ed90ef4 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 22 Dec 2021 18:06:27 +0100 Subject: [PATCH 012/168] chore(deps): update dependency com.fasterxml.jackson.core:jackson-databind to v2.13.1 (#90) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 07726370..551bcef4 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -13,7 +13,7 @@ 11 ${java.version} ${java.version} - 2.13.0 + 2.13.1 3.12.0 4.4 2.11.0 From 7cb557ce17f3a5423a3cabd5cf605b379542d3e4 Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Wed, 22 Dec 2021 16:38:35 -0800 Subject: [PATCH 013/168] chore: refactor YmlFilesBuilder (#88) Break up YmlFilesBuilder into multiple builders to make it easier to follow code and make changes. This change doesn't change any code code, it just moves code into new files. --- .../java/com/microsoft/build/BuilderUtil.java | 201 ++++++ .../com/microsoft/build/ClassBuilder.java | 208 ++++++ .../com/microsoft/build/PackageBuilder.java | 48 ++ .../com/microsoft/build/ProjectBuilder.java | 55 ++ .../com/microsoft/build/ReferenceBuilder.java | 283 ++++++++ .../com/microsoft/build/YmlFilesBuilder.java | 662 ++---------------- .../com/microsoft/build/BuilderUtilTest.java | 113 +++ .../com/microsoft/build/ClassBuilderTest.java | 87 +++ .../microsoft/build/ReferenceBuilderTest.java | 113 +++ .../microsoft/build/YmlFilesBuilderTest.java | 197 +----- 10 files changed, 1156 insertions(+), 811 deletions(-) create mode 100644 third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java create mode 100644 third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java create mode 100644 third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java create mode 100644 third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ProjectBuilder.java create mode 100644 third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/BuilderUtilTest.java create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java new file mode 100644 index 00000000..f5bef0f6 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java @@ -0,0 +1,201 @@ +/* + * Copyright 2021 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 + * + * https://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.microsoft.build; + +import com.microsoft.lookup.BaseLookup; +import com.microsoft.model.MetadataFile; +import com.microsoft.model.MetadataFileItem; +import com.microsoft.model.SpecViewModel; +import com.microsoft.util.YamlUtil; +import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.StringUtils; + +import javax.lang.model.element.Element; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +final class BuilderUtil { + private static final Pattern XREF_LINK_PATTERN = Pattern.compile(".*?"); + private static final Pattern XREF_LINK_CONTENT_PATTERN = Pattern.compile("(?<=.*?)"); + private static final Pattern XREF_LINK_RESOLVE_PATTERN = Pattern.compile("(?\\w+)\\#(?\\w+)(\\((?.*)\\))?"); + public final static String[] LANGS = {"java"}; + + static String getDeprecatedSummary(String depMsg, String summary) { + String result = "

(deprecated) " + depMsg + "

"; + if (summary != null && !summary.equals("")) { + result = result + "\n" + summary; + } + return result; + } + + static String populateUidValues(String text, LookupContext lookupContext) { + if (StringUtils.isBlank(text)) { + return text; + } + + Matcher linkMatcher = XREF_LINK_PATTERN.matcher(text); + while (linkMatcher.find()) { + String link = linkMatcher.group(); + Matcher linkContentMatcher = XREF_LINK_CONTENT_PATTERN.matcher(link); + if (!linkContentMatcher.find()) { + continue; + } + + String linkContent = linkContentMatcher.group(); + String uid = resolveUidFromLinkContent(linkContent, lookupContext); + String updatedLink = linkContentMatcher.replaceAll(uid); + text = StringUtils.replace(text, link, updatedLink); + } + return text; + } + + /** + * The linkContent could be in following format + * #memeber + * Class#member + * Class#method() + * Class#method(params) + */ + static String resolveUidFromLinkContent(String linkContent, LookupContext lookupContext) { + if (StringUtils.isBlank(linkContent)) { + return ""; + } + + linkContent = linkContent.trim(); + + // complete class name for class internal link + if (linkContent.startsWith("#")) { + String firstKey = lookupContext.getOwnerUid(); + linkContent = firstKey + linkContent; + } + + // fuzzy resolve, target for items from project external references + String fuzzyResolvedUid = resolveUidFromReference(linkContent, lookupContext); + + // exact resolve in lookupContext + linkContent = linkContent.replace("#", "."); + String exactResolveUid = resolveUidByLookup(linkContent, lookupContext); + return exactResolveUid.isEmpty() ? fuzzyResolvedUid : exactResolveUid; + } + + static List splitUidWithGenericsIntoClassNames(String uid) { + uid = RegExUtils.removeAll(uid, "[>]+$"); + return Arrays.asList(StringUtils.split(uid, "<")); + } + + static List replaceUidAndSplit(String uid) { + String retValue = RegExUtils.replaceAll(uid, "\\<", "//", "//>//"); + retValue = RegExUtils.replaceAll(retValue, ",", "//,//"); + retValue = RegExUtils.replaceAll(retValue, "\\[\\]", "//[]//"); + + return Arrays.asList(StringUtils.split(retValue, "//")); + } + + static List getJavaSpec(List references) { + List specList = new ArrayList<>(); + + Optional.ofNullable(references).ifPresent( + ref -> references.forEach( + uid -> { + if (uid.equalsIgnoreCase("<") + || uid.equalsIgnoreCase(">") + || uid.equalsIgnoreCase(",") + || uid.equalsIgnoreCase("[]")) + specList.add(new SpecViewModel(null, uid)); + else if (uid != "") + specList.add(new SpecViewModel(uid, uid)); + }) + ); + + return specList; + } + + static void populateUidValues(List packageMetadataFiles, List classMetadataFiles) { + Lookup lookup = new Lookup(packageMetadataFiles, classMetadataFiles); + + classMetadataFiles.forEach(classMetadataFile -> { + LookupContext lookupContext = lookup.buildContext(classMetadataFile); + + for (MetadataFileItem item : classMetadataFile.getItems()) { + item.setSummary(YamlUtil.cleanupHtml( + populateUidValues(item.getSummary(), lookupContext) + )); + + Optional.ofNullable(item.getSyntax()).ifPresent(syntax -> { + Optional.ofNullable(syntax.getParameters()).ifPresent( + methodParams -> methodParams.forEach( + param -> { + param.setDescription(populateUidValues(param.getDescription(), lookupContext)); + }) + ); + Optional.ofNullable(syntax.getReturnValue()).ifPresent(returnValue -> + returnValue.setReturnDescription( + populateUidValues(syntax.getReturnValue().getReturnDescription(), lookupContext) + ) + ); + } + ); + } + }); + } + + /** + * this method is used to do fuzzy resolve + * "*" will be added at the end of uid for method for xerf service resolve purpose + */ + static String resolveUidFromReference(String linkContent, LookupContext lookupContext) { + String uid = ""; + Matcher matcher = XREF_LINK_RESOLVE_PATTERN.matcher(linkContent); + + if (matcher.find()) { + String className = matcher.group("class"); + String memberName = matcher.group("member"); + uid = resolveUidByLookup(className, lookupContext); + if (!uid.isEmpty()) { + uid = uid.concat(".").concat(memberName); + + // linkContent targets a method + if (!StringUtils.isBlank(matcher.group(3))) { + uid = uid.concat("*"); + } + } + } + return uid; + } + + static String resolveUidByLookup(String signature, LookupContext lookupContext) { + if (StringUtils.isBlank(signature) || lookupContext == null) { + return ""; + } + return lookupContext.containsKey(signature) ? lookupContext.resolve(signature) : ""; + } + + static void populateItemFields(MetadataFileItem item, BaseLookup lookup, T element) { + String name = lookup.extractName(element); + item.setName(name); + item.setNameWithType(lookup.extractNameWithType(element)); + item.setFullName(lookup.extractFullName(element)); + item.setType(lookup.extractType(element)); + item.setJavaType(lookup.extractJavaType(element)); + item.setSummary(lookup.extractSummary(element)); + item.setContent(lookup.extractContent(element)); + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java new file mode 100644 index 00000000..1ac99543 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java @@ -0,0 +1,208 @@ +/* + * Copyright 2021 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 + * + * https://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.microsoft.build; + +import com.microsoft.lookup.ClassItemsLookup; +import com.microsoft.lookup.ClassLookup; +import com.microsoft.model.MetadataFile; +import com.microsoft.model.MetadataFileItem; +import com.microsoft.model.Status; +import com.microsoft.model.TocItem; +import com.microsoft.model.TocTypeMap; +import com.microsoft.util.ElementUtil; +import com.microsoft.util.Utils; + +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.TypeElement; +import javax.lang.model.util.ElementFilter; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static com.microsoft.build.BuilderUtil.LANGS; +import static com.microsoft.build.BuilderUtil.getDeprecatedSummary; +import static com.microsoft.build.BuilderUtil.populateItemFields; + +class ClassBuilder { + private ElementUtil elementUtil; + private ClassLookup classLookup; + private ClassItemsLookup classItemsLookup; + private String outputPath; + private ReferenceBuilder referenceBuilder; + + ClassBuilder(ElementUtil elementUtil, ClassLookup classLookup, ClassItemsLookup classItemsLookup, String outputPath, ReferenceBuilder referenceBuilder) { + this.elementUtil = elementUtil; + this.classLookup = classLookup; + this.classItemsLookup = classItemsLookup; + this.outputPath = outputPath; + this.referenceBuilder = referenceBuilder; + } + + void buildFilesForInnerClasses(Element element, TocTypeMap tocTypeMap, List container) { + for (TypeElement classElement : elementUtil.extractSortedElements(element)) { + String uid = classLookup.extractUid(classElement); + String name = classLookup.extractTocName(classElement); + String status = classLookup.extractStatus(classElement); + + if (tocTypeMap.get(classElement.getKind().name()) != null) { + if (classElement.getKind().name().equals(ElementKind.CLASS.name()) && name.contains("Exception")) { + tocTypeMap.get("EXCEPTION").add(new TocItem(uid, name, status)); + } else { + tocTypeMap.get(classElement.getKind().name()).add(new TocItem(uid, name, status)); + } + } else { + tocTypeMap.get(ElementKind.CLASS.name()).add(new TocItem(uid, name, status)); + } + + container.add(buildClassYmlFile(classElement)); + buildFilesForInnerClasses(classElement, tocTypeMap, container); + } + } + + private MetadataFile buildClassYmlFile(TypeElement classElement) { + String fileName = classLookup.extractHref(classElement); + MetadataFile classMetadataFile = new MetadataFile(outputPath, fileName); + addClassInfo(classElement, classMetadataFile); + addConstructorsInfo(classElement, classMetadataFile); + addMethodsInfo(classElement, classMetadataFile); + addFieldsInfo(classElement, classMetadataFile); + referenceBuilder.addReferencesInfo(classElement, classMetadataFile); + applyPostProcessing(classMetadataFile); + return classMetadataFile; + } + + private void addClassInfo(TypeElement classElement, MetadataFile classMetadataFile) { + MetadataFileItem classItem = new MetadataFileItem(LANGS, classLookup.extractUid(classElement)); + classItem.setId(classLookup.extractId(classElement)); + classItem.setParent(classLookup.extractParent(classElement)); + addChildren(classElement, classItem.getChildren()); + populateItemFields(classItem, classLookup, classElement); + classItem.setPackageName(classLookup.extractPackageName(classElement)); + classItem.setTypeParameters(classLookup.extractTypeParameters(classElement)); + classItem.setInheritance(classLookup.extractSuperclass(classElement)); + classItem.setInterfaces(classLookup.extractInterfaces(classElement)); + classItem.setInheritedMethods(classLookup.extractInheritedMethods(classElement)); + String depMsg = classLookup.extractDeprecatedDescription(classElement); + if (depMsg != null) { + classItem.setSummary(getDeprecatedSummary(depMsg, classItem.getSummary())); + classItem.setStatus(Status.DEPRECATED.toString()); + } + classMetadataFile.getItems().add(classItem); + } + + void addConstructorsInfo(TypeElement classElement, MetadataFile classMetadataFile) { + for (ExecutableElement constructorElement : ElementFilter.constructorsIn(classElement.getEnclosedElements())) { + MetadataFileItem constructorItem = buildMetadataFileItem(constructorElement); + constructorItem.setOverload(classItemsLookup.extractOverload(constructorElement)); + constructorItem.setContent(classItemsLookup.extractConstructorContent(constructorElement)); + constructorItem.setParameters(classItemsLookup.extractParameters(constructorElement)); + String depMsg = classItemsLookup.extractDeprecatedDescription(constructorElement); + if (depMsg != null) { + constructorItem.setSummary(getDeprecatedSummary(depMsg, constructorItem.getSummary())); + constructorItem.setStatus(Status.DEPRECATED.toString()); + } + classMetadataFile.getItems().add(constructorItem); + + referenceBuilder.addParameterReferences(constructorItem, classMetadataFile); + referenceBuilder.addOverloadReferences(constructorItem, classMetadataFile); + } + } + + private void addMethodsInfo(TypeElement classElement, MetadataFile classMetadataFile) { + ElementFilter.methodsIn(classElement.getEnclosedElements()).stream() + .filter(methodElement -> !Utils.isPrivateOrPackagePrivate(methodElement)) + .forEach(methodElement -> { + MetadataFileItem methodItem = buildMetadataFileItem(methodElement); + methodItem.setOverload(classItemsLookup.extractOverload(methodElement)); + methodItem.setContent(classItemsLookup.extractMethodContent(methodElement)); + methodItem.setExceptions(classItemsLookup.extractExceptions(methodElement)); + methodItem.setParameters(classItemsLookup.extractParameters(methodElement)); + methodItem.setReturn(classItemsLookup.extractReturn(methodElement)); + methodItem.setOverridden(classItemsLookup.extractOverridden(methodElement)); + String depMsg = classItemsLookup.extractDeprecatedDescription(methodElement); + if (depMsg != null) { + methodItem.setSummary(getDeprecatedSummary(depMsg, methodItem.getSummary())); + methodItem.setStatus(Status.DEPRECATED.toString()); + } + + classMetadataFile.getItems().add(methodItem); + referenceBuilder.addExceptionReferences(methodItem, classMetadataFile); + referenceBuilder.addParameterReferences(methodItem, classMetadataFile); + referenceBuilder.addReturnReferences(methodItem, classMetadataFile); + referenceBuilder.addOverloadReferences(methodItem, classMetadataFile); + }); + } + + private void addFieldsInfo(TypeElement classElement, MetadataFile classMetadataFile) { + ElementFilter.fieldsIn(classElement.getEnclosedElements()).stream() + .filter(fieldElement -> !Utils.isPrivateOrPackagePrivate(fieldElement)) + .forEach(fieldElement -> { + MetadataFileItem fieldItem = buildMetadataFileItem(fieldElement); + fieldItem.setContent(classItemsLookup.extractFieldContent(fieldElement)); + fieldItem.setReturn(classItemsLookup.extractReturn(fieldElement)); + String depMsg = classItemsLookup.extractDeprecatedDescription(fieldElement); + if (depMsg != null) { + fieldItem.setSummary(getDeprecatedSummary(depMsg, fieldItem.getSummary())); + fieldItem.setStatus(Status.DEPRECATED.toString()); + } + + classMetadataFile.getItems().add(fieldItem); + referenceBuilder.addReturnReferences(fieldItem, classMetadataFile); + }); + } + + private void applyPostProcessing(MetadataFile classMetadataFile) { + referenceBuilder.expandComplexGenericsInReferences(classMetadataFile); + } + + private MetadataFileItem buildMetadataFileItem(Element element) { + return new MetadataFileItem(LANGS, classItemsLookup.extractUid(element)) {{ + String name = classItemsLookup.extractName(element); + setId(classItemsLookup.extractId(element)); + setParent(classItemsLookup.extractParent(element)); + setName(name); + setNameWithType(classItemsLookup.extractNameWithType(element)); + setFullName(classItemsLookup.extractFullName(element)); + setType(classItemsLookup.extractType(element)); + setJavaType(classItemsLookup.extractJavaType(element)); + setPackageName(classItemsLookup.extractPackageName(element)); + setSummary(classItemsLookup.extractSummary(element)); + }}; + } + + private void addChildren(TypeElement classElement, List children) { + collect(classElement, children, ElementFilter::constructorsIn, classItemsLookup::extractUid); + collect(classElement, children, ElementFilter::methodsIn, classItemsLookup::extractUid); + collect(classElement, children, ElementFilter::fieldsIn, classItemsLookup::extractUid); + collect(classElement, children, ElementFilter::typesIn, String::valueOf); + } + + private void collect(TypeElement classElement, List children, + Function, List> selectFunc, + Function mapFunc) { + + List elements = selectFunc.apply(classElement.getEnclosedElements()); + children.addAll(filterPrivateElements(elements).stream() + .map(mapFunc).collect(Collectors.toList())); + } + + private List filterPrivateElements(List elements) { + return elements.stream() + .filter(element -> !Utils.isPrivateOrPackagePrivate(element)).collect(Collectors.toList()); + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java new file mode 100644 index 00000000..42228bbd --- /dev/null +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java @@ -0,0 +1,48 @@ +/* + * Copyright 2021 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 + * + * https://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.microsoft.build; + +import com.microsoft.lookup.PackageLookup; +import com.microsoft.model.MetadataFile; +import com.microsoft.model.MetadataFileItem; + +import javax.lang.model.element.PackageElement; + +import static com.microsoft.build.BuilderUtil.LANGS; +import static com.microsoft.build.BuilderUtil.populateItemFields; + +class PackageBuilder { + private final PackageLookup packageLookup; + private final String outputPath; + private final ReferenceBuilder referenceBuilder; + + PackageBuilder(PackageLookup packageLookup, String outputPath, ReferenceBuilder referenceBuilder) { + this.packageLookup = packageLookup; + this.outputPath = outputPath; + this.referenceBuilder = referenceBuilder; + } + + MetadataFile buildPackageMetadataFile(PackageElement packageElement) { + String fileName = packageLookup.extractHref(packageElement); + MetadataFile packageMetadataFile = new MetadataFile(outputPath, fileName); + MetadataFileItem packageItem = new MetadataFileItem(LANGS, packageLookup.extractUid(packageElement)); + packageItem.setId(packageLookup.extractId(packageElement)); + referenceBuilder.addChildrenReferences(packageElement, packageItem.getChildren(), packageMetadataFile.getReferences()); + populateItemFields(packageItem, packageLookup, packageElement); + packageMetadataFile.getItems().add(packageItem); + return packageMetadataFile; + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ProjectBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ProjectBuilder.java new file mode 100644 index 00000000..f51f95d9 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ProjectBuilder.java @@ -0,0 +1,55 @@ +/* + * Copyright 2021 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 + * + * https://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.microsoft.build; + +import com.microsoft.model.MetadataFile; +import com.microsoft.model.MetadataFileItem; + +import java.util.ArrayList; +import java.util.List; + +import static com.microsoft.build.BuilderUtil.LANGS; + +class ProjectBuilder { + private final String projectName; + + ProjectBuilder(String projectName) { + this.projectName = projectName; + } + + void buildProjectMetadataFile(List packageItems, MetadataFile projectMetadataFile) { + MetadataFileItem projectItem = new MetadataFileItem(LANGS, projectName); + projectItem.setNameWithType(projectName); + projectItem.setFullName(projectName); + projectItem.setType("Namespace"); + projectItem.setJavaType("overview"); + + List children = new ArrayList<>(); + List references = new ArrayList<>(); + packageItems.stream().forEach(i -> { + children.add(i.getUid()); + MetadataFileItem refItem = new MetadataFileItem(i.getUid()); + refItem.setName(i.getName()); + refItem.setNameWithType(i.getNameWithType()); + refItem.setFullName(i.getFullName()); + references.add(refItem); + }); + + projectItem.getChildren().addAll(children); + projectMetadataFile.getReferences().addAll(references); + projectMetadataFile.getItems().add(projectItem); + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java new file mode 100644 index 00000000..c1ed3387 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java @@ -0,0 +1,283 @@ +/* + * Copyright 2021 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 + * + * https://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.microsoft.build; + +import com.microsoft.lookup.ClassLookup; +import com.microsoft.model.MetadataFile; +import com.microsoft.model.MetadataFileItem; +import com.microsoft.model.SpecViewModel; +import com.microsoft.util.ElementUtil; +import jdk.javadoc.doclet.DocletEnvironment; +import org.apache.commons.lang3.RegExUtils; + +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import javax.lang.model.util.ElementFilter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static com.microsoft.build.BuilderUtil.getJavaSpec; +import static com.microsoft.build.BuilderUtil.populateItemFields; +import static com.microsoft.build.BuilderUtil.replaceUidAndSplit; +import static com.microsoft.build.BuilderUtil.splitUidWithGenericsIntoClassNames; + +class ReferenceBuilder { + private final Pattern JAVA_PATTERN = Pattern.compile("^java.*"); + private final Pattern PROTOBUF_PATTERN = Pattern.compile("^com.google.protobuf.*"); + private final Pattern GAX_PATTERN = Pattern.compile("^com.google.api.gax.*"); + private final Pattern APICOMMON_PATTERN = Pattern.compile("^com.google.api.core.*"); + private final Pattern LONGRUNNING_PATTERN = Pattern.compile("^com.google.longrunning.*"); + private final Pattern ENDING_PATTERN = Pattern.compile(".*<\\?>$"); + private final String PRIMITIVE_URL = "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html"; + private final String JAVA_BASE_URL = "https://docs.oracle.com/javase/8/docs/api/"; + private final DocletEnvironment environment; + private final ClassLookup classLookup; + private final ElementUtil elementUtil; + + ReferenceBuilder(DocletEnvironment environment, ClassLookup classLookup, ElementUtil elementUtil) { + this.environment = environment; + this.classLookup = classLookup; + this.elementUtil = elementUtil; + } + + MetadataFileItem buildClassReference(TypeElement classElement) { + MetadataFileItem referenceItem = new MetadataFileItem(classLookup.extractUid(classElement)); + referenceItem.setName(classLookup.extractName(classElement)); + referenceItem.setNameWithType(classLookup.extractNameWithType(classElement)); + referenceItem.setFullName(classLookup.extractFullName(classElement)); + return referenceItem; + } + + void addReferencesInfo(TypeElement classElement, MetadataFile classMetadataFile) { + MetadataFileItem classReference = new MetadataFileItem(classLookup.extractUid(classElement)); + classReference.setParent(classLookup.extractParent(classElement)); + populateItemFields(classReference, classLookup, classElement); + classReference.setTypeParameters(classLookup.extractTypeParameters(classElement)); + + addTypeParameterReferences(classReference, classMetadataFile); + addSuperclassAndInterfacesReferences(classElement, classMetadataFile); + addInnerClassesReferences(classElement, classMetadataFile); + } + + void addChildrenReferences(Element element, List packageChildren, + Set referencesCollector) { + for (TypeElement classElement : elementUtil.extractSortedElements(element)) { + referencesCollector.add(buildClassReference(classElement)); + + packageChildren.add(classLookup.extractUid(classElement)); + addChildrenReferences(classElement, packageChildren, referencesCollector); + } + } + + String getJavaReferenceHref(String uid) { + if (uid == null || uid.equals("")) { + return JAVA_BASE_URL; + } + // example1 uid: "java.lang.Object.equals(java.lang.Object)" + // example2 uid: "java.lang.Object" + String endURL = uid.replaceAll("", ""); + + Pattern argPattern = Pattern.compile(".*\\(.*\\).*"); + if (argPattern.matcher(endURL).find()) { + // example1 + // argumentSplit: ["java.lang.Object.equals", "java.lang.Object)"] + // nameSplit: ["java", "lang", "Object", "equals"] + List argumentSplit = Arrays.asList(endURL.split("\\(")); + List nameSplit = Arrays.asList(argumentSplit.get(0).split("\\.")); + + // className: "java/lang/Object" + // methodName: "#equals" + // argumentsName: "#java.lang.Object-" + String className = String.join("/", nameSplit.subList(0, nameSplit.size() - 1)); + String methodName = "#" + nameSplit.get(nameSplit.size() - 1); + String argumentsName = argumentSplit.get(1).replaceAll("[,)]", "-"); + + // endURL: "java/lang/Object.html#equals-java.lang.Object-" + endURL = className + ".html" + methodName + "-" + argumentsName; + } else { + // example2 + // endURL = java/lang/Object.html + endURL = endURL.replaceAll("\\.", "/"); + endURL = endURL + ".html"; + } + return JAVA_BASE_URL + endURL; + } + + void updateExternalReferences(List classMetadataFiles) { + classMetadataFiles.forEach(file -> file.getReferences() + .forEach(ref -> updateExternalReference(ref))); + } + + private void updateExternalReference(MetadataFileItem reference) { + String uid = reference.getUid(); + uid = updateReferenceUid(uid); + + if (isJavaPrimitive(uid)) { + reference.setHref(PRIMITIVE_URL); + return; + } + if (isJavaLibrary(uid)) { + reference.setHref(getJavaReferenceHref(uid)); + } + if (isExternalReference(uid)) { + reference.setIsExternal(true); + } + if (reference.getSpecForJava().size() > 0) { + for (SpecViewModel spec : reference.getSpecForJava()) { + String specUid = spec.getUid(); + if (specUid != null) { + if (isJavaPrimitive(specUid)) { + spec.setHref(PRIMITIVE_URL); + } + if (isJavaLibrary(specUid)) { + spec.setHref(getJavaReferenceHref(specUid)); + } + if (isExternalReference(specUid)) { + spec.setIsExternal(true); + } + } + } + } + } + + private String updateReferenceUid(String uid) { + if (ENDING_PATTERN.matcher(uid).find()) { + uid = uid.replace("", ""); + } + return uid; + } + + private boolean isExternalReference(String uid) { + return (PROTOBUF_PATTERN.matcher(uid).find() || GAX_PATTERN.matcher(uid).find() || APICOMMON_PATTERN.matcher(uid).find() || GAX_PATTERN.matcher(uid).find() || LONGRUNNING_PATTERN.matcher(uid).find()); + } + + private boolean isJavaPrimitive(String uid) { + return (uid.equals("boolean") || uid.equals("int") || uid.equals("byte") || uid.equals("long") || uid.equals("float") || uid.equals("double") || uid.equals("char") || uid.equals("short")); + } + + private boolean isJavaLibrary(String uid) { + return JAVA_PATTERN.matcher(uid).find(); + } + + void addParameterReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { + classMetadataFile.getReferences().addAll( + methodItem.getSyntax().getParameters().stream() + .map(parameter -> buildRefItem(parameter.getType())) + .filter(o -> !classMetadataFile.getItems().contains(o)) + .collect(Collectors.toList())); + } + + void addReturnReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { + classMetadataFile.getReferences().addAll( + Stream.of(methodItem.getSyntax().getReturnValue()) + .filter(Objects::nonNull) + .map(returnValue -> buildRefItem(returnValue.getReturnType())) + .filter(o -> !classMetadataFile.getItems().contains(o)) + .collect(Collectors.toList())); + } + + void addExceptionReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { + classMetadataFile.getReferences().addAll( + methodItem.getExceptions().stream() + .map(exceptionItem -> buildRefItem(exceptionItem.getType())) + .filter(o -> !classMetadataFile.getItems().contains(o)) + .collect(Collectors.toList())); + } + + void addTypeParameterReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { + classMetadataFile.getReferences().addAll( + methodItem.getSyntax().getTypeParameters().stream() + .map(typeParameter -> { + String id = typeParameter.getId(); + return new MetadataFileItem(id, id, false); + }).collect(Collectors.toList())); + } + + void addSuperclassAndInterfacesReferences(TypeElement classElement, MetadataFile classMetadataFile) { + classMetadataFile.getReferences().addAll(classLookup.extractReferences(classElement)); + } + + void addInnerClassesReferences(TypeElement classElement, MetadataFile classMetadataFile) { + classMetadataFile.getReferences().addAll( + ElementFilter.typesIn(elementUtil.extractSortedElements(classElement)).stream() + .map(this::buildClassReference) + .collect(Collectors.toList())); + } + + void addOverloadReferences(MetadataFileItem item, MetadataFile classMetadataFile) { + classMetadataFile.getReferences().add(new MetadataFileItem(item.getOverload()) {{ + setName(RegExUtils.removeAll(item.getName(), "\\(.*\\)$")); + setNameWithType(RegExUtils.removeAll(item.getNameWithType(), "\\(.*\\)$")); + setFullName(RegExUtils.removeAll(item.getFullName(), "\\(.*\\)$")); + setPackageName(item.getPackageName()); + }}); + } + + /** + * Replace one record in 'references' with several records in this way: + *
+     * a.b.c.List> ->
+     *     - a.b.c.List
+     *     - df.mn.ClassOne
+     *     - tr.T
+     * 
+ */ + void expandComplexGenericsInReferences(MetadataFile classMetadataFile) { + Set additionalItems = new LinkedHashSet<>(); + Iterator iterator = classMetadataFile.getReferences().iterator(); + while (iterator.hasNext()) { + MetadataFileItem item = iterator.next(); + String uid = item.getUid(); + if (!uid.endsWith("*") && uid.contains("<")) { + List classNames = splitUidWithGenericsIntoClassNames(uid); + additionalItems.addAll(classNames.stream() + .map(s -> new MetadataFileItem(s, classLookup.makeTypeShort(s), false)) + .collect(Collectors.toSet())); + } + } + // Remove items which already exist in 'items' section (compared by 'uid' field) + additionalItems.removeAll(classMetadataFile.getItems()); + + classMetadataFile.getReferences().addAll(additionalItems); + } + + MetadataFileItem buildRefItem(String uid) { + if (!uid.endsWith("*") && (uid.contains("<") || uid.contains("[]"))) { + return new MetadataFileItem(uid, getJavaSpec(replaceUidAndSplit(uid))); + } else { + List fullNameList = new ArrayList<>(); + + environment.getIncludedElements().forEach( + element -> elementUtil.extractSortedElements(element).forEach( + typeElement -> fullNameList.add(classLookup.extractFullName(typeElement))) + ); + + if (fullNameList.contains(uid)) { + return new MetadataFileItem(uid, classLookup.makeTypeShort(uid), false); + } else { + return new MetadataFileItem(uid, getJavaSpec(replaceUidAndSplit(uid))); + } + } + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 98d434d3..1dfa0a71 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -1,51 +1,34 @@ package com.microsoft.build; -import com.microsoft.lookup.BaseLookup; import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; import com.microsoft.lookup.PackageLookup; -import com.microsoft.model.*; +import com.microsoft.model.MetadataFile; +import com.microsoft.model.MetadataFileItem; +import com.microsoft.model.TocFile; +import com.microsoft.model.TocItem; +import com.microsoft.model.TocTypeMap; import com.microsoft.util.ElementUtil; import com.microsoft.util.FileUtil; -import com.microsoft.util.Utils; -import com.microsoft.util.YamlUtil; import jdk.javadoc.doclet.DocletEnvironment; -import org.apache.commons.lang3.RegExUtils; -import org.apache.commons.lang3.StringUtils; -import javax.lang.model.element.*; -import javax.lang.model.util.ElementFilter; -import java.util.*; -import java.util.function.Function; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import javax.lang.model.element.PackageElement; +import java.util.ArrayList; +import java.util.List; import java.util.stream.Collectors; -import java.util.stream.Stream; +import static com.microsoft.build.BuilderUtil.populateUidValues; public class YmlFilesBuilder { - - private final static String[] LANGS = {"java"}; - private final Pattern XREF_LINK_PATTERN = Pattern.compile(".*?"); - private final Pattern XREF_LINK_CONTENT_PATTERN = Pattern.compile("(?<=.*?)"); - private final Pattern XREF_LINK_RESOLVE_PATTERN = Pattern.compile("(?\\w+)\\#(?\\w+)(\\((?.*)\\))?"); - private DocletEnvironment environment; private String outputPath; private ElementUtil elementUtil; private PackageLookup packageLookup; - private ClassItemsLookup classItemsLookup; - private ClassLookup classLookup; private String projectName; - - private final Pattern JAVA_PATTERN = Pattern.compile("^java.*"); - private final Pattern PROTOBUF_PATTERN = Pattern.compile("^com.google.protobuf.*"); - private final Pattern GAX_PATTERN = Pattern.compile("^com.google.api.gax.*"); - private final Pattern APICOMMON_PATTERN = Pattern.compile("^com.google.api.core.*"); - private final Pattern LONGRUNNING_PATTERN = Pattern.compile("^com.google.longrunning.*"); - private final Pattern ENDING_PATTERN = Pattern.compile(".*<\\?>$"); - private final String PRIMITIVE_URL = "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html"; - private final String JAVA_BASE_URL = "https://docs.oracle.com/javase/8/docs/api/"; + private ProjectBuilder projectBuilder; + private PackageBuilder packageBuilder; + private ClassBuilder classBuilder; + private ReferenceBuilder referenceBuilder; public YmlFilesBuilder(DocletEnvironment environment, String outputPath, String[] excludePackages, String[] excludeClasses, String projectName) { @@ -53,30 +36,41 @@ public YmlFilesBuilder(DocletEnvironment environment, String outputPath, this.outputPath = outputPath; this.elementUtil = new ElementUtil(excludePackages, excludeClasses); this.packageLookup = new PackageLookup(environment); - this.classItemsLookup = new ClassItemsLookup(environment); - this.classLookup = new ClassLookup(environment); this.projectName = projectName; + this.projectBuilder = new ProjectBuilder(projectName); + ClassLookup classLookup = new ClassLookup(environment); + this.referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); + this.packageBuilder = new PackageBuilder(packageLookup, outputPath, referenceBuilder); + this.classBuilder = new ClassBuilder(elementUtil, classLookup, new ClassItemsLookup(environment), outputPath, referenceBuilder); } public boolean build() { - MetadataFile projectMetadataFile = new MetadataFile(outputPath,"overview.yml");; - List packageItems = new ArrayList<>(); + // table of contents + TocFile tocFile = new TocFile(outputPath, projectName); + // overview page + MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); + // package summary pages List packageMetadataFiles = new ArrayList<>(); + // packages + List packageItems = new ArrayList<>(); + // class/enum/interface/etc. pages List classMetadataFiles = new ArrayList<>(); - TocFile tocFile = new TocFile(outputPath, projectName); - for (PackageElement packageElement : elementUtil.extractPackageElements(environment.getIncludedElements())) { - String uid = packageLookup.extractUid(packageElement); - String status = packageLookup.extractStatus(packageElement.getQualifiedName().toString()); - TocItem packageTocItem = new TocItem(uid, uid, status); - packageMetadataFiles.add(buildPackageMetadataFile(packageElement)); - packageTocItem.getItems().add(new TocItem(uid, "Package summary")); + for (PackageElement packageElement : + elementUtil.extractPackageElements(environment.getIncludedElements())) { + String packageUid = packageLookup.extractUid(packageElement); + String packageStatus = packageLookup.extractStatus(packageElement.getQualifiedName().toString()); + TocItem packageTocItem = new TocItem(packageUid, packageUid, packageStatus); + // build package summary + packageMetadataFiles.add(packageBuilder.buildPackageMetadataFile(packageElement)); + // add package summary to toc + packageTocItem.getItems().add(new TocItem(packageUid, "Package summary")); + tocFile.addTocItem(packageTocItem); + // build classes/interfaces/enums/exceptions/annotations TocTypeMap typeMap = new TocTypeMap(); - buildFilesForInnerClasses(packageElement,typeMap, classMetadataFiles); + classBuilder.buildFilesForInnerClasses(packageElement, typeMap, classMetadataFiles); packageTocItem.getItems().addAll(joinTocTypeItems(typeMap)); - - tocFile.addTocItem(packageTocItem); } for (MetadataFile packageFile : packageMetadataFiles) { @@ -91,10 +85,14 @@ public boolean build() { } } } - buildProjectMetadataFile(packageItems, projectMetadataFile); + // build project summary page + projectBuilder.buildProjectMetadataFile(packageItems, projectMetadataFile); + + // post-processing populateUidValues(packageMetadataFiles, classMetadataFiles); - updateExternalReferences(classMetadataFiles); + referenceBuilder.updateExternalReferences(classMetadataFiles); + // write to yaml files FileUtil.dumpToFile(projectMetadataFile); packageMetadataFiles.forEach(FileUtil::dumpToFile); classMetadataFiles.forEach(FileUtil::dumpToFile); @@ -103,7 +101,7 @@ public boolean build() { return true; } - List joinTocTypeItems(TocTypeMap tocTypeMap){ + List joinTocTypeItems(TocTypeMap tocTypeMap) { return tocTypeMap.getTitleList().stream() .filter(kindTitle -> tocTypeMap.get(kindTitle.getElementKind()).size() > 0) .flatMap(kindTitle -> { @@ -111,574 +109,4 @@ List joinTocTypeItems(TocTypeMap tocTypeMap){ return tocTypeMap.get(kindTitle.getElementKind()).stream(); }).collect(Collectors.toList()); } - - void buildFilesForInnerClasses(Element element, TocTypeMap tocTypeMap, List container) { - for (TypeElement classElement : elementUtil.extractSortedElements(element)) { - String uid = classLookup.extractUid(classElement); - String name = classLookup.extractTocName(classElement); - String status = classLookup.extractStatus(classElement); - - if (tocTypeMap.get(classElement.getKind().name()) != null) { - if (classElement.getKind().name().equals(ElementKind.CLASS.name()) && name.contains("Exception")) { - tocTypeMap.get("EXCEPTION").add(new TocItem(uid, name, status)); - } else { - tocTypeMap.get(classElement.getKind().name()).add(new TocItem(uid, name, status)); - } - } else { - tocTypeMap.get(ElementKind.CLASS.name()).add(new TocItem(uid, name, status)); - } - - container.add(buildClassYmlFile(classElement)); - buildFilesForInnerClasses(classElement, tocTypeMap, container); - } - } - - - void buildProjectMetadataFile(List packageItems, MetadataFile projectMetadataFile) { - MetadataFileItem projectItem = new MetadataFileItem(LANGS, projectName); - projectItem.setNameWithType(projectName); - projectItem.setFullName(projectName); - projectItem.setType("Namespace"); - projectItem.setJavaType("overview"); - - List children = new ArrayList<>(); - List references = new ArrayList<>(); - packageItems.stream().forEach(i -> { - children.add(i.getUid()); - MetadataFileItem refItem = new MetadataFileItem(i.getUid()); - refItem.setName(i.getName()); - refItem.setNameWithType(i.getNameWithType()); - refItem.setFullName(i.getFullName()); - references.add(refItem); - }); - - projectItem.getChildren().addAll(children); - projectMetadataFile.getReferences().addAll(references); - projectMetadataFile.getItems().add(projectItem); - } - - MetadataFile buildPackageMetadataFile(PackageElement packageElement) { - String fileName = packageLookup.extractHref(packageElement); - MetadataFile packageMetadataFile = new MetadataFile(outputPath, fileName); - MetadataFileItem packageItem = new MetadataFileItem(LANGS, packageLookup.extractUid(packageElement)); - packageItem.setId(packageLookup.extractId(packageElement)); - addChildrenReferences(packageElement, packageItem.getChildren(), packageMetadataFile.getReferences()); - populateItemFields(packageItem, packageLookup, packageElement); - packageMetadataFile.getItems().add(packageItem); - return packageMetadataFile; - } - - void addChildrenReferences(Element element, List packageChildren, - Set referencesCollector) { - for (TypeElement classElement : elementUtil.extractSortedElements(element)) { - referencesCollector.add(buildClassReference(classElement)); - - packageChildren.add(classLookup.extractUid(classElement)); - addChildrenReferences(classElement, packageChildren, referencesCollector); - } - } - - MetadataFileItem buildClassReference(TypeElement classElement) { - MetadataFileItem referenceItem = new MetadataFileItem(classLookup.extractUid(classElement)); - referenceItem.setName(classLookup.extractName(classElement)); - referenceItem.setNameWithType(classLookup.extractNameWithType(classElement)); - referenceItem.setFullName(classLookup.extractFullName(classElement)); - return referenceItem; - } - - void populateItemFields(MetadataFileItem item, BaseLookup lookup, T element) { - String name = lookup.extractName(element); - item.setName(name); - item.setNameWithType(lookup.extractNameWithType(element)); - item.setFullName(lookup.extractFullName(element)); - item.setType(lookup.extractType(element)); - item.setJavaType(lookup.extractJavaType(element)); - item.setSummary(lookup.extractSummary(element)); - item.setContent(lookup.extractContent(element)); - } - - MetadataFile buildClassYmlFile(TypeElement classElement) { - String fileName = classLookup.extractHref(classElement); - MetadataFile classMetadataFile = new MetadataFile(outputPath, fileName); - addClassInfo(classElement, classMetadataFile); - addConstructorsInfo(classElement, classMetadataFile); - addMethodsInfo(classElement, classMetadataFile); - addFieldsInfo(classElement, classMetadataFile); - addReferencesInfo(classElement, classMetadataFile); - applyPostProcessing(classMetadataFile); - return classMetadataFile; - } - - void addClassInfo(TypeElement classElement, MetadataFile classMetadataFile) { - MetadataFileItem classItem = new MetadataFileItem(LANGS, classLookup.extractUid(classElement)); - classItem.setId(classLookup.extractId(classElement)); - classItem.setParent(classLookup.extractParent(classElement)); - addChildren(classElement, classItem.getChildren()); - populateItemFields(classItem, classLookup, classElement); - classItem.setPackageName(classLookup.extractPackageName(classElement)); - classItem.setTypeParameters(classLookup.extractTypeParameters(classElement)); - classItem.setInheritance(classLookup.extractSuperclass(classElement)); - classItem.setInterfaces(classLookup.extractInterfaces(classElement)); - classItem.setInheritedMethods(classLookup.extractInheritedMethods(classElement)); - String depMsg = classLookup.extractDeprecatedDescription(classElement); - if (depMsg != null) { - classItem.setSummary(getDeprecatedSummary(depMsg, classItem.getSummary())); - classItem.setStatus(Status.DEPRECATED.toString()); - } - classMetadataFile.getItems().add(classItem); - } - - String getDeprecatedSummary(String depMsg, String summary){ - String result = "

(deprecated) " + depMsg + "

"; - if (summary != null && !summary.equals("")) { - result = result + "\n" + summary; - } - return result; - } - - void addChildren(TypeElement classElement, List children) { - collect(classElement, children, ElementFilter::constructorsIn, classItemsLookup::extractUid); - collect(classElement, children, ElementFilter::methodsIn, classItemsLookup::extractUid); - collect(classElement, children, ElementFilter::fieldsIn, classItemsLookup::extractUid); - collect(classElement, children, ElementFilter::typesIn, String::valueOf); - } - - List filterPrivateElements(List elements) { - return elements.stream() - .filter(element -> !Utils.isPrivateOrPackagePrivate(element)).collect(Collectors.toList()); - } - - void collect(TypeElement classElement, List children, - Function, List> selectFunc, - Function mapFunc) { - - List elements = selectFunc.apply(classElement.getEnclosedElements()); - children.addAll(filterPrivateElements(elements).stream() - .map(mapFunc).collect(Collectors.toList())); - } - - void addConstructorsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - for (ExecutableElement constructorElement : ElementFilter.constructorsIn(classElement.getEnclosedElements())) { - MetadataFileItem constructorItem = buildMetadataFileItem(constructorElement); - constructorItem.setOverload(classItemsLookup.extractOverload(constructorElement)); - constructorItem.setContent(classItemsLookup.extractConstructorContent(constructorElement)); - constructorItem.setParameters(classItemsLookup.extractParameters(constructorElement)); - String depMsg = classItemsLookup.extractDeprecatedDescription(constructorElement); - if (depMsg != null) { - constructorItem.setSummary(getDeprecatedSummary(depMsg, constructorItem.getSummary())); - constructorItem.setStatus(Status.DEPRECATED.toString()); - } - classMetadataFile.getItems().add(constructorItem); - - addParameterReferences(constructorItem, classMetadataFile); - addOverloadReferences(constructorItem, classMetadataFile); - } - } - - void addMethodsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - ElementFilter.methodsIn(classElement.getEnclosedElements()).stream() - .filter(methodElement -> !Utils.isPrivateOrPackagePrivate(methodElement)) - .forEach(methodElement -> { - MetadataFileItem methodItem = buildMetadataFileItem(methodElement); - methodItem.setOverload(classItemsLookup.extractOverload(methodElement)); - methodItem.setContent(classItemsLookup.extractMethodContent(methodElement)); - methodItem.setExceptions(classItemsLookup.extractExceptions(methodElement)); - methodItem.setParameters(classItemsLookup.extractParameters(methodElement)); - methodItem.setReturn(classItemsLookup.extractReturn(methodElement)); - methodItem.setOverridden(classItemsLookup.extractOverridden(methodElement)); - String depMsg = classItemsLookup.extractDeprecatedDescription(methodElement); - if (depMsg != null) { - methodItem.setSummary(getDeprecatedSummary(depMsg, methodItem.getSummary())); - methodItem.setStatus(Status.DEPRECATED.toString()); - } - - classMetadataFile.getItems().add(methodItem); - addExceptionReferences(methodItem, classMetadataFile); - addParameterReferences(methodItem, classMetadataFile); - addReturnReferences(methodItem, classMetadataFile); - addOverloadReferences(methodItem, classMetadataFile); - }); - } - - void addFieldsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - ElementFilter.fieldsIn(classElement.getEnclosedElements()).stream() - .filter(fieldElement -> !Utils.isPrivateOrPackagePrivate(fieldElement)) - .forEach(fieldElement -> { - MetadataFileItem fieldItem = buildMetadataFileItem(fieldElement); - fieldItem.setContent(classItemsLookup.extractFieldContent(fieldElement)); - fieldItem.setReturn(classItemsLookup.extractReturn(fieldElement)); - String depMsg = classItemsLookup.extractDeprecatedDescription(fieldElement); - if (depMsg != null) { - fieldItem.setSummary(getDeprecatedSummary(depMsg, fieldItem.getSummary())); - fieldItem.setStatus(Status.DEPRECATED.toString()); - } - - classMetadataFile.getItems().add(fieldItem); - addReturnReferences(fieldItem, classMetadataFile); - }); - } - - void addReferencesInfo(TypeElement classElement, MetadataFile classMetadataFile) { - MetadataFileItem classReference = new MetadataFileItem(classLookup.extractUid(classElement)); - classReference.setParent(classLookup.extractParent(classElement)); - populateItemFields(classReference, classLookup, classElement); - classReference.setTypeParameters(classLookup.extractTypeParameters(classElement)); - - addTypeParameterReferences(classReference, classMetadataFile); - addSuperclassAndInterfacesReferences(classElement, classMetadataFile); - addInnerClassesReferences(classElement, classMetadataFile); - } - - MetadataFileItem buildMetadataFileItem(Element element) { - return new MetadataFileItem(LANGS, classItemsLookup.extractUid(element)) {{ - String name = classItemsLookup.extractName(element); - setId(classItemsLookup.extractId(element)); - setParent(classItemsLookup.extractParent(element)); - setName(name); - setNameWithType(classItemsLookup.extractNameWithType(element)); - setFullName(classItemsLookup.extractFullName(element)); - setType(classItemsLookup.extractType(element)); - setJavaType(classItemsLookup.extractJavaType(element)); - setPackageName(classItemsLookup.extractPackageName(element)); - setSummary(classItemsLookup.extractSummary(element)); - }}; - } - - protected String getJavaReferenceHref(String uid) { - if (uid == null || uid.equals("")) { - return JAVA_BASE_URL; - } - // example1 uid: "java.lang.Object.equals(java.lang.Object)" - // example2 uid: "java.lang.Object" - String endURL = uid.replaceAll("", ""); - - Pattern argPattern = Pattern.compile(".*\\(.*\\).*"); - if (argPattern.matcher(endURL).find()) { - // example1 - // argumentSplit: ["java.lang.Object.equals", "java.lang.Object)"] - // nameSplit: ["java", "lang", "Object", "equals"] - List argumentSplit = Arrays.asList(endURL.split("\\(")); - List nameSplit = Arrays.asList(argumentSplit.get(0).split("\\.")); - - // className: "java/lang/Object" - // methodName: "#equals" - // argumentsName: "#java.lang.Object-" - String className = String.join("/", nameSplit.subList(0, nameSplit.size() - 1)); - String methodName = "#" + nameSplit.get(nameSplit.size() - 1); - String argumentsName = argumentSplit.get(1).replaceAll("[,)]", "-"); - - // endURL: "java/lang/Object.html#equals-java.lang.Object-" - endURL = className + ".html" + methodName + "-" + argumentsName; - } else { - // example2 - // endURL = java/lang/Object.html - endURL = endURL.replaceAll("\\.", "/"); - endURL = endURL + ".html"; - } - return JAVA_BASE_URL + endURL; - } - - private void updateExternalReferences(List classMetadataFiles) { - classMetadataFiles.forEach(file -> file.getReferences() - .forEach(ref -> updateExternalReference(ref))); - } - - private void updateExternalReference(MetadataFileItem reference) { - String uid = reference.getUid(); - uid = updateReferenceUid(uid); - - if (isJavaPrimitive(uid)) { - reference.setHref(PRIMITIVE_URL); - return; - } - if (isJavaLibrary(uid)) { - reference.setHref(getJavaReferenceHref(uid)); - } - if (isExternalReference(uid)) { - reference.setIsExternal(true); - } - if (reference.getSpecForJava().size() > 0) { - for (SpecViewModel spec : reference.getSpecForJava()) { - String specUid = spec.getUid(); - if (specUid != null) { - if (isJavaPrimitive(specUid)) { - spec.setHref(PRIMITIVE_URL); - } - if (isJavaLibrary(specUid)) { - spec.setHref(getJavaReferenceHref(specUid)); - } - if (isExternalReference(specUid)) { - spec.setIsExternal(true); - } - } - } - } - } - - private String updateReferenceUid(String uid) { - if (ENDING_PATTERN.matcher(uid).find()) { - uid = uid.replace("", ""); - } - return uid; - } - - private boolean isExternalReference(String uid) { - return (PROTOBUF_PATTERN.matcher(uid).find() || GAX_PATTERN.matcher(uid).find() || APICOMMON_PATTERN.matcher(uid).find() || GAX_PATTERN.matcher(uid).find() || LONGRUNNING_PATTERN.matcher(uid).find()); - } - - private boolean isJavaPrimitive(String uid) { - return (uid.equals("boolean") || uid.equals("int") || uid.equals("byte") || uid.equals("long") || uid.equals("float") || uid.equals("double") || uid.equals("char") || uid.equals("short")); - } - - private boolean isJavaLibrary(String uid) { - return JAVA_PATTERN.matcher(uid).find(); - } - - void addParameterReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll( - methodItem.getSyntax().getParameters().stream() - .map(parameter -> buildRefItem(parameter.getType())) - .filter(o -> !classMetadataFile.getItems().contains(o)) - .collect(Collectors.toList())); - } - - void addReturnReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll( - Stream.of(methodItem.getSyntax().getReturnValue()) - .filter(Objects::nonNull) - .map(returnValue -> buildRefItem(returnValue.getReturnType())) - .filter(o -> !classMetadataFile.getItems().contains(o)) - .collect(Collectors.toList())); - } - - void addExceptionReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll( - methodItem.getExceptions().stream() - .map(exceptionItem -> buildRefItem(exceptionItem.getType())) - .filter(o -> !classMetadataFile.getItems().contains(o)) - .collect(Collectors.toList())); - } - - void addTypeParameterReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll( - methodItem.getSyntax().getTypeParameters().stream() - .map(typeParameter -> { - String id = typeParameter.getId(); - return new MetadataFileItem(id, id, false); - }).collect(Collectors.toList())); - } - - void addSuperclassAndInterfacesReferences(TypeElement classElement, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll(classLookup.extractReferences(classElement)); - } - - void addInnerClassesReferences(TypeElement classElement, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll( - ElementFilter.typesIn(elementUtil.extractSortedElements(classElement)).stream() - .map(this::buildClassReference) - .collect(Collectors.toList())); - } - - void addOverloadReferences(MetadataFileItem item, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().add(new MetadataFileItem(item.getOverload()) {{ - setName(RegExUtils.removeAll(item.getName(), "\\(.*\\)$")); - setNameWithType(RegExUtils.removeAll(item.getNameWithType(), "\\(.*\\)$")); - setFullName(RegExUtils.removeAll(item.getFullName(), "\\(.*\\)$")); - setPackageName(item.getPackageName()); - }}); - } - - void applyPostProcessing(MetadataFile classMetadataFile) { - expandComplexGenericsInReferences(classMetadataFile); - } - - /** - * Replace one record in 'references' with several records in this way: - *
-     * a.b.c.List> ->
-     *     - a.b.c.List
-     *     - df.mn.ClassOne
-     *     - tr.T
-     * 
- */ - void expandComplexGenericsInReferences(MetadataFile classMetadataFile) { - Set additionalItems = new LinkedHashSet<>(); - Iterator iterator = classMetadataFile.getReferences().iterator(); - while (iterator.hasNext()) { - MetadataFileItem item = iterator.next(); - String uid = item.getUid(); - if (!uid.endsWith("*") && uid.contains("<")) { - List classNames = splitUidWithGenericsIntoClassNames(uid); - additionalItems.addAll(classNames.stream() - .map(s -> new MetadataFileItem(s, classLookup.makeTypeShort(s), false)) - .collect(Collectors.toSet())); - } - } - // Remove items which already exist in 'items' section (compared by 'uid' field) - additionalItems.removeAll(classMetadataFile.getItems()); - - classMetadataFile.getReferences().addAll(additionalItems); - } - - void populateUidValues(List packageMetadataFiles, List classMetadataFiles) { - Lookup lookup = new Lookup(packageMetadataFiles, classMetadataFiles); - - classMetadataFiles.forEach(classMetadataFile -> { - LookupContext lookupContext = lookup.buildContext(classMetadataFile); - - for (MetadataFileItem item : classMetadataFile.getItems()) { - item.setSummary(YamlUtil.cleanupHtml( - populateUidValues(item.getSummary(), lookupContext) - )); - - Optional.ofNullable(item.getSyntax()).ifPresent(syntax -> { - Optional.ofNullable(syntax.getParameters()).ifPresent( - methodParams -> methodParams.forEach( - param -> { - param.setDescription(populateUidValues(param.getDescription(), lookupContext)); - }) - ); - Optional.ofNullable(syntax.getReturnValue()).ifPresent(returnValue -> - returnValue.setReturnDescription( - populateUidValues(syntax.getReturnValue().getReturnDescription(), lookupContext) - ) - ); - } - ); - } - }); - } - - String populateUidValues(String text, LookupContext lookupContext) { - if (StringUtils.isBlank(text)) { - return text; - } - - Matcher linkMatcher = XREF_LINK_PATTERN.matcher(text); - while (linkMatcher.find()) { - String link = linkMatcher.group(); - Matcher linkContentMatcher = XREF_LINK_CONTENT_PATTERN.matcher(link); - if (!linkContentMatcher.find()) { - continue; - } - - String linkContent = linkContentMatcher.group(); - String uid = resolveUidFromLinkContent(linkContent, lookupContext); - String updatedLink = linkContentMatcher.replaceAll(uid); - text = StringUtils.replace(text, link, updatedLink); - } - return text; - } - - /** - * The linkContent could be in following format - * #memeber - * Class#member - * Class#method() - * Class#method(params) - */ - String resolveUidFromLinkContent(String linkContent, LookupContext lookupContext) { - if (StringUtils.isBlank(linkContent)) { - return ""; - } - - linkContent = linkContent.trim(); - - // complete class name for class internal link - if (linkContent.startsWith("#")) { - String firstKey = lookupContext.getOwnerUid(); - linkContent = firstKey + linkContent; - } - - // fuzzy resolve, target for items from project external references - String fuzzyResolvedUid = resolveUidFromReference(linkContent, lookupContext); - - // exact resolve in lookupContext - linkContent = linkContent.replace("#", "."); - String exactResolveUid = resolveUidByLookup(linkContent, lookupContext); - return exactResolveUid.isEmpty() ? fuzzyResolvedUid : exactResolveUid; - } - - List splitUidWithGenericsIntoClassNames(String uid) { - uid = RegExUtils.removeAll(uid, "[>]+$"); - return Arrays.asList(StringUtils.split(uid, "<")); - } - - MetadataFileItem buildRefItem(String uid) { - if (!uid.endsWith("*") && (uid.contains("<") || uid.contains("[]"))) { - return new MetadataFileItem(uid, getJavaSpec(replaceUidAndSplit(uid))); - } else { - List fullNameList = new ArrayList<>(); - - this.environment.getIncludedElements().forEach( - element -> elementUtil.extractSortedElements(element).forEach( - typeElement -> fullNameList.add(classLookup.extractFullName(typeElement))) - ); - - if (fullNameList.contains(uid)) { - return new MetadataFileItem(uid, classLookup.makeTypeShort(uid), false); - } else { - return new MetadataFileItem(uid, getJavaSpec(replaceUidAndSplit(uid))); - } - } - } - - List replaceUidAndSplit(String uid) { - String retValue = RegExUtils.replaceAll(uid, "\\<", "//", "//>//"); - retValue = RegExUtils.replaceAll(retValue, ",", "//,//"); - retValue = RegExUtils.replaceAll(retValue, "\\[\\]", "//[]//"); - - return Arrays.asList(StringUtils.split(retValue, "//")); - } - - List getJavaSpec(List references) { - List specList = new ArrayList<>(); - - Optional.ofNullable(references).ifPresent( - ref -> references.forEach( - uid -> { - if (uid.equalsIgnoreCase("<") - || uid.equalsIgnoreCase(">") - || uid.equalsIgnoreCase(",") - || uid.equalsIgnoreCase("[]")) - specList.add(new SpecViewModel(null, uid)); - else if (uid != "") - specList.add(new SpecViewModel(uid, uid)); - }) - ); - - return specList; - } - - /** - * this method is used to do fuzzy resolve - * "*" will be added at the end of uid for method for xerf service resolve purpose - */ - String resolveUidFromReference(String linkContent, LookupContext lookupContext) { - String uid = ""; - Matcher matcher = XREF_LINK_RESOLVE_PATTERN.matcher(linkContent); - - if (matcher.find()) { - String className = matcher.group("class"); - String memberName = matcher.group("member"); - uid = resolveUidByLookup(className, lookupContext); - if (!uid.isEmpty()) { - uid = uid.concat(".").concat(memberName); - - // linkContent targets a method - if (!StringUtils.isBlank(matcher.group(3))) { - uid = uid.concat("*"); - } - } - } - return uid; - } - - String resolveUidByLookup(String signature, LookupContext lookupContext) { - if (StringUtils.isBlank(signature) || lookupContext == null) { - return ""; - } - return lookupContext.containsKey(signature) ? lookupContext.resolve(signature) : ""; - } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/BuilderUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/BuilderUtilTest.java new file mode 100644 index 00000000..03bdda31 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/BuilderUtilTest.java @@ -0,0 +1,113 @@ +/* + * Copyright 2021 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 + * + * https://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.microsoft.build; + +import com.microsoft.model.MetadataFile; +import com.microsoft.model.MetadataFileItem; +import com.microsoft.model.MethodParameter; +import com.microsoft.model.Syntax; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class BuilderUtilTest { + @Test + public void populateUidValues() { + MetadataFile classMetadataFile = new MetadataFile("output", "name"); + + MetadataFileItem ownerClassItem = buildMetadataFileItem("a.b.OwnerClass", "Not important summary value"); + ownerClassItem.setNameWithType("OwnerClass"); + MetadataFileItem item1 = buildMetadataFileItem("UID unknown class", "UnknownClass"); + populateSyntax(item1, "SomeClass#someMethod(String param)"); + MetadataFileItem item2 = buildMetadataFileItem("UID known class", "SomeClass#someMethod(String param)"); + MetadataFileItem item3 = buildMetadataFileItem("UID method only", "#someMethod2(String p1, String p2)"); + classMetadataFile.getItems().addAll(Arrays.asList(ownerClassItem, item1, item2, item3)); + + MetadataFileItem reference1 = new MetadataFileItem("a.b.SomeClass.someMethod(String param)"); + reference1.setNameWithType("SomeClass.someMethod(String param)"); + MetadataFileItem reference2 = new MetadataFileItem("a.b.OwnerClass.someMethod2(String p1, String p2)"); + reference2.setNameWithType("OwnerClass.someMethod2(String p1, String p2)"); + classMetadataFile.getReferences().addAll(Arrays.asList(reference1, reference2)); + + BuilderUtil.populateUidValues(Collections.emptyList(), Arrays.asList(classMetadataFile)); + + assertEquals("Wrong summary for unknown class", item1.getSummary(), + "Bla bla UnknownClass bla"); + assertEquals("Wrong syntax description", item1.getSyntax().getParameters().get(0).getDescription(), + "One two SomeClass#someMethod(String param) three"); + assertEquals("Wrong summary for known class", item2.getSummary(), + "Bla bla SomeClass#someMethod(String param) bla"); + assertEquals("Wrong summary for method", item3.getSummary(), + "Bla bla #someMethod2(String p1, String p2) bla"); + + } + + private MetadataFileItem buildMetadataFileItem(String uid, String value) { + MetadataFileItem item = new MetadataFileItem(uid); + item.setSummary( + String.format("Bla bla %s bla", value, value)); + return item; + } + + private void populateSyntax(MetadataFileItem item, String value) { + Syntax syntax = new Syntax(); + String methodParamDescription = String + .format("One two %s three", value, value); + syntax.setParameters( + Arrays.asList(new MethodParameter("method param id", "method param type", methodParamDescription))); + item.setSyntax(syntax); + } + + @Test + public void determineUidByLinkContent() { + Map lookup = new HashMap<>() {{ + put("SomeClass", "a.b.c.SomeClass"); + put("SomeClass.someMethod()", "a.b.c.SomeClass.someMethod()"); + put("SomeClass.someMethod(String param)", "a.b.c.SomeClass.someMethod(String param)"); + }}; + + LookupContext lookupContext = new LookupContext(lookup, lookup); + assertEquals("Wrong result for class", BuilderUtil. + resolveUidByLookup("SomeClass", lookupContext), "a.b.c.SomeClass"); + assertEquals("Wrong result for method", BuilderUtil. + resolveUidFromLinkContent("SomeClass#someMethod()", lookupContext), "a.b.c.SomeClass.someMethod()"); + assertEquals("Wrong result for method with param", BuilderUtil. + resolveUidFromLinkContent("SomeClass#someMethod(String param)", lookupContext), + "a.b.c.SomeClass.someMethod(String param)"); + + assertEquals("Wrong result for unknown class", BuilderUtil. + resolveUidByLookup("UnknownClass", lookupContext), ""); + assertEquals("Wrong result for null", BuilderUtil.resolveUidByLookup(null, lookupContext), ""); + assertEquals("Wrong result for whitespace", BuilderUtil.resolveUidByLookup(" ", lookupContext), ""); + } + + @Test + public void splitUidWithGenericsIntoClassNames() { + List result = BuilderUtil.splitUidWithGenericsIntoClassNames("a.b.c.List>"); + + assertEquals("Wrong result list size", result.size(), 3); + assertTrue("Wrong result list content", result.contains("a.b.c.List")); + assertTrue("Wrong result list content", result.contains("df.mn.ClassOne")); + assertTrue("Wrong result list content", result.contains("tr.T")); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java new file mode 100644 index 00000000..1a9d1ef0 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java @@ -0,0 +1,87 @@ +/* + * Copyright 2021 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 + * + * https://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.microsoft.build; + +import com.google.testing.compile.CompilationRule; +import com.microsoft.lookup.ClassItemsLookup; +import com.microsoft.lookup.ClassLookup; +import com.microsoft.model.MetadataFile; +import com.microsoft.model.MetadataFileItem; +import com.microsoft.util.ElementUtil; +import com.sun.source.util.DocTrees; +import jdk.javadoc.doclet.DocletEnvironment; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mockito; + +import javax.lang.model.element.TypeElement; +import javax.lang.model.util.Elements; +import java.io.File; +import java.util.Collection; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +public class ClassBuilderTest { + @Rule + public CompilationRule rule = new CompilationRule(); + private Elements elements; + private ClassBuilder classBuilder; + private DocletEnvironment environment; + private DocTrees docTrees; + + @Before + public void setup() { + elements = rule.getElements(); + environment = Mockito.mock(DocletEnvironment.class); + docTrees = Mockito.mock(DocTrees.class); + ElementUtil elementUtil = new ElementUtil(new String[0], new String[0]); + ClassLookup classLookup = new ClassLookup(environment); + classBuilder = new ClassBuilder( + elementUtil, + classLookup, + new ClassItemsLookup(environment), + "./target", + new ReferenceBuilder(environment, classLookup, elementUtil)); + } + @Test + public void addConstructorsInfoWhenOnlyDefaultConstructor() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); + MetadataFile container = new MetadataFile("output", "name"); + when(environment.getElementUtils()).thenReturn(elements); + when(environment.getDocTrees()).thenReturn(docTrees); + + classBuilder.addConstructorsInfo(element, container); + + assertEquals("Wrong file name", container.getFileNameWithPath(), "output" + File.separator + "name"); + assertEquals("Container should contain constructor item", container.getItems().size(), 1); + } + + @Test + public void addConstructorsInfo() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + MetadataFile container = new MetadataFile("output", "name"); + when(environment.getElementUtils()).thenReturn(elements); + when(environment.getDocTrees()).thenReturn(docTrees); + + classBuilder.addConstructorsInfo(element, container); + + assertEquals("Wrong file name", container.getFileNameWithPath(), "output" + File.separator + "name"); + Collection constructorItems = container.getItems(); + assertEquals("Container should contain 2 constructor items", constructorItems.size(), 2); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java new file mode 100644 index 00000000..4afc21d2 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java @@ -0,0 +1,113 @@ +/* + * Copyright 2021 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 + * + * https://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.microsoft.build; + +import com.microsoft.lookup.ClassLookup; +import com.microsoft.model.MetadataFile; +import com.microsoft.model.MetadataFileItem; +import com.microsoft.util.ElementUtil; +import jdk.javadoc.doclet.DocletEnvironment; +import org.apache.commons.lang3.RegExUtils; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class ReferenceBuilderTest { + + private ReferenceBuilder referenceBuilder; + + @Before + public void setup() { + DocletEnvironment environment = Mockito.mock(DocletEnvironment.class); + ElementUtil elementUtil = new ElementUtil(new String[0], new String[0]); + ClassLookup classLookup = new ClassLookup(environment); + referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); + } + + @Test + public void expandComplexGenericsInReferences() { + MetadataFile classMetadataFile = new MetadataFile("path", "name"); + MetadataFileItem referenceItem = new MetadataFileItem("a.b.c.List>"); + Set references = classMetadataFile.getReferences(); + references.add(referenceItem); + + referenceBuilder.expandComplexGenericsInReferences(classMetadataFile); + + assertEquals("Wrong references amount", references.size(), 4); + + List content = references.stream().map(MetadataFileItem::getUid).collect(Collectors.toList()); + assertTrue("Wrong references content", content.contains("a.b.c.List")); + assertTrue("Wrong references content", content.contains("df.mn.ClassOne")); + assertTrue("Wrong references content", content.contains("tr.T")); + assertTrue("Wrong references content", content.contains("a.b.c.List>")); + } + + //todo add test case to cover reference item with in package + @Test + public void buildRefItem() { + buildRefItemAndCheckAssertions("java.lang.Some.String", "java.lang.Some.String", "String"); + buildRefItemAndCheckAssertions("java.lang.Some.String[]", "java.lang.Some.String[]", "String"); + } + + private void buildRefItemAndCheckAssertions(String initialValue, String expectedUid, String expectedName) { + MetadataFileItem result = referenceBuilder.buildRefItem(initialValue); + + assertEquals("Wrong uid", result.getUid(), expectedUid); + assertEquals("Wrong name", result.getSpecForJava().iterator().next().getUid(), RegExUtils.removeAll(expectedUid, "\\[\\]$")); + assertEquals("Wrong name", result.getSpecForJava().iterator().next().getName(), expectedName); + assertEquals("Wrong fullName", result.getSpecForJava().iterator().next().getFullName(), RegExUtils.removeAll(expectedUid, "\\[\\]$")); + } + + @Test + public void getJavaReferenceHref() { + String result1 = referenceBuilder.getJavaReferenceHref("java.lang.Object"); + String result2 = referenceBuilder.getJavaReferenceHref("java.lang.Object.equals(java.lang.Object)"); + String result3 = referenceBuilder.getJavaReferenceHref("java.lang.Object.notify()"); + String result4 = referenceBuilder.getJavaReferenceHref("java.util.List"); + String result5 = referenceBuilder.getJavaReferenceHref("java.lang.Object.wait(long,int)"); + String result6 = referenceBuilder.getJavaReferenceHref("java.lang.Object.getClass()"); + String result7 = referenceBuilder.getJavaReferenceHref("java.io.IOException"); + String result8 = referenceBuilder.getJavaReferenceHref("java.io.InputStream"); + String result9 = referenceBuilder.getJavaReferenceHref("java.lang.Enum.hashCode()"); + String result10 = referenceBuilder.getJavaReferenceHref("java.nio.ByteBuffer"); + String result11 = referenceBuilder.getJavaReferenceHref("java.lang.Enum.valueOf(java.lang.Class,java.lang.String)"); + String result12 = referenceBuilder.getJavaReferenceHref(""); + String result13 = referenceBuilder.getJavaReferenceHref(null); + + String baseURL = "https://docs.oracle.com/javase/8/docs/api/"; + + assertEquals(baseURL + "java/lang/Object.html", result1); + assertEquals(baseURL + "java/lang/Object.html#equals-java.lang.Object-", result2); + assertEquals(baseURL + "java/lang/Object.html#notify--", result3); + assertEquals(baseURL + "java/util/List.html", result4); + assertEquals(baseURL + "java/lang/Object.html#wait-long-int-", result5); + assertEquals(baseURL + "java/lang/Object.html#getClass--", result6); + assertEquals(baseURL + "java/io/IOException.html", result7); + assertEquals(baseURL + "java/io/InputStream.html", result8); + assertEquals(baseURL + "java/lang/Enum.html#hashCode--", result9); + assertEquals(baseURL + "java/nio/ByteBuffer.html", result10); + assertEquals(baseURL + "java/lang/Enum.html#valueOf-java.lang.Class-java.lang.String-", result11); + assertEquals(baseURL, result12); + assertEquals(baseURL, result13); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java index bd0aa3a3..c6d92d40 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java @@ -1,221 +1,31 @@ package com.microsoft.build; -import com.google.testing.compile.CompilationRule; -import com.microsoft.model.*; -import com.sun.source.util.DocTrees; +import com.microsoft.model.TocItem; +import com.microsoft.model.TocTypeMap; import jdk.javadoc.doclet.DocletEnvironment; -import org.apache.commons.lang3.RegExUtils; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import javax.lang.model.element.ElementKind; -import javax.lang.model.element.TypeElement; -import javax.lang.model.util.Elements; -import java.io.File; -import java.util.*; -import java.util.stream.Collectors; +import java.util.List; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class YmlFilesBuilderTest { - @Rule - public CompilationRule rule = new CompilationRule(); - private Elements elements; private YmlFilesBuilder ymlFilesBuilder; private DocletEnvironment environment; - private DocTrees docTrees; @Before public void setup() { - elements = rule.getElements(); environment = Mockito.mock(DocletEnvironment.class); - docTrees = Mockito.mock(DocTrees.class); ymlFilesBuilder = new YmlFilesBuilder(environment, "./target", new String[]{}, new String[]{}, "google-cloud-product"); } - @Test - public void addConstructorsInfoWhenOnlyDefaultConstructor() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); - MetadataFile container = new MetadataFile("output", "name"); - when(environment.getElementUtils()).thenReturn(elements); - when(environment.getDocTrees()).thenReturn(docTrees); - - ymlFilesBuilder.addConstructorsInfo(element, container); - - assertEquals("Wrong file name", container.getFileNameWithPath(), "output" + File.separator + "name"); - assertEquals("Container should contain constructor item", container.getItems().size(), 1); - } - - @Test - public void addConstructorsInfo() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - MetadataFile container = new MetadataFile("output", "name"); - when(environment.getElementUtils()).thenReturn(elements); - when(environment.getDocTrees()).thenReturn(docTrees); - - ymlFilesBuilder.addConstructorsInfo(element, container); - - assertEquals("Wrong file name", container.getFileNameWithPath(), "output" + File.separator + "name"); - Collection constructorItems = container.getItems(); - assertEquals("Container should contain 2 constructor items", constructorItems.size(), 2); - } - - //todo add test case to cover reference item with in package - @Test - public void buildRefItem() { - buildRefItemAndCheckAssertions("java.lang.Some.String", "java.lang.Some.String", "String"); - buildRefItemAndCheckAssertions("java.lang.Some.String[]", "java.lang.Some.String[]", "String"); - } - - private void buildRefItemAndCheckAssertions(String initialValue, String expectedUid, String expectedName) { - MetadataFileItem result = ymlFilesBuilder.buildRefItem(initialValue); - - assertEquals("Wrong uid", result.getUid(), expectedUid); - assertEquals("Wrong name", result.getSpecForJava().iterator().next().getUid(), RegExUtils.removeAll(expectedUid, "\\[\\]$")); - assertEquals("Wrong name", result.getSpecForJava().iterator().next().getName(), expectedName); - assertEquals("Wrong fullName", result.getSpecForJava().iterator().next().getFullName(), RegExUtils.removeAll(expectedUid, "\\[\\]$")); - } - - @Test - public void populateUidValues() { - MetadataFile classMetadataFile = new MetadataFile("output", "name"); - - MetadataFileItem ownerClassItem = buildMetadataFileItem("a.b.OwnerClass", "Not important summary value"); - ownerClassItem.setNameWithType("OwnerClass"); - MetadataFileItem item1 = buildMetadataFileItem("UID unknown class", "UnknownClass"); - populateSyntax(item1, "SomeClass#someMethod(String param)"); - MetadataFileItem item2 = buildMetadataFileItem("UID known class", "SomeClass#someMethod(String param)"); - MetadataFileItem item3 = buildMetadataFileItem("UID method only", "#someMethod2(String p1, String p2)"); - classMetadataFile.getItems().addAll(Arrays.asList(ownerClassItem, item1, item2, item3)); - - MetadataFileItem reference1 = new MetadataFileItem("a.b.SomeClass.someMethod(String param)"); - reference1.setNameWithType("SomeClass.someMethod(String param)"); - MetadataFileItem reference2 = new MetadataFileItem("a.b.OwnerClass.someMethod2(String p1, String p2)"); - reference2.setNameWithType("OwnerClass.someMethod2(String p1, String p2)"); - classMetadataFile.getReferences().addAll(Arrays.asList(reference1, reference2)); - - ymlFilesBuilder.populateUidValues(Collections.emptyList(), Arrays.asList(classMetadataFile)); - - assertEquals("Wrong summary for unknown class", item1.getSummary(), - "Bla bla UnknownClass bla"); - assertEquals("Wrong syntax description", item1.getSyntax().getParameters().get(0).getDescription(), - "One two SomeClass#someMethod(String param) three"); - assertEquals("Wrong summary for known class", item2.getSummary(), - "Bla bla SomeClass#someMethod(String param) bla"); - assertEquals("Wrong summary for method", item3.getSummary(), - "Bla bla #someMethod2(String p1, String p2) bla"); - - } - - private MetadataFileItem buildMetadataFileItem(String uid, String value) { - MetadataFileItem item = new MetadataFileItem(uid); - item.setSummary( - String.format("Bla bla %s bla", value, value)); - return item; - } - - private void populateSyntax(MetadataFileItem item, String value) { - Syntax syntax = new Syntax(); - String methodParamDescription = String - .format("One two %s three", value, value); - syntax.setParameters( - Arrays.asList(new MethodParameter("method param id", "method param type", methodParamDescription))); - item.setSyntax(syntax); - } - - @Test - public void determineUidByLinkContent() { - Map lookup = new HashMap<>() {{ - put("SomeClass", "a.b.c.SomeClass"); - put("SomeClass.someMethod()", "a.b.c.SomeClass.someMethod()"); - put("SomeClass.someMethod(String param)", "a.b.c.SomeClass.someMethod(String param)"); - }}; - - LookupContext lookupContext = new LookupContext(lookup, lookup); - assertEquals("Wrong result for class", ymlFilesBuilder. - resolveUidByLookup("SomeClass", lookupContext), "a.b.c.SomeClass"); - assertEquals("Wrong result for method", ymlFilesBuilder. - resolveUidFromLinkContent("SomeClass#someMethod()", lookupContext), "a.b.c.SomeClass.someMethod()"); - assertEquals("Wrong result for method with param", ymlFilesBuilder. - resolveUidFromLinkContent("SomeClass#someMethod(String param)", lookupContext), - "a.b.c.SomeClass.someMethod(String param)"); - - assertEquals("Wrong result for unknown class", ymlFilesBuilder. - resolveUidByLookup("UnknownClass", lookupContext), ""); - assertEquals("Wrong result for null", ymlFilesBuilder.resolveUidByLookup(null, lookupContext), ""); - assertEquals("Wrong result for whitespace", ymlFilesBuilder.resolveUidByLookup(" ", lookupContext), ""); - } - - @Test - public void splitUidWithGenericsIntoClassNames() { - List result = ymlFilesBuilder.splitUidWithGenericsIntoClassNames("a.b.c.List>"); - - assertEquals("Wrong result list size", result.size(), 3); - assertTrue("Wrong result list content", result.contains("a.b.c.List")); - assertTrue("Wrong result list content", result.contains("df.mn.ClassOne")); - assertTrue("Wrong result list content", result.contains("tr.T")); - } - - @Test - public void expandComplexGenericsInReferences() { - MetadataFile classMetadataFile = new MetadataFile("path", "name"); - MetadataFileItem referenceItem = new MetadataFileItem("a.b.c.List>"); - Set references = classMetadataFile.getReferences(); - references.add(referenceItem); - - ymlFilesBuilder.expandComplexGenericsInReferences(classMetadataFile); - - assertEquals("Wrong references amount", references.size(), 4); - - List content = references.stream().map(MetadataFileItem::getUid).collect(Collectors.toList()); - assertTrue("Wrong references content", content.contains("a.b.c.List")); - assertTrue("Wrong references content", content.contains("df.mn.ClassOne")); - assertTrue("Wrong references content", content.contains("tr.T")); - assertTrue("Wrong references content", content.contains("a.b.c.List>")); - } - - - @Test - public void getJavaReferenceHref(){ - String result1 = ymlFilesBuilder.getJavaReferenceHref("java.lang.Object"); - String result2 = ymlFilesBuilder.getJavaReferenceHref("java.lang.Object.equals(java.lang.Object)"); - String result3 = ymlFilesBuilder.getJavaReferenceHref("java.lang.Object.notify()"); - String result4 = ymlFilesBuilder.getJavaReferenceHref("java.util.List"); - String result5 = ymlFilesBuilder.getJavaReferenceHref("java.lang.Object.wait(long,int)"); - String result6 = ymlFilesBuilder.getJavaReferenceHref("java.lang.Object.getClass()"); - String result7 = ymlFilesBuilder.getJavaReferenceHref("java.io.IOException"); - String result8 = ymlFilesBuilder.getJavaReferenceHref("java.io.InputStream"); - String result9 = ymlFilesBuilder.getJavaReferenceHref("java.lang.Enum.hashCode()"); - String result10 = ymlFilesBuilder.getJavaReferenceHref("java.nio.ByteBuffer"); - String result11 = ymlFilesBuilder.getJavaReferenceHref("java.lang.Enum.valueOf(java.lang.Class,java.lang.String)"); - String result12 = ymlFilesBuilder.getJavaReferenceHref(""); - String result13 = ymlFilesBuilder.getJavaReferenceHref(null); - - String baseURL = "https://docs.oracle.com/javase/8/docs/api/"; - - assertEquals(baseURL + "java/lang/Object.html", result1); - assertEquals(baseURL + "java/lang/Object.html#equals-java.lang.Object-", result2); - assertEquals(baseURL + "java/lang/Object.html#notify--", result3); - assertEquals(baseURL + "java/util/List.html", result4); - assertEquals(baseURL + "java/lang/Object.html#wait-long-int-", result5); - assertEquals(baseURL + "java/lang/Object.html#getClass--", result6); - assertEquals(baseURL + "java/io/IOException.html", result7); - assertEquals(baseURL + "java/io/InputStream.html", result8); - assertEquals(baseURL + "java/lang/Enum.html#hashCode--", result9); - assertEquals(baseURL + "java/nio/ByteBuffer.html", result10); - assertEquals(baseURL + "java/lang/Enum.html#valueOf-java.lang.Class-java.lang.String-", result11); - assertEquals(baseURL, result12); - assertEquals(baseURL, result13); - } - @Test public void joinTocTypeItems(){ TocTypeMap typeMap = new TocTypeMap(); @@ -248,5 +58,4 @@ public void joinTocTypeItems(){ assertEquals("Exceptions", tocItems.get(8).getHeading()); assertEquals(exceptionToc, tocItems.get(9)); } - } From 53a37c453dbd9f5af806c75dabd3fc86cef3199c Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Wed, 22 Dec 2021 16:44:26 -0800 Subject: [PATCH 014/168] feat: include support for @ see tags (#91) * chore: refactor YmlFilesBuilder Break up YmlFilesBuilder into multiple builders to make it easier to follow code and make changes. This change doesn't change any code code, it just moves code into new files. * feat: include support for @see tags chore: cleanup @deprecated support * chore: comment --- .../java/com/microsoft/build/BuilderUtil.java | 9 +- .../com/microsoft/build/ClassBuilder.java | 25 +----- .../com/microsoft/build/YmlFilesBuilder.java | 2 +- .../java/com/microsoft/lookup/BaseLookup.java | 87 +++++++++++++++++-- .../microsoft/lookup/ClassItemsLookup.java | 25 +++--- .../com/microsoft/lookup/ClassLookup.java | 33 ++----- .../com/microsoft/lookup/PackageLookup.java | 10 +-- .../lookup/ClassItemsLookupTest.java | 24 ----- .../com/microsoft/lookup/ClassLookupTest.java | 39 --------- .../microsoft/lookup/PackageLookupTest.java | 4 +- .../com.microsoft.samples.SuperHero.yml | 2 +- ...s.AgreementDetailsCollectionOperations.yml | 4 +- ...agreements.IAgreementDetailsCollection.yml | 2 +- ...oogle.RecognitionAudio.AudioSourceCase.yml | 2 +- .../com.microsoft.samples.google.v1beta.yml | 1 + ...com.microsoft.samples.google.v1p1alpha.yml | 1 + ...om.microsoft.samples.subpackage.Person.yml | 2 +- 17 files changed, 118 insertions(+), 154 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java index f5bef0f6..46214575 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java @@ -37,14 +37,6 @@ final class BuilderUtil { private static final Pattern XREF_LINK_RESOLVE_PATTERN = Pattern.compile("(?\\w+)\\#(?\\w+)(\\((?.*)\\))?"); public final static String[] LANGS = {"java"}; - static String getDeprecatedSummary(String depMsg, String summary) { - String result = "

(deprecated) " + depMsg + "

"; - if (summary != null && !summary.equals("")) { - result = result + "\n" + summary; - } - return result; - } - static String populateUidValues(String text, LookupContext lookupContext) { if (StringUtils.isBlank(text)) { return text; @@ -196,6 +188,7 @@ static void populateItemFields(MetadataFileItem item, BaseLo item.setType(lookup.extractType(element)); item.setJavaType(lookup.extractJavaType(element)); item.setSummary(lookup.extractSummary(element)); + item.setStatus(lookup.extractStatus(element)); item.setContent(lookup.extractContent(element)); } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java index 1ac99543..c70652f7 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java @@ -35,7 +35,6 @@ import java.util.stream.Collectors; import static com.microsoft.build.BuilderUtil.LANGS; -import static com.microsoft.build.BuilderUtil.getDeprecatedSummary; import static com.microsoft.build.BuilderUtil.populateItemFields; class ClassBuilder { @@ -97,11 +96,8 @@ private void addClassInfo(TypeElement classElement, MetadataFile classMetadataFi classItem.setInheritance(classLookup.extractSuperclass(classElement)); classItem.setInterfaces(classLookup.extractInterfaces(classElement)); classItem.setInheritedMethods(classLookup.extractInheritedMethods(classElement)); - String depMsg = classLookup.extractDeprecatedDescription(classElement); - if (depMsg != null) { - classItem.setSummary(getDeprecatedSummary(depMsg, classItem.getSummary())); - classItem.setStatus(Status.DEPRECATED.toString()); - } + classItem.setSummary(classLookup.extractSummary(classElement)); + classItem.setStatus(classLookup.extractStatus(classElement)); classMetadataFile.getItems().add(classItem); } @@ -111,11 +107,6 @@ void addConstructorsInfo(TypeElement classElement, MetadataFile classMetadataFil constructorItem.setOverload(classItemsLookup.extractOverload(constructorElement)); constructorItem.setContent(classItemsLookup.extractConstructorContent(constructorElement)); constructorItem.setParameters(classItemsLookup.extractParameters(constructorElement)); - String depMsg = classItemsLookup.extractDeprecatedDescription(constructorElement); - if (depMsg != null) { - constructorItem.setSummary(getDeprecatedSummary(depMsg, constructorItem.getSummary())); - constructorItem.setStatus(Status.DEPRECATED.toString()); - } classMetadataFile.getItems().add(constructorItem); referenceBuilder.addParameterReferences(constructorItem, classMetadataFile); @@ -134,11 +125,6 @@ private void addMethodsInfo(TypeElement classElement, MetadataFile classMetadata methodItem.setParameters(classItemsLookup.extractParameters(methodElement)); methodItem.setReturn(classItemsLookup.extractReturn(methodElement)); methodItem.setOverridden(classItemsLookup.extractOverridden(methodElement)); - String depMsg = classItemsLookup.extractDeprecatedDescription(methodElement); - if (depMsg != null) { - methodItem.setSummary(getDeprecatedSummary(depMsg, methodItem.getSummary())); - methodItem.setStatus(Status.DEPRECATED.toString()); - } classMetadataFile.getItems().add(methodItem); referenceBuilder.addExceptionReferences(methodItem, classMetadataFile); @@ -155,12 +141,6 @@ private void addFieldsInfo(TypeElement classElement, MetadataFile classMetadataF MetadataFileItem fieldItem = buildMetadataFileItem(fieldElement); fieldItem.setContent(classItemsLookup.extractFieldContent(fieldElement)); fieldItem.setReturn(classItemsLookup.extractReturn(fieldElement)); - String depMsg = classItemsLookup.extractDeprecatedDescription(fieldElement); - if (depMsg != null) { - fieldItem.setSummary(getDeprecatedSummary(depMsg, fieldItem.getSummary())); - fieldItem.setStatus(Status.DEPRECATED.toString()); - } - classMetadataFile.getItems().add(fieldItem); referenceBuilder.addReturnReferences(fieldItem, classMetadataFile); }); @@ -182,6 +162,7 @@ private MetadataFileItem buildMetadataFileItem(Element element) { setJavaType(classItemsLookup.extractJavaType(element)); setPackageName(classItemsLookup.extractPackageName(element)); setSummary(classItemsLookup.extractSummary(element)); + setStatus(classItemsLookup.extractStatus(element)); }}; } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 1dfa0a71..94cd8abe 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -59,7 +59,7 @@ public boolean build() { for (PackageElement packageElement : elementUtil.extractPackageElements(environment.getIncludedElements())) { String packageUid = packageLookup.extractUid(packageElement); - String packageStatus = packageLookup.extractStatus(packageElement.getQualifiedName().toString()); + String packageStatus = packageLookup.extractStatus(packageElement); TocItem packageTocItem = new TocItem(packageUid, packageUid, packageStatus); // build package summary packageMetadataFiles.add(packageBuilder.buildPackageMetadataFile(packageElement)); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java index c386302c..c2e29a1c 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java @@ -1,21 +1,31 @@ package com.microsoft.lookup; import com.microsoft.lookup.model.ExtendedMetadataFileItem; -import com.microsoft.model.*; +import com.microsoft.model.ExceptionItem; +import com.microsoft.model.MetadataFileItem; +import com.microsoft.model.MethodParameter; +import com.microsoft.model.Return; +import com.microsoft.model.TypeParameter; import com.microsoft.util.YamlUtil; +import com.sun.source.doctree.DeprecatedTree; import com.sun.source.doctree.DocCommentTree; import com.sun.source.doctree.DocTree; import com.sun.source.doctree.LinkTree; import com.sun.source.doctree.LiteralTree; +import com.sun.source.doctree.SeeTree; import jdk.javadoc.doclet.DocletEnvironment; import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.StringUtils; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; -import javax.lang.model.element.Modifier; -import javax.lang.model.element.TypeElement; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -157,6 +167,20 @@ public String extractOverridden(T key) { return resolve(key).getOverridden(); } + public String extractStatus(T element) { + Optional docCommentTree = getDocCommentTree(element); + if (docCommentTree.isPresent()) { + boolean isDeprecated = docCommentTree.get().getBlockTags().stream() + .filter(docTree -> docTree.getKind().equals(DocTree.Kind.DEPRECATED)) + .findFirst() + .isPresent(); + if (isDeprecated){ + return DocTree.Kind.DEPRECATED.name().toLowerCase(); + } + } + return null; + } + protected String determineType(T element) { return elementKindLookup.get(element.getKind()); } @@ -166,10 +190,38 @@ protected String determinePackageName(T element) { } protected String determineComment(T element) { - return getDocCommentTree(element) - .map(DocCommentTree::getFullBody) - .map(this::replaceLinksAndCodes) - .orElse(null); + Optional docCommentTree = getDocCommentTree(element); + if (docCommentTree.isPresent()) { + String comment = docCommentTree + .map(DocCommentTree::getFullBody) + .map(this::replaceLinksAndCodes) + .orElse(null); + return replaceBlockTags(docCommentTree.get(), comment); + } + return null; + } + + /** + * Provides support for deprecated and see tags + */ + String replaceBlockTags(DocCommentTree docCommentTree, String comment) { + List seeItems = new ArrayList<>(); + String commentWithBlockTags = comment; + for (DocTree blockTag : docCommentTree.getBlockTags()) { + switch (blockTag.getKind()) { + case DEPRECATED: + commentWithBlockTags = getDeprecatedSummary((DeprecatedTree) blockTag).concat(comment); + break; + case SEE: + seeItems.add(getSeeTagRef((SeeTree) blockTag)); + break; + default: + } + } + if (!seeItems.isEmpty()) { + commentWithBlockTags = commentWithBlockTags.concat(getSeeAlsoSummary(seeItems)); + } + return commentWithBlockTags; } /** @@ -231,4 +283,23 @@ public String makeTypeShort(String value) { .map(s -> RegExUtils.removeAll(s, "\\b[a-z0-9_.]+\\.")) .collect(Collectors.joining("<")); } + + private String getSeeAlsoSummary(List seeItems) { + return String.format("\nSee Also: %s\n", String.join(", ", seeItems)); + } + + private String getDeprecatedSummary(DeprecatedTree deprecatedTree) { + return String.format("\nDeprecated. %s\n\n", + replaceLinksAndCodes(deprecatedTree.getBody())); + } + + private String getSeeTagRef(SeeTree seeTree) { + String ref = seeTree.getReference().stream() + .map(r -> String.valueOf(r)).collect(Collectors.joining("")); + // if it's already a tag, use that otherwise build xref tag + if (ref.matches("^<.+>.*")) { + return ref; + } + return String.format("%1$s", ref); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java index 009b67dd..1e60bd45 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java @@ -14,6 +14,7 @@ import javax.lang.model.type.TypeKind; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; public class ClassItemsLookup extends BaseLookup { @@ -63,7 +64,7 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) { result.setReturn(extractReturn(exeElement)); if (exeElement.getKind() == ElementKind.METHOD) { result.setOverridden(extractOverriddenUid(utils.overriddenMethod(exeElement))); - result.setSummary(getInheritedInlineCommentString(exeElement)); + result.setSummary(determineComment(exeElement)); } } result.setNameWithType(String.format("%s.%s", classSNameWithGenericsSupport, result.getName())); @@ -79,15 +80,6 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) { return result; } - public String extractDeprecatedDescription(Element element) { - return getDocCommentTree(element).map(docTree -> docTree.getBlockTags().stream() - .filter(o -> o.getKind() == DocTree.Kind.DEPRECATED) - .map(o -> (DeprecatedTree) o) - .map(o -> replaceLinksAndCodes(o.getBody())) - .findFirst().orElse(null) - ).orElse(null); - } - List extractParameters(ExecutableElement element) { return element.getParameters().stream().map(o -> { String paramName = String.valueOf(o.getSimpleName()); @@ -156,19 +148,28 @@ String extractOverriddenUid(ExecutableElement ovr) { return ""; } + private String determineComment(ExecutableElement methodElement) { + String inheritedInlineComment = getInheritedInlineCommentString(methodElement); + Optional docCommentTree = getDocCommentTree(methodElement); + if (docCommentTree.isPresent()){ + return replaceBlockTags(docCommentTree.get(), inheritedInlineComment); + } + return inheritedInlineComment; + } + /** * If the item being inherited from is declared from external compiled package, * or is declared in the packages like java.lang.Object, * comments may be not available as doclet resolves from byte code. */ - String getInheritedInlineCommentString(ExecutableElement exeElement) { + private String getInheritedInlineCommentString(ExecutableElement exeElement) { CommentHelper ch = getInheritedInlineTags(new CommentHelper(exeElement, utils)); // Remove unresolved "@inheritDoc" tag. List dctree = utils.removeBlockTag(ch.inlineTags, DocTree.Kind.INHERIT_DOC); return replaceLinksAndCodes(dctree); } - CommentHelper getInheritedInlineTags(CommentHelper input) { + private CommentHelper getInheritedInlineTags(CommentHelper input) { CommentHelper output = input.copy(); if (!output.hasInheritDocTag() && !output.isSimpleOverride()) { return output; diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java index 2d323863..91f097cc 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java @@ -2,22 +2,23 @@ import com.microsoft.lookup.model.ExtendedMetadataFileItem; import com.microsoft.model.MetadataFileItem; -import com.microsoft.model.Status; import com.microsoft.model.TypeParameter; import com.microsoft.util.Utils; -import com.sun.source.doctree.DeprecatedTree; -import com.sun.source.doctree.DocTree; import jdk.javadoc.doclet.DocletEnvironment; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; -import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; public class ClassLookup extends BaseLookup { @@ -57,28 +58,6 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(TypeElement classElemen return result; } - public String extractStatus(TypeElement classElement) { - DocTree deprecated = getDocCommentTree(classElement) - .map(docTree -> docTree.getBlockTags().stream() - .filter(o -> o.getKind() == DocTree.Kind.DEPRECATED) - .findFirst().orElse(null) - ).orElse(null); - - if (deprecated != null) { - return Status.DEPRECATED.toString(); - } - return null; - } - - public String extractDeprecatedDescription(TypeElement classElement) { - return getDocCommentTree(classElement).map(docTree -> docTree.getBlockTags().stream() - .filter(o -> o.getKind() == DocTree.Kind.DEPRECATED) - .map(o -> (DeprecatedTree) o) - .map(o -> replaceLinksAndCodes(o.getBody())) - .findFirst().orElse(null) - ).orElse(null); - } - void populateContent(TypeElement classElement, String shortNameWithGenericsSupport, ExtendedMetadataFileItem container) { String type = elementKindLookup.get(classElement.getKind()); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java index 9d1e9216..afc4a55d 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java @@ -5,7 +5,6 @@ import jdk.javadoc.doclet.DocletEnvironment; import javax.lang.model.element.PackageElement; -import javax.lang.model.element.TypeElement; public class PackageLookup extends BaseLookup { @@ -31,7 +30,8 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(PackageElement packageE return result; } - public String extractStatus(String name) { + public String extractStatus(PackageElement packageElement) { + String name = String.valueOf(packageElement.getQualifiedName()); if (name.contains(Status.ALPHA.toString())) { return Status.ALPHA.toString(); } @@ -46,9 +46,9 @@ String determinePackageContent(PackageElement packageElement) { } public String extractJavaType(PackageElement element) { - String javatype = element.getKind().name().toLowerCase().replaceAll("_",""); - if (javatype.equals("package")){ - return javatype; + String javaType = element.getKind().name().toLowerCase().replaceAll("_", ""); + if (javaType.equals("package")) { + return javaType; } return null; } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java index cecc9784..ed5ce1a2 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java @@ -265,28 +265,4 @@ public void determineTypeForEnumConstant() { assertEquals(classItemsLookup.determineType(element.getEnclosedElements().get(0)), "Field"); assertEquals(classItemsLookup.determineType(element.getEnclosedElements().get(1)), "Field"); } - - @Test - public void extractDeprecatedDescription() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.agreements.AgreementDetailsCollectionOperations"); - ExecutableElement method = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); - String depMsg = "Deprecated Message :("; - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(method)).thenReturn(docCommentTree); - doReturn(Arrays.asList(deprecatedTree)).when(docCommentTree).getBlockTags(); - when(deprecatedTree.getKind()).thenReturn(Kind.DEPRECATED); - - doReturn(Arrays.asList(textTree)).when(deprecatedTree).getBody(); - when(textTree.getKind()).thenReturn(Kind.TEXT); - when(textTree.toString()).thenReturn(depMsg); - - String result = classItemsLookup.extractDeprecatedDescription(method); - - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(method); - verify(docCommentTree).getBlockTags(); - verify(deprecatedTree).getKind(); - assertEquals("Wrong description", result, depMsg); - } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java index 21d9a2c6..9ec0557b 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java @@ -168,45 +168,6 @@ public void determineTypeForClass() { assertEquals(classLookup.determineType(element), "Class"); } - @Test - public void extractDeprecatedDescription() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.agreements.AgreementDetailsCollectionOperations"); - String depMsg = "Deprecated Message :("; - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(element)).thenReturn(docCommentTree); - doReturn(Arrays.asList(deprecatedTree)).when(docCommentTree).getBlockTags(); - when(deprecatedTree.getKind()).thenReturn(DocTree.Kind.DEPRECATED); - - doReturn(Arrays.asList(textTree)).when(deprecatedTree).getBody(); - when(textTree.getKind()).thenReturn(DocTree.Kind.TEXT); - when(textTree.toString()).thenReturn(depMsg); - - String result = classLookup.extractDeprecatedDescription(element); - - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(element); - verify(docCommentTree).getBlockTags(); - verify(deprecatedTree).getKind(); - assertEquals("Wrong description", result, depMsg); - } - - @Test - public void extractDeprecatedDescriptionNull() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.agreements.AgreementDetailsCollectionOperations"); - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(element)).thenReturn(docCommentTree); - doReturn(Arrays.asList()).when(docCommentTree).getBlockTags(); - - String result = classLookup.extractDeprecatedDescription(element); - - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(element); - verify(docCommentTree).getBlockTags(); - assertEquals("Wrong description", result, null); - } - @Test public void extractStatusDeprecated() { TypeElement element = elements.getTypeElement("com.microsoft.samples.agreements.AgreementDetailsCollectionOperations"); diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java index 77fb3684..90408fb7 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java @@ -46,8 +46,8 @@ public void extractPackageStatus() { PackageElement elementBeta = elements.getPackageElement("com.microsoft.samples.google.v1beta"); PackageElement elementAlpha = elements.getPackageElement("com.microsoft.samples.google.v1p1alpha"); - String resultA = packageLookup.extractStatus(elementAlpha.getQualifiedName().toString()); - String resultB = packageLookup.extractStatus(elementBeta.getQualifiedName().toString()); + String resultA = packageLookup.extractStatus(elementAlpha); + String resultB = packageLookup.extractStatus(elementBeta); assertEquals("Wrong result", resultA, Status.ALPHA.toString()); assertEquals("Wrong result", resultB, Status.BETA.toString()); diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml index 543bfec2..0804e4c8 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml @@ -254,7 +254,7 @@ items: overload: "com.microsoft.samples.SuperHero.successfullyAttacked*" type: "Method" package: "com.microsoft.samples" - summary: "

(deprecated) As of version 1.1, use . . . instead

\n

This is a simple description of the method. . .\n Superman!\n

" + summary: "\nDeprecated. As of version 1.1, use . . . instead\n\n

This is a simple description of the method. . .\n Superman!\n

\nSee Also: HERO-402\n" syntax: content: "public int successfullyAttacked(int incomingDamage, String damageType)" parameters: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.AgreementDetailsCollectionOperations.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.AgreementDetailsCollectionOperations.yml index 22c01beb..2ce93c0d 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.AgreementDetailsCollectionOperations.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.AgreementDetailsCollectionOperations.yml @@ -13,7 +13,7 @@ items: fullName: "com.microsoft.samples.agreements.AgreementDetailsCollectionOperations" type: "Class" package: "com.microsoft.samples.agreements" - summary: "

(deprecated) Use AgreementMetaData instead.

\nAgreement details collection operations implementation class." + summary: "\nDeprecated. Use AgreementMetaData instead.\n\nAgreement details collection operations implementation class." syntax: content: "public class AgreementDetailsCollectionOperations extends BasePartnerComponentString implements IAgreementDetailsCollection" inheritance: @@ -66,7 +66,7 @@ items: overload: "com.microsoft.samples.agreements.AgreementDetailsCollectionOperations.get*" type: "Method" package: "com.microsoft.samples.agreements" - summary: "

(deprecated) Some text

\nRetrieves the agreement details." + summary: "\nDeprecated. Some text\n\nRetrieves the agreement details." syntax: content: "public ResourceCollection get()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.IAgreementDetailsCollection.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.IAgreementDetailsCollection.yml index 8afb653a..088a3262 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.IAgreementDetailsCollection.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.IAgreementDetailsCollection.yml @@ -12,7 +12,7 @@ items: fullName: "com.microsoft.samples.agreements.IAgreementDetailsCollection" type: "Interface" package: "com.microsoft.samples.agreements" - summary: "

(deprecated) This one is deprecated :(

\nEncapsulates the operations on the agreement metadata collection." + summary: "\nDeprecated. This one is deprecated :(\n\nEncapsulates the operations on the agreement metadata collection." syntax: content: "public interface IAgreementDetailsCollection" status: "deprecated" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml index 8b389ba6..134a6841 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml @@ -146,7 +146,7 @@ items: overload: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.valueOf*" type: "Method" package: "com.microsoft.samples.google" - summary: "

(deprecated) Use #forNumber(int) instead.

" + summary: "\nDeprecated. Use #forNumber(int) instead.\n\n" syntax: content: "public static RecognitionAudio.AudioSourceCase valueOf(int value)" parameters: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml index 2fe445d3..0e86ea88 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml @@ -12,6 +12,7 @@ items: type: "Namespace" syntax: content: "package com.microsoft.samples.google.v1beta" + status: "beta" javaType: "package" references: - uid: "com.microsoft.samples.google.v1beta.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml index 19fbd1f3..314148de 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml @@ -12,6 +12,7 @@ items: type: "Namespace" syntax: content: "package com.microsoft.samples.google.v1p1alpha" + status: "alpha" javaType: "package" references: - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml index 53fcb271..c994836c 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml @@ -21,7 +21,7 @@ items: fullName: "com.microsoft.samples.subpackage.Person" type: "Class" package: "com.microsoft.samples.subpackage" - summary: "Class that describes some person\n\n This comment has links to:\n
    \n
  • Owner class Person
  • \n
  • Its inner class Person.IdentificationInfo
  • \n
  • Its method Person#setLastName(String lastName)
  • \n
  • Its method without params Person#setLastName()
  • \n
  • Its public field Person#age
  • \n
  • Another class which used here Set
  • \n
  • Another class which not used here List
  • \n
  • Broken link sdfdsagdsfghfgh
  • \n
  • Plain link someContent
  • \n
  • Link that starts from '#' #setLastName()
  • \n
  • Link with label WordOne
  • \n
\n\n This is an \"at\" symbol: @" + summary: "Class that describes some person\n\n This comment has links to:\n
    \n
  • Owner class Person
  • \n
  • Its inner class Person.IdentificationInfo
  • \n
  • Its method Person#setLastName(String lastName)
  • \n
  • Its method without params Person#setLastName()
  • \n
  • Its public field Person#age
  • \n
  • Another class which used here Set
  • \n
  • Another class which not used here List
  • \n
  • Broken link sdfdsagdsfghfgh
  • \n
  • Plain link someContent
  • \n
  • Link that starts from '#' #setLastName()
  • \n
  • Link with label WordOne
  • \n
\n\n This is an \"at\" symbol: @\nSee Also: Display\n" syntax: content: "public class Person" typeParameters: From 22679681acbaad2db000cb0d6cd792d76383d5b8 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 23 Dec 2021 01:44:56 +0100 Subject: [PATCH 015/168] chore(deps): update dependency org.mockito:mockito-core to v4.2.0 (#89) Co-authored-by: Emily Ball --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 551bcef4..0906be86 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -137,7 +137,7 @@ org.mockito mockito-core - 4.1.0 + 4.2.0 test From ca88ff311a275021a8e39bd052ec6c9e589d46fa Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 7 Jan 2022 18:14:44 +0100 Subject: [PATCH 016/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.2.2 (#93) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 0906be86..3e96c756 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.2.1 + 2.2.2 test From e0c7e75652c4ab4262e33f2694b3a2bb9e2b8f5c Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Fri, 7 Jan 2022 11:48:03 -0800 Subject: [PATCH 017/168] feat: include static field/ method javatype (#92) * chore: refactor YmlFilesBuilder Break up YmlFilesBuilder into multiple builders to make it easier to follow code and make changes. This change doesn't change any code code, it just moves code into new files. * feat: include support for @see tags chore: cleanup @deprecated support * chore: comment * feat: include static field/method javaType --- .../java/com/microsoft/lookup/BaseLookup.java | 2 +- .../microsoft/lookup/ClassItemsLookup.java | 27 ++++++++-- .../com/microsoft/lookup/PackageLookup.java | 2 +- .../lookup/ClassItemsLookupTest.java | 51 ++++++++++++++++++- ...ceptionHandler.Interceptor.RetryResult.yml | 5 ++ ...com.microsoft.samples.ExceptionHandler.yml | 2 + ...t.samples.google.ProductSearchSettings.yml | 10 ++++ ...oogle.RecognitionAudio.AudioSourceCase.yml | 7 +++ ...rosoft.samples.google.RecognitionAudio.yml | 2 + ....microsoft.samples.google.SpeechClient.yml | 3 ++ ...icrosoft.samples.google.SpeechSettings.yml | 10 ++++ ...oft.samples.google.ValidationException.yml | 3 ++ ...oft.samples.google.v1beta.SpeechClient.yml | 3 ++ ....samples.google.v1p1alpha.SpeechClient.yml | 3 ++ ...ckage.Person.IdentificationInfo.Gender.yml | 4 ++ ...om.microsoft.samples.subpackage.Person.yml | 1 + 16 files changed, 128 insertions(+), 7 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java index c2e29a1c..6ca5f715 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java @@ -174,7 +174,7 @@ public String extractStatus(T element) { .filter(docTree -> docTree.getKind().equals(DocTree.Kind.DEPRECATED)) .findFirst() .isPresent(); - if (isDeprecated){ + if (isDeprecated) { return DocTree.Kind.DEPRECATED.name().toLowerCase(); } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java index 1e60bd45..d3e8d2a3 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java @@ -6,11 +6,20 @@ import com.microsoft.model.Return; import com.microsoft.util.CommentHelper; import com.microsoft.util.Utils; -import com.sun.source.doctree.*; +import com.sun.source.doctree.DocCommentTree; +import com.sun.source.doctree.DocTree; import com.sun.source.doctree.DocTree.Kind; +import com.sun.source.doctree.ParamTree; +import com.sun.source.doctree.ReturnTree; +import com.sun.source.doctree.ThrowsTree; import jdk.javadoc.doclet.DocletEnvironment; -import javax.lang.model.element.*; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; import javax.lang.model.type.TypeKind; import java.util.ArrayList; import java.util.List; @@ -151,7 +160,7 @@ String extractOverriddenUid(ExecutableElement ovr) { private String determineComment(ExecutableElement methodElement) { String inheritedInlineComment = getInheritedInlineCommentString(methodElement); Optional docCommentTree = getDocCommentTree(methodElement); - if (docCommentTree.isPresent()){ + if (docCommentTree.isPresent()) { return replaceBlockTags(docCommentTree.get(), inheritedInlineComment); } return inheritedInlineComment; @@ -198,4 +207,16 @@ private CommentHelper getInheritedInlineTags(CommentHelper input) { return output; } + + public String extractJavaType(Element element) { + if (element.getModifiers().contains(Modifier.STATIC)) { + if (element.getKind().equals(ElementKind.METHOD)) { + return "static method"; + } + if (element.getKind().equals(ElementKind.FIELD) || element.getKind().equals(ElementKind.ENUM_CONSTANT)) { + return "static field"; + } + } + return null; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java index afc4a55d..8f939d49 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java @@ -46,7 +46,7 @@ String determinePackageContent(PackageElement packageElement) { } public String extractJavaType(PackageElement element) { - String javaType = element.getKind().name().toLowerCase().replaceAll("_", ""); + String javaType = element.getKind().name().toLowerCase(); if (javaType.equals("package")) { return javaType; } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java index ed5ce1a2..2f990ade 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java @@ -4,8 +4,14 @@ import com.microsoft.model.ExceptionItem; import com.microsoft.model.MethodParameter; import com.microsoft.model.Return; -import com.sun.source.doctree.*; +import com.sun.source.doctree.DeprecatedTree; +import com.sun.source.doctree.DocCommentTree; import com.sun.source.doctree.DocTree.Kind; +import com.sun.source.doctree.IdentifierTree; +import com.sun.source.doctree.ParamTree; +import com.sun.source.doctree.ReturnTree; +import com.sun.source.doctree.TextTree; +import com.sun.source.doctree.ThrowsTree; import com.sun.source.util.DocTrees; import jdk.javadoc.doclet.DocletEnvironment; import org.junit.Before; @@ -15,6 +21,7 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; +import javax.lang.model.element.Element; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; import javax.lang.model.element.VariableElement; @@ -22,10 +29,14 @@ import javax.lang.model.util.Elements; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class ClassItemsLookupTest { @@ -33,6 +44,8 @@ public class ClassItemsLookupTest { @Rule public CompilationRule rule = new CompilationRule(); private Elements elements; + private List allGenderElements; + private List allPersonElements; private DocletEnvironment environment; private DocTrees docTrees; private DocCommentTree docCommentTree; @@ -47,6 +60,10 @@ public class ClassItemsLookupTest { @Before public void setup() { elements = rule.getElements(); + allGenderElements = elements.getTypeElement("com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender") + .getEnclosedElements().stream().collect(Collectors.toList()); + allPersonElements = elements.getTypeElement("com.microsoft.samples.subpackage.Person") + .getEnclosedElements().stream().collect(Collectors.toList()); environment = Mockito.mock(DocletEnvironment.class); docTrees = Mockito.mock(DocTrees.class); docCommentTree = Mockito.mock(DocCommentTree.class); @@ -265,4 +282,34 @@ public void determineTypeForEnumConstant() { assertEquals(classItemsLookup.determineType(element.getEnclosedElements().get(0)), "Field"); assertEquals(classItemsLookup.determineType(element.getEnclosedElements().get(1)), "Field"); } + + @Test + public void testExtractJavaTypeStaticMethod() { + Element staticMethod = getElementByName(allGenderElements,"valueOf(java.lang.String)"); + assertEquals("Wrong javaType","static method", classItemsLookup.extractJavaType(staticMethod)); + } + + @Test + public void testExtractJavaTypeStaticField() { + Element field = getElementByName(allGenderElements,"FEMALE"); + assertEquals("Wrong javaType", "static field", classItemsLookup.extractJavaType(field)); + } + + @Test + public void testExtractJavaTypeNonStatic() { + Element constructor = getElementByName(allGenderElements,"Gender()"); + assertEquals("Wrong javaType",null, classItemsLookup.extractJavaType(constructor)); + + Element nonStaticMethod = getElementByName(allPersonElements,"getFirstName()"); + assertEquals("Wrong javaType",null, classItemsLookup.extractJavaType(nonStaticMethod)); + + Element nonStaticField = getElementByName(allPersonElements,"age"); + assertEquals("Wrong javaType",null, classItemsLookup.extractJavaType(nonStaticField)); + } + + private Element getElementByName(List elements, String name) { + return elements.stream() + .filter(e -> e.toString().equals(name)) + .findFirst().orElse(null); + } } diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml index 870375f3..96e630fa 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml @@ -53,6 +53,7 @@ items: content: "public static final ExceptionHandler.Interceptor.RetryResult CONTINUE_EVALUATION" return: type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + javaType: "static field" - uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.NO_RETRY" id: "NO_RETRY" parent: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" @@ -67,6 +68,7 @@ items: content: "public static final ExceptionHandler.Interceptor.RetryResult NO_RETRY" return: type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + javaType: "static field" - uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.RETRY" id: "RETRY" parent: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" @@ -81,6 +83,7 @@ items: content: "public static final ExceptionHandler.Interceptor.RetryResult RETRY" return: type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + javaType: "static field" - uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.RetryResult()" id: "RetryResult()" parent: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" @@ -112,6 +115,7 @@ items: type: "java.lang.String" return: type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" + javaType: "static method" - uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.values()" id: "values()" parent: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" @@ -127,6 +131,7 @@ items: content: "public static ExceptionHandler.Interceptor.RetryResult[] values()" return: type: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult[]" + javaType: "static method" references: - uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.RetryResult*" name: "RetryResult" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml index d1928ffb..bb3dbec5 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml @@ -112,6 +112,7 @@ items: content: "public static ExceptionHandler getDefaultInstance()" return: type: "com.microsoft.samples.ExceptionHandler" + javaType: "static method" - uid: "com.microsoft.samples.ExceptionHandler.hashCode()" id: "hashCode()" parent: "com.microsoft.samples.ExceptionHandler" @@ -143,6 +144,7 @@ items: content: "public static ExceptionHandler.Builder newBuilder()" return: type: "com.microsoft.samples.ExceptionHandler.Builder" + javaType: "static method" - uid: "com.microsoft.samples.ExceptionHandler.shouldRetry(java.lang.Throwable,java.lang.Object)" id: "shouldRetry(java.lang.Throwable,java.lang.Object)" parent: "com.microsoft.samples.ExceptionHandler" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml index fcb4b7e9..aa11ba23 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml @@ -128,6 +128,7 @@ items: type: "com.microsoft.samples.google.ProductSearchSettings" exceptions: - type: "java.io.IOException" + javaType: "static method" - uid: "com.microsoft.samples.google.ProductSearchSettings.createProductSetSettings()" id: "createProductSetSettings()" parent: "com.microsoft.samples.google.ProductSearchSettings" @@ -191,6 +192,7 @@ items: content: "public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder()" return: type: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.ProductSearchSettings.defaultCredentialsProviderBuilder()" id: "defaultCredentialsProviderBuilder()" parent: "com.microsoft.samples.google.ProductSearchSettings" @@ -207,6 +209,7 @@ items: content: "public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder()" return: type: "com.google.api.gax.core.GoogleCredentialsProvider.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.ProductSearchSettings.defaultExecutorProviderBuilder()" id: "defaultExecutorProviderBuilder()" parent: "com.microsoft.samples.google.ProductSearchSettings" @@ -223,6 +226,7 @@ items: content: "public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder()" return: type: "com.google.api.gax.core.InstantiatingExecutorProvider.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.ProductSearchSettings.defaultGrpcTransportProviderBuilder()" id: "defaultGrpcTransportProviderBuilder()" parent: "com.microsoft.samples.google.ProductSearchSettings" @@ -239,6 +243,7 @@ items: content: "public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder()" return: type: "com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.ProductSearchSettings.defaultTransportChannelProvider()" id: "defaultTransportChannelProvider()" parent: "com.microsoft.samples.google.ProductSearchSettings" @@ -254,6 +259,7 @@ items: content: "public static TransportChannelProvider defaultTransportChannelProvider()" return: type: "com.google.api.gax.rpc.TransportChannelProvider" + javaType: "static method" - uid: "com.microsoft.samples.google.ProductSearchSettings.deleteProductSetSettings()" id: "deleteProductSetSettings()" parent: "com.microsoft.samples.google.ProductSearchSettings" @@ -318,6 +324,7 @@ items: content: "public static String getDefaultEndpoint()" return: type: "java.lang.String" + javaType: "static method" - uid: "com.microsoft.samples.google.ProductSearchSettings.getDefaultServiceScopes()" id: "getDefaultServiceScopes()" parent: "com.microsoft.samples.google.ProductSearchSettings" @@ -334,6 +341,7 @@ items: content: "public static List getDefaultServiceScopes()" return: type: "java.util.List" + javaType: "static method" - uid: "com.microsoft.samples.google.ProductSearchSettings.getProductSetSettings()" id: "getProductSetSettings()" parent: "com.microsoft.samples.google.ProductSearchSettings" @@ -494,6 +502,7 @@ items: content: "public static ProductSearchSettings.Builder newBuilder()" return: type: "com.microsoft.samples.google.ProductSearchSettings.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.ProductSearchSettings.newBuilder(com.google.api.gax.rpc.ClientContext)" id: "newBuilder(com.google.api.gax.rpc.ClientContext)" parent: "com.microsoft.samples.google.ProductSearchSettings" @@ -513,6 +522,7 @@ items: type: "com.google.api.gax.rpc.ClientContext" return: type: "com.microsoft.samples.google.ProductSearchSettings.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.ProductSearchSettings.purgeProductsOperationSettings()" id: "purgeProductsOperationSettings()" parent: "com.microsoft.samples.google.ProductSearchSettings" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml index 134a6841..3ceed122 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml @@ -58,6 +58,7 @@ items: content: "public static final RecognitionAudio.AudioSourceCase AUDIOSOURCE_NOT_SET" return: type: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" + javaType: "static field" - uid: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.AudioSourceCase(int)" id: "AudioSourceCase(int)" parent: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" @@ -88,6 +89,7 @@ items: content: "public static final RecognitionAudio.AudioSourceCase CONTENT" return: type: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" + javaType: "static field" - uid: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.URI" id: "URI" parent: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" @@ -102,6 +104,7 @@ items: content: "public static final RecognitionAudio.AudioSourceCase URI" return: type: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" + javaType: "static field" - uid: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.forNumber(int)" id: "forNumber(int)" parent: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" @@ -120,6 +123,7 @@ items: type: "int" return: type: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" + javaType: "static method" - uid: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.getNumber()" id: "getNumber()" parent: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" @@ -157,6 +161,7 @@ items: type: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" description: "The enum associated with the given number." status: "deprecated" + javaType: "static method" - uid: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.valueOf(java.lang.String)" id: "valueOf(java.lang.String)" parent: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" @@ -175,6 +180,7 @@ items: type: "java.lang.String" return: type: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" + javaType: "static method" - uid: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.values()" id: "values()" parent: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" @@ -190,6 +196,7 @@ items: content: "public static RecognitionAudio.AudioSourceCase[] values()" return: type: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase[]" + javaType: "static method" references: - uid: "int" href: "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml index 429de39c..147c3183 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml @@ -133,6 +133,7 @@ items: content: "public static final int CONTENT_FIELD_NUMBER" return: type: "int" + javaType: "static field" - uid: "com.microsoft.samples.google.RecognitionAudio.RecognitionAudio()" id: "RecognitionAudio()" parent: "com.microsoft.samples.google.RecognitionAudio" @@ -194,6 +195,7 @@ items: content: "public static final int URI_FIELD_NUMBER" return: type: "int" + javaType: "static field" - uid: "com.microsoft.samples.google.RecognitionAudio.getAudioSourceCase()" id: "getAudioSourceCase()" parent: "com.microsoft.samples.google.RecognitionAudio" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml index 2b5f6b5b..7600053c 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml @@ -138,6 +138,7 @@ items: type: "com.microsoft.samples.google.SpeechClient" exceptions: - type: "java.io.IOException" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechClient.create(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" id: "create(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" parent: "com.microsoft.samples.google.SpeechClient" @@ -157,6 +158,7 @@ items: type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" return: type: "com.microsoft.samples.google.SpeechClient" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechClient.create(com.microsoft.samples.google.SpeechSettings)" id: "create(com.microsoft.samples.google.SpeechSettings)" parent: "com.microsoft.samples.google.SpeechClient" @@ -178,6 +180,7 @@ items: type: "com.microsoft.samples.google.SpeechClient" exceptions: - type: "java.io.IOException" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechClient.getOperationsClient()" id: "getOperationsClient()" parent: "com.microsoft.samples.google.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml index 16a482b0..faffd422 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml @@ -95,6 +95,7 @@ items: type: "com.microsoft.samples.google.SpeechSettings" exceptions: - type: "java.io.IOException" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechSettings.defaultApiClientHeaderProviderBuilder()" id: "defaultApiClientHeaderProviderBuilder()" parent: "com.microsoft.samples.google.SpeechSettings" @@ -110,6 +111,7 @@ items: content: "public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder()" return: type: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechSettings.defaultCredentialsProviderBuilder()" id: "defaultCredentialsProviderBuilder()" parent: "com.microsoft.samples.google.SpeechSettings" @@ -126,6 +128,7 @@ items: content: "public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder()" return: type: "com.google.api.gax.core.GoogleCredentialsProvider.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechSettings.defaultExecutorProviderBuilder()" id: "defaultExecutorProviderBuilder()" parent: "com.microsoft.samples.google.SpeechSettings" @@ -142,6 +145,7 @@ items: content: "public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder()" return: type: "com.google.api.gax.core.InstantiatingExecutorProvider.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechSettings.defaultGrpcTransportProviderBuilder()" id: "defaultGrpcTransportProviderBuilder()" parent: "com.microsoft.samples.google.SpeechSettings" @@ -158,6 +162,7 @@ items: content: "public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder()" return: type: "com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechSettings.defaultTransportChannelProvider()" id: "defaultTransportChannelProvider()" parent: "com.microsoft.samples.google.SpeechSettings" @@ -173,6 +178,7 @@ items: content: "public static TransportChannelProvider defaultTransportChannelProvider()" return: type: "com.google.api.gax.rpc.TransportChannelProvider" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechSettings.getDefaultEndpoint()" id: "getDefaultEndpoint()" parent: "com.microsoft.samples.google.SpeechSettings" @@ -189,6 +195,7 @@ items: content: "public static String getDefaultEndpoint()" return: type: "java.lang.String" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechSettings.getDefaultServiceScopes()" id: "getDefaultServiceScopes()" parent: "com.microsoft.samples.google.SpeechSettings" @@ -205,6 +212,7 @@ items: content: "public static List getDefaultServiceScopes()" return: type: "java.util.List" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechSettings.longRunningRecognizeOperationSettings()" id: "longRunningRecognizeOperationSettings()" parent: "com.microsoft.samples.google.SpeechSettings" @@ -253,6 +261,7 @@ items: content: "public static SpeechSettings.Builder newBuilder()" return: type: "com.microsoft.samples.google.SpeechSettings.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechSettings.newBuilder(com.google.api.gax.rpc.ClientContext)" id: "newBuilder(com.google.api.gax.rpc.ClientContext)" parent: "com.microsoft.samples.google.SpeechSettings" @@ -272,6 +281,7 @@ items: type: "com.google.api.gax.rpc.ClientContext" return: type: "com.microsoft.samples.google.SpeechSettings.Builder" + javaType: "static method" - uid: "com.microsoft.samples.google.SpeechSettings.recognizeSettings()" id: "recognizeSettings()" parent: "com.microsoft.samples.google.SpeechSettings" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml index ac1fa8b9..49324c70 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml @@ -83,6 +83,7 @@ items: summary: "Clears the validation context." syntax: content: "public static void popCurrentThreadValidationContext()" + javaType: "static method" - uid: "com.microsoft.samples.google.ValidationException.pushCurrentThreadValidationContext(com.microsoft.samples.google.ValidationException.Supplier)" id: "pushCurrentThreadValidationContext(com.microsoft.samples.google.ValidationException.Supplier)" parent: "com.microsoft.samples.google.ValidationException" @@ -100,6 +101,7 @@ items: parameters: - id: "supplier" type: "com.microsoft.samples.google.ValidationException.Supplier" + javaType: "static method" - uid: "com.microsoft.samples.google.ValidationException.pushCurrentThreadValidationContext(java.lang.String)" id: "pushCurrentThreadValidationContext(java.lang.String)" parent: "com.microsoft.samples.google.ValidationException" @@ -116,6 +118,7 @@ items: parameters: - id: "context" type: "java.lang.String" + javaType: "static method" references: - uid: "java.lang.String" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/String.html" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml index 6a6c1f22..4b03fd5b 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml @@ -138,6 +138,7 @@ items: type: "com.microsoft.samples.google.v1beta.SpeechClient" exceptions: - type: "java.io.IOException" + javaType: "static method" - uid: "com.microsoft.samples.google.v1beta.SpeechClient.create(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" id: "create(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" parent: "com.microsoft.samples.google.v1beta.SpeechClient" @@ -157,6 +158,7 @@ items: type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" return: type: "com.microsoft.samples.google.v1beta.SpeechClient" + javaType: "static method" - uid: "com.microsoft.samples.google.v1beta.SpeechClient.create(com.microsoft.samples.google.SpeechSettings)" id: "create(com.microsoft.samples.google.SpeechSettings)" parent: "com.microsoft.samples.google.v1beta.SpeechClient" @@ -178,6 +180,7 @@ items: type: "com.microsoft.samples.google.v1beta.SpeechClient" exceptions: - type: "java.io.IOException" + javaType: "static method" - uid: "com.microsoft.samples.google.v1beta.SpeechClient.getOperationsClient()" id: "getOperationsClient()" parent: "com.microsoft.samples.google.v1beta.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml index f19a072a..5ad0e5d2 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml @@ -138,6 +138,7 @@ items: type: "com.microsoft.samples.google.v1p1alpha.SpeechClient" exceptions: - type: "java.io.IOException" + javaType: "static method" - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient.create(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" id: "create(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" parent: "com.microsoft.samples.google.v1p1alpha.SpeechClient" @@ -157,6 +158,7 @@ items: type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" return: type: "com.microsoft.samples.google.v1p1alpha.SpeechClient" + javaType: "static method" - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient.create(com.microsoft.samples.google.SpeechSettings)" id: "create(com.microsoft.samples.google.SpeechSettings)" parent: "com.microsoft.samples.google.v1p1alpha.SpeechClient" @@ -178,6 +180,7 @@ items: type: "com.microsoft.samples.google.v1p1alpha.SpeechClient" exceptions: - type: "java.io.IOException" + javaType: "static method" - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient.getOperationsClient()" id: "getOperationsClient()" parent: "com.microsoft.samples.google.v1p1alpha.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.yml index d20b6979..ede81fa9 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.yml @@ -52,6 +52,7 @@ items: content: "public static final Person.IdentificationInfo.Gender FEMALE" return: type: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender" + javaType: "static field" - uid: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.Gender()" id: "Gender()" parent: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender" @@ -79,6 +80,7 @@ items: content: "public static final Person.IdentificationInfo.Gender MALE" return: type: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender" + javaType: "static field" - uid: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.valueOf(java.lang.String)" id: "valueOf(java.lang.String)" parent: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender" @@ -97,6 +99,7 @@ items: type: "java.lang.String" return: type: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender" + javaType: "static method" - uid: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.values()" id: "values()" parent: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender" @@ -112,6 +115,7 @@ items: content: "public static Person.IdentificationInfo.Gender[] values()" return: type: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender[]" + javaType: "static method" references: - uid: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.Gender*" name: "Gender" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml index c994836c..1a071f68 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml @@ -86,6 +86,7 @@ items: type: "com.microsoft.samples.subpackage.Person" return: type: "com.microsoft.samples.subpackage.Person" + javaType: "static method" - uid: "com.microsoft.samples.subpackage.Person.getFirstName()" id: "getFirstName()" parent: "com.microsoft.samples.subpackage.Person" From edc472880a27df720193ad8380cd08bbfa998a4f Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 12 Jan 2022 17:53:35 +0100 Subject: [PATCH 018/168] chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.9.0 (#95) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 3e96c756..5f8d8428 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -25,7 +25,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.8.1 + 3.9.0 -Xlint:unchecked From 3d42e59ac1e1cf84bc787549dbdec4a3873ab64a Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Wed, 12 Jan 2022 13:26:48 -0800 Subject: [PATCH 019/168] fix: wider support for @links (#96) --- .../java/com/microsoft/util/YamlUtil.java | 2 ++ .../google/v1p1alpha/SpeechClient.java | 2 ++ .../java/com/microsoft/util/YamlUtilTest.java | 22 +++++++++++++++++++ ....samples.google.v1p1alpha.SpeechClient.yml | 2 +- 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java index 9487aba6..260537b7 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java @@ -32,7 +32,9 @@ public static String cleanupHtml(String text) { .replaceAll("<([A-Z][a-z]+||)>", "<$1>") .replaceAll("`([^`]+)`", "$1") .replaceAll("\\[([^]]+)]\\(([^)]+)\\)", "$1") + .replaceAll("\\{@link *\"([^\\{]+)\" *\\}", "$1") .replaceAll("\\[([^]]+)]\\[([^]]+)\\]", "$1") + .replaceAll("\\{@link *([^\\{\"]+) *\\}", "$1") .replaceAll("==+([^=]+)==+", "

$1

"); } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1p1alpha/SpeechClient.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1p1alpha/SpeechClient.java index f98b9ce4..d8f00ead 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1p1alpha/SpeechClient.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1p1alpha/SpeechClient.java @@ -108,6 +108,8 @@ public static final SpeechClient create() throws IOException { /** * Constructs an instance of SpeechClient, using the given settings. The channels are created * based on the settings passed in, or defaults for any settings that are not set. + * Example broken links: {@link "http://tools.ietf.org/html/rfc2616#section-3.7"} + * {@link ApiFutures#immediateFuture(null)}. */ public static final SpeechClient create(com.microsoft.samples.google.SpeechSettings settings) throws IOException { return new SpeechClient(settings); diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java index d6889fac..c1fad783 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java @@ -143,4 +143,26 @@ public void cleanupHtmlReferenceTest() { assertEquals("[uid]][text]", YamlUtil.cleanupHtml("[uid]][text]")); assertFalse(YamlUtil.cleanupHtml("[text[uid]]").contains("xref")); } + + @Test + public void cleanupHtmlLinkTagWithLinkTest() { + String expectedActual = "{@link \"http://www.bad-way-to-include-link.com#section\"}"; + String expectedResult = "http://www.bad-way-to-include-link.com#section"; + String random = UUID.randomUUID().toString(); + + assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); + assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); + assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); + } + + @Test + public void cleanupHtmlLinkTagNotRecognizedTest() { + String expectedActual = "{@link WeirdLink#didntResolve(null)}"; + String expectedResult = "WeirdLink#didntResolve(null)"; + String random = UUID.randomUUID().toString(); + + assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); + assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); + assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); + } } diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml index 5ad0e5d2..7139a4e9 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml @@ -170,7 +170,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.create*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Constructs an instance of SpeechClient, using the given settings. The channels are created\n based on the settings passed in, or defaults for any settings that are not set." + summary: "Constructs an instance of SpeechClient, using the given settings. The channels are created\n based on the settings passed in, or defaults for any settings that are not set.\n Example broken links: http://tools.ietf.org/html/rfc2616#section-3.7\n ApiFutures#immediateFuture(null)." syntax: content: "public static final SpeechClient create(SpeechSettings settings)" parameters: From 15f4265a4cfe5d0a4709b23b15cf4db989520dce Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 27 Jan 2022 19:56:14 +0100 Subject: [PATCH 020/168] chore(deps): update dependency org.mockito:mockito-core to v4.3.1 (#97) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 5f8d8428..e6c07fcf 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -137,7 +137,7 @@ org.mockito mockito-core - 4.2.0 + 4.3.1 test From f3c5a40dc08ef54cc7f1d9fd70c5cae5ad516b0d Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Thu, 27 Jan 2022 11:35:30 -0800 Subject: [PATCH 021/168] chore: fix see also (#99) --- .../main/java/com/microsoft/lookup/BaseLookup.java | 11 ++++++----- .../microsoft/samples/google/ValidationException.java | 2 ++ .../com.microsoft.samples.SuperHero.yml | 2 +- ...m.microsoft.samples.google.ValidationException.yml | 2 +- .../com.microsoft.samples.subpackage.Person.yml | 2 +- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java index 6ca5f715..2d0ede47 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -205,7 +206,7 @@ protected String determineComment(T element) { * Provides support for deprecated and see tags */ String replaceBlockTags(DocCommentTree docCommentTree, String comment) { - List seeItems = new ArrayList<>(); + Set seeItems = new HashSet<>(); String commentWithBlockTags = comment; for (DocTree blockTag : docCommentTree.getBlockTags()) { switch (blockTag.getKind()) { @@ -284,8 +285,8 @@ public String makeTypeShort(String value) { .collect(Collectors.joining("<")); } - private String getSeeAlsoSummary(List seeItems) { - return String.format("\nSee Also: %s\n", String.join(", ", seeItems)); + private String getSeeAlsoSummary(Set seeItems) { + return String.format("\nSee Also: %s\n", String.join(", ", seeItems)); } private String getDeprecatedSummary(DeprecatedTree deprecatedTree) { @@ -297,8 +298,8 @@ private String getSeeTagRef(SeeTree seeTree) { String ref = seeTree.getReference().stream() .map(r -> String.valueOf(r)).collect(Collectors.joining("")); // if it's already a tag, use that otherwise build xref tag - if (ref.matches("^<.+>.*")) { - return ref; + if (ref.matches("^<.+>(.|\n)*")) { + return ref.replaceAll("\n", "").replaceAll("( )+", " "); } return String.format("%1$s", ref); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ValidationException.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ValidationException.java index 5e7805e2..acebe8c9 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ValidationException.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ValidationException.java @@ -37,6 +37,8 @@ * Exception thrown if there is a validation problem with a path template, http config, or related * framework methods. Comes as an illegal argument exception subclass. Allows to globally set a * thread-local validation context description which each exception inherits. + * @see Google Cloud + * Storage error codes */ public class ValidationException extends IllegalArgumentException { diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml index 0804e4c8..457fbbdc 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml @@ -254,7 +254,7 @@ items: overload: "com.microsoft.samples.SuperHero.successfullyAttacked*" type: "Method" package: "com.microsoft.samples" - summary: "\nDeprecated. As of version 1.1, use . . . instead\n\n

This is a simple description of the method. . .\n Superman!\n

\nSee Also: HERO-402\n" + summary: "\nDeprecated. As of version 1.1, use . . . instead\n\n

This is a simple description of the method. . .\n Superman!\n

\nSee Also: HERO-402\n" syntax: content: "public int successfullyAttacked(int incomingDamage, String damageType)" parameters: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml index 49324c70..74124c8a 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml @@ -16,7 +16,7 @@ items: fullName: "com.microsoft.samples.google.ValidationException" type: "Class" package: "com.microsoft.samples.google" - summary: "Exception thrown if there is a validation problem with a path template, http config, or related\n framework methods. Comes as an illegal argument exception subclass. Allows to globally set a\n thread-local validation context description which each exception inherits." + summary: "Exception thrown if there is a validation problem with a path template, http config, or related\n framework methods. Comes as an illegal argument exception subclass. Allows to globally set a\n thread-local validation context description which each exception inherits.\nSee Also: Google Cloud Storage error codes\n" syntax: content: "public class ValidationException extends IllegalArgumentException" inheritance: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml index 1a071f68..1aa47a46 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml @@ -21,7 +21,7 @@ items: fullName: "com.microsoft.samples.subpackage.Person" type: "Class" package: "com.microsoft.samples.subpackage" - summary: "Class that describes some person\n\n This comment has links to:\n
    \n
  • Owner class Person
  • \n
  • Its inner class Person.IdentificationInfo
  • \n
  • Its method Person#setLastName(String lastName)
  • \n
  • Its method without params Person#setLastName()
  • \n
  • Its public field Person#age
  • \n
  • Another class which used here Set
  • \n
  • Another class which not used here List
  • \n
  • Broken link sdfdsagdsfghfgh
  • \n
  • Plain link someContent
  • \n
  • Link that starts from '#' #setLastName()
  • \n
  • Link with label WordOne
  • \n
\n\n This is an \"at\" symbol: @\nSee Also: Display\n" + summary: "Class that describes some person\n\n This comment has links to:\n
    \n
  • Owner class Person
  • \n
  • Its inner class Person.IdentificationInfo
  • \n
  • Its method Person#setLastName(String lastName)
  • \n
  • Its method without params Person#setLastName()
  • \n
  • Its public field Person#age
  • \n
  • Another class which used here Set
  • \n
  • Another class which not used here List
  • \n
  • Broken link sdfdsagdsfghfgh
  • \n
  • Plain link someContent
  • \n
  • Link that starts from '#' #setLastName()
  • \n
  • Link with label WordOne
  • \n
\n\n This is an \"at\" symbol: @\nSee Also: Display\n" syntax: content: "public class Person" typeParameters: From 886333cc3b5acf272f9acedea351284d3134f24c Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 8 Feb 2022 18:28:37 +0100 Subject: [PATCH 022/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.2.3 (#101) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index e6c07fcf..73ed212a 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.2.2 + 2.2.3 test From fd2b03c614e10d27b2567e9218e358d69ae2f15f Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 23 Feb 2022 22:19:30 +0100 Subject: [PATCH 023/168] chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.10.0 (#104) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 73ed212a..9572e7b2 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -25,7 +25,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.9.0 + 3.10.0 -Xlint:unchecked From 292837c20b585dfe4136fab338d0c0ffeca45e39 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 23 Feb 2022 22:19:50 +0100 Subject: [PATCH 024/168] chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.3.2 (#103) Co-authored-by: Emily Ball --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 9572e7b2..facc0dae 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -58,7 +58,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.3.1 + 3.3.2 com.microsoft.doclet.DocFxDoclet From 7e0d619536826f139f6a536753108668a56b139e Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 23 Feb 2022 22:20:06 +0100 Subject: [PATCH 025/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.2.6 (#102) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index facc0dae..bf3873d1 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.2.3 + 2.2.6 test From a1055a011cac62ae0628cf6ec54572cc65a7bfd2 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 1 Mar 2022 18:49:59 +0100 Subject: [PATCH 026/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.2.7 (#107) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index bf3873d1..4d44409b 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.2.6 + 2.2.7 test From 9a251fc86064c1396f2864a18e919ac7a474d8cd Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 7 Mar 2022 20:11:23 +0100 Subject: [PATCH 027/168] chore(deps): update actions/checkout action to v3 (#108) --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b7f37349..1113f03b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: actions/setup-java@v1 with: java-version: 11 @@ -37,7 +37,7 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: actions/setup-java@v1 with: java-version: 11 From 26092ab8159bfb0459d5ee2b232e47a52647f458 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 7 Mar 2022 20:11:51 +0100 Subject: [PATCH 028/168] fix(deps): update dependency com.fasterxml.jackson.core:jackson-databind to v2.13.2 (#110) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 4d44409b..0dc4e690 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -13,7 +13,7 @@ 11 ${java.version} ${java.version} - 2.13.1 + 2.13.2 3.12.0 4.4 2.11.0 From 007acbcdd403fae58e60575061a8033bd3118c02 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 7 Mar 2022 20:12:03 +0100 Subject: [PATCH 029/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.2.8 (#109) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 0dc4e690..9f68fad9 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.2.7 + 2.2.8 test From 65261b77e140e71f44598e33cbe15edf11fe333e Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 15 Mar 2022 20:06:39 +0100 Subject: [PATCH 030/168] chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.10.1 (#113) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 9f68fad9..80709b55 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -25,7 +25,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.10.0 + 3.10.1 -Xlint:unchecked From ef1084ea3d09778d34cfb4e6e430f617b93b3fda Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 15 Mar 2022 20:06:56 +0100 Subject: [PATCH 031/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.2.9 (#112) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 80709b55..2ebda9ff 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.2.8 + 2.2.9 test From 381593ffcf946ba82bb3606b7d3193fa1f253900 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 15 Mar 2022 20:07:12 +0100 Subject: [PATCH 032/168] chore(deps): update dependency org.mockito:mockito-core to v4.4.0 (#111) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 2ebda9ff..2ee0ae99 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -137,7 +137,7 @@ org.mockito mockito-core - 4.3.1 + 4.4.0 test From 455460a0b3d85f3de325afdc8cc9bcb1512f29bc Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 24 Mar 2022 17:37:59 +0100 Subject: [PATCH 033/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.2.11 (#114) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 2ee0ae99..5a3eca7e 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.2.9 + 2.2.11 test From a6d1ff624e2918ac1439255c98dbedf65da91be1 Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Fri, 1 Apr 2022 15:52:02 -0700 Subject: [PATCH 034/168] fix: update bracket regex --- .../src/main/java/com/microsoft/util/YamlUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java index 260537b7..51a776f7 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java @@ -29,7 +29,7 @@ public static String cleanupHtml(String text) { } return text.replaceAll("
([^<]+)
","$1") .replaceAll("
", "
")
-                .replaceAll("<([A-Z][a-z]+||)>", "<$1>")
+                .replaceAll("<([A-Za-z]+||)>", "<$1>")
                 .replaceAll("`([^`]+)`", "$1")
                 .replaceAll("\\[([^]]+)]\\(([^)]+)\\)", "$1")
                 .replaceAll("\\{@link *\"([^\\{]+)\" *\\}", "$1")

From 6aa51a268ac51c8b0eef92171bce293eb786397e Mon Sep 17 00:00:00 2001
From: Emily Ball 
Date: Fri, 1 Apr 2022 16:02:01 -0700
Subject: [PATCH 035/168] Revert "fix: update bracket regex"

This reverts commit a6d1ff624e2918ac1439255c98dbedf65da91be1.
---
 .../src/main/java/com/microsoft/util/YamlUtil.java              | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java
index 51a776f7..260537b7 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java
@@ -29,7 +29,7 @@ public static String cleanupHtml(String text) {
         }
         return text.replaceAll("
([^<]+)
","$1") .replaceAll("
", "
")
-                .replaceAll("<([A-Za-z]+||)>", "<$1>")
+                .replaceAll("<([A-Z][a-z]+||)>", "<$1>")
                 .replaceAll("`([^`]+)`", "$1")
                 .replaceAll("\\[([^]]+)]\\(([^)]+)\\)", "$1")
                 .replaceAll("\\{@link *\"([^\\{]+)\" *\\}", "$1")

From d2661b0fb1864c736827d60a29cb5d6659c59596 Mon Sep 17 00:00:00 2001
From: Emily Ball 
Date: Fri, 1 Apr 2022 16:08:23 -0700
Subject: [PATCH 036/168] fix: update bracket regex

was catching ones like  but missing with multiple capitals such as 
---
 .../src/main/java/com/microsoft/util/YamlUtil.java          | 2 +-
 .../com.microsoft.samples.google.SpeechClient.yml           | 6 +++---
 .../com.microsoft.samples.google.v1beta.SpeechClient.yml    | 6 +++---
 .../com.microsoft.samples.google.v1p1alpha.SpeechClient.yml | 6 +++---
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java
index 260537b7..8e866475 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java
@@ -29,7 +29,7 @@ public static String cleanupHtml(String text) {
         }
         return text.replaceAll("
([^<]+)
","$1") .replaceAll("
", "
")
-                .replaceAll("<([A-Z][a-z]+||)>", "<$1>")
+                .replaceAll("<([A-Z][^<]+||)>", "<$1>")
                 .replaceAll("`([^`]+)`", "$1")
                 .replaceAll("\\[([^]]+)]\\(([^)]+)\\)", "$1")
                 .replaceAll("\\{@link *\"([^\\{]+)\" *\\}", "$1")
diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml
index 7600053c..fa0ce7ae 100644
--- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml
+++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml
@@ -327,7 +327,7 @@ items:
   overload: "com.microsoft.samples.google.SpeechClient.longRunningRecognizeOperationCallable*"
   type: "Method"
   package: "com.microsoft.samples.google"
-  summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n 

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture<LongRunningRecognizeResponse, LongRunningRecognizeMetadata> future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final OperationCallable longRunningRecognizeOperationCallable()" return: @@ -386,7 +386,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.recognizeCallable*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture<RecognizeResponse> future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable recognizeCallable()" return: @@ -428,7 +428,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.streamingRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google" - summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" + summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream<StreamingRecognizeRequest, StreamingRecognizeResponse> bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" syntax: content: "public final BidiStreamingCallable streamingRecognizeCallable()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml index 4b03fd5b..65a6b994 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml @@ -327,7 +327,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.longRunningRecognizeOperationCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture<LongRunningRecognizeResponse, LongRunningRecognizeMetadata> future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final OperationCallable longRunningRecognizeOperationCallable()" return: @@ -386,7 +386,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.recognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture<RecognizeResponse> future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable recognizeCallable()" return: @@ -428,7 +428,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.streamingRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" + summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream<StreamingRecognizeRequest, StreamingRecognizeResponse> bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" syntax: content: "public final BidiStreamingCallable streamingRecognizeCallable()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml index 7139a4e9..759edda9 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml @@ -327,7 +327,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.longRunningRecognizeOperationCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture<LongRunningRecognizeResponse, LongRunningRecognizeMetadata> future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final OperationCallable longRunningRecognizeOperationCallable()" return: @@ -386,7 +386,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.recognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture<RecognizeResponse> future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" syntax: content: "public final UnaryCallable recognizeCallable()" return: @@ -428,7 +428,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.streamingRecognizeCallable*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" + summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream<StreamingRecognizeRequest, StreamingRecognizeResponse> bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" syntax: content: "public final BidiStreamingCallable streamingRecognizeCallable()" return: From 6f75127819a452e0fb92f95a85d1b0e761c78b98 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 7 Apr 2022 18:06:23 +0200 Subject: [PATCH 037/168] chore(deps): update dependency org.jacoco:jacoco-maven-plugin to v0.8.8 (#117) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.jacoco:jacoco-maven-plugin](https://www.jacoco.org/jacoco/trunk/doc/maven.html) ([source](https://togithub.com/jacoco/jacoco)) | `0.8.7` -> `0.8.8` | [![age](https://badges.renovateapi.com/packages/maven/org.jacoco:jacoco-maven-plugin/0.8.8/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.jacoco:jacoco-maven-plugin/0.8.8/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.jacoco:jacoco-maven-plugin/0.8.8/compatibility-slim/0.8.7)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.jacoco:jacoco-maven-plugin/0.8.8/confidence-slim/0.8.7)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
jacoco/jacoco ### [`v0.8.8`](https://togithub.com/jacoco/jacoco/releases/v0.8.8) [Compare Source](https://togithub.com/jacoco/jacoco/compare/v0.8.7...v0.8.8) ##### New Features - JaCoCo now officially supports Java 17 and 18 (GitHub [#​1282](https://togithub.com/jacoco/jacoco/issues/1282), [#​1198](https://togithub.com/jacoco/jacoco/issues/1198)). - Experimental support for Java 19 class files (GitHub [#​1264](https://togithub.com/jacoco/jacoco/issues/1264)). - Part of bytecode generated by the Java compilers for assert statement is filtered out during generation of report (GitHub [#​1196](https://togithub.com/jacoco/jacoco/issues/1196)). - Branch added by the Kotlin compiler version 1.6.0 and above for "unsafe" cast operator is filtered out during generation of report (GitHub [#​1266](https://togithub.com/jacoco/jacoco/issues/1266)). - Improved support for multiple JaCoCo runtimes in the same VM (GitHub [#​1057](https://togithub.com/jacoco/jacoco/issues/1057)). ##### Fixed bugs - Fixed `NullPointerException` during filtering (GitHub [#​1189](https://togithub.com/jacoco/jacoco/issues/1189)). - Fix range for debug symbols of method parameters (GitHub [#​1246](https://togithub.com/jacoco/jacoco/issues/1246)). ##### Non-functional Changes - JaCoCo now depends on ASM 9.2 (GitHub [#​1206](https://togithub.com/jacoco/jacoco/issues/1206)). - Messages of exceptions occurring during analysis or instrumentation now include JaCoCo version (GitHub [#​1217](https://togithub.com/jacoco/jacoco/issues/1217)).
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 5a3eca7e..96fde3b8 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -76,7 +76,7 @@ org.jacoco jacoco-maven-plugin - 0.8.7 + 0.8.8 From 72dc16349a22de088b2360823b97676729d430b7 Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Wed, 13 Apr 2022 16:25:19 -0700 Subject: [PATCH 038/168] feat: disableChangelog option (#119) --- .../com/microsoft/build/YmlFilesBuilder.java | 6 +++-- .../com/microsoft/doclet/DocFxDoclet.java | 18 +++++++++++++-- .../java/com/microsoft/model/TocContents.java | 10 ++++---- .../java/com/microsoft/model/TocFile.java | 6 +++-- .../microsoft/build/YmlFilesBuilderTest.java | 2 +- .../com/microsoft/model/TocContentsTest.java | 23 +++++++++++++++++-- .../java/com/microsoft/model/TocFileTest.java | 2 +- 7 files changed, 53 insertions(+), 14 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 94cd8abe..b558d1a6 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -25,18 +25,20 @@ public class YmlFilesBuilder { private ElementUtil elementUtil; private PackageLookup packageLookup; private String projectName; + private boolean disableChangelog; private ProjectBuilder projectBuilder; private PackageBuilder packageBuilder; private ClassBuilder classBuilder; private ReferenceBuilder referenceBuilder; public YmlFilesBuilder(DocletEnvironment environment, String outputPath, - String[] excludePackages, String[] excludeClasses, String projectName) { + String[] excludePackages, String[] excludeClasses, String projectName, boolean disableChangelog) { this.environment = environment; this.outputPath = outputPath; this.elementUtil = new ElementUtil(excludePackages, excludeClasses); this.packageLookup = new PackageLookup(environment); this.projectName = projectName; + this.disableChangelog = disableChangelog; this.projectBuilder = new ProjectBuilder(projectName); ClassLookup classLookup = new ClassLookup(environment); this.referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); @@ -46,7 +48,7 @@ public YmlFilesBuilder(DocletEnvironment environment, String outputPath, public boolean build() { // table of contents - TocFile tocFile = new TocFile(outputPath, projectName); + TocFile tocFile = new TocFile(outputPath, projectName, disableChangelog); // overview page MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); // package summary pages diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java index 068c7bcd..20050e74 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java @@ -25,9 +25,10 @@ public boolean run(DocletEnvironment environment) { reporter.print(Kind.NOTE, "Output path: " + outputPath); reporter.print(Kind.NOTE, "Excluded packages: " + Arrays.toString(excludePackages)); reporter.print(Kind.NOTE, "Excluded classes: " + Arrays.toString(excludeClasses)); - reporter.print(Kind.NOTE, "Project Name: " + projectName); + reporter.print(Kind.NOTE, "Project name: " + projectName); + reporter.print(Kind.NOTE, "Disable changelog: " + disableChangelog); - return (new YmlFilesBuilder(environment, outputPath, excludePackages, excludeClasses, projectName)).build(); + return (new YmlFilesBuilder(environment, outputPath, excludePackages, excludeClasses, projectName, disableChangelog)).build(); } @Override @@ -39,6 +40,7 @@ public String getName() { private String[] excludePackages = {}; private String[] excludeClasses = {}; private String projectName; + private boolean disableChangelog; @Override public Set getSupportedOptions() { @@ -75,6 +77,18 @@ public boolean process(String option, List arguments) { return true; } }, + new CustomOption( + "Disable changelog", Arrays.asList("-disable-changelog", "--disable-changelog"), "disableChangelog") { + @Override + public boolean process(String option, List arguments) { + if (arguments.get(0).equalsIgnoreCase("false")){ + disableChangelog = false; + } else { + disableChangelog = true; + } + return true; + } + }, // Support next properties for compatibility with Gradle javadoc task. // According to javadoc spec - these properties used by StandardDoclet and used only when // 'doclet' parameter not populated. But Gradle javadoc not align with this rule and diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java index d55c027d..cd8e4ceb 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java @@ -23,22 +23,24 @@ public class TocContents { private final String projectName; private final List contents = new ArrayList<>(); - public TocContents(String projectName, List items) { + public TocContents(String projectName, boolean disableChangelog, List items) { this.projectName = projectName; if (projectName == null || projectName.equals("")) { contents.addAll(items); } else { // only include product hierarchy and guides if projectName included - createTocContents(projectName, items); + createTocContents(projectName, disableChangelog, items); } } - private void createTocContents(String projectName, List items) { + private void createTocContents(String projectName, boolean disableChangelog, List items) { List tocItems = new ArrayList<>(); // combine guides and tocItems tocItems.add(new Guide("Overview", "overview.html")); - tocItems.add(new Guide("Version history", "history.md")); + if (!disableChangelog) { + tocItems.add(new Guide("Version history", "history.md")); + } tocItems.addAll(items); // wrap guides + tocItems with product hierarchy contents.add(new ProjectContents(projectName, tocItems)); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java index cef0fb26..e32af29b 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java @@ -14,10 +14,12 @@ public class TocFile extends ArrayList implements YmlFile { private final static String TOC_FILE_NAME = "toc.yml"; private final String outputPath; private final String projectName; + private final boolean disableChangelog; - public TocFile(String outputPath, String projectName) { + public TocFile(String outputPath, String projectName, boolean disableChangelog) { this.outputPath = outputPath; this.projectName = projectName; + this.disableChangelog = disableChangelog; } public void addTocItem(TocItem packageTocItem) { @@ -31,7 +33,7 @@ protected void sortByUid() { @Override public String getFileContent() { sortByUid(); - List tocContents = new TocContents(projectName, this).getContents(); + List tocContents = new TocContents(projectName, disableChangelog, this).getContents(); return TOC_FILE_HEADER + YamlUtil.objectToYamlString(tocContents); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java index c6d92d40..027ba7d7 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java @@ -23,7 +23,7 @@ public class YmlFilesBuilderTest { @Before public void setup() { environment = Mockito.mock(DocletEnvironment.class); - ymlFilesBuilder = new YmlFilesBuilder(environment, "./target", new String[]{}, new String[]{}, "google-cloud-product"); + ymlFilesBuilder = new YmlFilesBuilder(environment, "./target", new String[]{}, new String[]{}, "google-cloud-product", false); } @Test diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java index d1d5965d..530910d8 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java @@ -23,6 +23,7 @@ import java.util.List; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; public class TocContentsTest { @@ -31,6 +32,7 @@ public class TocContentsTest { private TocItem tocItemC; private List tocItems; private String projectName = "google-cloud-project"; + private boolean disableChangelog = false; @Before public void setup() { @@ -47,7 +49,7 @@ public void setup() { @Test public void getContentsWithProjectName() { // should include ProjectContents and Guides - List tocContents = new TocContents(projectName, tocItems).getContents(); + List tocContents = new TocContents(projectName, disableChangelog, tocItems).getContents(); assertEquals("Should only include 1 item", tocContents.size(), 1); assertEquals("Should include ProjectContents", tocContents.get(0).getClass(), ProjectContents.class); @@ -73,7 +75,7 @@ public void getContentsWithProjectName() { @Test public void getContentsNoProjectName() { - List tocContents = new TocContents("", tocItems).getContents(); + List tocContents = new TocContents("", disableChangelog, tocItems).getContents(); // should not include ProjectContents or Guides assertEquals("Should be 3 items", tocContents.size(), 3); @@ -81,4 +83,21 @@ public void getContentsNoProjectName() { assertEquals("Item B should be second", tocContents.get(1), tocItemB); assertEquals("Item C should be third", tocContents.get(2), tocItemC); } + + @Test + public void getContentsWithDisabledChangelog() { + disableChangelog = true; + List tocContents = new TocContents(projectName, disableChangelog, tocItems).getContents(); + + ProjectContents contents = (ProjectContents) tocContents.get(0); + List items = contents.getItems(); + assertEquals("Should be 4 items", items.size(), 4); + + Guide overview = (Guide) items.get(0); + assertEquals("First guide should be Overview", overview.getName(), "Overview"); + assertNotEquals("Second item should not be Version History guide", items.get(1).getClass(), Guide.class); + assertEquals("Item A should be second", items.get(1), tocItemA); + assertEquals("Item B should be third", items.get(2), tocItemB); + assertEquals("Item C should be fourth", items.get(3), tocItemC); + } } \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java index 1299b842..c1c174ff 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java @@ -24,7 +24,7 @@ public class TocFileTest { @Test public void sortsByUid() { - TocFile tocFile = new TocFile("outputPath", "google-cloud-project"); + TocFile tocFile = new TocFile("outputPath", "google-cloud-project", false); TocItem tocItemA = new TocItem("A.uid.package.class", "name"); TocItem tocItemB = new TocItem("B.uid.package.class", "name"); TocItem tocItemC = new TocItem("C.uid.package.class", "name"); From 215fd74998a656d8e1570d2a6c3e3c67e811d653 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 21 Apr 2022 16:48:17 +0200 Subject: [PATCH 039/168] chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.4.0 (#121) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.apache.maven.plugins:maven-javadoc-plugin](https://maven.apache.org/plugins/) ([source](https://togithub.com/apache/maven-javadoc-plugin)) | `3.3.2` -> `3.4.0` | [![age](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.4.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.4.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.4.0/compatibility-slim/3.3.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.4.0/confidence-slim/3.3.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 96fde3b8..5f1bc16b 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -58,7 +58,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.3.2 + 3.4.0 com.microsoft.doclet.DocFxDoclet From a114aa6f48427cf7675dea362ecb529119e54ee2 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 21 Apr 2022 21:40:23 +0200 Subject: [PATCH 040/168] chore(deps): update dependency org.mockito:mockito-core to v4.5.1 (#120) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.mockito:mockito-core](https://togithub.com/mockito/mockito) | `4.4.0` -> `4.5.1` | [![age](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.5.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.5.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.5.1/compatibility-slim/4.4.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.5.1/confidence-slim/4.4.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
mockito/mockito ### [`v4.5.1`](https://togithub.com/mockito/mockito/releases/v4.5.1) [Compare Source](https://togithub.com/mockito/mockito/compare/v4.5.0...v4.5.1) *Changelog generated by [Shipkit Changelog Gradle Plugin](https://togithub.com/shipkit/shipkit-changelog)* ##### 4.5.1 - 2022-04-21 - [2 commit(s)](https://togithub.com/mockito/mockito/compare/v4.5.0...v4.5.1) by Jeremy Landis, dependabot\[bot] - Fixes [#​2623](https://togithub.com/mockito/mockito/issues/2623): Use zulu distribution and java 11 for release GHA job [(#​2624)](https://togithub.com/mockito/mockito/pull/2624) - Missing errorprone module for 4.5.0 in central as release was done with jdk 8 [(#​2623)](https://togithub.com/mockito/mockito/issues/2623) - Bump kotlinVersion from 1.6.20 to 1.6.21 [(#​2622)](https://togithub.com/mockito/mockito/pull/2622) ### [`v4.5.0`](https://togithub.com/mockito/mockito/releases/v4.5.0) [Compare Source](https://togithub.com/mockito/mockito/compare/v4.4.0...v4.5.0) *Changelog generated by [Shipkit Changelog Gradle Plugin](https://togithub.com/shipkit/shipkit-changelog)* ##### 4.5.0 - 2022-04-19 - [15 commit(s)](https://togithub.com/mockito/mockito/compare/v4.4.0...v4.5.0) by Andrei Silviu Dragnea, Rafael Winterhalter, Rick Ossendrijver, dependabot\[bot] - Bump versions.errorprone from 2.13.0 to 2.13.1 [(#​2621)](https://togithub.com/mockito/mockito/pull/2621) - Bump versions.errorprone from 2.12.1 to 2.13.0 [(#​2619)](https://togithub.com/mockito/mockito/pull/2619) - Groovy inline [(#​2618)](https://togithub.com/mockito/mockito/pull/2618) - Bump actions/setup-java from 2 to 3 [(#​2615)](https://togithub.com/mockito/mockito/pull/2615) - Bump versions.bytebuddy from 1.12.8 to 1.12.9 [(#​2614)](https://togithub.com/mockito/mockito/pull/2614) - Support subclass mocks on Graal VM. [(#​2613)](https://togithub.com/mockito/mockito/pull/2613) - Bump com.diffplug.spotless from 6.4.1 to 6.4.2 [(#​2611)](https://togithub.com/mockito/mockito/pull/2611) - Bump kotlinx-coroutines-core from 1.6.0-native-mt to 1.6.1-native-mt [(#​2609)](https://togithub.com/mockito/mockito/pull/2609) - Bump versions.errorprone from 2.10.0 to 2.12.1 [(#​2608)](https://togithub.com/mockito/mockito/pull/2608) - Bump kotlinVersion from 1.6.10 to 1.6.20 [(#​2607)](https://togithub.com/mockito/mockito/pull/2607) - Bump com.diffplug.spotless from 6.4.0 to 6.4.1 [(#​2606)](https://togithub.com/mockito/mockito/pull/2606) - Bump com.diffplug.spotless from 6.3.0 to 6.4.0 [(#​2605)](https://togithub.com/mockito/mockito/pull/2605) - Bump org.eclipse.osgi from 3.17.100 to 3.17.200 [(#​2597)](https://togithub.com/mockito/mockito/pull/2597) - Deprecate ListUtil and Fields classes [(#​2593)](https://togithub.com/mockito/mockito/pull/2593) - mockito-errorprone seems not compatible with ErrorProne 2.11.0 [(#​2554)](https://togithub.com/mockito/mockito/issues/2554) - NullPointerException from Groovy metaclass methods when using mockito-inline (but not mockito-core) [(#​2522)](https://togithub.com/mockito/mockito/issues/2522)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 5f1bc16b..34a8c65a 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -137,7 +137,7 @@ org.mockito mockito-core - 4.4.0 + 4.5.1 test From b912690f20aadbd6a23424bc939af0fe772885af Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 22 Apr 2022 16:32:16 +0200 Subject: [PATCH 041/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.2.13 (#116) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.2.11` -> `2.2.13` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.2.13/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.2.13/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.2.13/compatibility-slim/2.2.11)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.2.13/confidence-slim/2.2.11)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-speech ### [`v2.2.13`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​2213-httpsgithubcomgoogleapisjava-speechcomparev2212v2213-2022-04-01) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.2.12...v2.2.13) ### [`v2.2.12`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​2212-httpsgithubcomgoogleapisjava-speechcomparev2211v2212-2022-03-30) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.2.11...v2.2.12)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 34a8c65a..c2a62eac 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.2.11 + 2.2.13 test From 1927f850134896ebf6830ab0caa70c9decaae411 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 22 Apr 2022 19:06:14 +0200 Subject: [PATCH 042/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.2.15 (#122) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.2.13` -> `2.2.15` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.2.15/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.2.15/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.2.15/compatibility-slim/2.2.13)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.2.15/confidence-slim/2.2.13)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-speech ### [`v2.2.15`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​2215-httpsgithubcomgoogleapisjava-speechcomparev2214v2215-2022-04-18) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.2.14...v2.2.15) ### [`v2.2.14`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​2214-httpsgithubcomgoogleapisjava-speechcomparev2213v2214-2022-04-07) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.2.13...v2.2.14)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index c2a62eac..40a84f80 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.2.13 + 2.2.15 test From a25e7693ccbce1bb8143218e97d4aa5819e3d0d5 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 16 May 2022 19:36:29 +0200 Subject: [PATCH 043/168] fix(deps): update dependency org.jsoup:jsoup to v1.15.1 (#123) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.jsoup:jsoup](https://jsoup.org/) ([source](https://togithub.com/jhy/jsoup)) | `1.14.3` -> `1.15.1` | [![age](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.15.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.15.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.15.1/compatibility-slim/1.14.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.15.1/confidence-slim/1.14.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 40a84f80..9dd37a91 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -124,7 +124,7 @@ org.jsoup jsoup - 1.14.3 + 1.15.1 From 32f8acb94e91a5c64eec6a847611dec5a8f5e43e Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Wed, 18 May 2022 09:38:55 -0700 Subject: [PATCH 044/168] chore: update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 94f2a191..de785ef4 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Designed to generate YAML files from Javadoc output for DocFX consumption. While The original github repository for the doclet can be found at [github.com/docascode/docfx-doclet](https://github.com/docascode/docfx-doclet). -This doclet is forked from release [143274](https://github.com/docascode/docfx-doclet/releases/tag/143274) from June 2020 as it is still compatible with DocFX V2. +This doclet is forked from release [143274](https://github.com/docascode/docfx-doclet/releases/tag/143274) from June 2020 as it is still compatible with DocFX V2. This doclet has since been refactored and various features and fixes have been included. \ This is not an officially supported Google product. From d8fddb6a247cf10fa29fe6d88a67c687aeb43518 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 26 May 2022 00:14:12 +0200 Subject: [PATCH 045/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.3.0 (#124) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.2.15` -> `2.3.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.3.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.3.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.3.0/compatibility-slim/2.2.15)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.3.0/confidence-slim/2.2.15)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-speech ### [`v2.3.0`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​230-httpsgithubcomgoogleapisjava-speechcomparev2215v230-2022-05-20) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.2.15...v2.3.0) ##### Features - add build scripts for native image testing in Java 17 ([#​1440](https://togithub.com/googleapis/java-speech/issues/1440)) ([#​885](https://togithub.com/googleapis/java-speech/issues/885)) ([9578f69](https://togithub.com/googleapis/java-speech/commit/9578f69c0a0032d68d131d77edc703cb54b40d54)) ##### Bug Fixes - **java:** restore native image configuration ([#​880](https://togithub.com/googleapis/java-speech/issues/880)) ([5431acb](https://togithub.com/googleapis/java-speech/commit/5431acb1934828b0fe8f0db861ccbb0912ef5e7b)) - restore native image resource config ([#​863](https://togithub.com/googleapis/java-speech/issues/863)) ([22cc309](https://togithub.com/googleapis/java-speech/commit/22cc30914c84175538b38a5a43c3392840b97381)) ##### Dependencies - error_prone_annotations from shared deps BOM ([#​877](https://togithub.com/googleapis/java-speech/issues/877)) ([98cc79b](https://togithub.com/googleapis/java-speech/commit/98cc79b22cf9721b65d1598c99b97a591834ccb5)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.12.0 ([#​884](https://togithub.com/googleapis/java-speech/issues/884)) ([0f18fdd](https://togithub.com/googleapis/java-speech/commit/0f18fddfc035acb0b722f5433d79e7533c953603)) ##### Documentation - Add documentation for latest models to RecognitionConfig ([09e59c1](https://togithub.com/googleapis/java-speech/commit/09e59c1c004e4b3c27fe95049b8f69795111d14b)) - Update client libraries for v1p1beta1 api ([#​882](https://togithub.com/googleapis/java-speech/issues/882)) ([e36e650](https://togithub.com/googleapis/java-speech/commit/e36e65049e2aef1076e658d08c1f1b262b10d082)) ##### [2.2.15](https://togithub.com/googleapis/java-speech/compare/v2.2.14...v2.2.15) (2022-04-18) ##### Bug Fixes - use full link in comment to fix JSDoc broken link ([#​861](https://togithub.com/googleapis/java-speech/issues/861)) ([220ccaf](https://togithub.com/googleapis/java-speech/commit/220ccaf8865aa92843878991c3c3e6dae16646c8)) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.10.0 ([#​865](https://togithub.com/googleapis/java-speech/issues/865)) ([de6a547](https://togithub.com/googleapis/java-speech/commit/de6a54708155ee34ccfbbb575e8729b75fed5cca)) - update dependency com.google.cloud:google-cloud-storage to v2.6.1 ([#​867](https://togithub.com/googleapis/java-speech/issues/867)) ([1115f48](https://togithub.com/googleapis/java-speech/commit/1115f48f4349a083ba79f32323931232efa2114c)) - update dependency com.google.errorprone:error_prone_annotations to v2.13.0 ([#​864](https://togithub.com/googleapis/java-speech/issues/864)) ([260b3cb](https://togithub.com/googleapis/java-speech/commit/260b3cbc5de3c48b660e2aaed9c8f8cb3697745a)) - update dependency com.google.errorprone:error_prone_annotations to v2.13.1 ([#​866](https://togithub.com/googleapis/java-speech/issues/866)) ([38a03f4](https://togithub.com/googleapis/java-speech/commit/38a03f45dd4daf9677eb9e08b1cd2b48ba6e611f)) ##### [2.2.14](https://togithub.com/googleapis/java-speech/compare/v2.2.13...v2.2.14) (2022-04-07) ##### Dependencies - update dependency com.google.errorprone:error_prone_annotations to v2.12.1 ([#​855](https://togithub.com/googleapis/java-speech/issues/855)) ([3cd4c3f](https://togithub.com/googleapis/java-speech/commit/3cd4c3f4209e2cb3967ce217dd61fd7f1e3a5803)) ##### [2.2.13](https://togithub.com/googleapis/java-speech/compare/v2.2.12...v2.2.13) (2022-04-01) ##### Dependencies - update dependency com.google.cloud:google-cloud-storage to v2.6.0 ([#​848](https://togithub.com/googleapis/java-speech/issues/848)) ([183b463](https://togithub.com/googleapis/java-speech/commit/183b463d46c197a119692f7292a6cf898452c5f3)) ##### [2.2.12](https://togithub.com/googleapis/java-speech/compare/v2.2.11...v2.2.12) (2022-03-30) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.9.0 ([#​844](https://togithub.com/googleapis/java-speech/issues/844)) ([327300c](https://togithub.com/googleapis/java-speech/commit/327300cf125a597df937b7a08838f54312a33204)) - update dependency com.google.cloud:google-cloud-storage to v2.5.1 ([#​842](https://togithub.com/googleapis/java-speech/issues/842)) ([ef68f28](https://togithub.com/googleapis/java-speech/commit/ef68f2871859d8d940897bef01185d8c9d20025b)) ##### [2.2.11](https://togithub.com/googleapis/java-speech/compare/v2.2.10...v2.2.11) (2022-03-22) ##### Dependencies - update actions/checkout action to v3 ([#​820](https://togithub.com/googleapis/java-speech/issues/820)) ([f22beb1](https://togithub.com/googleapis/java-speech/commit/f22beb19b2c202cb4e681fdff6b6749b2835ed1b)) ##### [2.2.10](https://togithub.com/googleapis/java-speech/compare/v2.2.9...v2.2.10) (2022-03-21) ##### Dependencies - update dependency org.json:json to v20220320 ([#​835](https://togithub.com/googleapis/java-speech/issues/835)) ([7c9e616](https://togithub.com/googleapis/java-speech/commit/7c9e61602bae8d7914b8d34566584e4942679969)) ##### [2.2.9](https://togithub.com/googleapis/java-speech/compare/v2.2.8...v2.2.9) (2022-03-09) ##### Dependencies - update dependency com.google.cloud:google-cloud-storage to v2.4.5 ([#​830](https://togithub.com/googleapis/java-speech/issues/830)) ([40cf6ec](https://togithub.com/googleapis/java-speech/commit/40cf6ecf8b06c78d5a52e1780501cbf7864cc2f7)) ##### [2.2.8](https://togithub.com/googleapis/java-speech/compare/v2.2.7...v2.2.8) (2022-03-02) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.8.0 ([#​822](https://togithub.com/googleapis/java-speech/issues/822)) ([be1ca4b](https://togithub.com/googleapis/java-speech/commit/be1ca4bd7bdaa017ac44d0257e762f4acf174bd6)) ##### [2.2.7](https://togithub.com/googleapis/java-speech/compare/v2.2.6...v2.2.7) (2022-03-01) ##### Dependencies - update actions/setup-java action to v3 ([#​814](https://togithub.com/googleapis/java-speech/issues/814)) ([585c4fe](https://togithub.com/googleapis/java-speech/commit/585c4fee931015d1e4cd40e250921e266ddfa1cb)) - update dependency com.google.cloud:google-cloud-storage to v2.4.4 ([#​817](https://togithub.com/googleapis/java-speech/issues/817)) ([7085bac](https://togithub.com/googleapis/java-speech/commit/7085bacceafc0cac3203ed03bc42e876f01e9053)) ##### [2.2.6](https://togithub.com/googleapis/java-speech/compare/v2.2.5...v2.2.6) (2022-02-14) ##### Dependencies - update dependency com.google.cloud:google-cloud-storage to v2.4.2 ([#​805](https://togithub.com/googleapis/java-speech/issues/805)) ([99dd3d7](https://togithub.com/googleapis/java-speech/commit/99dd3d7f14c226bdcb705f264411071abb9248b0)) ##### [2.2.5](https://togithub.com/googleapis/java-speech/compare/v2.2.4...v2.2.5) (2022-02-10) ##### Dependencies - update dependency com.google.cloud:google-cloud-storage to v2.4.1 ([#​796](https://togithub.com/googleapis/java-speech/issues/796)) ([821ffeb](https://togithub.com/googleapis/java-speech/commit/821ffeb9201d577d0781a5824404e96f460ecea4)) ##### [2.2.4](https://togithub.com/googleapis/java-speech/compare/v2.2.3...v2.2.4) (2022-02-09) ##### Dependencies - update dependency com.google.cloud:google-cloud-storage to v2.4.0 ([#​789](https://togithub.com/googleapis/java-speech/issues/789)) ([afcf454](https://togithub.com/googleapis/java-speech/commit/afcf454bd9d895f60f0a783b33eeb1cd71ccaab0)) ##### [2.2.3](https://togithub.com/googleapis/java-speech/compare/v2.2.2...v2.2.3) (2022-02-03) ##### Dependencies - **java:** update actions/github-script action to v5 ([#​1339](https://togithub.com/googleapis/java-speech/issues/1339)) ([#​783](https://togithub.com/googleapis/java-speech/issues/783)) ([df0a102](https://togithub.com/googleapis/java-speech/commit/df0a102742fd112eae45b8c3ccefb780569b3ba9)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.7.0 ([#​785](https://togithub.com/googleapis/java-speech/issues/785)) ([8f7ccac](https://togithub.com/googleapis/java-speech/commit/8f7ccac12d78d19184e591516ef832945933b789)) - update dependency com.google.cloud:google-cloud-storage to v2.2.3 ([#​770](https://togithub.com/googleapis/java-speech/issues/770)) ([1edd841](https://togithub.com/googleapis/java-speech/commit/1edd841f80e8628f633b386d2f3b30035e297ba7)) - update dependency com.google.cloud:google-cloud-storage to v2.3.0 ([#​779](https://togithub.com/googleapis/java-speech/issues/779)) ([c94bfd5](https://togithub.com/googleapis/java-speech/commit/c94bfd5ed476c875d7241ef1c7e923be127e7806)) - update dependency com.google.errorprone:error_prone_annotations to v2.11.0 ([#​782](https://togithub.com/googleapis/java-speech/issues/782)) ([809bb05](https://togithub.com/googleapis/java-speech/commit/809bb05877e5aa587774e6a0db3ffa8b3c69083a)) ##### [2.2.2](https://www.github.com/googleapis/java-speech/compare/v2.2.1...v2.2.2) (2022-01-07) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.6.0 ([#​765](https://www.togithub.com/googleapis/java-speech/issues/765)) ([c04c18d](https://www.github.com/googleapis/java-speech/commit/c04c18d5572f475996195208804f7987c1e4a5b7)) ##### [2.2.1](https://www.github.com/googleapis/java-speech/compare/v2.2.0...v2.2.1) (2021-12-06) ##### Dependencies - update dependency com.google.cloud:google-cloud-storage to v2.2.2 ([#​749](https://www.togithub.com/googleapis/java-speech/issues/749)) ([1e6eeeb](https://www.github.com/googleapis/java-speech/commit/1e6eeeb09ff75ddedf5896ccdb7d7cf3fefa7ade))
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 9dd37a91..77e8b234 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.2.15 + 2.3.0 test From d353afbe09ba67877dd4c69d982d8de3be3fc6c3 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 6 Jun 2022 19:18:24 +0200 Subject: [PATCH 046/168] chore(deps): update dependency org.mockito:mockito-core to v4.6.1 (#125) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.mockito:mockito-core](https://togithub.com/mockito/mockito) | `4.5.1` -> `4.6.1` | [![age](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.6.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.6.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.6.1/compatibility-slim/4.5.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.6.1/confidence-slim/4.5.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
mockito/mockito ### [`v4.6.1`](https://togithub.com/mockito/mockito/releases/tag/v4.6.1) [Compare Source](https://togithub.com/mockito/mockito/compare/v4.6.0...v4.6.1) *Changelog generated by [Shipkit Changelog Gradle Plugin](https://togithub.com/shipkit/shipkit-changelog)* ##### 4.6.1 - 2022-06-02 - [6 commit(s)](https://togithub.com/mockito/mockito/compare/v4.6.0...v4.6.1) by Andy Coates, Chen Ni, dependabot\[bot] - Bump material from 1.6.0 to 1.6.1 [(#​2662)](https://togithub.com/mockito/mockito/pull/2662) - Bump core-ktx from 1.7.0 to 1.8.0 [(#​2661)](https://togithub.com/mockito/mockito/pull/2661) - Bump groovy from 3.0.10 to 3.0.11 [(#​2660)](https://togithub.com/mockito/mockito/pull/2660) - Fix for Issue2656 [(#​2659)](https://togithub.com/mockito/mockito/pull/2659) - Bump assertj-core from 3.22.0 to 3.23.1 [(#​2658)](https://togithub.com/mockito/mockito/pull/2658) - Regression? Strictness set in `@MockitoSettings` ignored after upgrade from 4.5.1 to 4.6.0 [(#​2656)](https://togithub.com/mockito/mockito/issues/2656) - Fix typo [(#​2655)](https://togithub.com/mockito/mockito/pull/2655) ### [`v4.6.0`](https://togithub.com/mockito/mockito/releases/tag/v4.6.0) [Compare Source](https://togithub.com/mockito/mockito/compare/v4.5.1...v4.6.0) *Changelog generated by [Shipkit Changelog Gradle Plugin](https://togithub.com/shipkit/shipkit-changelog)* ##### 4.6.0 - 2022-05-27 - [14 commit(s)](https://togithub.com/mockito/mockito/compare/v4.5.1...v4.6.0) by Hervé Boutemy, K. Siva Prasad Reddy, Rafael Winterhalter, dependabot\[bot] - Bump shipkit-changelog from 1.1.15 to 1.2.0 [(#​2654)](https://togithub.com/mockito/mockito/pull/2654) - Bump versions.errorprone from 2.13.1 to 2.14.0 [(#​2653)](https://togithub.com/mockito/mockito/pull/2653) - Bump shipkit-auto-version from 1.1.20 to 1.2.0 [(#​2651)](https://togithub.com/mockito/mockito/pull/2651) - Fixes [#​2648](https://togithub.com/mockito/mockito/issues/2648) : Add support for customising strictness via [@​Mock](https://togithub.com/Mock) annotation and MockSettings [(#​2650)](https://togithub.com/mockito/mockito/pull/2650) - Any way to enable Strict Stubbing when using Mockito.mock() without using [@​Mock](https://togithub.com/Mock)? [(#​2648)](https://togithub.com/mockito/mockito/issues/2648) - Reintroduce inheriting type annotations from interfaces if only one interface is mocked, including additional interfaces. [(#​2645)](https://togithub.com/mockito/mockito/pull/2645) - Bump com.diffplug.spotless from 6.6.0 to 6.6.1 [(#​2643)](https://togithub.com/mockito/mockito/pull/2643) - fix Reproducible Build issue [(#​2642)](https://togithub.com/mockito/mockito/pull/2642) - Bump com.diffplug.spotless from 6.5.2 to 6.6.0 [(#​2641)](https://togithub.com/mockito/mockito/pull/2641) - Mockito mock of interfaces lost annotation information [(#​2640)](https://togithub.com/mockito/mockito/issues/2640) - Bump material from 1.5.0 to 1.6.0 [(#​2637)](https://togithub.com/mockito/mockito/pull/2637) - Bump com.diffplug.spotless from 6.5.1 to 6.5.2 [(#​2636)](https://togithub.com/mockito/mockito/pull/2636) - Bump versions.bytebuddy from 1.12.9 to 1.12.10 [(#​2635)](https://togithub.com/mockito/mockito/pull/2635) - Bump com.diffplug.spotless from 6.5.0 to 6.5.1 [(#​2632)](https://togithub.com/mockito/mockito/pull/2632) - Bump com.diffplug.spotless from 6.4.2 to 6.5.0 [(#​2631)](https://togithub.com/mockito/mockito/pull/2631)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 77e8b234..9e53477f 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -137,7 +137,7 @@ org.mockito mockito-core - 4.5.1 + 4.6.1 test From cd569d609f5bd9e9f74ae9a90b603e9fdc97ca2b Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Thu, 16 Jun 2022 11:02:53 -0400 Subject: [PATCH 047/168] feat: make DocletRunner runnable for optios file and argfile (#127) * feat: make DocletRunner runnable for optios file and argfile * test: example file to contain single quotes The options file used by real Javadoc tool has single quotes for the values. --- .../com/microsoft/doclet/DocletRunner.java | 30 +++++++++++-------- .../com/microsoft/util/OptionsFileUtil.java | 8 +++-- .../microsoft/doclet/DocletRunnerTest.java | 12 +++++--- .../microsoft/util/OptionsFileUtilTest.java | 4 +-- .../src/test/resources/test-doclet-params.txt | 3 +- 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java index 9dc8c719..a96a8af0 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java @@ -1,27 +1,33 @@ package com.microsoft.doclet; import com.microsoft.util.OptionsFileUtil; - +import java.util.ArrayList; +import java.util.List; import javax.tools.ToolProvider; /** - * To use runner just pass as commandline param to main method: - * - name of file with doclet name amd params - *

- * For example: java DocletRunner src\test\resources\test-doclet-params.txt + * To use runner just pass as commandline param to main method: - name of file with doclet name, + * parameter file, and argument file. + * + *

For example: java DocletRunner $HOME/java-aiplatform/target/site/apidocs/options + * $HOME/java-aiplatform/target/site/apidocs/argfile */ public class DocletRunner { public static void main(final String[] args) { - if (args.length != 1) { - System.err.println("Usage: java DocletRunner "); - return; - } - if (!(new java.io.File(args[0])).isFile()) { - System.err.println(String.format("File '%s' does not exist", args[0])); + if (args.length < 1) { + System.err.println("Usage: java DocletRunner "); return; } - ToolProvider.getSystemDocumentationTool().run(null, null, null, OptionsFileUtil.processOptionsFile(args[0])); + List combined = new ArrayList<>(); + for (String arg : args) { + if (!(new java.io.File(arg)).isFile()) { + System.err.println(String.format("File '%s' does not exist", args[0])); + } + combined.addAll(OptionsFileUtil.processOptionsFile(arg)); + } + ToolProvider.getSystemDocumentationTool() + .run(null, null, null, combined.toArray(new String[0])); } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/OptionsFileUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/OptionsFileUtil.java index bd5f0c18..6a9554e2 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/OptionsFileUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/OptionsFileUtil.java @@ -9,7 +9,7 @@ public class OptionsFileUtil { - public static String[] processOptionsFile(String filename) { + public static List processOptionsFile(String filename) { List jargs = new ArrayList<>(); String options = readOptionsFromFile(filename); @@ -18,7 +18,7 @@ public static String[] processOptionsFile(String filename) { jargs.add(tokens.nextToken()); } - return jargs.toArray(new String[0]); + return jargs; } private static String readOptionsFromFile(String filename) { @@ -26,7 +26,9 @@ private static String readOptionsFromFile(String filename) { try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filename))) { String line; while ((line = bufferedReader.readLine()) != null) { - buffer.append(line).append("\n"); + // remove single quote at the head and tail + String trimmedLine = line.replaceAll("^'|'$", ""); + buffer.append(trimmedLine).append("\n"); } } catch (IOException ioe) { buffer.setLength(0); diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java index 7cb916e0..0a4ac777 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java @@ -14,6 +14,7 @@ import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; public class DocletRunnerTest { @@ -45,15 +46,18 @@ public void testFilesGenerationWhenNoParams() { DocletRunner.main(new String[]{}); assertEquals("Wrong System.err content", - errContent.toString().trim(), "Usage: java DocletRunner "); + errContent.toString().trim(), "Usage: java DocletRunner "); } @Test public void testFilesGenerationWhenTargetFileDoesNotExist() { - DocletRunner.main(new String[]{"some-name.txt"}); - - assertEquals("Wrong System.err content", + try { + DocletRunner.main(new String[]{"some-name.txt"}); + fail(); + } catch (RuntimeException ex) { + assertEquals("Wrong System.err content", errContent.toString().trim(), "File 'some-name.txt' does not exist"); + } } @Test diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/OptionsFileUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/OptionsFileUtilTest.java index 2a6460f1..093fa9b0 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/OptionsFileUtilTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/OptionsFileUtilTest.java @@ -1,8 +1,6 @@ package com.microsoft.util; import org.junit.Test; - -import java.util.Arrays; import java.util.List; import static org.junit.Assert.assertTrue; @@ -13,7 +11,7 @@ public class OptionsFileUtilTest { @Test public void processOptionsFile() { - List strings = Arrays.asList(OptionsFileUtil.processOptionsFile(PARAMS_DIR)); + List strings = OptionsFileUtil.processOptionsFile(PARAMS_DIR); assertTrue("Wrong result", strings.contains("-doclet")); assertTrue("Wrong result", strings.contains("com.microsoft.doclet.DocFxDoclet")); diff --git a/third_party/docfx-doclet-143274/src/test/resources/test-doclet-params.txt b/third_party/docfx-doclet-143274/src/test/resources/test-doclet-params.txt index 903cb863..7c5e71d3 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/test-doclet-params.txt +++ b/third_party/docfx-doclet-143274/src/test/resources/test-doclet-params.txt @@ -1,4 +1,5 @@ --doclet com.microsoft.doclet.DocFxDoclet +-doclet +'com.microsoft.doclet.DocFxDoclet' -sourcepath ./src/test/java -outputpath ./target/test-out -encoding UTF-8 From db26f3592b6adb9344869ca64f30ec1049b17dc7 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 1 Jul 2022 23:06:28 +0200 Subject: [PATCH 048/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.5.0 (#130) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.3.0` -> `2.5.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.0/compatibility-slim/2.3.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.0/confidence-slim/2.3.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes

googleapis/java-speech ### [`v2.5.0`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​250-httpsgithubcomgoogleapisjava-speechcomparev240v250-2022-07-01) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.4.0...v2.5.0) ##### Features - java template no longer require clirr ([#​1469](https://togithub.com/googleapis/java-speech/issues/1469)) ([#​907](https://togithub.com/googleapis/java-speech/issues/907)) ([b936042](https://togithub.com/googleapis/java-speech/commit/b93604296b2ad98759eda03bbe4e3c8a1aae28fd)) ### [`v2.4.0`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​240-httpsgithubcomgoogleapisjava-speechcomparev230v240-2022-06-28) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.3.0...v2.4.0) ##### Features - Enable REST transport for most of Java and Go clients ([#​900](https://togithub.com/googleapis/java-speech/issues/900)) ([b1f9db5](https://togithub.com/googleapis/java-speech/commit/b1f9db5c7c1a2ec9aa47fdd143d61ee5c0c82b3e)) ##### Bug Fixes - update gapic-generator-java with mock service generation fixes ([#​902](https://togithub.com/googleapis/java-speech/issues/902)) ([cd1f23f](https://togithub.com/googleapis/java-speech/commit/cd1f23f8e7d14518407acb4692b79f7955072c42)) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.13.0 ([#​899](https://togithub.com/googleapis/java-speech/issues/899)) ([71dfae1](https://togithub.com/googleapis/java-speech/commit/71dfae16dc46296b460c3c9d37b634a7bf46ca38)) - update dependency com.google.cloud:google-cloud-storage to v2.7.1 ([#​889](https://togithub.com/googleapis/java-speech/issues/889)) ([c6b93fd](https://togithub.com/googleapis/java-speech/commit/c6b93fd4d7524923ad74e142672de7c56c54da82)) - update dependency com.google.cloud:google-cloud-storage to v2.7.2 ([#​891](https://togithub.com/googleapis/java-speech/issues/891)) ([063902b](https://togithub.com/googleapis/java-speech/commit/063902bc718f7988857157e91b45316d87508820)) - update dependency com.google.cloud:google-cloud-storage to v2.8.0 ([#​893](https://togithub.com/googleapis/java-speech/issues/893)) ([97c7cbc](https://togithub.com/googleapis/java-speech/commit/97c7cbca620221f7632fe0d041b0c5c10cfd118d)) - update dependency com.google.cloud:google-cloud-storage to v2.8.1 ([#​897](https://togithub.com/googleapis/java-speech/issues/897)) ([b6097e2](https://togithub.com/googleapis/java-speech/commit/b6097e20ed291b9fd340109dbe546030dcc338ca))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 9e53477f..aa76958b 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.3.0 + 2.5.0 test From 3285f982fd3c86045bb9491d82cb94e6fa59f935 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 11 Jul 2022 23:19:05 +0200 Subject: [PATCH 049/168] chore(deps): update dependency org.apache.maven.plugins:maven-assembly-plugin to v3.4.1 (#132) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index aa76958b..6ead5cf7 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -36,7 +36,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.3.0 + 3.4.1 From ad828bbb6c572a7047b97b6d2227470699eefd4d Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 11 Jul 2022 23:20:29 +0200 Subject: [PATCH 050/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.5.1 (#131) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 6ead5cf7..ce6e1817 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.5.0 + 2.5.1 test From 24adca39c681c0cd07ccd24a35328f8b9e17cd45 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 11 Jul 2022 23:23:53 +0200 Subject: [PATCH 051/168] fix(deps): update dependency org.jsoup:jsoup to v1.15.2 (#134) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index ce6e1817..62b70adc 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -124,7 +124,7 @@ org.jsoup jsoup - 1.15.1 + 1.15.2 From 129dcd5b074a7ae24e56f23798d4d533d5db2758 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 15 Jul 2022 20:54:02 +0200 Subject: [PATCH 052/168] fix(deps): update jackson.version to v2.13.3 (#115) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 62b70adc..463e3ecd 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -13,7 +13,7 @@ 11 ${java.version} ${java.version} - 2.13.2 + 2.13.3 3.12.0 4.4 2.11.0 From 13291fb19555e58407570fd83a586d52b6c03979 Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Tue, 19 Jul 2022 13:51:31 -0400 Subject: [PATCH 053/168] fix: Specify exact regex when adding in h2 tags for title (#136) * fix: Use new regex to capture java class name * feat: Add tests * fix: Add orchestration-airflow failed test case Co-authored-by: Lawrence Qiu --- .../src/main/java/com/microsoft/util/YamlUtil.java | 2 +- .../src/test/java/com/microsoft/util/YamlUtilTest.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java index 8e866475..7f0a1f97 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java @@ -35,6 +35,6 @@ public static String cleanupHtml(String text) { .replaceAll("\\{@link *\"([^\\{]+)\" *\\}", "$1") .replaceAll("\\[([^]]+)]\\[([^]]+)\\]", "$1") .replaceAll("\\{@link *([^\\{\"]+) *\\}", "$1") - .replaceAll("==+([^=]+)==+", "

$1

"); + .replaceAll("=======================([^=]+)=======================", "

$1

"); } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java index c1fad783..605a3b7c 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java @@ -127,7 +127,13 @@ public void cleanupHtmlEqualTitlesTest() { assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); + assertEquals("= text =", YamlUtil.cleanupHtml("= text =")); + assertEquals("==testing==", YamlUtil.cleanupHtml("==testing==")); + assertEquals("=======================SpeechClient=======================", "=======================SpeechClient======================="); + assertEquals("\"scikit-learn\":\"==0.19.0\"TextTextText\"botocore\":\"==1.7.14\"", "\"scikit-learn\":\"==0.19.0\"TextTextText\"botocore\":\"==1.7.14\""); + assertEquals("======= test1234 ===== 1234test === 1234test1234 == test =", YamlUtil.cleanupHtml("======= test1234 ===== 1234test === 1234test1234 == test =")); + assertEquals("====== Markdown H1 Test ======", YamlUtil.cleanupHtml("====== Markdown H1 Test ======")); } @Test From de378446fc7f41fa08bdd5970058855874065b2f Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Tue, 19 Jul 2022 16:40:34 -0400 Subject: [PATCH 054/168] feat: Ignore google cloud vision upgrade attempts (#138) Co-authored-by: Lawrence Qiu --- renovate.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/renovate.json b/renovate.json index f45d8f11..d0bc48eb 100644 --- a/renovate.json +++ b/renovate.json @@ -1,5 +1,11 @@ { "extends": [ "config:base" + ], + "packageRules": [ + { + "matchPackageNames": ["com.google.cloud:google-cloud-vision"], + "allowedVersions": "<=2.0.13" + } ] } From 951dd50e1e9e93649b610d57ada84315c749ff88 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 25 Jul 2022 19:32:24 +0200 Subject: [PATCH 055/168] chore(deps): update dependency org.apache.maven.plugins:maven-assembly-plugin to v3.4.2 (#141) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.apache.maven.plugins:maven-assembly-plugin](https://maven.apache.org/plugins/) ([source](https://togithub.com/apache/maven-assembly-plugin)) | `3.4.1` -> `3.4.2` | [![age](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.4.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.4.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.4.2/compatibility-slim/3.4.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.4.2/confidence-slim/3.4.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 463e3ecd..3b72b07c 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -36,7 +36,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.4.1 + 3.4.2 From 4bff94ec0016d67f295279d0c4f04706e7b8b29e Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Wed, 27 Jul 2022 11:10:51 -0400 Subject: [PATCH 056/168] feat: Add Caching for ElementUtil (#140) * feat: Add javax.lang.Element caching * fix: Removed synchronized keyword * fix: Add elementutil mocks * fix: Add ElementUtil mock Co-authored-by: Lawrence Qiu --- .../com/microsoft/build/ClassBuilder.java | 8 +-- .../main/java/com/microsoft/build/Lookup.java | 9 ++- .../com/microsoft/build/YmlFilesBuilder.java | 4 +- .../java/com/microsoft/lookup/BaseLookup.java | 59 +++++++++---------- .../microsoft/lookup/ClassItemsLookup.java | 5 +- .../com/microsoft/lookup/ClassLookup.java | 57 ++++++++++-------- .../java/com/microsoft/util/ElementUtil.java | 48 +++++++++++---- .../main/java/com/microsoft/util/Utils.java | 46 ++++++++------- .../com/microsoft/build/ClassBuilderTest.java | 14 ++--- .../microsoft/build/ReferenceBuilderTest.java | 4 +- .../microsoft/build/YmlFilesBuilderTest.java | 2 +- .../lookup/ClassItemsLookupTest.java | 4 +- .../com/microsoft/lookup/ClassLookupTest.java | 24 ++++---- 13 files changed, 159 insertions(+), 125 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java index c70652f7..efcd26ec 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java @@ -102,7 +102,7 @@ private void addClassInfo(TypeElement classElement, MetadataFile classMetadataFi } void addConstructorsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - for (ExecutableElement constructorElement : ElementFilter.constructorsIn(classElement.getEnclosedElements())) { + for (ExecutableElement constructorElement : ElementFilter.constructorsIn(elementUtil.getEnclosedElements(classElement))) { MetadataFileItem constructorItem = buildMetadataFileItem(constructorElement); constructorItem.setOverload(classItemsLookup.extractOverload(constructorElement)); constructorItem.setContent(classItemsLookup.extractConstructorContent(constructorElement)); @@ -115,7 +115,7 @@ void addConstructorsInfo(TypeElement classElement, MetadataFile classMetadataFil } private void addMethodsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - ElementFilter.methodsIn(classElement.getEnclosedElements()).stream() + ElementFilter.methodsIn(elementUtil.getEnclosedElements(classElement)).stream() .filter(methodElement -> !Utils.isPrivateOrPackagePrivate(methodElement)) .forEach(methodElement -> { MetadataFileItem methodItem = buildMetadataFileItem(methodElement); @@ -135,7 +135,7 @@ private void addMethodsInfo(TypeElement classElement, MetadataFile classMetadata } private void addFieldsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - ElementFilter.fieldsIn(classElement.getEnclosedElements()).stream() + ElementFilter.fieldsIn(elementUtil.getEnclosedElements(classElement)).stream() .filter(fieldElement -> !Utils.isPrivateOrPackagePrivate(fieldElement)) .forEach(fieldElement -> { MetadataFileItem fieldItem = buildMetadataFileItem(fieldElement); @@ -177,7 +177,7 @@ private void collect(TypeElement classElement, List children, Function, List> selectFunc, Function mapFunc) { - List elements = selectFunc.apply(classElement.getEnclosedElements()); + List elements = selectFunc.apply(elementUtil.getEnclosedElements(classElement)); children.addAll(filterPrivateElements(elements).stream() .map(mapFunc).collect(Collectors.toList())); } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java index 77781040..df74ebb1 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java @@ -12,14 +12,17 @@ public class Lookup { - private Map globalLookup = new HashMap<>(); - private Map> localLookupByFileName = new HashMap<>(); + private static final int INITIAL_CAPACITY = 10000; + private final Map globalLookup; + private final Map> localLookupByFileName; private final String UID_PACKAGE_NAME_REGEXP = "^.*?\\.(?=[A-Z].*)"; private final String PARAM_PACKAGE_NAME_REGEXP = "(?<=[\\( ]).*?(?=[A-Z].*)"; private final String METHOD_PARAMS_REGEXP = "\\s[^\\s]+?(?=[,)])"; public Lookup(List packageMetadataFiles, List classMetadataFiles) { + this.globalLookup = new HashMap<>(INITIAL_CAPACITY); + this.localLookupByFileName = new HashMap<>(INITIAL_CAPACITY); consume(packageMetadataFiles); consume(classMetadataFiles); } @@ -96,4 +99,4 @@ private void consume(List metadataFiles) { localLookupByFileName.put(file.getFileNameWithPath(), map); }); } -} +} \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index b558d1a6..7288b135 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -40,10 +40,10 @@ public YmlFilesBuilder(DocletEnvironment environment, String outputPath, this.projectName = projectName; this.disableChangelog = disableChangelog; this.projectBuilder = new ProjectBuilder(projectName); - ClassLookup classLookup = new ClassLookup(environment); + ClassLookup classLookup = new ClassLookup(environment, elementUtil); this.referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); this.packageBuilder = new PackageBuilder(packageLookup, outputPath, referenceBuilder); - this.classBuilder = new ClassBuilder(elementUtil, classLookup, new ClassItemsLookup(environment), outputPath, referenceBuilder); + this.classBuilder = new ClassBuilder(elementUtil, classLookup, new ClassItemsLookup(environment, elementUtil), outputPath, referenceBuilder); } public boolean build() { diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java index 2d0ede47..d4f04d14 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java @@ -13,6 +13,7 @@ import com.sun.source.doctree.LinkTree; import com.sun.source.doctree.LiteralTree; import com.sun.source.doctree.SeeTree; +import java.util.concurrent.ConcurrentHashMap; import jdk.javadoc.doclet.DocletEnvironment; import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.StringUtils; @@ -32,6 +33,7 @@ public abstract class BaseLookup { + private static final int INITIAL_CAPACITY = 500000; protected final Map elementKindLookup = new HashMap<>() {{ put(ElementKind.PACKAGE, "Namespace"); put(ElementKind.CLASS, "Class"); @@ -44,20 +46,17 @@ public abstract class BaseLookup { put(ElementKind.FIELD, "Field"); }}; - protected Map map = new HashMap<>(); + protected Map map; protected final DocletEnvironment environment; protected BaseLookup(DocletEnvironment environment) { this.environment = environment; + this.map = new HashMap<>(INITIAL_CAPACITY); } protected ExtendedMetadataFileItem resolve(T key) { - ExtendedMetadataFileItem value = map.get(key); - if (value == null) { - value = buildMetadataFileItem(key); - map.put(key, value); - } - return value; + map.computeIfAbsent(key, this::buildMetadataFileItem); + return map.get(key); } protected abstract ExtendedMetadataFileItem buildMetadataFileItem(T key); @@ -172,9 +171,9 @@ public String extractStatus(T element) { Optional docCommentTree = getDocCommentTree(element); if (docCommentTree.isPresent()) { boolean isDeprecated = docCommentTree.get().getBlockTags().stream() - .filter(docTree -> docTree.getKind().equals(DocTree.Kind.DEPRECATED)) - .findFirst() - .isPresent(); + .filter(docTree -> docTree.getKind().equals(DocTree.Kind.DEPRECATED)) + .findFirst() + .isPresent(); if (isDeprecated) { return DocTree.Kind.DEPRECATED.name().toLowerCase(); } @@ -194,9 +193,9 @@ protected String determineComment(T element) { Optional docCommentTree = getDocCommentTree(element); if (docCommentTree.isPresent()) { String comment = docCommentTree - .map(DocCommentTree::getFullBody) - .map(this::replaceLinksAndCodes) - .orElse(null); + .map(DocCommentTree::getFullBody) + .map(this::replaceLinksAndCodes) + .orElse(null); return replaceBlockTags(docCommentTree.get(), comment); } return null; @@ -233,19 +232,19 @@ String replaceBlockTags(DocCommentTree docCommentTree, String comment) { */ String replaceLinksAndCodes(List items) { return YamlUtil.cleanupHtml(items.stream().map( - bodyItem -> { - switch (bodyItem.getKind()) { - case LINK: - case LINK_PLAIN: - return buildXrefTag((LinkTree) bodyItem); - case CODE: - return buildCodeTag((LiteralTree) bodyItem); - case LITERAL: - return expandLiteralBody((LiteralTree) bodyItem); - default: - return String.valueOf(bodyItem); - } + bodyItem -> { + switch (bodyItem.getKind()) { + case LINK: + case LINK_PLAIN: + return buildXrefTag((LinkTree) bodyItem); + case CODE: + return buildCodeTag((LiteralTree) bodyItem); + case LITERAL: + return expandLiteralBody((LiteralTree) bodyItem); + default: + return String.valueOf(bodyItem); } + } ).collect(Collectors.joining())); } @@ -281,8 +280,8 @@ public String makeTypeShort(String value) { return value; } return Stream.of(StringUtils.split(value, "<")) - .map(s -> RegExUtils.removeAll(s, "\\b[a-z0-9_.]+\\.")) - .collect(Collectors.joining("<")); + .map(s -> RegExUtils.removeAll(s, "\\b[a-z0-9_.]+\\.")) + .collect(Collectors.joining("<")); } private String getSeeAlsoSummary(Set seeItems) { @@ -291,16 +290,16 @@ private String getSeeAlsoSummary(Set seeItems) { private String getDeprecatedSummary(DeprecatedTree deprecatedTree) { return String.format("\nDeprecated. %s\n\n", - replaceLinksAndCodes(deprecatedTree.getBody())); + replaceLinksAndCodes(deprecatedTree.getBody())); } private String getSeeTagRef(SeeTree seeTree) { String ref = seeTree.getReference().stream() - .map(r -> String.valueOf(r)).collect(Collectors.joining("")); + .map(r -> String.valueOf(r)).collect(Collectors.joining("")); // if it's already a tag, use that otherwise build xref tag if (ref.matches("^<.+>(.|\n)*")) { return ref.replaceAll("\n", "").replaceAll("( )+", " "); } return String.format("%1$s", ref); } -} +} \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java index d3e8d2a3..f2da89d6 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java @@ -5,6 +5,7 @@ import com.microsoft.model.MethodParameter; import com.microsoft.model.Return; import com.microsoft.util.CommentHelper; +import com.microsoft.util.ElementUtil; import com.microsoft.util.Utils; import com.sun.source.doctree.DocCommentTree; import com.sun.source.doctree.DocTree; @@ -29,9 +30,9 @@ public class ClassItemsLookup extends BaseLookup { private Utils utils; - public ClassItemsLookup(DocletEnvironment environment) { + public ClassItemsLookup(DocletEnvironment environment, ElementUtil elementUtil) { super(environment); - utils = new Utils(environment); + utils = new Utils(environment, elementUtil); } @Override diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java index 91f097cc..3f1fcd9a 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java @@ -3,7 +3,9 @@ import com.microsoft.lookup.model.ExtendedMetadataFileItem; import com.microsoft.model.MetadataFileItem; import com.microsoft.model.TypeParameter; +import com.microsoft.util.ElementUtil; import com.microsoft.util.Utils; +import java.util.Collections; import jdk.javadoc.doclet.DocletEnvironment; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -25,8 +27,11 @@ public class ClassLookup extends BaseLookup { private static final String JAVA_LANG_OBJECT = "java.lang.Object"; - public ClassLookup(DocletEnvironment environment) { + private final ElementUtil elementUtil; + + public ClassLookup(DocletEnvironment environment, ElementUtil elementUtil) { super(environment); + this.elementUtil = elementUtil; } @Override @@ -59,14 +64,14 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(TypeElement classElemen } void populateContent(TypeElement classElement, String shortNameWithGenericsSupport, - ExtendedMetadataFileItem container) { + ExtendedMetadataFileItem container) { String type = elementKindLookup.get(classElement.getKind()); String result = String.format("%s %s %s", - classElement.getModifiers().stream().map(String::valueOf) - .filter(modifier -> !("Interface".equals(type) && "abstract".equals(modifier))) - .filter(modifier -> !("Enum".equals(type) && ("static".equals(modifier) || "final".equals(modifier)))) - .collect(Collectors.joining(" ")), - StringUtils.lowerCase(type), shortNameWithGenericsSupport); + classElement.getModifiers().stream().map(String::valueOf) + .filter(modifier -> !("Interface".equals(type) && "abstract".equals(modifier))) + .filter(modifier -> !("Enum".equals(type) && ("static".equals(modifier) || "final".equals(modifier)))) + .collect(Collectors.joining(" ")), + StringUtils.lowerCase(type), shortNameWithGenericsSupport); String superclass = determineSuperclass(classElement); if (superclass != null && !JAVA_LANG_OBJECT.equals(superclass)) { @@ -79,11 +84,11 @@ void populateContent(TypeElement classElement, String shortNameWithGenericsSuppo if (CollectionUtils.isNotEmpty(interfaces)) { String prefix = (classElement.getKind() == ElementKind.INTERFACE) ? " extends " : " implements "; result += prefix + interfaces.stream().map(String::valueOf).map(this::makeTypeShort) - .collect(Collectors.joining(", ")); + .collect(Collectors.joining(", ")); container.setInterfaces(interfaces.stream() - .map(String::valueOf) - .collect(Collectors.toList())); + .map(String::valueOf) + .collect(Collectors.toList())); addInterfacesToReferencesMap(interfaces, container); @@ -98,16 +103,16 @@ void addSuperclassToReferencesMap(String superclass, ExtendedMetadataFileItem co void addInheritedMethodsToReferencesMap(ExtendedMetadataFileItem container) { container.addReferences(container.getInheritedMethods().stream() - .map(o -> new MetadataFileItem(o, makeTypeShort(o), false)) - .collect(Collectors.toSet()) + .map(o -> new MetadataFileItem(o, makeTypeShort(o), false)) + .collect(Collectors.toSet()) ); } void addInterfacesToReferencesMap(List interfaces, ExtendedMetadataFileItem container) { container.addReferences(interfaces.stream() - .map(String::valueOf) - .map(o -> new MetadataFileItem(o, makeTypeShort(o), false)) - .collect(Collectors.toSet()) + .map(String::valueOf) + .map(o -> new MetadataFileItem(o, makeTypeShort(o), false)) + .collect(Collectors.toSet()) ); } @@ -141,14 +146,14 @@ List determineNestedSuperclass(TypeElement classElement, ExtendedMetadat List determineTypeParameters(TypeElement element) { return element.getTypeParameters().stream() - .map(typeParameter -> new TypeParameter(String.valueOf(typeParameter))) - .collect(Collectors.toList()); + .map(typeParameter -> new TypeParameter(String.valueOf(typeParameter))) + .collect(Collectors.toList()); } void appendInheritedMethods(TypeElement element, List inheritedMethods) { - List members = element.getEnclosedElements(); + List members = elementUtil.getEnclosedElements(element); Integer level = Optional.ofNullable(getMaxNestedLevel(inheritedMethods)) - .orElse(0); + .orElse(0); for (Element m : members) { if (m.getKind() == ElementKind.METHOD && !Utils.isPrivateOrPackagePrivate(m)) { @@ -168,9 +173,9 @@ Integer getMaxNestedLevel(List inheritedMethods) { if (inheritedMethods.size() > 0) { level = inheritedMethods - .stream() - .mapToInt(v -> v.getNestedLevel()) - .max().orElseThrow(NoSuchElementException::new); + .stream() + .mapToInt(v -> v.getNestedLevel()) + .max().orElseThrow(NoSuchElementException::new); } return level; } @@ -191,9 +196,9 @@ List determineInheritedMembers(List inheritedM } } List methods = map.values() - .stream() - .map(x -> x.getUid()) - .collect(Collectors.toList()); + .stream() + .map(x -> x.getUid()) + .collect(Collectors.toList()); return methods; } @@ -212,4 +217,4 @@ public String extractJavaType(TypeElement element) { } return null; } -} +} \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java index 54b8ac64..d594ba4f 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java @@ -1,5 +1,7 @@ package com.microsoft.util; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.lang3.StringUtils; import javax.lang.model.element.Element; @@ -15,34 +17,54 @@ public class ElementUtil { + private static final int INITIAL_CAPACITY = 1000000; private final Set excludePackages = new HashSet<>(); private final Set excludeClasses = new HashSet<>(); + private final Map> elementMap; + private final Map> elementSortedMap; + public ElementUtil(String[] excludePackages, String[] excludeClasses) { this.excludePackages.addAll(Stream.of(excludePackages) - .map(o -> Pattern.compile(o)).collect(Collectors.toSet())); + .map(o -> Pattern.compile(o)).collect(Collectors.toSet())); this.excludeClasses.addAll(Stream.of(excludeClasses) - .map(o -> Pattern.compile(o)).collect(Collectors.toSet())); + .map(o -> Pattern.compile(o)).collect(Collectors.toSet())); + this.elementMap = new ConcurrentHashMap<>(INITIAL_CAPACITY); + this.elementSortedMap = new ConcurrentHashMap<>(INITIAL_CAPACITY); } public List extractSortedElements(Element element) { + elementSortedMap.computeIfAbsent(element, this::extractSortedElementsInternal); + return elementSortedMap.get(element); + } + + private List extractSortedElementsInternal(Element element) { // Need to apply sorting, because order of result items for Element.getEnclosedElements() depend on JDK implementation // By default, exclude private and package-private items // todo allow pass parameter for filter items by access modifiers - return ElementFilter.typesIn(element.getEnclosedElements()).stream() - .filter(o -> !Utils.isPrivateOrPackagePrivate(o)) - .filter(o -> !matchAnyPattern(excludeClasses, String.valueOf(o.getQualifiedName()))) - .sorted((o1, o2) -> - StringUtils.compare(String.valueOf(o1.getSimpleName()), String.valueOf(o2.getSimpleName())) - ).collect(Collectors.toList()); + return ElementFilter.typesIn(getEnclosedElements(element)).stream() + .filter(o -> !Utils.isPrivateOrPackagePrivate(o)) + .filter(o -> !matchAnyPattern(excludeClasses, String.valueOf(o.getQualifiedName()))) + .sorted((o1, o2) -> + StringUtils.compare(String.valueOf(o1.getSimpleName()), String.valueOf(o2.getSimpleName())) + ).collect(Collectors.toList()); + } + + public List getEnclosedElements(Element element) { + elementMap.computeIfAbsent(element, this::getEnclosedElementsInternal); + return elementMap.get(element); + } + + private List getEnclosedElementsInternal(Element element) { + return element.getEnclosedElements(); } public List extractPackageElements(Set elements) { return ElementFilter.packagesIn(elements).stream() - .filter(o -> !matchAnyPattern(excludePackages, String.valueOf(o))) - .sorted((o1, o2) -> - StringUtils.compare(String.valueOf(o1.getSimpleName()), String.valueOf(o2.getSimpleName())) - ).collect(Collectors.toList()); + .filter(o -> !matchAnyPattern(excludePackages, String.valueOf(o))) + .sorted((o1, o2) -> + StringUtils.compare(String.valueOf(o1.getSimpleName()), String.valueOf(o2.getSimpleName())) + ).collect(Collectors.toList()); } boolean matchAnyPattern(Set patterns, String stringToCheck) { @@ -53,4 +75,4 @@ boolean matchAnyPattern(Set patterns, String stringToCheck) { } return false; } -} +} \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java index ba155915..e901651f 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java @@ -21,13 +21,15 @@ public class Utils { public final DocletEnvironment docletEnvironment; - public final Elements elementUtils; + public final Elements elements; public final Types typeUtils; + private final ElementUtil elementUtil; - public Utils(DocletEnvironment docEnv) { - docletEnvironment = docEnv; - elementUtils = docEnv.getElementUtils(); - typeUtils = docEnv.getTypeUtils(); + public Utils(DocletEnvironment docEnv, ElementUtil elementUtil) { + this.docletEnvironment = docEnv; + this.elements = docEnv.getElementUtils(); + this.typeUtils = docEnv.getTypeUtils(); + this.elementUtil = elementUtil; } public static boolean isPackagePrivate(Element e) { @@ -71,7 +73,7 @@ public boolean isSimpleOverride(ExecutableElement m) { List fullBody = getFullBody(m); return fullBody.isEmpty() || - (fullBody.size() == 1 && fullBody.get(0).getKind().equals(DocTree.Kind.INHERIT_DOC)); + (fullBody.size() == 1 && fullBody.get(0).getKind().equals(DocTree.Kind.INHERIT_DOC)); } public boolean hasInlineTag(List inlineTags, DocTree.Kind kind) { @@ -85,12 +87,12 @@ public boolean hasInlineTag(List inlineTags, DocTree.Kind kin public Element getMemberBySignature(TypeElement te, ElementKind kind, String signature) { return getMembers(te, kind).stream() - .filter(e -> e.toString().equals(signature)) - .findFirst().orElse(null); + .filter(e -> e.toString().equals(signature)) + .findFirst().orElse(null); } public TypeElement getObjectType() { - return elementUtils.getTypeElement("java.lang.Object"); + return elements.getTypeElement("java.lang.Object"); } /** @@ -138,8 +140,8 @@ public ExecutableElement overriddenMethod(ExecutableElement method) { } final TypeElement origin = getEnclosingTypeElement(method); for (TypeMirror t = getSuperType(origin); - t.getKind() == DECLARED; - t = getSuperType(asTypeElement(t))) { + t.getKind() == DECLARED; + t = getSuperType(asTypeElement(t))) { TypeElement te = asTypeElement(t); if (te == null) { return null; @@ -147,7 +149,7 @@ public ExecutableElement overriddenMethod(ExecutableElement method) { for (Element e : getMembers(te, ElementKind.METHOD)) { ExecutableElement ee = (ExecutableElement) e; - if (elementUtils.overrides(method, ee, origin) + if (elements.overrides(method, ee, origin) ) { return ee; } @@ -173,8 +175,8 @@ public Optional getDocCommentTree(Element element) { protected List getFullBody(Element element) { return getDocCommentTree(element) - .map(DocCommentTree::getFullBody) - .orElse(Collections.emptyList()); + .map(DocCommentTree::getFullBody) + .orElse(Collections.emptyList()); } public static List filteredList(List dlist, DocTree.Kind... select) { @@ -207,8 +209,8 @@ public List getBlockTags(Element element) { public List removeBlockTag(List dctree, DocTree.Kind kind) { return dctree.stream() - .filter(dc -> !dc.getKind().equals(kind)) - .collect(Collectors.toList()); + .filter(dc -> !dc.getKind().equals(kind)) + .collect(Collectors.toList()); } /** @@ -219,9 +221,9 @@ public List removeBlockTag(List dctree, Do * @return a list of visible enclosed members in this type */ public List getMembers(TypeElement te, ElementKind kind) { - return te.getEnclosedElements().stream() - .filter(e -> e.getKind() == kind && !isPrivateOrPackagePrivate(e)) - .collect(Collectors.toList()); + return elementUtil.getEnclosedElements(te).stream() + .filter(e -> e.getKind() == kind && !isPrivateOrPackagePrivate(e)) + .collect(Collectors.toList()); } /** @@ -255,7 +257,7 @@ public List getImplementedMethods(String signature, TypeElement encl, L */ public List getImplementedInterfaces(TypeElement element) { return element.getInterfaces().stream() - .map(e -> asTypeElement(e)) - .collect(Collectors.toList()); + .map(e -> asTypeElement(e)) + .collect(Collectors.toList()); } -} +} \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java index 1a9d1ef0..cc170b23 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java @@ -50,13 +50,13 @@ public void setup() { environment = Mockito.mock(DocletEnvironment.class); docTrees = Mockito.mock(DocTrees.class); ElementUtil elementUtil = new ElementUtil(new String[0], new String[0]); - ClassLookup classLookup = new ClassLookup(environment); + ClassLookup classLookup = new ClassLookup(environment, elementUtil); classBuilder = new ClassBuilder( - elementUtil, - classLookup, - new ClassItemsLookup(environment), - "./target", - new ReferenceBuilder(environment, classLookup, elementUtil)); + elementUtil, + classLookup, + new ClassItemsLookup(environment, elementUtil), + "./target", + new ReferenceBuilder(environment, classLookup, elementUtil)); } @Test public void addConstructorsInfoWhenOnlyDefaultConstructor() { @@ -84,4 +84,4 @@ public void addConstructorsInfo() { Collection constructorItems = container.getItems(); assertEquals("Container should contain 2 constructor items", constructorItems.size(), 2); } -} +} \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java index 4afc21d2..b4509a2f 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java @@ -40,7 +40,7 @@ public class ReferenceBuilderTest { public void setup() { DocletEnvironment environment = Mockito.mock(DocletEnvironment.class); ElementUtil elementUtil = new ElementUtil(new String[0], new String[0]); - ClassLookup classLookup = new ClassLookup(environment); + ClassLookup classLookup = new ClassLookup(environment, elementUtil); referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); } @@ -110,4 +110,4 @@ public void getJavaReferenceHref() { assertEquals(baseURL, result12); assertEquals(baseURL, result13); } -} +} \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java index 027ba7d7..f5905351 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java @@ -58,4 +58,4 @@ public void joinTocTypeItems(){ assertEquals("Exceptions", tocItems.get(8).getHeading()); assertEquals(exceptionToc, tocItems.get(9)); } -} +} \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java index 2f990ade..54cfac2b 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java @@ -4,6 +4,7 @@ import com.microsoft.model.ExceptionItem; import com.microsoft.model.MethodParameter; import com.microsoft.model.Return; +import com.microsoft.util.ElementUtil; import com.sun.source.doctree.DeprecatedTree; import com.sun.source.doctree.DocCommentTree; import com.sun.source.doctree.DocTree.Kind; @@ -73,8 +74,7 @@ public void setup() { deprecatedTree = Mockito.mock(DeprecatedTree.class); textTree = Mockito.mock(TextTree.class); identifierTree = Mockito.mock(IdentifierTree.class); - classItemsLookup = new ClassItemsLookup(environment); - + classItemsLookup = new ClassItemsLookup(environment, Mockito.mock(ElementUtil.class)); } @Test diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java index 9ec0557b..f2c4869d 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java @@ -1,14 +1,26 @@ package com.microsoft.lookup; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import com.google.testing.compile.CompilationRule; import com.microsoft.lookup.model.ExtendedMetadataFileItem; import com.microsoft.model.Status; import com.microsoft.model.TypeParameter; +import com.microsoft.util.ElementUtil; import com.sun.source.doctree.DeprecatedTree; import com.sun.source.doctree.DocCommentTree; import com.sun.source.doctree.DocTree; import com.sun.source.doctree.TextTree; import com.sun.source.util.DocTrees; +import java.util.Arrays; +import java.util.List; +import javax.lang.model.element.TypeElement; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.Elements; import jdk.javadoc.doclet.DocletEnvironment; import org.junit.Before; import org.junit.Rule; @@ -17,16 +29,6 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import javax.lang.model.element.ElementKind; -import javax.lang.model.element.TypeElement; -import javax.lang.model.type.TypeMirror; -import javax.lang.model.util.Elements; -import java.util.Arrays; -import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.*; - @RunWith(MockitoJUnitRunner.class) public class ClassLookupTest { @@ -46,7 +48,7 @@ public class ClassLookupTest { public void setup() { elements = rule.getElements(); environment = Mockito.mock(DocletEnvironment.class); - classLookup = new ClassLookup(environment); + classLookup = new ClassLookup(environment, Mockito.mock(ElementUtil.class)); docTrees = Mockito.mock(DocTrees.class); docTree = Mockito.mock(DocTree.class); docCommentTree = Mockito.mock(DocCommentTree.class); From 945a517903e03a7d8fd47f7a8c1f29a1d7dd7187 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 2 Aug 2022 20:48:34 +0200 Subject: [PATCH 057/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.5.2 (#142) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.5.1` -> `2.5.2` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.2/compatibility-slim/2.5.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.2/confidence-slim/2.5.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-speech ### [`v2.5.2`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​252-httpsgithubcomgoogleapisjava-speechcomparev251v252-2022-07-11) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.5.1...v2.5.2) ##### Dependencies - update dependency com.google.cloud:google-cloud-storage to v2.9.2 ([#​916](https://togithub.com/googleapis/java-speech/issues/916)) ([0dce341](https://togithub.com/googleapis/java-speech/commit/0dce341f639887be61a4a1de0c3c6885230486a9))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 3b72b07c..cb76720d 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.5.1 + 2.5.2 test From 57263f50305890361ece2e3e56aff2d205bb3d58 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 16 Aug 2022 18:18:24 +0200 Subject: [PATCH 058/168] chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.4.1 (#145) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.apache.maven.plugins:maven-javadoc-plugin](https://maven.apache.org/plugins/) | `3.4.0` -> `3.4.1` | [![age](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.4.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.4.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.4.1/compatibility-slim/3.4.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.4.1/confidence-slim/3.4.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index cb76720d..9f069fc2 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -58,7 +58,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.4.0 + 3.4.1 com.microsoft.doclet.DocFxDoclet From 62e3605af97af0bacf27f9b404c49d3abb295ad3 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 19 Aug 2022 20:51:26 +0200 Subject: [PATCH 059/168] chore(deps): update dependency org.mockito:mockito-core to v4.7.0 (#144) Co-authored-by: gcf-merge-on-green[bot] <60162190+gcf-merge-on-green[bot]@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 9f069fc2..3604c53c 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -137,7 +137,7 @@ org.mockito mockito-core - 4.6.1 + 4.7.0 test From 7dc67092b122b1bad2f8b489f4ea9f3a0d4bacba Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 19 Aug 2022 20:54:16 +0200 Subject: [PATCH 060/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.5.4 (#143) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.5.2` -> `2.5.4` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.4/compatibility-slim/2.5.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.4/confidence-slim/2.5.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 3604c53c..aefc8b27 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.5.2 + 2.5.4 test From 6ca33eb430d613d5704ccbad3e618ec4de4cb046 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 24 Aug 2022 16:30:18 +0200 Subject: [PATCH 061/168] fix(deps): update dependency org.jsoup:jsoup to v1.15.3 (#146) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.jsoup:jsoup](https://jsoup.org/) ([source](https://togithub.com/jhy/jsoup)) | `1.15.2` -> `1.15.3` | [![age](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.15.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.15.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.15.3/compatibility-slim/1.15.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.15.3/confidence-slim/1.15.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index aefc8b27..2c8b1c58 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -124,7 +124,7 @@ org.jsoup jsoup - 1.15.2 + 1.15.3 From 8df2f07be15a7f5662f489134cf3cdd20294f8de Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 6 Sep 2022 22:28:13 +0200 Subject: [PATCH 062/168] fix(deps): update jackson.version to v2.13.4 (#147) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.fasterxml.jackson.dataformat:jackson-dataformat-yaml](https://togithub.com/FasterXML/jackson-dataformats-text) | `2.13.3` -> `2.13.4` | [![age](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.13.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.13.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.13.4/compatibility-slim/2.13.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.13.4/confidence-slim/2.13.3)](https://docs.renovatebot.com/merge-confidence/) | | [com.fasterxml.jackson.core:jackson-databind](http://github.com/FasterXML/jackson) ([source](https://togithub.com/FasterXML/jackson-databind)) | `2.13.3` -> `2.13.4` | [![age](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.13.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.13.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.13.4/compatibility-slim/2.13.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.13.4/confidence-slim/2.13.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 2c8b1c58..b459c7ae 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -13,7 +13,7 @@ 11 ${java.version} ${java.version} - 2.13.3 + 2.13.4 3.12.0 4.4 2.11.0 From 902c3b62a6eaaf58140c512df0734f7ccdec3d2d Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 6 Sep 2022 22:36:20 +0200 Subject: [PATCH 063/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.5.5 (#148) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.5.4` -> `2.5.5` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.5/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.5/compatibility-slim/2.5.4)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.5/confidence-slim/2.5.4)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-speech ### [`v2.5.5`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​255-httpsgithubcomgoogleapisjava-speechcomparev254v255-2022-09-06) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.5.4...v2.5.5) ##### Dependencies - Update dependency com.google.cloud ([16e6b56](https://togithub.com/googleapis/java-speech/commit/16e6b56194cb50ff1934e8000316088347bbdeaa))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index b459c7ae..0e41f694 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.5.4 + 2.5.5 test From 293acca37be5b31ac00ae4556d5ab09b0c19c3b5 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 8 Sep 2022 03:34:36 +0200 Subject: [PATCH 064/168] chore(deps): update dependency org.mockito:mockito-core to v4.8.0 (#149) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.mockito:mockito-core](https://togithub.com/mockito/mockito) | `4.7.0` -> `4.8.0` | [![age](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.8.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.8.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.8.0/compatibility-slim/4.7.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.8.0/confidence-slim/4.7.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
mockito/mockito ### [`v4.8.0`](https://togithub.com/mockito/mockito/releases/tag/v4.8.0) [Compare Source](https://togithub.com/mockito/mockito/compare/v4.7.0...v4.8.0) *Changelog generated by [Shipkit Changelog Gradle Plugin](https://togithub.com/shipkit/shipkit-changelog)* ##### 4.8.0 - 2022-09-07 - [10 commit(s)](https://togithub.com/mockito/mockito/compare/v4.7.0...v4.8.0) by Alex, James Baker, Johannes Spangenberg, Kurt Alfred Kluever, Rafael Winterhalter, Thibault Helsmoortel, dependabot\[bot] - GitHub Workflows security hardening [(#​2744)](https://togithub.com/mockito/mockito/pull/2744) - Assign GlobalConfiguration initializer to unused variable [(#​2742)](https://togithub.com/mockito/mockito/pull/2742) - Bump com.diffplug.spotless from 6.9.1 to 6.10.0 [(#​2738)](https://togithub.com/mockito/mockito/pull/2738) - Drop varargs collector before invoking a user method. [(#​2736)](https://togithub.com/mockito/mockito/pull/2736) - Bump versions.bytebuddy from 1.12.13 to 1.12.14 [(#​2734)](https://togithub.com/mockito/mockito/pull/2734) - Remove useless thrown exception from constructor [(#​2732)](https://togithub.com/mockito/mockito/pull/2732) - TypeSafeMatching no longer iterates over class methods inefficiently [(#​2729)](https://togithub.com/mockito/mockito/pull/2729) - Fixes [#​2720](https://togithub.com/mockito/mockito/issues/2720): Use StackWalker on Java 9+ to create Locations [(#​2723)](https://togithub.com/mockito/mockito/pull/2723) - LocationImpl adds performance overheads due to instantiating a stack trace [(#​2720)](https://togithub.com/mockito/mockito/issues/2720) - Fixes [#​2626](https://togithub.com/mockito/mockito/issues/2626) : Introduce MockSettings.mockMaker [(#​2701)](https://togithub.com/mockito/mockito/pull/2701) - Introduce option to disable inline-mock-maker for a specific instance [(#​2626)](https://togithub.com/mockito/mockito/issues/2626)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 0e41f694..74976368 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -137,7 +137,7 @@ org.mockito mockito-core - 4.7.0 + 4.8.0 test From c147b98d6965cac120b6819d2c9d4afe16e760c1 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 9 Sep 2022 16:58:13 +0200 Subject: [PATCH 065/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.5.6 (#150) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.5.5` -> `2.5.6` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.6/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.6/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.6/compatibility-slim/2.5.5)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.6/confidence-slim/2.5.5)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-speech ### [`v2.5.6`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​256-httpsgithubcomgoogleapisjava-speechcomparev255v256-2022-09-09) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.5.5...v2.5.6) ##### Dependencies - Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.2 ([#​946](https://togithub.com/googleapis/java-speech/issues/946)) ([6e4186d](https://togithub.com/googleapis/java-speech/commit/6e4186dceb56a61393850751e65146ffbf952b0a))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 74976368..07481440 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.5.5 + 2.5.6 test From 0b1eb68d3daeb0bff1702ad6f77398daaecf3ee3 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 20 Sep 2022 16:22:32 +0200 Subject: [PATCH 066/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.5.7 (#151) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.5.6` -> `2.5.7` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.7/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.7/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.7/compatibility-slim/2.5.6)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.7/confidence-slim/2.5.6)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-speech ### [`v2.5.7`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​257-httpsgithubcomgoogleapisjava-speechcomparev256v257-2022-09-15) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.5.6...v2.5.7) ##### Dependencies - Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.3 ([#​951](https://togithub.com/googleapis/java-speech/issues/951)) ([a618141](https://togithub.com/googleapis/java-speech/commit/a618141430c6944348b096db20f6b8f7c657eb1d))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 07481440..ec85b18c 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.5.6 + 2.5.7 test From c6550f7630a353b58294172cf64f9926f2a87de8 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 20 Sep 2022 22:02:22 +0200 Subject: [PATCH 067/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.5.8 (#152) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.5.7` -> `2.5.8` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.8/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.8/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.8/compatibility-slim/2.5.7)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.8/confidence-slim/2.5.7)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-speech ### [`v2.5.8`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​258-httpsgithubcomgoogleapisjava-speechcomparev257v258-2022-09-20) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.5.7...v2.5.8) ##### Dependencies - Update dependency com.google.cloud:google-cloud-storage to v2.12.0 ([#​955](https://togithub.com/googleapis/java-speech/issues/955)) ([6909b77](https://togithub.com/googleapis/java-speech/commit/6909b776c2d549d1866e8e739ccd41e8e02d00cb))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index ec85b18c..404efc64 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.5.7 + 2.5.8 test From 8696c1ead2743bd45183fe04d134fc9e164ca3ef Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 27 Sep 2022 17:38:13 +0200 Subject: [PATCH 068/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.5.9 (#153) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.5.8` -> `2.5.9` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.9/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.9/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.9/compatibility-slim/2.5.8)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.5.9/confidence-slim/2.5.8)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-speech ### [`v2.5.9`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​259-httpsgithubcomgoogleapisjava-speechcomparev258v259-2022-09-26) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.5.8...v2.5.9) ##### Dependencies - Update dependency org.json:json to v20220924 ([#​961](https://togithub.com/googleapis/java-speech/issues/961)) ([3e7e424](https://togithub.com/googleapis/java-speech/commit/3e7e4247fe3357483aab04938766827db84ec739))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 404efc64..035022bd 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.5.8 + 2.5.9 test From f66c21c6d59256a5be7db4fb0722cf4ae845f6c4 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 3 Oct 2022 22:18:36 +0200 Subject: [PATCH 069/168] chore(deps): update actions/setup-java action to v3 (#154) * chore(deps): update actions/setup-java action to v3 * Add distribution to actions Added `distribution: temurin` to fix the action's configuration Co-authored-by: Diego Alonso Marquez Palacios --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1113f03b..ae1b5e64 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,9 +24,10 @@ jobs: steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 - - uses: actions/setup-java@v1 + - uses: actions/setup-java@v3 with: java-version: 11 + distribution: temurin - name: build project working-directory: ./third_party/docfx-doclet-143274 run: mvn clean install -DskipTests @@ -38,9 +39,10 @@ jobs: steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 - - uses: actions/setup-java@v1 + - uses: actions/setup-java@v3 with: java-version: 11 + distribution: temurin - name: pass tests working-directory: ./third_party/docfx-doclet-143274 run: mvn clean test From fe3e34aa116340b4caf992c2b00a6627ca0801db Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 6 Oct 2022 03:10:30 +0200 Subject: [PATCH 070/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.6.0 (#155) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.5.9` -> `2.6.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.6.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.6.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.6.0/compatibility-slim/2.5.9)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.6.0/confidence-slim/2.5.9)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-speech ### [`v2.6.0`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​260-httpsgithubcomgoogleapisjava-speechcomparev259v260-2022-10-04) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.5.9...v2.6.0) ##### Features - added Speech-to-Text V2 API proto ([7a00dfa](https://togithub.com/googleapis/java-speech/commit/7a00dfa3b624d75eb25953cb15b8bd9a6923c284)) ##### Documentation - \[owlbot-java] samples do not need deploy plugin and deps upgrade ([#​1583](https://togithub.com/googleapis/java-speech/issues/1583)) ([#​965](https://togithub.com/googleapis/java-speech/issues/965)) ([580861f](https://togithub.com/googleapis/java-speech/commit/580861f3a36157f144525213644809dfbe8d45e4)) ##### Dependencies - Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.4 ([#​970](https://togithub.com/googleapis/java-speech/issues/970)) ([1ed2f89](https://togithub.com/googleapis/java-speech/commit/1ed2f892b1201e3f3e3ad48d5bbf36908484ade7))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 035022bd..d1728a50 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.5.9 + 2.6.0 test From 91ab28323b836100574d01776b7514e6770e130c Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 10 Oct 2022 16:16:37 +0200 Subject: [PATCH 071/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v2.6.1 (#156) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) | `2.6.0` -> `2.6.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.6.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.6.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.6.1/compatibility-slim/2.6.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/2.6.1/confidence-slim/2.6.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-speech ### [`v2.6.1`](https://togithub.com/googleapis/java-speech/blob/HEAD/CHANGELOG.md#​261-httpsgithubcomgoogleapisjava-speechcomparev260v261-2022-10-07) [Compare Source](https://togithub.com/googleapis/java-speech/compare/v2.6.0...v2.6.1) ##### Dependencies - Update dependency com.google.cloud:google-cloud-storage to v2.13.0 ([#​971](https://togithub.com/googleapis/java-speech/issues/971)) ([0b1c6f2](https://togithub.com/googleapis/java-speech/commit/0b1c6f22d874f2770656bc0e44a628a9583c4ee3))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index d1728a50..501b127c 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.6.0 + 2.6.1 test From 945e6148c5e0108b1b5c9d8557a61fc692baa024 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 18 Oct 2022 16:38:24 +0200 Subject: [PATCH 072/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v3 (#158) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/java-speech) ([source](https://togithub.com/googleapis/google-cloud-java)) | `2.6.1` -> `3.0.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/3.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/3.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/3.0.0/compatibility-slim/2.6.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/3.0.0/confidence-slim/2.6.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 501b127c..23acdfcb 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 2.6.1 + 3.0.0 test From bd19035fe43299a7565f22832caedce51310cd79 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 24 Oct 2022 23:12:42 +0200 Subject: [PATCH 073/168] chore(deps): update dependency org.mockito:mockito-core to v4.8.1 (#159) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.mockito:mockito-core](https://togithub.com/mockito/mockito) | `4.8.0` -> `4.8.1` | [![age](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.8.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.8.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.8.1/compatibility-slim/4.8.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.8.1/confidence-slim/4.8.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
mockito/mockito ### [`v4.8.1`](https://togithub.com/mockito/mockito/releases/tag/v4.8.1) [Compare Source](https://togithub.com/mockito/mockito/compare/v4.8.0...v4.8.1) *Changelog generated by [Shipkit Changelog Gradle Plugin](https://togithub.com/shipkit/shipkit-changelog)* ##### 4.8.1 - 2022-10-17 - [6 commit(s)](https://togithub.com/mockito/mockito/compare/v4.8.0...v4.8.1) by andrepaschoal, dependabot\[bot] - Possible fix [#​2765](https://togithub.com/mockito/mockito/issues/2765): Add task to download package-list file from java as element-list [(#​2766)](https://togithub.com/mockito/mockito/pull/2766) - JavaDoc warning is blocking all pull requests [(#​2765)](https://togithub.com/mockito/mockito/issues/2765) - Bump versions.junitJupiter from 5.9.0 to 5.9.1 [(#​2758)](https://togithub.com/mockito/mockito/pull/2758) - Bump groovy from 3.0.12 to 3.0.13 [(#​2756)](https://togithub.com/mockito/mockito/pull/2756) - Bump com.diffplug.spotless from 6.10.0 to 6.11.0 [(#​2753)](https://togithub.com/mockito/mockito/pull/2753) - Bump org.eclipse.osgi from 3.18.0 to 3.18.100 [(#​2751)](https://togithub.com/mockito/mockito/pull/2751) - Bump versions.bytebuddy from 1.12.14 to 1.12.16 [(#​2747)](https://togithub.com/mockito/mockito/pull/2747)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 23acdfcb..cb3d5c40 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -137,7 +137,7 @@ org.mockito mockito-core - 4.8.0 + 4.8.1 test From 0cfa145b25165006d07ff5cae7ae178838837f54 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 26 Oct 2022 23:50:17 +0200 Subject: [PATCH 074/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v4 (#160) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/google-cloud-java) | `3.0.0` -> `4.0.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/4.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/4.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/4.0.0/compatibility-slim/3.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/4.0.0/confidence-slim/3.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index cb3d5c40..5aff67b1 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -155,7 +155,7 @@ com.google.cloud google-cloud-speech - 3.0.0 + 4.0.0 test From 1d930fe0015728579c5e14868fc639274d16f621 Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Tue, 8 Nov 2022 15:15:59 -0500 Subject: [PATCH 075/168] feat: Allow unicode javadoc comments (#162) * fix: Allow unicode in javadoc comments * chore: Add tests for unicode support --- third_party/docfx-doclet-143274/pom.xml | 6 ++++++ .../main/java/com/microsoft/lookup/BaseLookup.java | 9 ++++----- .../java/com/microsoft/lookup/BaseLookupTest.java | 11 ++++++----- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 5aff67b1..938f9057 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -17,6 +17,7 @@ 3.12.0 4.4 2.11.0 + 1.10.0 1.1.0 @@ -111,6 +112,11 @@ commons-io ${apache.commons-io.version} + + org.apache.commons + commons-text + ${apache.commons-text.version} + com.fasterxml.jackson.core jackson-databind diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java index d4f04d14..ba6b808b 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java @@ -13,14 +13,13 @@ import com.sun.source.doctree.LinkTree; import com.sun.source.doctree.LiteralTree; import com.sun.source.doctree.SeeTree; -import java.util.concurrent.ConcurrentHashMap; import jdk.javadoc.doclet.DocletEnvironment; import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.text.StringEscapeUtils; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; -import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -242,7 +241,7 @@ String replaceLinksAndCodes(List items) { case LITERAL: return expandLiteralBody((LiteralTree) bodyItem); default: - return String.valueOf(bodyItem); + return String.valueOf(StringEscapeUtils.unescapeJava(bodyItem.toString())); } } ).collect(Collectors.joining())); @@ -261,11 +260,11 @@ String buildXrefTag(LinkTree linkTree) { } String buildCodeTag(LiteralTree literalTree) { - return String.format("%s", literalTree.getBody()); + return String.format("%s", StringEscapeUtils.unescapeJava(literalTree.getBody().toString())); } String expandLiteralBody(LiteralTree bodyItem) { - return String.valueOf(bodyItem.getBody()); + return String.valueOf(StringEscapeUtils.unescapeJava(bodyItem.getBody().toString())); } protected Optional getDocCommentTree(T element) { diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java index c978e643..4078facd 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java @@ -134,7 +134,7 @@ public void buildXrefTagWhenLabelPresents() { @Test public void buildCodeTag() { - String tagContent = "Some text"; + String tagContent = "Some text ≤"; when(literalTree.getBody()).thenReturn(textTree); when(textTree.toString()).thenReturn(tagContent); @@ -145,13 +145,14 @@ public void buildCodeTag() { @Test public void expandLiteralBody() { - String tagContent = "Some text"; + String tagContent = "Some text ≤ \u2264"; when(literalTree.getBody()).thenReturn(textTree); when(textTree.toString()).thenReturn(tagContent); String result = baseLookup.expandLiteralBody(literalTree); + String expected = "Some text ≤ ≤"; - assertEquals("Wrong result", result, tagContent); + assertEquals("Wrong result", result, expected); } @Test @@ -159,7 +160,7 @@ public void replaceLinksAndCodes() { when(linkTree.getReference()).thenReturn(referenceTree); when(referenceTree.getSignature()).thenReturn("Some#signature"); when(linkTree.getLabel()).thenReturn(Collections.emptyList()); - String textTreeContent = "Some text content"; + String textTreeContent = "Some text content ≤ \u2264"; when(literalTree.getBody()).thenReturn(textTree); when(textTree.toString()).thenReturn(textTreeContent); when(linkTree.getKind()).thenReturn(Kind.LINK); @@ -169,7 +170,7 @@ public void replaceLinksAndCodes() { String result = baseLookup.replaceLinksAndCodes(Arrays.asList(linkTree, literalTree, textTree)); assertEquals("Wrong result", result, "" - + "Some#signatureSome text content" + textTreeContent); + + "Some#signatureSome text content ≤ ≤" + textTreeContent); } @Test From 825f347be49f5f73e140862e63d9f4d103b07441 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 15 Nov 2022 17:18:41 +0100 Subject: [PATCH 076/168] chore(deps): update dependency org.mockito:mockito-core to v4.9.0 (#163) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 938f9057..1828a724 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -143,7 +143,7 @@ org.mockito mockito-core - 4.8.1 + 4.9.0 test From 561c9c9e6e80f93854b910581348b4a1c6a3c827 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 16 Nov 2022 21:43:42 +0100 Subject: [PATCH 077/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v4.1.0 (#164) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 1828a724..3523758b 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -161,7 +161,7 @@ com.google.cloud google-cloud-speech - 4.0.0 + 4.1.0 test From 09ee581763d5a52ec32a0640cda982044f82a2bd Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 22 Nov 2022 04:39:50 +0100 Subject: [PATCH 078/168] fix(deps): update dependency com.fasterxml.jackson.core:jackson-databind to v2.14.0 (#157) * fix(deps): update dependency com.fasterxml.jackson.core:jackson-databind to v2.13.4.2 * chore: Use jackson yaml v2.14.0 Co-authored-by: Blake Li Co-authored-by: Lawrence Qiu --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 3523758b..e49eaede 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -13,7 +13,7 @@ 11 ${java.version} ${java.version} - 2.13.4 + 2.14.0 3.12.0 4.4 2.11.0 From 72eb873de73223ed61782a08cf873d16e9620fa9 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 22 Nov 2022 16:10:14 +0100 Subject: [PATCH 079/168] fix(deps): update jackson.version to v2.14.1 (#165) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.fasterxml.jackson.dataformat:jackson-dataformat-yaml](https://togithub.com/FasterXML/jackson-dataformats-text) | `2.14.0` -> `2.14.1` | [![age](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.14.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.14.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.14.1/compatibility-slim/2.14.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.14.1/confidence-slim/2.14.0)](https://docs.renovatebot.com/merge-confidence/) | | [com.fasterxml.jackson.core:jackson-databind](https://togithub.com/FasterXML/jackson) ([source](https://togithub.com/FasterXML/jackson-databind)) | `2.14.0` -> `2.14.1` | [![age](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.14.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.14.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.14.1/compatibility-slim/2.14.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.14.1/confidence-slim/2.14.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index e49eaede..dc09d8d8 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -13,7 +13,7 @@ 11 ${java.version} ${java.version} - 2.14.0 + 2.14.1 3.12.0 4.4 2.11.0 From 4614274e838c7e952fd51faedba3bb46f0d85e89 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 17 Feb 2023 19:47:18 +0000 Subject: [PATCH 080/168] chore(deps): update dependency com.google.testing.compile:compile-testing to v0.21.0 (#166) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index dc09d8d8..b123759d 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -149,7 +149,7 @@ com.google.testing.compile compile-testing - 0.19 + 0.21.0 test From b67fff39c813dc6ce1bbff7bf7adb7bed190104f Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Thu, 4 May 2023 10:53:32 -0400 Subject: [PATCH 081/168] fix: update client header to use

instead of

(#179) --- .../src/main/java/com/microsoft/util/YamlUtil.java | 2 +- .../src/test/java/com/microsoft/util/YamlUtilTest.java | 2 +- .../expected-generated-files/com.microsoft.samples.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java index 7f0a1f97..7fd6bbf6 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java @@ -35,6 +35,6 @@ public static String cleanupHtml(String text) { .replaceAll("\\{@link *\"([^\\{]+)\" *\\}", "$1") .replaceAll("\\[([^]]+)]\\[([^]]+)\\]", "$1") .replaceAll("\\{@link *([^\\{\"]+) *\\}", "$1") - .replaceAll("=======================([^=]+)=======================", "

$1

"); + .replaceAll("=======================([^=]+)=======================", "

$1

"); } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java index 605a3b7c..b2856fda 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java @@ -121,7 +121,7 @@ public void cleanupHtmlAddHrefTagsTest() { @Test public void cleanupHtmlEqualTitlesTest() { String expectedActual = "======================= SpeechClient ======================="; - String expectedResult = "

SpeechClient

"; + String expectedResult = "

SpeechClient

"; String random = UUID.randomUUID().toString(); assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml index c1395567..5e519216 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml @@ -20,7 +20,7 @@ items: nameWithType: "com.microsoft.samples" fullName: "com.microsoft.samples" type: "Namespace" - summary: "The interfaces provided are listed below, along with usage samples.\n\n

SpeechClient

\n\n

Service Description: Service that implements Google Cloud Speech API.\n\n

Sample for SpeechClient:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

AdaptationClient

\n\n

Service Description: Service that implements Google Cloud Speech Adaptation API.\n\n

Sample for AdaptationClient:\n\n

\n try (AdaptationClient adaptationClient = AdaptationClient.create()) {\n   LocationName parent = LocationName.of(\"[PROJECT]\", \"[LOCATION]\");\n   PhraseSet phraseSet = PhraseSet.newBuilder().build();\n   String phraseSetId = \"phraseSetId959902180\";\n   PhraseSet response = adaptationClient.createPhraseSet(parent, phraseSet, phraseSetId);\n }\n 
" + summary: "The interfaces provided are listed below, along with usage samples.\n\n

SpeechClient

\n\n

Service Description: Service that implements Google Cloud Speech API.\n\n

Sample for SpeechClient:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

AdaptationClient

\n\n

Service Description: Service that implements Google Cloud Speech Adaptation API.\n\n

Sample for AdaptationClient:\n\n

\n try (AdaptationClient adaptationClient = AdaptationClient.create()) {\n   LocationName parent = LocationName.of(\"[PROJECT]\", \"[LOCATION]\");\n   PhraseSet phraseSet = PhraseSet.newBuilder().build();\n   String phraseSetId = \"phraseSetId959902180\";\n   PhraseSet response = adaptationClient.createPhraseSet(parent, phraseSet, phraseSetId);\n }\n 
" syntax: content: "package com.microsoft.samples" javaType: "package" From 78e0a37c3cdf2eeff2282fe74ae23e906260d8d7 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 May 2023 17:15:26 +0200 Subject: [PATCH 082/168] chore(deps): update dependency org.jacoco:jacoco-maven-plugin to v0.8.10 (#177) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index b123759d..3ffe0526 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -77,7 +77,7 @@ org.jacoco jacoco-maven-plugin - 0.8.8 + 0.8.10 From c28d44fe5f7943e8f510d67f5ca9b22f8cec1095 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 May 2023 17:17:04 +0200 Subject: [PATCH 083/168] chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.11.0 (#176) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 3ffe0526..79563dd0 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -26,7 +26,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.10.1 + 3.11.0 -Xlint:unchecked From f1e20bf601a351f4b2267f9cc672cd10c9690490 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 May 2023 19:00:23 +0200 Subject: [PATCH 084/168] chore(deps): update dependency org.apache.maven.plugins:maven-assembly-plugin to v3.5.0 (#175) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.apache.maven.plugins:maven-assembly-plugin](https://maven.apache.org/plugins/) | `3.4.2` -> `3.5.0` | [![age](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.5.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.5.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.5.0/compatibility-slim/3.4.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.5.0/confidence-slim/3.4.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 79563dd0..ca3dae89 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -37,7 +37,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.4.2 + 3.5.0 From f83b80ad2568ebe1208a2ecb9efa6433c570f70b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 May 2023 19:02:12 +0200 Subject: [PATCH 085/168] fix(deps): update dependency org.jsoup:jsoup to v1.16.1 (#174) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.jsoup:jsoup](https://jsoup.org/) ([source](https://togithub.com/jhy/jsoup)) | `1.15.3` -> `1.16.1` | [![age](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.16.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.16.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.16.1/compatibility-slim/1.15.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.jsoup:jsoup/1.16.1/confidence-slim/1.15.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index ca3dae89..2e508adb 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -130,7 +130,7 @@ org.jsoup jsoup - 1.15.3 + 1.16.1 From f89ec8219121f528cdd8173ee192c798f1db8ecb Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 May 2023 19:04:12 +0200 Subject: [PATCH 086/168] fix(deps): update jackson.version to v2.15.0 (#171) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.fasterxml.jackson.dataformat:jackson-dataformat-yaml](https://togithub.com/FasterXML/jackson-dataformats-text) | `2.14.1` -> `2.15.0` | [![age](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.15.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.15.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.15.0/compatibility-slim/2.14.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml/2.15.0/confidence-slim/2.14.1)](https://docs.renovatebot.com/merge-confidence/) | | [com.fasterxml.jackson.core:jackson-databind](https://togithub.com/FasterXML/jackson) ([source](https://togithub.com/FasterXML/jackson-databind)) | `2.14.1` -> `2.15.0` | [![age](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.15.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.15.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.15.0/compatibility-slim/2.14.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.fasterxml.jackson.core:jackson-databind/2.15.0/confidence-slim/2.14.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 2e508adb..af220446 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -13,7 +13,7 @@ 11 ${java.version} ${java.version} - 2.14.1 + 2.15.0 3.12.0 4.4 2.11.0 From dfa3285748f98edf91b95bc7b07bb4c3a35ba240 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 May 2023 19:06:12 +0200 Subject: [PATCH 087/168] chore(deps): update dependency org.mockito:mockito-core to v4.11.0 (#168) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.mockito:mockito-core](https://togithub.com/mockito/mockito) | `4.9.0` -> `4.11.0` | [![age](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.11.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.11.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.11.0/compatibility-slim/4.9.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-core/4.11.0/confidence-slim/4.9.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
mockito/mockito ### [`v4.11.0`](https://togithub.com/mockito/mockito/releases/tag/v4.11.0) [Compare Source](https://togithub.com/mockito/mockito/compare/v4.10.0...v4.11.0) *Changelog generated by [Shipkit Changelog Gradle Plugin](https://togithub.com/shipkit/shipkit-changelog)* ##### 4.11.0 - 2022-12-28 - [1 commit(s)](https://togithub.com/mockito/mockito/compare/v4.10.0...v4.11.0) by Andy Coates - Improve vararg handling: approach 2 [(#​2807)](https://togithub.com/mockito/mockito/pull/2807) - Mocking varargs method with `any(String[].class)` doesn't work as expected [(#​2796)](https://togithub.com/mockito/mockito/issues/2796) - (Argument)Matchers regression from 1.10.19 to 2.18.3 for varargs [(#​1498)](https://togithub.com/mockito/mockito/issues/1498) - Cannot verify varargs parameter as an array [(#​1222)](https://togithub.com/mockito/mockito/issues/1222) - ArgumentCaptor can't capture varargs-arrays [(#​584)](https://togithub.com/mockito/mockito/issues/584) - Verification of an empty varargs call fails when isNotNull() is used [(#​567)](https://togithub.com/mockito/mockito/issues/567) ### [`v4.10.0`](https://togithub.com/mockito/mockito/releases/tag/v4.10.0) [Compare Source](https://togithub.com/mockito/mockito/compare/v4.9.0...v4.10.0) *Changelog generated by [Shipkit Changelog Gradle Plugin](https://togithub.com/shipkit/shipkit-changelog)* ##### 4.10.0 - 2022-12-14 - [13 commit(s)](https://togithub.com/mockito/mockito/compare/v4.9.0...v4.10.0) by Andrei Solntsev, Andriy Redko, Andy Coates, Christopher Lambert, Marcono1234, Vladimir Glinskikh, dependabot\[bot] - Add new artifact mockito-subclass (to use mock-maker-subclass MockMaker) [(#​2821)](https://togithub.com/mockito/mockito/pull/2821) - Bump gradle from 7.5.1 to 7.6 [(#​2817)](https://togithub.com/mockito/mockito/pull/2817) - Fix incorrect Javadoc inline tag for MockitoJUnitRunner [(#​2816)](https://togithub.com/mockito/mockito/pull/2816) - Bump shipkit-auto-version from 1.2.1 to 1.2.2 [(#​2811)](https://togithub.com/mockito/mockito/pull/2811) - Bump com.github.ben-manes.versions from 0.42.0 to 0.44.0 [(#​2810)](https://togithub.com/mockito/mockito/pull/2810) - Bump kotlinVersion from 1.7.21 to 1.7.22 [(#​2809)](https://togithub.com/mockito/mockito/pull/2809) - Bump junit from 1.1.3 to 1.1.4 [(#​2806)](https://togithub.com/mockito/mockito/pull/2806) - Simplify `MatcherApplicationStrategy` [(#​2803)](https://togithub.com/mockito/mockito/pull/2803) - Bump kotlinVersion from 1.7.10 to 1.7.21 [(#​2801)](https://togithub.com/mockito/mockito/pull/2801) - Bump espresso-core from 3.4.0 to 3.5.0 [(#​2800)](https://togithub.com/mockito/mockito/pull/2800) - Bump versions.bytebuddy from 1.12.16 to 1.12.19 [(#​2799)](https://togithub.com/mockito/mockito/pull/2799) - Upgrade errorprone from 2.14.0 to 2.16 [(#​2794)](https://togithub.com/mockito/mockito/pull/2794) - automatically detect class to mock [(#​2779)](https://togithub.com/mockito/mockito/pull/2779)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index af220446..39458215 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -143,7 +143,7 @@ org.mockito mockito-core - 4.9.0 + 4.11.0 test From bc7de8ec011a04c32680ebc85eb4dce5a29fda97 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 May 2023 19:08:13 +0200 Subject: [PATCH 088/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v4.11.0 (#167) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-speech](https://togithub.com/googleapis/google-cloud-java) | `4.1.0` -> `4.11.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/4.11.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/4.11.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/4.11.0/compatibility-slim/4.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-speech/4.11.0/confidence-slim/4.1.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 39458215..8e16edfa 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -161,7 +161,7 @@ com.google.cloud google-cloud-speech - 4.1.0 + 4.11.0 test From f1a811206904fb2b1160d6a5b042317c5f18e13b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 May 2023 19:14:12 +0200 Subject: [PATCH 089/168] chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.5.0 (#172) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.apache.maven.plugins:maven-javadoc-plugin](https://maven.apache.org/plugins/) | `3.4.1` -> `3.5.0` | [![age](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.5.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.5.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.5.0/compatibility-slim/3.4.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-javadoc-plugin/3.5.0/confidence-slim/3.4.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-docfx-doclet). --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 8e16edfa..e4ed36b6 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -59,7 +59,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.4.1 + 3.5.0 com.microsoft.doclet.DocFxDoclet From 2ddf13b0069bd6c52d841a09d9f109b35bbe9690 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 26 Jun 2023 22:27:45 +0200 Subject: [PATCH 090/168] fix(deps): update jackson.version to v2.15.2 (#181) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index e4ed36b6..449fcf53 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -13,7 +13,7 @@ 11 ${java.version} ${java.version} - 2.15.0 + 2.15.2 3.12.0 4.4 2.11.0 From 6a9c8ed52d0cf49deb84fa19e562316c42141b29 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 18 Aug 2023 21:06:40 +0200 Subject: [PATCH 091/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v4.18.0 (#182) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 449fcf53..a5c17b24 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -161,7 +161,7 @@ com.google.cloud google-cloud-speech - 4.11.0 + 4.18.0 test From b99b1739206d39cef6ef6e430083fdb5e7b457f9 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 18 Aug 2023 21:29:33 +0200 Subject: [PATCH 092/168] chore(deps): update dependency org.apache.maven.plugins:maven-assembly-plugin to v3.6.0 (#183) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index a5c17b24..69d9a734 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -37,7 +37,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.5.0 + 3.6.0 From 8403a3e7663571d9d64cfd4c6d53a809c8cfd8ca Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 18 Aug 2023 21:34:08 +0200 Subject: [PATCH 093/168] fix(deps): update dependency commons-io:commons-io to v2.13.0 (#184) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 69d9a734..41693f67 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -16,7 +16,7 @@ 2.15.2 3.12.0 4.4 - 2.11.0 + 2.13.0 1.10.0 1.1.0 From a1194b613303fbf1b7d03d69d5bdccdd7c9cb81d Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 18 Aug 2023 22:08:35 +0200 Subject: [PATCH 094/168] fix(deps): update dependency org.apache.commons:commons-lang3 to v3.13.0 (#185) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 41693f67..884abf10 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -14,7 +14,7 @@ ${java.version} ${java.version} 2.15.2 - 3.12.0 + 3.13.0 4.4 2.13.0 1.10.0 From 6dc0c12ffd13f940a39c12d56a07b4b531d1f7b6 Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Fri, 18 Aug 2023 21:40:02 +0000 Subject: [PATCH 095/168] chore: add linter (#187) * chore: add linter * ci: fix github actions syntax * chore: format * chore: update goldens --- .github/workflows/ci.yml | 40 +- third_party/docfx-doclet-143274/README.md | 9 +- .../intellij-java-google-style.xml | 598 ------------------ third_party/docfx-doclet-143274/pom.xml | 17 + .../java/com/microsoft/build/BuilderUtil.java | 306 ++++----- .../com/microsoft/build/ClassBuilder.java | 318 +++++----- .../main/java/com/microsoft/build/Lookup.java | 186 +++--- .../com/microsoft/build/LookupContext.java | 34 +- .../com/microsoft/build/PackageBuilder.java | 46 +- .../com/microsoft/build/ProjectBuilder.java | 64 +- .../com/microsoft/build/ReferenceBuilder.java | 501 ++++++++------- .../com/microsoft/build/YmlFilesBuilder.java | 184 +++--- .../com/microsoft/doclet/DocFxDoclet.java | 265 ++++---- .../com/microsoft/doclet/DocletRunner.java | 28 +- .../java/com/microsoft/lookup/BaseLookup.java | 542 ++++++++-------- .../microsoft/lookup/ClassItemsLookup.java | 365 ++++++----- .../com/microsoft/lookup/ClassLookup.java | 364 ++++++----- .../com/microsoft/lookup/PackageLookup.java | 81 ++- .../model/ExtendedMetadataFileItem.java | 214 +++---- .../com/microsoft/model/ExceptionItem.java | 24 +- .../main/java/com/microsoft/model/Guide.java | 26 +- .../java/com/microsoft/model/KindTitle.java | 22 +- .../com/microsoft/model/MetadataFile.java | 83 ++- .../com/microsoft/model/MetadataFileItem.java | 492 +++++++------- .../com/microsoft/model/MethodParameter.java | 40 +- .../com/microsoft/model/ProjectContents.java | 26 +- .../main/java/com/microsoft/model/Return.java | 51 +- .../com/microsoft/model/SpecViewModel.java | 109 ++-- .../main/java/com/microsoft/model/Status.java | 12 +- .../main/java/com/microsoft/model/Syntax.java | 61 +- .../java/com/microsoft/model/TocContents.java | 61 +- .../java/com/microsoft/model/TocFile.java | 63 +- .../java/com/microsoft/model/TocItem.java | 77 +-- .../java/com/microsoft/model/TocTypeMap.java | 34 +- .../com/microsoft/model/TypeParameter.java | 14 +- .../java/com/microsoft/model/YmlFile.java | 4 +- .../com/microsoft/util/CommentHelper.java | 130 ++-- .../java/com/microsoft/util/ElementUtil.java | 120 ++-- .../java/com/microsoft/util/FileUtil.java | 27 +- .../com/microsoft/util/OptionsFileUtil.java | 46 +- .../main/java/com/microsoft/util/Utils.java | 484 +++++++------- .../java/com/microsoft/util/YamlUtil.java | 55 +- .../com/microsoft/build/BuilderUtilTest.java | 189 +++--- .../com/microsoft/build/ClassBuilderTest.java | 92 +-- .../microsoft/build/LookupContextTest.java | 85 +-- .../java/com/microsoft/build/LookupTest.java | 139 ++-- .../microsoft/build/ReferenceBuilderTest.java | 179 +++--- .../microsoft/build/YmlFilesBuilderTest.java | 82 +-- .../com/microsoft/doclet/DocFxDocletTest.java | 90 +-- .../microsoft/doclet/DocletRunnerTest.java | 140 ++-- .../com/microsoft/lookup/BaseLookupTest.java | 524 ++++++++------- .../lookup/ClassItemsLookupTest.java | 587 ++++++++--------- .../com/microsoft/lookup/ClassLookupTest.java | 395 ++++++------ .../microsoft/lookup/PackageLookupTest.java | 89 ++- .../microsoft/model/MetadataFileItemTest.java | 290 ++++----- .../java/com/microsoft/model/StatusTest.java | 16 +- .../com/microsoft/model/TocContentsTest.java | 161 ++--- .../java/com/microsoft/model/TocFileTest.java | 40 +- .../com/microsoft/model/TocTypeMapTest.java | 29 +- .../samples/BasePartnerComponent.java | 62 +- .../samples/BasePartnerComponentString.java | 44 +- .../microsoft/samples/ExceptionHandler.java | 5 +- .../java/com/microsoft/samples/IPartner.java | 32 +- .../com/microsoft/samples/KeyValuePair.java | 27 +- .../test/java/com/microsoft/samples/Link.java | 70 +- .../com/microsoft/samples/Subpackage.java | 4 +- .../java/com/microsoft/samples/SuperHero.java | 190 +++--- .../AgreementDetailsCollectionOperations.java | 43 +- .../samples/agreements/AgreementMetaData.java | 94 ++- .../IAgreementDetailsCollection.java | 16 +- .../agreements/ResourceCollection.java | 7 +- .../samples/commentinheritance/Animal.java | 30 +- .../commentinheritance/Carnivorous.java | 22 +- .../samples/commentinheritance/Dog.java | 117 ++-- .../commentinheritance/Herbivorous.java | 26 +- .../samples/commentinheritance/Mammal.java | 11 +- .../commentinheritance/Omnivorous.java | 21 +- .../samples/commentinheritance/Organism.java | 6 +- .../commentinheritance/Viviparous.java | 12 +- .../com/microsoft/samples/google/BetaApi.java | 20 +- .../samples/google/ProductSearchSettings.java | 7 +- .../samples/google/RecognitionAudio.java | 75 ++- .../samples/google/SpeechClient.java | 8 +- .../samples/google/SpeechSettings.java | 5 +- .../samples/google/ValidationException.java | 11 +- .../samples/google/v1beta/SpeechClient.java | 6 +- .../google/v1p1alpha/SpeechClient.java | 12 +- .../com/microsoft/samples/offers/Offer.java | 55 +- .../SomeClassInExcludedPackage.java | 14 +- .../samples/subpackage/CustomException.java | 28 +- .../microsoft/samples/subpackage/Display.java | 8 +- .../samples/subpackage/InternalException.java | 6 +- .../microsoft/samples/subpackage/Person.java | 97 ++- .../samples/subpackage/SomeExcludedClass.java | 14 +- .../microsoft/samples/subpackage/Tuple.java | 39 +- .../samples/subpackage/package-info.java | 4 +- .../com/microsoft/util/ElementUtilTest.java | 155 +++-- .../java/com/microsoft/util/FileUtilTest.java | 87 ++- .../microsoft/util/OptionsFileUtilTest.java | 54 +- .../java/com/microsoft/util/UtilsTest.java | 169 ++--- .../java/com/microsoft/util/YamlUtilTest.java | 363 ++++++----- ...microsoft.samples.BasePartnerComponent.yml | 2 +- .../com.microsoft.samples.IPartner.yml | 2 +- .../com.microsoft.samples.SuperHero.yml | 6 +- ...t.samples.agreements.AgreementMetaData.yml | 2 +- ....samples.agreements.ResourceCollection.yml | 2 +- ...soft.samples.commentinheritance.Animal.yml | 2 +- ...crosoft.samples.commentinheritance.Dog.yml | 2 +- ...soft.samples.commentinheritance.Mammal.yml | 2 +- ....samples.commentinheritance.Omnivorous.yml | 2 +- .../com.microsoft.samples.google.BetaApi.yml | 2 +- ...oft.samples.google.ValidationException.yml | 2 +- ....samples.google.v1p1alpha.SpeechClient.yml | 2 +- ...m.microsoft.samples.subpackage.Display.yml | 2 +- ...om.microsoft.samples.subpackage.Person.yml | 2 +- 115 files changed, 5611 insertions(+), 5847 deletions(-) delete mode 100644 third_party/docfx-doclet-143274/intellij-java-google-style.xml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ae1b5e64..db7370f3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,48 +1,44 @@ -# This is a basic workflow to help you get started with Actions +name: ci -name: CI - -# Controls when the action will run. on: - # Triggers the workflow on push or pull request events but only for the main branch push: branches: [ main ] pull_request: branches: [ main ] - - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: -# A workflow run is made up of one or more jobs that can run sequentially or in parallel +defaults: + run: + working-directory: ./third_party/docfx-doclet-143274 + jobs: - # This workflow contains a single job called "build" build: - # The type of runner that the job will run on runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: java-version: 11 distribution: temurin - - name: build project - working-directory: ./third_party/docfx-doclet-143274 - run: mvn clean install -DskipTests + - run: mvn -B -ntp install -DskipTests + test: - # The type of runner that the job will run on runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + java-version: 11 + distribution: temurin + - run: mvn -B -ntp test - # Steps represent a sequence of tasks that will be executed as part of the job + lint: + runs-on: ubuntu-latest steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: java-version: 11 distribution: temurin - - name: pass tests - working-directory: ./third_party/docfx-doclet-143274 - run: mvn clean test + - run: mvn --version + - run: mvn -B -ntp fmt:check diff --git a/third_party/docfx-doclet-143274/README.md b/third_party/docfx-doclet-143274/README.md index 4a97a0f4..774581b2 100644 --- a/third_party/docfx-doclet-143274/README.md +++ b/third_party/docfx-doclet-143274/README.md @@ -23,13 +23,18 @@ mvn package This will produce two JAR files that you can use - one with dependencies, and another one without. +To run the linter: +```bash +mvn fmt:format +``` + ## Usage ### With `maven-javadoc-plugin` When there is an existing java project where Maven is used as a build tool, one could add `maven-javadoc-plugin` to the root `pom.xml`: -```java +```xml org.apache.maven.plugins maven-javadoc-plugin @@ -121,7 +126,7 @@ You can take a look at an [example documentation generation script](https://gith ## Development -When making changes, it is important to ensure that you are using `DocletRunner` class - it is responsible for makeing the `javadoc` call and takes params from an external configuration file. +When making changes, it is important to ensure that you are using `DocletRunner` class - it is responsible for making the `javadoc` call and takes params from an external configuration file. To use it: diff --git a/third_party/docfx-doclet-143274/intellij-java-google-style.xml b/third_party/docfx-doclet-143274/intellij-java-google-style.xml deleted file mode 100644 index f3a6743e..00000000 --- a/third_party/docfx-doclet-143274/intellij-java-google-style.xml +++ /dev/null @@ -1,598 +0,0 @@ - - - - - - diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 884abf10..25983b61 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -93,6 +93,23 @@
+ + + com.coveo + fmt-maven-plugin + 2.13 + + + true + + + + com.google.googlejavaformat + google-java-format + 1.16.0 + + + diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java index 46214575..4869b4ec 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java @@ -20,175 +20,181 @@ import com.microsoft.model.MetadataFileItem; import com.microsoft.model.SpecViewModel; import com.microsoft.util.YamlUtil; -import org.apache.commons.lang3.RegExUtils; -import org.apache.commons.lang3.StringUtils; - -import javax.lang.model.element.Element; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.lang.model.element.Element; +import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.StringUtils; final class BuilderUtil { - private static final Pattern XREF_LINK_PATTERN = Pattern.compile(".*?"); - private static final Pattern XREF_LINK_CONTENT_PATTERN = Pattern.compile("(?<=.*?)"); - private static final Pattern XREF_LINK_RESOLVE_PATTERN = Pattern.compile("(?\\w+)\\#(?\\w+)(\\((?.*)\\))?"); - public final static String[] LANGS = {"java"}; - - static String populateUidValues(String text, LookupContext lookupContext) { - if (StringUtils.isBlank(text)) { - return text; - } - - Matcher linkMatcher = XREF_LINK_PATTERN.matcher(text); - while (linkMatcher.find()) { - String link = linkMatcher.group(); - Matcher linkContentMatcher = XREF_LINK_CONTENT_PATTERN.matcher(link); - if (!linkContentMatcher.find()) { - continue; - } - - String linkContent = linkContentMatcher.group(); - String uid = resolveUidFromLinkContent(linkContent, lookupContext); - String updatedLink = linkContentMatcher.replaceAll(uid); - text = StringUtils.replace(text, link, updatedLink); - } - return text; + private static final Pattern XREF_LINK_PATTERN = + Pattern.compile(".*?"); + private static final Pattern XREF_LINK_CONTENT_PATTERN = + Pattern.compile("(?<=.*?)"); + private static final Pattern XREF_LINK_RESOLVE_PATTERN = + Pattern.compile("(?\\w+)\\#(?\\w+)(\\((?.*)\\))?"); + public static final String[] LANGS = {"java"}; + + static String populateUidValues(String text, LookupContext lookupContext) { + if (StringUtils.isBlank(text)) { + return text; } - /** - * The linkContent could be in following format - * #memeber - * Class#member - * Class#method() - * Class#method(params) - */ - static String resolveUidFromLinkContent(String linkContent, LookupContext lookupContext) { - if (StringUtils.isBlank(linkContent)) { - return ""; - } - - linkContent = linkContent.trim(); - - // complete class name for class internal link - if (linkContent.startsWith("#")) { - String firstKey = lookupContext.getOwnerUid(); - linkContent = firstKey + linkContent; - } - - // fuzzy resolve, target for items from project external references - String fuzzyResolvedUid = resolveUidFromReference(linkContent, lookupContext); - - // exact resolve in lookupContext - linkContent = linkContent.replace("#", "."); - String exactResolveUid = resolveUidByLookup(linkContent, lookupContext); - return exactResolveUid.isEmpty() ? fuzzyResolvedUid : exactResolveUid; + Matcher linkMatcher = XREF_LINK_PATTERN.matcher(text); + while (linkMatcher.find()) { + String link = linkMatcher.group(); + Matcher linkContentMatcher = XREF_LINK_CONTENT_PATTERN.matcher(link); + if (!linkContentMatcher.find()) { + continue; + } + + String linkContent = linkContentMatcher.group(); + String uid = resolveUidFromLinkContent(linkContent, lookupContext); + String updatedLink = linkContentMatcher.replaceAll(uid); + text = StringUtils.replace(text, link, updatedLink); } - - static List splitUidWithGenericsIntoClassNames(String uid) { - uid = RegExUtils.removeAll(uid, "[>]+$"); - return Arrays.asList(StringUtils.split(uid, "<")); + return text; + } + + /** + * The linkContent could be in following format #memeber Class#member Class#method() + * Class#method(params) + */ + static String resolveUidFromLinkContent(String linkContent, LookupContext lookupContext) { + if (StringUtils.isBlank(linkContent)) { + return ""; } - static List replaceUidAndSplit(String uid) { - String retValue = RegExUtils.replaceAll(uid, "\\<", "//", "//>//"); - retValue = RegExUtils.replaceAll(retValue, ",", "//,//"); - retValue = RegExUtils.replaceAll(retValue, "\\[\\]", "//[]//"); - - return Arrays.asList(StringUtils.split(retValue, "//")); - } + linkContent = linkContent.trim(); - static List getJavaSpec(List references) { - List specList = new ArrayList<>(); - - Optional.ofNullable(references).ifPresent( - ref -> references.forEach( - uid -> { - if (uid.equalsIgnoreCase("<") - || uid.equalsIgnoreCase(">") - || uid.equalsIgnoreCase(",") - || uid.equalsIgnoreCase("[]")) - specList.add(new SpecViewModel(null, uid)); - else if (uid != "") - specList.add(new SpecViewModel(uid, uid)); - }) - ); - - return specList; + // complete class name for class internal link + if (linkContent.startsWith("#")) { + String firstKey = lookupContext.getOwnerUid(); + linkContent = firstKey + linkContent; } - static void populateUidValues(List packageMetadataFiles, List classMetadataFiles) { - Lookup lookup = new Lookup(packageMetadataFiles, classMetadataFiles); - - classMetadataFiles.forEach(classMetadataFile -> { - LookupContext lookupContext = lookup.buildContext(classMetadataFile); - - for (MetadataFileItem item : classMetadataFile.getItems()) { - item.setSummary(YamlUtil.cleanupHtml( - populateUidValues(item.getSummary(), lookupContext) - )); - - Optional.ofNullable(item.getSyntax()).ifPresent(syntax -> { - Optional.ofNullable(syntax.getParameters()).ifPresent( - methodParams -> methodParams.forEach( - param -> { - param.setDescription(populateUidValues(param.getDescription(), lookupContext)); - }) - ); - Optional.ofNullable(syntax.getReturnValue()).ifPresent(returnValue -> - returnValue.setReturnDescription( - populateUidValues(syntax.getReturnValue().getReturnDescription(), lookupContext) - ) - ); - } - ); - } + // fuzzy resolve, target for items from project external references + String fuzzyResolvedUid = resolveUidFromReference(linkContent, lookupContext); + + // exact resolve in lookupContext + linkContent = linkContent.replace("#", "."); + String exactResolveUid = resolveUidByLookup(linkContent, lookupContext); + return exactResolveUid.isEmpty() ? fuzzyResolvedUid : exactResolveUid; + } + + static List splitUidWithGenericsIntoClassNames(String uid) { + uid = RegExUtils.removeAll(uid, "[>]+$"); + return Arrays.asList(StringUtils.split(uid, "<")); + } + + static List replaceUidAndSplit(String uid) { + String retValue = RegExUtils.replaceAll(uid, "\\<", "//", "//>//"); + retValue = RegExUtils.replaceAll(retValue, ",", "//,//"); + retValue = RegExUtils.replaceAll(retValue, "\\[\\]", "//[]//"); + + return Arrays.asList(StringUtils.split(retValue, "//")); + } + + static List getJavaSpec(List references) { + List specList = new ArrayList<>(); + + Optional.ofNullable(references) + .ifPresent( + ref -> + references.forEach( + uid -> { + if (uid.equalsIgnoreCase("<") + || uid.equalsIgnoreCase(">") + || uid.equalsIgnoreCase(",") + || uid.equalsIgnoreCase("[]")) specList.add(new SpecViewModel(null, uid)); + else if (uid != "") specList.add(new SpecViewModel(uid, uid)); + })); + + return specList; + } + + static void populateUidValues( + List packageMetadataFiles, List classMetadataFiles) { + Lookup lookup = new Lookup(packageMetadataFiles, classMetadataFiles); + + classMetadataFiles.forEach( + classMetadataFile -> { + LookupContext lookupContext = lookup.buildContext(classMetadataFile); + + for (MetadataFileItem item : classMetadataFile.getItems()) { + item.setSummary( + YamlUtil.cleanupHtml(populateUidValues(item.getSummary(), lookupContext))); + + Optional.ofNullable(item.getSyntax()) + .ifPresent( + syntax -> { + Optional.ofNullable(syntax.getParameters()) + .ifPresent( + methodParams -> + methodParams.forEach( + param -> { + param.setDescription( + populateUidValues( + param.getDescription(), lookupContext)); + })); + Optional.ofNullable(syntax.getReturnValue()) + .ifPresent( + returnValue -> + returnValue.setReturnDescription( + populateUidValues( + syntax.getReturnValue().getReturnDescription(), + lookupContext))); + }); + } }); - } - - /** - * this method is used to do fuzzy resolve - * "*" will be added at the end of uid for method for xerf service resolve purpose - */ - static String resolveUidFromReference(String linkContent, LookupContext lookupContext) { - String uid = ""; - Matcher matcher = XREF_LINK_RESOLVE_PATTERN.matcher(linkContent); - - if (matcher.find()) { - String className = matcher.group("class"); - String memberName = matcher.group("member"); - uid = resolveUidByLookup(className, lookupContext); - if (!uid.isEmpty()) { - uid = uid.concat(".").concat(memberName); - - // linkContent targets a method - if (!StringUtils.isBlank(matcher.group(3))) { - uid = uid.concat("*"); - } - } - } - return uid; - } - - static String resolveUidByLookup(String signature, LookupContext lookupContext) { - if (StringUtils.isBlank(signature) || lookupContext == null) { - return ""; + } + + /** + * this method is used to do fuzzy resolve "*" will be added at the end of uid for method for xerf + * service resolve purpose + */ + static String resolveUidFromReference(String linkContent, LookupContext lookupContext) { + String uid = ""; + Matcher matcher = XREF_LINK_RESOLVE_PATTERN.matcher(linkContent); + + if (matcher.find()) { + String className = matcher.group("class"); + String memberName = matcher.group("member"); + uid = resolveUidByLookup(className, lookupContext); + if (!uid.isEmpty()) { + uid = uid.concat(".").concat(memberName); + + // linkContent targets a method + if (!StringUtils.isBlank(matcher.group(3))) { + uid = uid.concat("*"); } - return lookupContext.containsKey(signature) ? lookupContext.resolve(signature) : ""; + } } + return uid; + } - static void populateItemFields(MetadataFileItem item, BaseLookup lookup, T element) { - String name = lookup.extractName(element); - item.setName(name); - item.setNameWithType(lookup.extractNameWithType(element)); - item.setFullName(lookup.extractFullName(element)); - item.setType(lookup.extractType(element)); - item.setJavaType(lookup.extractJavaType(element)); - item.setSummary(lookup.extractSummary(element)); - item.setStatus(lookup.extractStatus(element)); - item.setContent(lookup.extractContent(element)); + static String resolveUidByLookup(String signature, LookupContext lookupContext) { + if (StringUtils.isBlank(signature) || lookupContext == null) { + return ""; } + return lookupContext.containsKey(signature) ? lookupContext.resolve(signature) : ""; + } + + static void populateItemFields( + MetadataFileItem item, BaseLookup lookup, T element) { + String name = lookup.extractName(element); + item.setName(name); + item.setNameWithType(lookup.extractNameWithType(element)); + item.setFullName(lookup.extractFullName(element)); + item.setType(lookup.extractType(element)); + item.setJavaType(lookup.extractJavaType(element)); + item.setSummary(lookup.extractSummary(element)); + item.setStatus(lookup.extractStatus(element)); + item.setContent(lookup.extractContent(element)); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java index efcd26ec..84e3d3eb 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java @@ -15,175 +15,189 @@ */ package com.microsoft.build; +import static com.microsoft.build.BuilderUtil.LANGS; +import static com.microsoft.build.BuilderUtil.populateItemFields; + import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; -import com.microsoft.model.Status; import com.microsoft.model.TocItem; import com.microsoft.model.TocTypeMap; import com.microsoft.util.ElementUtil; import com.microsoft.util.Utils; - +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; import javax.lang.model.util.ElementFilter; -import java.util.List; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static com.microsoft.build.BuilderUtil.LANGS; -import static com.microsoft.build.BuilderUtil.populateItemFields; class ClassBuilder { - private ElementUtil elementUtil; - private ClassLookup classLookup; - private ClassItemsLookup classItemsLookup; - private String outputPath; - private ReferenceBuilder referenceBuilder; - - ClassBuilder(ElementUtil elementUtil, ClassLookup classLookup, ClassItemsLookup classItemsLookup, String outputPath, ReferenceBuilder referenceBuilder) { - this.elementUtil = elementUtil; - this.classLookup = classLookup; - this.classItemsLookup = classItemsLookup; - this.outputPath = outputPath; - this.referenceBuilder = referenceBuilder; - } - - void buildFilesForInnerClasses(Element element, TocTypeMap tocTypeMap, List container) { - for (TypeElement classElement : elementUtil.extractSortedElements(element)) { - String uid = classLookup.extractUid(classElement); - String name = classLookup.extractTocName(classElement); - String status = classLookup.extractStatus(classElement); - - if (tocTypeMap.get(classElement.getKind().name()) != null) { - if (classElement.getKind().name().equals(ElementKind.CLASS.name()) && name.contains("Exception")) { - tocTypeMap.get("EXCEPTION").add(new TocItem(uid, name, status)); - } else { - tocTypeMap.get(classElement.getKind().name()).add(new TocItem(uid, name, status)); - } - } else { - tocTypeMap.get(ElementKind.CLASS.name()).add(new TocItem(uid, name, status)); - } - - container.add(buildClassYmlFile(classElement)); - buildFilesForInnerClasses(classElement, tocTypeMap, container); - } - } - - private MetadataFile buildClassYmlFile(TypeElement classElement) { - String fileName = classLookup.extractHref(classElement); - MetadataFile classMetadataFile = new MetadataFile(outputPath, fileName); - addClassInfo(classElement, classMetadataFile); - addConstructorsInfo(classElement, classMetadataFile); - addMethodsInfo(classElement, classMetadataFile); - addFieldsInfo(classElement, classMetadataFile); - referenceBuilder.addReferencesInfo(classElement, classMetadataFile); - applyPostProcessing(classMetadataFile); - return classMetadataFile; - } - - private void addClassInfo(TypeElement classElement, MetadataFile classMetadataFile) { - MetadataFileItem classItem = new MetadataFileItem(LANGS, classLookup.extractUid(classElement)); - classItem.setId(classLookup.extractId(classElement)); - classItem.setParent(classLookup.extractParent(classElement)); - addChildren(classElement, classItem.getChildren()); - populateItemFields(classItem, classLookup, classElement); - classItem.setPackageName(classLookup.extractPackageName(classElement)); - classItem.setTypeParameters(classLookup.extractTypeParameters(classElement)); - classItem.setInheritance(classLookup.extractSuperclass(classElement)); - classItem.setInterfaces(classLookup.extractInterfaces(classElement)); - classItem.setInheritedMethods(classLookup.extractInheritedMethods(classElement)); - classItem.setSummary(classLookup.extractSummary(classElement)); - classItem.setStatus(classLookup.extractStatus(classElement)); - classMetadataFile.getItems().add(classItem); - } - - void addConstructorsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - for (ExecutableElement constructorElement : ElementFilter.constructorsIn(elementUtil.getEnclosedElements(classElement))) { - MetadataFileItem constructorItem = buildMetadataFileItem(constructorElement); - constructorItem.setOverload(classItemsLookup.extractOverload(constructorElement)); - constructorItem.setContent(classItemsLookup.extractConstructorContent(constructorElement)); - constructorItem.setParameters(classItemsLookup.extractParameters(constructorElement)); - classMetadataFile.getItems().add(constructorItem); - - referenceBuilder.addParameterReferences(constructorItem, classMetadataFile); - referenceBuilder.addOverloadReferences(constructorItem, classMetadataFile); + private ElementUtil elementUtil; + private ClassLookup classLookup; + private ClassItemsLookup classItemsLookup; + private String outputPath; + private ReferenceBuilder referenceBuilder; + + ClassBuilder( + ElementUtil elementUtil, + ClassLookup classLookup, + ClassItemsLookup classItemsLookup, + String outputPath, + ReferenceBuilder referenceBuilder) { + this.elementUtil = elementUtil; + this.classLookup = classLookup; + this.classItemsLookup = classItemsLookup; + this.outputPath = outputPath; + this.referenceBuilder = referenceBuilder; + } + + void buildFilesForInnerClasses( + Element element, TocTypeMap tocTypeMap, List container) { + for (TypeElement classElement : elementUtil.extractSortedElements(element)) { + String uid = classLookup.extractUid(classElement); + String name = classLookup.extractTocName(classElement); + String status = classLookup.extractStatus(classElement); + + if (tocTypeMap.get(classElement.getKind().name()) != null) { + if (classElement.getKind().name().equals(ElementKind.CLASS.name()) + && name.contains("Exception")) { + tocTypeMap.get("EXCEPTION").add(new TocItem(uid, name, status)); + } else { + tocTypeMap.get(classElement.getKind().name()).add(new TocItem(uid, name, status)); } - } - - private void addMethodsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - ElementFilter.methodsIn(elementUtil.getEnclosedElements(classElement)).stream() - .filter(methodElement -> !Utils.isPrivateOrPackagePrivate(methodElement)) - .forEach(methodElement -> { - MetadataFileItem methodItem = buildMetadataFileItem(methodElement); - methodItem.setOverload(classItemsLookup.extractOverload(methodElement)); - methodItem.setContent(classItemsLookup.extractMethodContent(methodElement)); - methodItem.setExceptions(classItemsLookup.extractExceptions(methodElement)); - methodItem.setParameters(classItemsLookup.extractParameters(methodElement)); - methodItem.setReturn(classItemsLookup.extractReturn(methodElement)); - methodItem.setOverridden(classItemsLookup.extractOverridden(methodElement)); - - classMetadataFile.getItems().add(methodItem); - referenceBuilder.addExceptionReferences(methodItem, classMetadataFile); - referenceBuilder.addParameterReferences(methodItem, classMetadataFile); - referenceBuilder.addReturnReferences(methodItem, classMetadataFile); - referenceBuilder.addOverloadReferences(methodItem, classMetadataFile); - }); - } - - private void addFieldsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - ElementFilter.fieldsIn(elementUtil.getEnclosedElements(classElement)).stream() - .filter(fieldElement -> !Utils.isPrivateOrPackagePrivate(fieldElement)) - .forEach(fieldElement -> { - MetadataFileItem fieldItem = buildMetadataFileItem(fieldElement); - fieldItem.setContent(classItemsLookup.extractFieldContent(fieldElement)); - fieldItem.setReturn(classItemsLookup.extractReturn(fieldElement)); - classMetadataFile.getItems().add(fieldItem); - referenceBuilder.addReturnReferences(fieldItem, classMetadataFile); - }); - } - - private void applyPostProcessing(MetadataFile classMetadataFile) { - referenceBuilder.expandComplexGenericsInReferences(classMetadataFile); - } - - private MetadataFileItem buildMetadataFileItem(Element element) { - return new MetadataFileItem(LANGS, classItemsLookup.extractUid(element)) {{ - String name = classItemsLookup.extractName(element); - setId(classItemsLookup.extractId(element)); - setParent(classItemsLookup.extractParent(element)); - setName(name); - setNameWithType(classItemsLookup.extractNameWithType(element)); - setFullName(classItemsLookup.extractFullName(element)); - setType(classItemsLookup.extractType(element)); - setJavaType(classItemsLookup.extractJavaType(element)); - setPackageName(classItemsLookup.extractPackageName(element)); - setSummary(classItemsLookup.extractSummary(element)); - setStatus(classItemsLookup.extractStatus(element)); - }}; - } + } else { + tocTypeMap.get(ElementKind.CLASS.name()).add(new TocItem(uid, name, status)); + } - private void addChildren(TypeElement classElement, List children) { - collect(classElement, children, ElementFilter::constructorsIn, classItemsLookup::extractUid); - collect(classElement, children, ElementFilter::methodsIn, classItemsLookup::extractUid); - collect(classElement, children, ElementFilter::fieldsIn, classItemsLookup::extractUid); - collect(classElement, children, ElementFilter::typesIn, String::valueOf); + container.add(buildClassYmlFile(classElement)); + buildFilesForInnerClasses(classElement, tocTypeMap, container); } - - private void collect(TypeElement classElement, List children, - Function, List> selectFunc, - Function mapFunc) { - - List elements = selectFunc.apply(elementUtil.getEnclosedElements(classElement)); - children.addAll(filterPrivateElements(elements).stream() - .map(mapFunc).collect(Collectors.toList())); - } - - private List filterPrivateElements(List elements) { - return elements.stream() - .filter(element -> !Utils.isPrivateOrPackagePrivate(element)).collect(Collectors.toList()); + } + + private MetadataFile buildClassYmlFile(TypeElement classElement) { + String fileName = classLookup.extractHref(classElement); + MetadataFile classMetadataFile = new MetadataFile(outputPath, fileName); + addClassInfo(classElement, classMetadataFile); + addConstructorsInfo(classElement, classMetadataFile); + addMethodsInfo(classElement, classMetadataFile); + addFieldsInfo(classElement, classMetadataFile); + referenceBuilder.addReferencesInfo(classElement, classMetadataFile); + applyPostProcessing(classMetadataFile); + return classMetadataFile; + } + + private void addClassInfo(TypeElement classElement, MetadataFile classMetadataFile) { + MetadataFileItem classItem = new MetadataFileItem(LANGS, classLookup.extractUid(classElement)); + classItem.setId(classLookup.extractId(classElement)); + classItem.setParent(classLookup.extractParent(classElement)); + addChildren(classElement, classItem.getChildren()); + populateItemFields(classItem, classLookup, classElement); + classItem.setPackageName(classLookup.extractPackageName(classElement)); + classItem.setTypeParameters(classLookup.extractTypeParameters(classElement)); + classItem.setInheritance(classLookup.extractSuperclass(classElement)); + classItem.setInterfaces(classLookup.extractInterfaces(classElement)); + classItem.setInheritedMethods(classLookup.extractInheritedMethods(classElement)); + classItem.setSummary(classLookup.extractSummary(classElement)); + classItem.setStatus(classLookup.extractStatus(classElement)); + classMetadataFile.getItems().add(classItem); + } + + void addConstructorsInfo(TypeElement classElement, MetadataFile classMetadataFile) { + for (ExecutableElement constructorElement : + ElementFilter.constructorsIn(elementUtil.getEnclosedElements(classElement))) { + MetadataFileItem constructorItem = buildMetadataFileItem(constructorElement); + constructorItem.setOverload(classItemsLookup.extractOverload(constructorElement)); + constructorItem.setContent(classItemsLookup.extractConstructorContent(constructorElement)); + constructorItem.setParameters(classItemsLookup.extractParameters(constructorElement)); + classMetadataFile.getItems().add(constructorItem); + + referenceBuilder.addParameterReferences(constructorItem, classMetadataFile); + referenceBuilder.addOverloadReferences(constructorItem, classMetadataFile); } + } + + private void addMethodsInfo(TypeElement classElement, MetadataFile classMetadataFile) { + ElementFilter.methodsIn(elementUtil.getEnclosedElements(classElement)).stream() + .filter(methodElement -> !Utils.isPrivateOrPackagePrivate(methodElement)) + .forEach( + methodElement -> { + MetadataFileItem methodItem = buildMetadataFileItem(methodElement); + methodItem.setOverload(classItemsLookup.extractOverload(methodElement)); + methodItem.setContent(classItemsLookup.extractMethodContent(methodElement)); + methodItem.setExceptions(classItemsLookup.extractExceptions(methodElement)); + methodItem.setParameters(classItemsLookup.extractParameters(methodElement)); + methodItem.setReturn(classItemsLookup.extractReturn(methodElement)); + methodItem.setOverridden(classItemsLookup.extractOverridden(methodElement)); + + classMetadataFile.getItems().add(methodItem); + referenceBuilder.addExceptionReferences(methodItem, classMetadataFile); + referenceBuilder.addParameterReferences(methodItem, classMetadataFile); + referenceBuilder.addReturnReferences(methodItem, classMetadataFile); + referenceBuilder.addOverloadReferences(methodItem, classMetadataFile); + }); + } + + private void addFieldsInfo(TypeElement classElement, MetadataFile classMetadataFile) { + ElementFilter.fieldsIn(elementUtil.getEnclosedElements(classElement)).stream() + .filter(fieldElement -> !Utils.isPrivateOrPackagePrivate(fieldElement)) + .forEach( + fieldElement -> { + MetadataFileItem fieldItem = buildMetadataFileItem(fieldElement); + fieldItem.setContent(classItemsLookup.extractFieldContent(fieldElement)); + fieldItem.setReturn(classItemsLookup.extractReturn(fieldElement)); + classMetadataFile.getItems().add(fieldItem); + referenceBuilder.addReturnReferences(fieldItem, classMetadataFile); + }); + } + + private void applyPostProcessing(MetadataFile classMetadataFile) { + referenceBuilder.expandComplexGenericsInReferences(classMetadataFile); + } + + private MetadataFileItem buildMetadataFileItem(Element element) { + return new MetadataFileItem(LANGS, classItemsLookup.extractUid(element)) { + { + String name = classItemsLookup.extractName(element); + setId(classItemsLookup.extractId(element)); + setParent(classItemsLookup.extractParent(element)); + setName(name); + setNameWithType(classItemsLookup.extractNameWithType(element)); + setFullName(classItemsLookup.extractFullName(element)); + setType(classItemsLookup.extractType(element)); + setJavaType(classItemsLookup.extractJavaType(element)); + setPackageName(classItemsLookup.extractPackageName(element)); + setSummary(classItemsLookup.extractSummary(element)); + setStatus(classItemsLookup.extractStatus(element)); + } + }; + } + + private void addChildren(TypeElement classElement, List children) { + collect(classElement, children, ElementFilter::constructorsIn, classItemsLookup::extractUid); + collect(classElement, children, ElementFilter::methodsIn, classItemsLookup::extractUid); + collect(classElement, children, ElementFilter::fieldsIn, classItemsLookup::extractUid); + collect(classElement, children, ElementFilter::typesIn, String::valueOf); + } + + private void collect( + TypeElement classElement, + List children, + Function, List> selectFunc, + Function mapFunc) { + + List elements = + selectFunc.apply(elementUtil.getEnclosedElements(classElement)); + children.addAll( + filterPrivateElements(elements).stream().map(mapFunc).collect(Collectors.toList())); + } + + private List filterPrivateElements(List elements) { + return elements.stream() + .filter(element -> !Utils.isPrivateOrPackagePrivate(element)) + .collect(Collectors.toList()); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java index df74ebb1..1ffc7dd0 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java @@ -1,102 +1,126 @@ package com.microsoft.build; -import com.microsoft.model.MetadataFile; +import static org.apache.commons.lang3.RegExUtils.removeAll; +import static org.apache.commons.lang3.RegExUtils.replaceAll; +import com.microsoft.model.MetadataFile; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import static org.apache.commons.lang3.RegExUtils.removeAll; -import static org.apache.commons.lang3.RegExUtils.replaceAll; - public class Lookup { - private static final int INITIAL_CAPACITY = 10000; - private final Map globalLookup; - private final Map> localLookupByFileName; + private static final int INITIAL_CAPACITY = 10000; + private final Map globalLookup; + private final Map> localLookupByFileName; - private final String UID_PACKAGE_NAME_REGEXP = "^.*?\\.(?=[A-Z].*)"; - private final String PARAM_PACKAGE_NAME_REGEXP = "(?<=[\\( ]).*?(?=[A-Z].*)"; - private final String METHOD_PARAMS_REGEXP = "\\s[^\\s]+?(?=[,)])"; + private final String UID_PACKAGE_NAME_REGEXP = "^.*?\\.(?=[A-Z].*)"; + private final String PARAM_PACKAGE_NAME_REGEXP = "(?<=[\\( ]).*?(?=[A-Z].*)"; + private final String METHOD_PARAMS_REGEXP = "\\s[^\\s]+?(?=[,)])"; - public Lookup(List packageMetadataFiles, List classMetadataFiles) { - this.globalLookup = new HashMap<>(INITIAL_CAPACITY); - this.localLookupByFileName = new HashMap<>(INITIAL_CAPACITY); - consume(packageMetadataFiles); - consume(classMetadataFiles); - } + public Lookup(List packageMetadataFiles, List classMetadataFiles) { + this.globalLookup = new HashMap<>(INITIAL_CAPACITY); + this.localLookupByFileName = new HashMap<>(INITIAL_CAPACITY); + consume(packageMetadataFiles); + consume(classMetadataFiles); + } - public LookupContext buildContext(MetadataFile metadataFile) { - Map localLookup = localLookupByFileName.get(metadataFile.getFileNameWithPath()); - return new LookupContext(globalLookup, localLookup); - } + public LookupContext buildContext(MetadataFile metadataFile) { + Map localLookup = localLookupByFileName.get(metadataFile.getFileNameWithPath()); + return new LookupContext(globalLookup, localLookup); + } - /** - * For each such item from items and references of metadata file: - *
-     * - uid: "com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String, boolean)"
-     *   nameWithType: "Person.setFirstName(String firstName, boolean flag)"
-     *   ...
-     * 
- * add several key-value pairs to lookup where keys are: - *
    - *
  • Name with type without generics:
    Person.setFirstName(String firstName, boolean flag)
  • - *
  • Uid as is:
    com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String, boolean)
  • - *
  • Uid with param types without package:
    com.microsoft.samples.subpackage.Person.setFirstName(String, - * boolean)
  • - *
  • Uid without package:
    Person.setFirstName(java.lang.String, boolean)
  • - *
  • Name with type without generics and param names:
    Person.setFirstName(String, boolean)
  • - *
  • Name with type as is:
    Person.setFirstName(String, boolean)
  • - *
- * and value equals to uid:
com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String) - */ - private void consume(List metadataFiles) { - metadataFiles.forEach(file -> { - /** - * It's important to use LinkedHashMap here, to put item related with owner class on first place. - * Logic of {@link YmlFilesBuilder#resolveUidByLookup} based on this for case when @link starts from '#' - */ - Map map = new LinkedHashMap<>(); - Map specForJavaMap = new LinkedHashMap<>(); + /** + * For each such item from items and references of metadata file: + * + *
+   * - uid: "com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String, boolean)"
+   *   nameWithType: "Person.setFirstName(String firstName, boolean flag)"
+   *   ...
+   * 
+ * + * add several key-value pairs to lookup where keys are: + * + *
    + *
  • Name with type without generics:
    + * Person.setFirstName(String firstName, boolean flag) + *
  • Uid as is:
    + * com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String, boolean) + *
  • Uid with param types without package:
    + * com.microsoft.samples.subpackage.Person.setFirstName(String, boolean) + *
  • Uid without package:
    + * Person.setFirstName(java.lang.String, boolean) + *
  • Name with type without generics and param names:
    + * Person.setFirstName(String, boolean) + *
  • Name with type as is:
    + * Person.setFirstName(String, boolean) + *
+ * + * and value equals to uid:
+ * com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String) + */ + private void consume(List metadataFiles) { + metadataFiles.forEach( + file -> { + /** + * It's important to use LinkedHashMap here, to put item related with owner class on first + * place. Logic of {@link YmlFilesBuilder#resolveUidByLookup} based on this for case + * when @link starts from '#' + */ + Map map = new LinkedHashMap<>(); + Map specForJavaMap = new LinkedHashMap<>(); - file.getItems().forEach(item -> { - String uid = item.getUid(); - String nameWithType = item.getNameWithType(); - String nameWithTypeWithoutGenerics = removeAll(nameWithType, "<.*?>"); + file.getItems() + .forEach( + item -> { + String uid = item.getUid(); + String nameWithType = item.getNameWithType(); + String nameWithTypeWithoutGenerics = removeAll(nameWithType, "<.*?>"); - map.put(nameWithTypeWithoutGenerics, uid); // This item should go first - map.put(uid, uid); - map.put(removeAll(uid, PARAM_PACKAGE_NAME_REGEXP), uid); - map.put(removeAll(uid, UID_PACKAGE_NAME_REGEXP), uid); - map.put(removeAll(nameWithTypeWithoutGenerics, METHOD_PARAMS_REGEXP), uid); - map.put(removeAll(nameWithType, METHOD_PARAMS_REGEXP), uid); + map.put(nameWithTypeWithoutGenerics, uid); // This item should go first + map.put(uid, uid); + map.put(removeAll(uid, PARAM_PACKAGE_NAME_REGEXP), uid); + map.put(removeAll(uid, UID_PACKAGE_NAME_REGEXP), uid); + map.put(removeAll(nameWithTypeWithoutGenerics, METHOD_PARAMS_REGEXP), uid); + map.put(removeAll(nameWithType, METHOD_PARAMS_REGEXP), uid); - map.put(replaceAll(uid, ",", ", "), uid); - map.put(replaceAll(removeAll(uid, PARAM_PACKAGE_NAME_REGEXP), ",", ", "), uid); - map.put(replaceAll(removeAll(uid, UID_PACKAGE_NAME_REGEXP), ",", ", "), uid); - map.put(replaceAll(removeAll(nameWithTypeWithoutGenerics, METHOD_PARAMS_REGEXP), ", ", ","), uid); - }); + map.put(replaceAll(uid, ",", ", "), uid); + map.put(replaceAll(removeAll(uid, PARAM_PACKAGE_NAME_REGEXP), ",", ", "), uid); + map.put(replaceAll(removeAll(uid, UID_PACKAGE_NAME_REGEXP), ",", ", "), uid); + map.put( + replaceAll( + removeAll(nameWithTypeWithoutGenerics, METHOD_PARAMS_REGEXP), + ", ", + ","), + uid); + }); - file.getReferences().forEach(item -> { - map.put(item.getUid(), item.getUid()); + file.getReferences() + .forEach( + item -> { + map.put(item.getUid(), item.getUid()); - // complex types are recorded in "specForJava" as arrayList of items, thus it has no "NameWithType" - // thus we need to get every reference item from specForJava, and add to localLookup - if (item.getNameWithType() == null || item.getNameWithType().isEmpty()) { - item.getSpecForJava().forEach(spec -> { - specForJavaMap.put(spec.getName(), spec.getUid()); - specForJavaMap.put(spec.getFullName(), spec.getUid()); - }); - } else { - map.put(item.getNameWithType(), item.getUid()); - } - }); + // complex types are recorded in "specForJava" as arrayList of items, thus it + // has no "NameWithType" + // thus we need to get every reference item from specForJava, and add to + // localLookup + if (item.getNameWithType() == null || item.getNameWithType().isEmpty()) { + item.getSpecForJava() + .forEach( + spec -> { + specForJavaMap.put(spec.getName(), spec.getUid()); + specForJavaMap.put(spec.getFullName(), spec.getUid()); + }); + } else { + map.put(item.getNameWithType(), item.getUid()); + } + }); - // to avoid conflict, the items from specForJava should only add to localLookup - globalLookup.putAll(map); - map.putAll(specForJavaMap); - localLookupByFileName.put(file.getFileNameWithPath(), map); + // to avoid conflict, the items from specForJava should only add to localLookup + globalLookup.putAll(map); + map.putAll(specForJavaMap); + localLookupByFileName.put(file.getFileNameWithPath(), map); }); - } -} \ No newline at end of file + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/LookupContext.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/LookupContext.java index eee61c22..1ddc8f74 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/LookupContext.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/LookupContext.java @@ -4,26 +4,26 @@ public class LookupContext { - private final Map globalLookup; - private final Map localLookup; + private final Map globalLookup; + private final Map localLookup; - public LookupContext(Map globalLookup, Map localLookup) { - this.globalLookup = globalLookup; - this.localLookup = localLookup; - } + public LookupContext(Map globalLookup, Map localLookup) { + this.globalLookup = globalLookup; + this.localLookup = localLookup; + } - public String resolve(String key) { - if (localLookup.containsKey(key)) { - return localLookup.get(key); - } - return globalLookup.get(key); + public String resolve(String key) { + if (localLookup.containsKey(key)) { + return localLookup.get(key); } + return globalLookup.get(key); + } - public String getOwnerUid() { - return localLookup.keySet().iterator().next(); - } + public String getOwnerUid() { + return localLookup.keySet().iterator().next(); + } - public boolean containsKey(String key) { - return localLookup.containsKey(key) || globalLookup.containsKey(key); - } + public boolean containsKey(String key) { + return localLookup.containsKey(key) || globalLookup.containsKey(key); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java index 42228bbd..435de9e6 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java @@ -15,34 +15,36 @@ */ package com.microsoft.build; +import static com.microsoft.build.BuilderUtil.LANGS; +import static com.microsoft.build.BuilderUtil.populateItemFields; + import com.microsoft.lookup.PackageLookup; import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; - import javax.lang.model.element.PackageElement; -import static com.microsoft.build.BuilderUtil.LANGS; -import static com.microsoft.build.BuilderUtil.populateItemFields; - class PackageBuilder { - private final PackageLookup packageLookup; - private final String outputPath; - private final ReferenceBuilder referenceBuilder; + private final PackageLookup packageLookup; + private final String outputPath; + private final ReferenceBuilder referenceBuilder; - PackageBuilder(PackageLookup packageLookup, String outputPath, ReferenceBuilder referenceBuilder) { - this.packageLookup = packageLookup; - this.outputPath = outputPath; - this.referenceBuilder = referenceBuilder; - } + PackageBuilder( + PackageLookup packageLookup, String outputPath, ReferenceBuilder referenceBuilder) { + this.packageLookup = packageLookup; + this.outputPath = outputPath; + this.referenceBuilder = referenceBuilder; + } - MetadataFile buildPackageMetadataFile(PackageElement packageElement) { - String fileName = packageLookup.extractHref(packageElement); - MetadataFile packageMetadataFile = new MetadataFile(outputPath, fileName); - MetadataFileItem packageItem = new MetadataFileItem(LANGS, packageLookup.extractUid(packageElement)); - packageItem.setId(packageLookup.extractId(packageElement)); - referenceBuilder.addChildrenReferences(packageElement, packageItem.getChildren(), packageMetadataFile.getReferences()); - populateItemFields(packageItem, packageLookup, packageElement); - packageMetadataFile.getItems().add(packageItem); - return packageMetadataFile; - } + MetadataFile buildPackageMetadataFile(PackageElement packageElement) { + String fileName = packageLookup.extractHref(packageElement); + MetadataFile packageMetadataFile = new MetadataFile(outputPath, fileName); + MetadataFileItem packageItem = + new MetadataFileItem(LANGS, packageLookup.extractUid(packageElement)); + packageItem.setId(packageLookup.extractId(packageElement)); + referenceBuilder.addChildrenReferences( + packageElement, packageItem.getChildren(), packageMetadataFile.getReferences()); + populateItemFields(packageItem, packageLookup, packageElement); + packageMetadataFile.getItems().add(packageItem); + return packageMetadataFile; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ProjectBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ProjectBuilder.java index f51f95d9..b43b1783 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ProjectBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ProjectBuilder.java @@ -15,41 +15,43 @@ */ package com.microsoft.build; +import static com.microsoft.build.BuilderUtil.LANGS; + import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; - import java.util.ArrayList; import java.util.List; -import static com.microsoft.build.BuilderUtil.LANGS; - class ProjectBuilder { - private final String projectName; - - ProjectBuilder(String projectName) { - this.projectName = projectName; - } - - void buildProjectMetadataFile(List packageItems, MetadataFile projectMetadataFile) { - MetadataFileItem projectItem = new MetadataFileItem(LANGS, projectName); - projectItem.setNameWithType(projectName); - projectItem.setFullName(projectName); - projectItem.setType("Namespace"); - projectItem.setJavaType("overview"); - - List children = new ArrayList<>(); - List references = new ArrayList<>(); - packageItems.stream().forEach(i -> { - children.add(i.getUid()); - MetadataFileItem refItem = new MetadataFileItem(i.getUid()); - refItem.setName(i.getName()); - refItem.setNameWithType(i.getNameWithType()); - refItem.setFullName(i.getFullName()); - references.add(refItem); - }); - - projectItem.getChildren().addAll(children); - projectMetadataFile.getReferences().addAll(references); - projectMetadataFile.getItems().add(projectItem); - } + private final String projectName; + + ProjectBuilder(String projectName) { + this.projectName = projectName; + } + + void buildProjectMetadataFile( + List packageItems, MetadataFile projectMetadataFile) { + MetadataFileItem projectItem = new MetadataFileItem(LANGS, projectName); + projectItem.setNameWithType(projectName); + projectItem.setFullName(projectName); + projectItem.setType("Namespace"); + projectItem.setJavaType("overview"); + + List children = new ArrayList<>(); + List references = new ArrayList<>(); + packageItems.stream() + .forEach( + i -> { + children.add(i.getUid()); + MetadataFileItem refItem = new MetadataFileItem(i.getUid()); + refItem.setName(i.getName()); + refItem.setNameWithType(i.getNameWithType()); + refItem.setFullName(i.getFullName()); + references.add(refItem); + }); + + projectItem.getChildren().addAll(children); + projectMetadataFile.getReferences().addAll(references); + projectMetadataFile.getItems().add(projectItem); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java index c1ed3387..f0a5658e 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java @@ -15,17 +15,16 @@ */ package com.microsoft.build; +import static com.microsoft.build.BuilderUtil.getJavaSpec; +import static com.microsoft.build.BuilderUtil.populateItemFields; +import static com.microsoft.build.BuilderUtil.replaceUidAndSplit; +import static com.microsoft.build.BuilderUtil.splitUidWithGenericsIntoClassNames; + import com.microsoft.lookup.ClassLookup; import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; import com.microsoft.model.SpecViewModel; import com.microsoft.util.ElementUtil; -import jdk.javadoc.doclet.DocletEnvironment; -import org.apache.commons.lang3.RegExUtils; - -import javax.lang.model.element.Element; -import javax.lang.model.element.TypeElement; -import javax.lang.model.util.ElementFilter; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -36,248 +35,286 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; - -import static com.microsoft.build.BuilderUtil.getJavaSpec; -import static com.microsoft.build.BuilderUtil.populateItemFields; -import static com.microsoft.build.BuilderUtil.replaceUidAndSplit; -import static com.microsoft.build.BuilderUtil.splitUidWithGenericsIntoClassNames; +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import javax.lang.model.util.ElementFilter; +import jdk.javadoc.doclet.DocletEnvironment; +import org.apache.commons.lang3.RegExUtils; class ReferenceBuilder { - private final Pattern JAVA_PATTERN = Pattern.compile("^java.*"); - private final Pattern PROTOBUF_PATTERN = Pattern.compile("^com.google.protobuf.*"); - private final Pattern GAX_PATTERN = Pattern.compile("^com.google.api.gax.*"); - private final Pattern APICOMMON_PATTERN = Pattern.compile("^com.google.api.core.*"); - private final Pattern LONGRUNNING_PATTERN = Pattern.compile("^com.google.longrunning.*"); - private final Pattern ENDING_PATTERN = Pattern.compile(".*<\\?>$"); - private final String PRIMITIVE_URL = "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html"; - private final String JAVA_BASE_URL = "https://docs.oracle.com/javase/8/docs/api/"; - private final DocletEnvironment environment; - private final ClassLookup classLookup; - private final ElementUtil elementUtil; - - ReferenceBuilder(DocletEnvironment environment, ClassLookup classLookup, ElementUtil elementUtil) { - this.environment = environment; - this.classLookup = classLookup; - this.elementUtil = elementUtil; + private final Pattern JAVA_PATTERN = Pattern.compile("^java.*"); + private final Pattern PROTOBUF_PATTERN = Pattern.compile("^com.google.protobuf.*"); + private final Pattern GAX_PATTERN = Pattern.compile("^com.google.api.gax.*"); + private final Pattern APICOMMON_PATTERN = Pattern.compile("^com.google.api.core.*"); + private final Pattern LONGRUNNING_PATTERN = Pattern.compile("^com.google.longrunning.*"); + private final Pattern ENDING_PATTERN = Pattern.compile(".*<\\?>$"); + private final String PRIMITIVE_URL = + "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html"; + private final String JAVA_BASE_URL = "https://docs.oracle.com/javase/8/docs/api/"; + private final DocletEnvironment environment; + private final ClassLookup classLookup; + private final ElementUtil elementUtil; + + ReferenceBuilder( + DocletEnvironment environment, ClassLookup classLookup, ElementUtil elementUtil) { + this.environment = environment; + this.classLookup = classLookup; + this.elementUtil = elementUtil; + } + + MetadataFileItem buildClassReference(TypeElement classElement) { + MetadataFileItem referenceItem = new MetadataFileItem(classLookup.extractUid(classElement)); + referenceItem.setName(classLookup.extractName(classElement)); + referenceItem.setNameWithType(classLookup.extractNameWithType(classElement)); + referenceItem.setFullName(classLookup.extractFullName(classElement)); + return referenceItem; + } + + void addReferencesInfo(TypeElement classElement, MetadataFile classMetadataFile) { + MetadataFileItem classReference = new MetadataFileItem(classLookup.extractUid(classElement)); + classReference.setParent(classLookup.extractParent(classElement)); + populateItemFields(classReference, classLookup, classElement); + classReference.setTypeParameters(classLookup.extractTypeParameters(classElement)); + + addTypeParameterReferences(classReference, classMetadataFile); + addSuperclassAndInterfacesReferences(classElement, classMetadataFile); + addInnerClassesReferences(classElement, classMetadataFile); + } + + void addChildrenReferences( + Element element, List packageChildren, Set referencesCollector) { + for (TypeElement classElement : elementUtil.extractSortedElements(element)) { + referencesCollector.add(buildClassReference(classElement)); + + packageChildren.add(classLookup.extractUid(classElement)); + addChildrenReferences(classElement, packageChildren, referencesCollector); } + } - MetadataFileItem buildClassReference(TypeElement classElement) { - MetadataFileItem referenceItem = new MetadataFileItem(classLookup.extractUid(classElement)); - referenceItem.setName(classLookup.extractName(classElement)); - referenceItem.setNameWithType(classLookup.extractNameWithType(classElement)); - referenceItem.setFullName(classLookup.extractFullName(classElement)); - return referenceItem; + String getJavaReferenceHref(String uid) { + if (uid == null || uid.equals("")) { + return JAVA_BASE_URL; } - - void addReferencesInfo(TypeElement classElement, MetadataFile classMetadataFile) { - MetadataFileItem classReference = new MetadataFileItem(classLookup.extractUid(classElement)); - classReference.setParent(classLookup.extractParent(classElement)); - populateItemFields(classReference, classLookup, classElement); - classReference.setTypeParameters(classLookup.extractTypeParameters(classElement)); - - addTypeParameterReferences(classReference, classMetadataFile); - addSuperclassAndInterfacesReferences(classElement, classMetadataFile); - addInnerClassesReferences(classElement, classMetadataFile); + // example1 uid: "java.lang.Object.equals(java.lang.Object)" + // example2 uid: "java.lang.Object" + String endURL = uid.replaceAll("", ""); + + Pattern argPattern = Pattern.compile(".*\\(.*\\).*"); + if (argPattern.matcher(endURL).find()) { + // example1 + // argumentSplit: ["java.lang.Object.equals", "java.lang.Object)"] + // nameSplit: ["java", "lang", "Object", "equals"] + List argumentSplit = Arrays.asList(endURL.split("\\(")); + List nameSplit = Arrays.asList(argumentSplit.get(0).split("\\.")); + + // className: "java/lang/Object" + // methodName: "#equals" + // argumentsName: "#java.lang.Object-" + String className = String.join("/", nameSplit.subList(0, nameSplit.size() - 1)); + String methodName = "#" + nameSplit.get(nameSplit.size() - 1); + String argumentsName = argumentSplit.get(1).replaceAll("[,)]", "-"); + + // endURL: "java/lang/Object.html#equals-java.lang.Object-" + endURL = className + ".html" + methodName + "-" + argumentsName; + } else { + // example2 + // endURL = java/lang/Object.html + endURL = endURL.replaceAll("\\.", "/"); + endURL = endURL + ".html"; } + return JAVA_BASE_URL + endURL; + } - void addChildrenReferences(Element element, List packageChildren, - Set referencesCollector) { - for (TypeElement classElement : elementUtil.extractSortedElements(element)) { - referencesCollector.add(buildClassReference(classElement)); + void updateExternalReferences(List classMetadataFiles) { + classMetadataFiles.forEach( + file -> file.getReferences().forEach(ref -> updateExternalReference(ref))); + } - packageChildren.add(classLookup.extractUid(classElement)); - addChildrenReferences(classElement, packageChildren, referencesCollector); - } - } + private void updateExternalReference(MetadataFileItem reference) { + String uid = reference.getUid(); + uid = updateReferenceUid(uid); - String getJavaReferenceHref(String uid) { - if (uid == null || uid.equals("")) { - return JAVA_BASE_URL; - } - // example1 uid: "java.lang.Object.equals(java.lang.Object)" - // example2 uid: "java.lang.Object" - String endURL = uid.replaceAll("", ""); - - Pattern argPattern = Pattern.compile(".*\\(.*\\).*"); - if (argPattern.matcher(endURL).find()) { - // example1 - // argumentSplit: ["java.lang.Object.equals", "java.lang.Object)"] - // nameSplit: ["java", "lang", "Object", "equals"] - List argumentSplit = Arrays.asList(endURL.split("\\(")); - List nameSplit = Arrays.asList(argumentSplit.get(0).split("\\.")); - - // className: "java/lang/Object" - // methodName: "#equals" - // argumentsName: "#java.lang.Object-" - String className = String.join("/", nameSplit.subList(0, nameSplit.size() - 1)); - String methodName = "#" + nameSplit.get(nameSplit.size() - 1); - String argumentsName = argumentSplit.get(1).replaceAll("[,)]", "-"); - - // endURL: "java/lang/Object.html#equals-java.lang.Object-" - endURL = className + ".html" + methodName + "-" + argumentsName; - } else { - // example2 - // endURL = java/lang/Object.html - endURL = endURL.replaceAll("\\.", "/"); - endURL = endURL + ".html"; - } - return JAVA_BASE_URL + endURL; + if (isJavaPrimitive(uid)) { + reference.setHref(PRIMITIVE_URL); + return; } - - void updateExternalReferences(List classMetadataFiles) { - classMetadataFiles.forEach(file -> file.getReferences() - .forEach(ref -> updateExternalReference(ref))); + if (isJavaLibrary(uid)) { + reference.setHref(getJavaReferenceHref(uid)); } - - private void updateExternalReference(MetadataFileItem reference) { - String uid = reference.getUid(); - uid = updateReferenceUid(uid); - - if (isJavaPrimitive(uid)) { - reference.setHref(PRIMITIVE_URL); - return; - } - if (isJavaLibrary(uid)) { - reference.setHref(getJavaReferenceHref(uid)); - } - if (isExternalReference(uid)) { - reference.setIsExternal(true); - } - if (reference.getSpecForJava().size() > 0) { - for (SpecViewModel spec : reference.getSpecForJava()) { - String specUid = spec.getUid(); - if (specUid != null) { - if (isJavaPrimitive(specUid)) { - spec.setHref(PRIMITIVE_URL); - } - if (isJavaLibrary(specUid)) { - spec.setHref(getJavaReferenceHref(specUid)); - } - if (isExternalReference(specUid)) { - spec.setIsExternal(true); - } - } - } - } + if (isExternalReference(uid)) { + reference.setIsExternal(true); } - - private String updateReferenceUid(String uid) { - if (ENDING_PATTERN.matcher(uid).find()) { - uid = uid.replace("", ""); + if (reference.getSpecForJava().size() > 0) { + for (SpecViewModel spec : reference.getSpecForJava()) { + String specUid = spec.getUid(); + if (specUid != null) { + if (isJavaPrimitive(specUid)) { + spec.setHref(PRIMITIVE_URL); + } + if (isJavaLibrary(specUid)) { + spec.setHref(getJavaReferenceHref(specUid)); + } + if (isExternalReference(specUid)) { + spec.setIsExternal(true); + } } - return uid; - } - - private boolean isExternalReference(String uid) { - return (PROTOBUF_PATTERN.matcher(uid).find() || GAX_PATTERN.matcher(uid).find() || APICOMMON_PATTERN.matcher(uid).find() || GAX_PATTERN.matcher(uid).find() || LONGRUNNING_PATTERN.matcher(uid).find()); + } } + } - private boolean isJavaPrimitive(String uid) { - return (uid.equals("boolean") || uid.equals("int") || uid.equals("byte") || uid.equals("long") || uid.equals("float") || uid.equals("double") || uid.equals("char") || uid.equals("short")); + private String updateReferenceUid(String uid) { + if (ENDING_PATTERN.matcher(uid).find()) { + uid = uid.replace("", ""); } - - private boolean isJavaLibrary(String uid) { - return JAVA_PATTERN.matcher(uid).find(); - } - - void addParameterReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll( - methodItem.getSyntax().getParameters().stream() - .map(parameter -> buildRefItem(parameter.getType())) - .filter(o -> !classMetadataFile.getItems().contains(o)) - .collect(Collectors.toList())); - } - - void addReturnReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll( - Stream.of(methodItem.getSyntax().getReturnValue()) - .filter(Objects::nonNull) - .map(returnValue -> buildRefItem(returnValue.getReturnType())) - .filter(o -> !classMetadataFile.getItems().contains(o)) - .collect(Collectors.toList())); - } - - void addExceptionReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll( - methodItem.getExceptions().stream() - .map(exceptionItem -> buildRefItem(exceptionItem.getType())) - .filter(o -> !classMetadataFile.getItems().contains(o)) - .collect(Collectors.toList())); + return uid; + } + + private boolean isExternalReference(String uid) { + return (PROTOBUF_PATTERN.matcher(uid).find() + || GAX_PATTERN.matcher(uid).find() + || APICOMMON_PATTERN.matcher(uid).find() + || GAX_PATTERN.matcher(uid).find() + || LONGRUNNING_PATTERN.matcher(uid).find()); + } + + private boolean isJavaPrimitive(String uid) { + return (uid.equals("boolean") + || uid.equals("int") + || uid.equals("byte") + || uid.equals("long") + || uid.equals("float") + || uid.equals("double") + || uid.equals("char") + || uid.equals("short")); + } + + private boolean isJavaLibrary(String uid) { + return JAVA_PATTERN.matcher(uid).find(); + } + + void addParameterReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { + classMetadataFile + .getReferences() + .addAll( + methodItem.getSyntax().getParameters().stream() + .map(parameter -> buildRefItem(parameter.getType())) + .filter(o -> !classMetadataFile.getItems().contains(o)) + .collect(Collectors.toList())); + } + + void addReturnReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { + classMetadataFile + .getReferences() + .addAll( + Stream.of(methodItem.getSyntax().getReturnValue()) + .filter(Objects::nonNull) + .map(returnValue -> buildRefItem(returnValue.getReturnType())) + .filter(o -> !classMetadataFile.getItems().contains(o)) + .collect(Collectors.toList())); + } + + void addExceptionReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { + classMetadataFile + .getReferences() + .addAll( + methodItem.getExceptions().stream() + .map(exceptionItem -> buildRefItem(exceptionItem.getType())) + .filter(o -> !classMetadataFile.getItems().contains(o)) + .collect(Collectors.toList())); + } + + void addTypeParameterReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { + classMetadataFile + .getReferences() + .addAll( + methodItem.getSyntax().getTypeParameters().stream() + .map( + typeParameter -> { + String id = typeParameter.getId(); + return new MetadataFileItem(id, id, false); + }) + .collect(Collectors.toList())); + } + + void addSuperclassAndInterfacesReferences( + TypeElement classElement, MetadataFile classMetadataFile) { + classMetadataFile.getReferences().addAll(classLookup.extractReferences(classElement)); + } + + void addInnerClassesReferences(TypeElement classElement, MetadataFile classMetadataFile) { + classMetadataFile + .getReferences() + .addAll( + ElementFilter.typesIn(elementUtil.extractSortedElements(classElement)).stream() + .map(this::buildClassReference) + .collect(Collectors.toList())); + } + + void addOverloadReferences(MetadataFileItem item, MetadataFile classMetadataFile) { + classMetadataFile + .getReferences() + .add( + new MetadataFileItem(item.getOverload()) { + { + setName(RegExUtils.removeAll(item.getName(), "\\(.*\\)$")); + setNameWithType(RegExUtils.removeAll(item.getNameWithType(), "\\(.*\\)$")); + setFullName(RegExUtils.removeAll(item.getFullName(), "\\(.*\\)$")); + setPackageName(item.getPackageName()); + } + }); + } + + /** + * Replace one record in 'references' with several records in this way: + * + *
+   * a.b.c.List> ->
+   *     - a.b.c.List
+   *     - df.mn.ClassOne
+   *     - tr.T
+   * 
+ */ + void expandComplexGenericsInReferences(MetadataFile classMetadataFile) { + Set additionalItems = new LinkedHashSet<>(); + Iterator iterator = classMetadataFile.getReferences().iterator(); + while (iterator.hasNext()) { + MetadataFileItem item = iterator.next(); + String uid = item.getUid(); + if (!uid.endsWith("*") && uid.contains("<")) { + List classNames = splitUidWithGenericsIntoClassNames(uid); + additionalItems.addAll( + classNames.stream() + .map(s -> new MetadataFileItem(s, classLookup.makeTypeShort(s), false)) + .collect(Collectors.toSet())); + } } - - void addTypeParameterReferences(MetadataFileItem methodItem, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll( - methodItem.getSyntax().getTypeParameters().stream() - .map(typeParameter -> { - String id = typeParameter.getId(); - return new MetadataFileItem(id, id, false); - }).collect(Collectors.toList())); - } - - void addSuperclassAndInterfacesReferences(TypeElement classElement, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll(classLookup.extractReferences(classElement)); - } - - void addInnerClassesReferences(TypeElement classElement, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().addAll( - ElementFilter.typesIn(elementUtil.extractSortedElements(classElement)).stream() - .map(this::buildClassReference) - .collect(Collectors.toList())); - } - - void addOverloadReferences(MetadataFileItem item, MetadataFile classMetadataFile) { - classMetadataFile.getReferences().add(new MetadataFileItem(item.getOverload()) {{ - setName(RegExUtils.removeAll(item.getName(), "\\(.*\\)$")); - setNameWithType(RegExUtils.removeAll(item.getNameWithType(), "\\(.*\\)$")); - setFullName(RegExUtils.removeAll(item.getFullName(), "\\(.*\\)$")); - setPackageName(item.getPackageName()); - }}); - } - - /** - * Replace one record in 'references' with several records in this way: - *
-     * a.b.c.List> ->
-     *     - a.b.c.List
-     *     - df.mn.ClassOne
-     *     - tr.T
-     * 
- */ - void expandComplexGenericsInReferences(MetadataFile classMetadataFile) { - Set additionalItems = new LinkedHashSet<>(); - Iterator iterator = classMetadataFile.getReferences().iterator(); - while (iterator.hasNext()) { - MetadataFileItem item = iterator.next(); - String uid = item.getUid(); - if (!uid.endsWith("*") && uid.contains("<")) { - List classNames = splitUidWithGenericsIntoClassNames(uid); - additionalItems.addAll(classNames.stream() - .map(s -> new MetadataFileItem(s, classLookup.makeTypeShort(s), false)) - .collect(Collectors.toSet())); - } - } - // Remove items which already exist in 'items' section (compared by 'uid' field) - additionalItems.removeAll(classMetadataFile.getItems()); - - classMetadataFile.getReferences().addAll(additionalItems); - } - - MetadataFileItem buildRefItem(String uid) { - if (!uid.endsWith("*") && (uid.contains("<") || uid.contains("[]"))) { - return new MetadataFileItem(uid, getJavaSpec(replaceUidAndSplit(uid))); - } else { - List fullNameList = new ArrayList<>(); - - environment.getIncludedElements().forEach( - element -> elementUtil.extractSortedElements(element).forEach( - typeElement -> fullNameList.add(classLookup.extractFullName(typeElement))) - ); - - if (fullNameList.contains(uid)) { - return new MetadataFileItem(uid, classLookup.makeTypeShort(uid), false); - } else { - return new MetadataFileItem(uid, getJavaSpec(replaceUidAndSplit(uid))); - } - } + // Remove items which already exist in 'items' section (compared by 'uid' field) + additionalItems.removeAll(classMetadataFile.getItems()); + + classMetadataFile.getReferences().addAll(additionalItems); + } + + MetadataFileItem buildRefItem(String uid) { + if (!uid.endsWith("*") && (uid.contains("<") || uid.contains("[]"))) { + return new MetadataFileItem(uid, getJavaSpec(replaceUidAndSplit(uid))); + } else { + List fullNameList = new ArrayList<>(); + + environment + .getIncludedElements() + .forEach( + element -> + elementUtil + .extractSortedElements(element) + .forEach( + typeElement -> + fullNameList.add(classLookup.extractFullName(typeElement)))); + + if (fullNameList.contains(uid)) { + return new MetadataFileItem(uid, classLookup.makeTypeShort(uid), false); + } else { + return new MetadataFileItem(uid, getJavaSpec(replaceUidAndSplit(uid))); + } } + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 7288b135..7e0d1f66 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -1,5 +1,7 @@ package com.microsoft.build; +import static com.microsoft.build.BuilderUtil.populateUidValues; + import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; import com.microsoft.lookup.PackageLookup; @@ -10,105 +12,115 @@ import com.microsoft.model.TocTypeMap; import com.microsoft.util.ElementUtil; import com.microsoft.util.FileUtil; -import jdk.javadoc.doclet.DocletEnvironment; - -import javax.lang.model.element.PackageElement; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; - -import static com.microsoft.build.BuilderUtil.populateUidValues; +import javax.lang.model.element.PackageElement; +import jdk.javadoc.doclet.DocletEnvironment; public class YmlFilesBuilder { - private DocletEnvironment environment; - private String outputPath; - private ElementUtil elementUtil; - private PackageLookup packageLookup; - private String projectName; - private boolean disableChangelog; - private ProjectBuilder projectBuilder; - private PackageBuilder packageBuilder; - private ClassBuilder classBuilder; - private ReferenceBuilder referenceBuilder; + private DocletEnvironment environment; + private String outputPath; + private ElementUtil elementUtil; + private PackageLookup packageLookup; + private String projectName; + private boolean disableChangelog; + private ProjectBuilder projectBuilder; + private PackageBuilder packageBuilder; + private ClassBuilder classBuilder; + private ReferenceBuilder referenceBuilder; - public YmlFilesBuilder(DocletEnvironment environment, String outputPath, - String[] excludePackages, String[] excludeClasses, String projectName, boolean disableChangelog) { - this.environment = environment; - this.outputPath = outputPath; - this.elementUtil = new ElementUtil(excludePackages, excludeClasses); - this.packageLookup = new PackageLookup(environment); - this.projectName = projectName; - this.disableChangelog = disableChangelog; - this.projectBuilder = new ProjectBuilder(projectName); - ClassLookup classLookup = new ClassLookup(environment, elementUtil); - this.referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); - this.packageBuilder = new PackageBuilder(packageLookup, outputPath, referenceBuilder); - this.classBuilder = new ClassBuilder(elementUtil, classLookup, new ClassItemsLookup(environment, elementUtil), outputPath, referenceBuilder); - } + public YmlFilesBuilder( + DocletEnvironment environment, + String outputPath, + String[] excludePackages, + String[] excludeClasses, + String projectName, + boolean disableChangelog) { + this.environment = environment; + this.outputPath = outputPath; + this.elementUtil = new ElementUtil(excludePackages, excludeClasses); + this.packageLookup = new PackageLookup(environment); + this.projectName = projectName; + this.disableChangelog = disableChangelog; + this.projectBuilder = new ProjectBuilder(projectName); + ClassLookup classLookup = new ClassLookup(environment, elementUtil); + this.referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); + this.packageBuilder = new PackageBuilder(packageLookup, outputPath, referenceBuilder); + this.classBuilder = + new ClassBuilder( + elementUtil, + classLookup, + new ClassItemsLookup(environment, elementUtil), + outputPath, + referenceBuilder); + } - public boolean build() { - // table of contents - TocFile tocFile = new TocFile(outputPath, projectName, disableChangelog); - // overview page - MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); - // package summary pages - List packageMetadataFiles = new ArrayList<>(); - // packages - List packageItems = new ArrayList<>(); - // class/enum/interface/etc. pages - List classMetadataFiles = new ArrayList<>(); + public boolean build() { + // table of contents + TocFile tocFile = new TocFile(outputPath, projectName, disableChangelog); + // overview page + MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); + // package summary pages + List packageMetadataFiles = new ArrayList<>(); + // packages + List packageItems = new ArrayList<>(); + // class/enum/interface/etc. pages + List classMetadataFiles = new ArrayList<>(); - for (PackageElement packageElement : - elementUtil.extractPackageElements(environment.getIncludedElements())) { - String packageUid = packageLookup.extractUid(packageElement); - String packageStatus = packageLookup.extractStatus(packageElement); - TocItem packageTocItem = new TocItem(packageUid, packageUid, packageStatus); - // build package summary - packageMetadataFiles.add(packageBuilder.buildPackageMetadataFile(packageElement)); - // add package summary to toc - packageTocItem.getItems().add(new TocItem(packageUid, "Package summary")); - tocFile.addTocItem(packageTocItem); + for (PackageElement packageElement : + elementUtil.extractPackageElements(environment.getIncludedElements())) { + String packageUid = packageLookup.extractUid(packageElement); + String packageStatus = packageLookup.extractStatus(packageElement); + TocItem packageTocItem = new TocItem(packageUid, packageUid, packageStatus); + // build package summary + packageMetadataFiles.add(packageBuilder.buildPackageMetadataFile(packageElement)); + // add package summary to toc + packageTocItem.getItems().add(new TocItem(packageUid, "Package summary")); + tocFile.addTocItem(packageTocItem); - // build classes/interfaces/enums/exceptions/annotations - TocTypeMap typeMap = new TocTypeMap(); - classBuilder.buildFilesForInnerClasses(packageElement, typeMap, classMetadataFiles); - packageTocItem.getItems().addAll(joinTocTypeItems(typeMap)); - } + // build classes/interfaces/enums/exceptions/annotations + TocTypeMap typeMap = new TocTypeMap(); + classBuilder.buildFilesForInnerClasses(packageElement, typeMap, classMetadataFiles); + packageTocItem.getItems().addAll(joinTocTypeItems(typeMap)); + } - for (MetadataFile packageFile : packageMetadataFiles) { - packageItems.addAll(packageFile.getItems()); - String packageFileName = packageFile.getFileName(); - for (MetadataFile classFile : classMetadataFiles) { - String classFileName = classFile.getFileName(); - if (packageFileName.equalsIgnoreCase(classFileName)) { - packageFile.setFileName(packageFileName.replaceAll("\\.yml$", "(package).yml")); - classFile.setFileName(classFileName.replaceAll("\\.yml$", "(class).yml")); - break; - } - } + for (MetadataFile packageFile : packageMetadataFiles) { + packageItems.addAll(packageFile.getItems()); + String packageFileName = packageFile.getFileName(); + for (MetadataFile classFile : classMetadataFiles) { + String classFileName = classFile.getFileName(); + if (packageFileName.equalsIgnoreCase(classFileName)) { + packageFile.setFileName(packageFileName.replaceAll("\\.yml$", "(package).yml")); + classFile.setFileName(classFileName.replaceAll("\\.yml$", "(class).yml")); + break; } - // build project summary page - projectBuilder.buildProjectMetadataFile(packageItems, projectMetadataFile); + } + } + // build project summary page + projectBuilder.buildProjectMetadataFile(packageItems, projectMetadataFile); - // post-processing - populateUidValues(packageMetadataFiles, classMetadataFiles); - referenceBuilder.updateExternalReferences(classMetadataFiles); + // post-processing + populateUidValues(packageMetadataFiles, classMetadataFiles); + referenceBuilder.updateExternalReferences(classMetadataFiles); - // write to yaml files - FileUtil.dumpToFile(projectMetadataFile); - packageMetadataFiles.forEach(FileUtil::dumpToFile); - classMetadataFiles.forEach(FileUtil::dumpToFile); - FileUtil.dumpToFile(tocFile); + // write to yaml files + FileUtil.dumpToFile(projectMetadataFile); + packageMetadataFiles.forEach(FileUtil::dumpToFile); + classMetadataFiles.forEach(FileUtil::dumpToFile); + FileUtil.dumpToFile(tocFile); - return true; - } + return true; + } - List joinTocTypeItems(TocTypeMap tocTypeMap) { - return tocTypeMap.getTitleList().stream() - .filter(kindTitle -> tocTypeMap.get(kindTitle.getElementKind()).size() > 0) - .flatMap(kindTitle -> { - tocTypeMap.get(kindTitle.getElementKind()).add(0, new TocItem(kindTitle.getTitle())); - return tocTypeMap.get(kindTitle.getElementKind()).stream(); - }).collect(Collectors.toList()); - } + List joinTocTypeItems(TocTypeMap tocTypeMap) { + return tocTypeMap.getTitleList().stream() + .filter(kindTitle -> tocTypeMap.get(kindTitle.getElementKind()).size() > 0) + .flatMap( + kindTitle -> { + tocTypeMap.get(kindTitle.getElementKind()).add(0, new TocItem(kindTitle.getTitle())); + return tocTypeMap.get(kindTitle.getElementKind()).stream(); + }) + .collect(Collectors.toList()); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java index 20050e74..7d9c5f15 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java @@ -1,156 +1,171 @@ package com.microsoft.doclet; import com.microsoft.build.YmlFilesBuilder; +import java.util.*; +import javax.lang.model.SourceVersion; +import javax.tools.Diagnostic.Kind; import jdk.javadoc.doclet.Doclet; import jdk.javadoc.doclet.DocletEnvironment; import jdk.javadoc.doclet.Reporter; import org.apache.commons.lang3.StringUtils; -import javax.lang.model.SourceVersion; -import javax.tools.Diagnostic.Kind; -import java.util.*; - public class DocFxDoclet implements Doclet { - private Reporter reporter; + private Reporter reporter; + + @Override + public void init(Locale locale, Reporter reporter) { + reporter.print(Kind.NOTE, "Doclet using locale: " + locale); + this.reporter = reporter; + } + + @Override + public boolean run(DocletEnvironment environment) { + reporter.print(Kind.NOTE, "Output path: " + outputPath); + reporter.print(Kind.NOTE, "Excluded packages: " + Arrays.toString(excludePackages)); + reporter.print(Kind.NOTE, "Excluded classes: " + Arrays.toString(excludeClasses)); + reporter.print(Kind.NOTE, "Project name: " + projectName); + reporter.print(Kind.NOTE, "Disable changelog: " + disableChangelog); + + return (new YmlFilesBuilder( + environment, + outputPath, + excludePackages, + excludeClasses, + projectName, + disableChangelog)) + .build(); + } + + @Override + public String getName() { + return "DocFxDoclet"; + } + + private String outputPath; + private String[] excludePackages = {}; + private String[] excludeClasses = {}; + private String projectName; + private boolean disableChangelog; + + @Override + public Set getSupportedOptions() { + Option[] options = { + new CustomOption("Output path", Arrays.asList("-outputpath", "--output-path", "-d"), "path") { + @Override + public boolean process(String option, List arguments) { + outputPath = arguments.get(0); + return true; + } + }, + new CustomOption( + "Exclude packages", + Arrays.asList("-excludepackages", "--exclude-packages", "-ep"), + "packages") { + @Override + public boolean process(String option, List arguments) { + excludePackages = StringUtils.split(arguments.get(0), ":"); + return true; + } + }, + new CustomOption( + "Exclude classes", + Arrays.asList("-excludeclasses", "--exclude-classes", "-ec"), + "classes") { + @Override + public boolean process(String option, List arguments) { + excludeClasses = StringUtils.split(arguments.get(0), ":"); + return true; + } + }, + new CustomOption( + "Project name", Arrays.asList("-projectname", "--project-name", "-pn"), "name") { + @Override + public boolean process(String option, List arguments) { + // using artifact id as projectName - remove "-parent" since generation runs in parent + // pom + projectName = arguments.get(0).replaceAll("-parent", ""); + return true; + } + }, + new CustomOption( + "Disable changelog", + Arrays.asList("-disable-changelog", "--disable-changelog"), + "disableChangelog") { + @Override + public boolean process(String option, List arguments) { + if (arguments.get(0).equalsIgnoreCase("false")) { + disableChangelog = false; + } else { + disableChangelog = true; + } + return true; + } + }, + // Support next properties for compatibility with Gradle javadoc task. + // According to javadoc spec - these properties used by StandardDoclet and used only when + // 'doclet' parameter not populated. But Gradle javadoc not align with this rule and + // passes them in spite of 'doclet' parameter existence + new FakeOptionForCompatibilityWithStandardDoclet( + "Fake support of doctitle property", "-doctitle"), + new FakeOptionForCompatibilityWithStandardDoclet( + "Fake support of windowtitle property", "-windowtitle") + }; + return new HashSet<>(Arrays.asList(options)); + } + + @Override + public SourceVersion getSupportedSourceVersion() { + return SourceVersion.latest(); + } + + abstract static class CustomOption implements Option { + + private final String description; + private final List names; + private final String parameters; + + public CustomOption(String description, List names, String parameters) { + this.description = description; + this.names = names; + this.parameters = parameters; + } @Override - public void init(Locale locale, Reporter reporter) { - reporter.print(Kind.NOTE, "Doclet using locale: " + locale); - this.reporter = reporter; + public int getArgumentCount() { + return 1; } @Override - public boolean run(DocletEnvironment environment) { - reporter.print(Kind.NOTE, "Output path: " + outputPath); - reporter.print(Kind.NOTE, "Excluded packages: " + Arrays.toString(excludePackages)); - reporter.print(Kind.NOTE, "Excluded classes: " + Arrays.toString(excludeClasses)); - reporter.print(Kind.NOTE, "Project name: " + projectName); - reporter.print(Kind.NOTE, "Disable changelog: " + disableChangelog); - - return (new YmlFilesBuilder(environment, outputPath, excludePackages, excludeClasses, projectName, disableChangelog)).build(); + public String getDescription() { + return description; } @Override - public String getName() { - return "DocFxDoclet"; + public Kind getKind() { + return Kind.STANDARD; } - private String outputPath; - private String[] excludePackages = {}; - private String[] excludeClasses = {}; - private String projectName; - private boolean disableChangelog; - @Override - public Set getSupportedOptions() { - Option[] options = { - new CustomOption("Output path", Arrays.asList("-outputpath", "--output-path", "-d"), "path") { - @Override - public boolean process(String option, List arguments) { - outputPath = arguments.get(0); - return true; - } - }, - new CustomOption("Exclude packages", Arrays.asList("-excludepackages", "--exclude-packages", "-ep"), - "packages") { - @Override - public boolean process(String option, List arguments) { - excludePackages = StringUtils.split(arguments.get(0), ":"); - return true; - } - }, - new CustomOption("Exclude classes", Arrays.asList("-excludeclasses", "--exclude-classes", "-ec"), - "classes") { - @Override - public boolean process(String option, List arguments) { - excludeClasses = StringUtils.split(arguments.get(0), ":"); - return true; - } - }, - new CustomOption( - "Project name", Arrays.asList("-projectname", "--project-name", "-pn"), "name") { - @Override - public boolean process(String option, List arguments) { - // using artifact id as projectName - remove "-parent" since generation runs in parent pom - projectName = arguments.get(0).replaceAll("-parent", ""); - return true; - } - }, - new CustomOption( - "Disable changelog", Arrays.asList("-disable-changelog", "--disable-changelog"), "disableChangelog") { - @Override - public boolean process(String option, List arguments) { - if (arguments.get(0).equalsIgnoreCase("false")){ - disableChangelog = false; - } else { - disableChangelog = true; - } - return true; - } - }, - // Support next properties for compatibility with Gradle javadoc task. - // According to javadoc spec - these properties used by StandardDoclet and used only when - // 'doclet' parameter not populated. But Gradle javadoc not align with this rule and - // passes them in spite of 'doclet' parameter existence - new FakeOptionForCompatibilityWithStandardDoclet("Fake support of doctitle property", "-doctitle"), - new FakeOptionForCompatibilityWithStandardDoclet("Fake support of windowtitle property", "-windowtitle") - }; - return new HashSet<>(Arrays.asList(options)); + public List getNames() { + return names; } @Override - public SourceVersion getSupportedSourceVersion() { - return SourceVersion.latest(); + public String getParameters() { + return parameters; } + } - abstract static class CustomOption implements Option { + static class FakeOptionForCompatibilityWithStandardDoclet extends CustomOption { - private final String description; - private final List names; - private final String parameters; - - public CustomOption(String description, List names, String parameters) { - this.description = description; - this.names = names; - this.parameters = parameters; - } - - @Override - public int getArgumentCount() { - return 1; - } - - @Override - public String getDescription() { - return description; - } - - @Override - public Kind getKind() { - return Kind.STANDARD; - } - - @Override - public List getNames() { - return names; - } - - @Override - public String getParameters() { - return parameters; - } + public FakeOptionForCompatibilityWithStandardDoclet(String description, String name) { + super(description, Collections.singletonList(name), "none"); } - static class FakeOptionForCompatibilityWithStandardDoclet extends CustomOption { - - public FakeOptionForCompatibilityWithStandardDoclet(String description, String name) { - super(description, Collections.singletonList(name), "none"); - } - - @Override - public boolean process(String option, List arguments) { - return true; - } + @Override + public boolean process(String option, List arguments) { + return true; } + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java index a96a8af0..f7153bb8 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java @@ -14,20 +14,20 @@ */ public class DocletRunner { - public static void main(final String[] args) { - if (args.length < 1) { - System.err.println("Usage: java DocletRunner "); - return; - } + public static void main(final String[] args) { + if (args.length < 1) { + System.err.println("Usage: java DocletRunner "); + return; + } - List combined = new ArrayList<>(); - for (String arg : args) { - if (!(new java.io.File(arg)).isFile()) { - System.err.println(String.format("File '%s' does not exist", args[0])); - } - combined.addAll(OptionsFileUtil.processOptionsFile(arg)); - } - ToolProvider.getSystemDocumentationTool() - .run(null, null, null, combined.toArray(new String[0])); + List combined = new ArrayList<>(); + for (String arg : args) { + if (!(new java.io.File(arg)).isFile()) { + System.err.println(String.format("File '%s' does not exist", args[0])); + } + combined.addAll(OptionsFileUtil.processOptionsFile(arg)); } + ToolProvider.getSystemDocumentationTool() + .run(null, null, null, combined.toArray(new String[0])); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java index ba6b808b..df5eb075 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java @@ -13,13 +13,6 @@ import com.sun.source.doctree.LinkTree; import com.sun.source.doctree.LiteralTree; import com.sun.source.doctree.SeeTree; -import jdk.javadoc.doclet.DocletEnvironment; -import org.apache.commons.lang3.RegExUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.text.StringEscapeUtils; - -import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -29,276 +22,295 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import jdk.javadoc.doclet.DocletEnvironment; +import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.text.StringEscapeUtils; public abstract class BaseLookup { - private static final int INITIAL_CAPACITY = 500000; - protected final Map elementKindLookup = new HashMap<>() {{ - put(ElementKind.PACKAGE, "Namespace"); - put(ElementKind.CLASS, "Class"); - put(ElementKind.ENUM, "Enum"); - put(ElementKind.ENUM_CONSTANT, "Field"); - put(ElementKind.INTERFACE, "Interface"); - put(ElementKind.ANNOTATION_TYPE, "Interface"); - put(ElementKind.CONSTRUCTOR, "Constructor"); - put(ElementKind.METHOD, "Method"); - put(ElementKind.FIELD, "Field"); - }}; - - protected Map map; - protected final DocletEnvironment environment; - - protected BaseLookup(DocletEnvironment environment) { - this.environment = environment; - this.map = new HashMap<>(INITIAL_CAPACITY); - } - - protected ExtendedMetadataFileItem resolve(T key) { - map.computeIfAbsent(key, this::buildMetadataFileItem); - return map.get(key); - } - - protected abstract ExtendedMetadataFileItem buildMetadataFileItem(T key); - - public String extractPackageName(T key) { - return resolve(key).getPackageName(); - } - - public String extractFullName(T key) { - return resolve(key).getFullName(); - } - - public String extractName(T key) { - return resolve(key).getName(); - } - - public String extractHref(T key) { - return resolve(key).getHref(); - } - - public String extractParent(T key) { - return resolve(key).getParent(); - } - - public String extractId(T key) { - return resolve(key).getId(); - } - - public String extractUid(T key) { - return resolve(key).getUid(); - } - - public String extractNameWithType(T key) { - return resolve(key).getNameWithType(); - } - - public String extractMethodContent(T key) { - return resolve(key).getMethodContent(); - } - - public String extractFieldContent(T key) { - return resolve(key).getFieldContent(); - } - - public String extractConstructorContent(T key) { - return resolve(key).getConstructorContent(); - } - - public String extractOverload(T key) { - return resolve(key).getOverload(); - } - - public List extractParameters(T key) { - return resolve(key).getParameters(); - } - - public List extractExceptions(T key) { - return resolve(key).getExceptions(); - } - - public Return extractReturn(T key) { - return resolve(key).getReturn(); - } - - public String extractSummary(T key) { - return resolve(key).getSummary(); - } - - public String extractType(T key) { - return resolve(key).getType(); - } - - public String extractJavaType(T element) {return null;} - - public String extractContent(T key) { - return resolve(key).getContent(); - } - - public List extractTypeParameters(T key) { - return resolve(key).getTypeParameters(); - } - - public List extractSuperclass(T key) { - List reversed = resolve(key).getSuperclass(); - Collections.reverse(reversed); - return reversed; - } - - public List extractInheritedMethods(T key) { - List sorted = resolve(key).getInheritedMethods(); - Collections.sort(sorted); - return sorted; - } - - public List extractInterfaces(T key) { - return resolve(key).getInterfaces(); - } - - public String extractTocName(T key) { - return resolve(key).getTocName(); - } - - public Set extractReferences(T key) { - return resolve(key).getReferences(); - } + private static final int INITIAL_CAPACITY = 500000; + protected final Map elementKindLookup = + new HashMap<>() { + { + put(ElementKind.PACKAGE, "Namespace"); + put(ElementKind.CLASS, "Class"); + put(ElementKind.ENUM, "Enum"); + put(ElementKind.ENUM_CONSTANT, "Field"); + put(ElementKind.INTERFACE, "Interface"); + put(ElementKind.ANNOTATION_TYPE, "Interface"); + put(ElementKind.CONSTRUCTOR, "Constructor"); + put(ElementKind.METHOD, "Method"); + put(ElementKind.FIELD, "Field"); + } + }; - public String extractOverridden(T key) { - return resolve(key).getOverridden(); - } + protected Map map; + protected final DocletEnvironment environment; - public String extractStatus(T element) { - Optional docCommentTree = getDocCommentTree(element); - if (docCommentTree.isPresent()) { - boolean isDeprecated = docCommentTree.get().getBlockTags().stream() - .filter(docTree -> docTree.getKind().equals(DocTree.Kind.DEPRECATED)) - .findFirst() - .isPresent(); - if (isDeprecated) { - return DocTree.Kind.DEPRECATED.name().toLowerCase(); - } - } - return null; - } + protected BaseLookup(DocletEnvironment environment) { + this.environment = environment; + this.map = new HashMap<>(INITIAL_CAPACITY); + } - protected String determineType(T element) { - return elementKindLookup.get(element.getKind()); - } + protected ExtendedMetadataFileItem resolve(T key) { + map.computeIfAbsent(key, this::buildMetadataFileItem); + return map.get(key); + } - protected String determinePackageName(T element) { - return String.valueOf(environment.getElementUtils().getPackageOf(element)); - } + protected abstract ExtendedMetadataFileItem buildMetadataFileItem(T key); - protected String determineComment(T element) { - Optional docCommentTree = getDocCommentTree(element); - if (docCommentTree.isPresent()) { - String comment = docCommentTree - .map(DocCommentTree::getFullBody) - .map(this::replaceLinksAndCodes) - .orElse(null); - return replaceBlockTags(docCommentTree.get(), comment); - } - return null; - } + public String extractPackageName(T key) { + return resolve(key).getPackageName(); + } - /** - * Provides support for deprecated and see tags - */ - String replaceBlockTags(DocCommentTree docCommentTree, String comment) { - Set seeItems = new HashSet<>(); - String commentWithBlockTags = comment; - for (DocTree blockTag : docCommentTree.getBlockTags()) { - switch (blockTag.getKind()) { - case DEPRECATED: - commentWithBlockTags = getDeprecatedSummary((DeprecatedTree) blockTag).concat(comment); - break; - case SEE: - seeItems.add(getSeeTagRef((SeeTree) blockTag)); - break; - default: - } - } - if (!seeItems.isEmpty()) { - commentWithBlockTags = commentWithBlockTags.concat(getSeeAlsoSummary(seeItems)); - } - return commentWithBlockTags; - } + public String extractFullName(T key) { + return resolve(key).getFullName(); + } - /** - *
    - *
  • Replace @link and @linkplain with tags
  • - *
  • Replace @code with tags
  • - *
- */ - String replaceLinksAndCodes(List items) { - return YamlUtil.cleanupHtml(items.stream().map( - bodyItem -> { - switch (bodyItem.getKind()) { + public String extractName(T key) { + return resolve(key).getName(); + } + + public String extractHref(T key) { + return resolve(key).getHref(); + } + + public String extractParent(T key) { + return resolve(key).getParent(); + } + + public String extractId(T key) { + return resolve(key).getId(); + } + + public String extractUid(T key) { + return resolve(key).getUid(); + } + + public String extractNameWithType(T key) { + return resolve(key).getNameWithType(); + } + + public String extractMethodContent(T key) { + return resolve(key).getMethodContent(); + } + + public String extractFieldContent(T key) { + return resolve(key).getFieldContent(); + } + + public String extractConstructorContent(T key) { + return resolve(key).getConstructorContent(); + } + + public String extractOverload(T key) { + return resolve(key).getOverload(); + } + + public List extractParameters(T key) { + return resolve(key).getParameters(); + } + + public List extractExceptions(T key) { + return resolve(key).getExceptions(); + } + + public Return extractReturn(T key) { + return resolve(key).getReturn(); + } + + public String extractSummary(T key) { + return resolve(key).getSummary(); + } + + public String extractType(T key) { + return resolve(key).getType(); + } + + public String extractJavaType(T element) { + return null; + } + + public String extractContent(T key) { + return resolve(key).getContent(); + } + + public List extractTypeParameters(T key) { + return resolve(key).getTypeParameters(); + } + + public List extractSuperclass(T key) { + List reversed = resolve(key).getSuperclass(); + Collections.reverse(reversed); + return reversed; + } + + public List extractInheritedMethods(T key) { + List sorted = resolve(key).getInheritedMethods(); + Collections.sort(sorted); + return sorted; + } + + public List extractInterfaces(T key) { + return resolve(key).getInterfaces(); + } + + public String extractTocName(T key) { + return resolve(key).getTocName(); + } + + public Set extractReferences(T key) { + return resolve(key).getReferences(); + } + + public String extractOverridden(T key) { + return resolve(key).getOverridden(); + } + + public String extractStatus(T element) { + Optional docCommentTree = getDocCommentTree(element); + if (docCommentTree.isPresent()) { + boolean isDeprecated = + docCommentTree.get().getBlockTags().stream() + .filter(docTree -> docTree.getKind().equals(DocTree.Kind.DEPRECATED)) + .findFirst() + .isPresent(); + if (isDeprecated) { + return DocTree.Kind.DEPRECATED.name().toLowerCase(); + } + } + return null; + } + + protected String determineType(T element) { + return elementKindLookup.get(element.getKind()); + } + + protected String determinePackageName(T element) { + return String.valueOf(environment.getElementUtils().getPackageOf(element)); + } + + protected String determineComment(T element) { + Optional docCommentTree = getDocCommentTree(element); + if (docCommentTree.isPresent()) { + String comment = + docCommentTree + .map(DocCommentTree::getFullBody) + .map(this::replaceLinksAndCodes) + .orElse(null); + return replaceBlockTags(docCommentTree.get(), comment); + } + return null; + } + + /** Provides support for deprecated and see tags */ + String replaceBlockTags(DocCommentTree docCommentTree, String comment) { + Set seeItems = new HashSet<>(); + String commentWithBlockTags = comment; + for (DocTree blockTag : docCommentTree.getBlockTags()) { + switch (blockTag.getKind()) { + case DEPRECATED: + commentWithBlockTags = getDeprecatedSummary((DeprecatedTree) blockTag).concat(comment); + break; + case SEE: + seeItems.add(getSeeTagRef((SeeTree) blockTag)); + break; + default: + } + } + if (!seeItems.isEmpty()) { + commentWithBlockTags = commentWithBlockTags.concat(getSeeAlsoSummary(seeItems)); + } + return commentWithBlockTags; + } + + /** + *
    + *
  • Replace @link and @linkplain with tags
  • + *
  • Replace @code with tags
  • + *
+ */ + String replaceLinksAndCodes(List items) { + return YamlUtil.cleanupHtml( + items.stream() + .map( + bodyItem -> { + switch (bodyItem.getKind()) { case LINK: case LINK_PLAIN: - return buildXrefTag((LinkTree) bodyItem); + return buildXrefTag((LinkTree) bodyItem); case CODE: - return buildCodeTag((LiteralTree) bodyItem); + return buildCodeTag((LiteralTree) bodyItem); case LITERAL: - return expandLiteralBody((LiteralTree) bodyItem); + return expandLiteralBody((LiteralTree) bodyItem); default: - return String.valueOf(StringEscapeUtils.unescapeJava(bodyItem.toString())); - } - } - ).collect(Collectors.joining())); - } - - /** - * By using this way of processing links we provide support of @links with label, like this: {@link List someLabel} - */ - String buildXrefTag(LinkTree linkTree) { - String signature = linkTree.getReference().getSignature(); - String label = linkTree.getLabel().stream().map(String::valueOf).collect(Collectors.joining(" ")); - if (StringUtils.isEmpty(label)) { - label = signature; - } - return String.format("%s", signature, label); - } - - String buildCodeTag(LiteralTree literalTree) { - return String.format("%s", StringEscapeUtils.unescapeJava(literalTree.getBody().toString())); - } - - String expandLiteralBody(LiteralTree bodyItem) { - return String.valueOf(StringEscapeUtils.unescapeJava(bodyItem.getBody().toString())); - } - - protected Optional getDocCommentTree(T element) { - return Optional.ofNullable(environment.getDocTrees().getDocCommentTree(element)); - } - - /** - * We make type shortening in assumption that package name doesn't contain uppercase characters - */ - public String makeTypeShort(String value) { - if (!value.contains(".")) { - return value; - } - return Stream.of(StringUtils.split(value, "<")) - .map(s -> RegExUtils.removeAll(s, "\\b[a-z0-9_.]+\\.")) - .collect(Collectors.joining("<")); - } - - private String getSeeAlsoSummary(Set seeItems) { - return String.format("\nSee Also: %s\n", String.join(", ", seeItems)); - } - - private String getDeprecatedSummary(DeprecatedTree deprecatedTree) { - return String.format("\nDeprecated. %s\n\n", - replaceLinksAndCodes(deprecatedTree.getBody())); - } - - private String getSeeTagRef(SeeTree seeTree) { - String ref = seeTree.getReference().stream() - .map(r -> String.valueOf(r)).collect(Collectors.joining("")); - // if it's already a tag, use that otherwise build xref tag - if (ref.matches("^<.+>(.|\n)*")) { - return ref.replaceAll("\n", "").replaceAll("( )+", " "); - } - return String.format("%1$s", ref); - } -} \ No newline at end of file + return String.valueOf(StringEscapeUtils.unescapeJava(bodyItem.toString())); + } + }) + .collect(Collectors.joining())); + } + + /** + * By using this way of processing links we provide support of @links with label, like this: + * {@link List someLabel} + */ + String buildXrefTag(LinkTree linkTree) { + String signature = linkTree.getReference().getSignature(); + String label = + linkTree.getLabel().stream().map(String::valueOf).collect(Collectors.joining(" ")); + if (StringUtils.isEmpty(label)) { + label = signature; + } + return String.format( + "%s", signature, label); + } + + String buildCodeTag(LiteralTree literalTree) { + return String.format( + "%s", StringEscapeUtils.unescapeJava(literalTree.getBody().toString())); + } + + String expandLiteralBody(LiteralTree bodyItem) { + return String.valueOf(StringEscapeUtils.unescapeJava(bodyItem.getBody().toString())); + } + + protected Optional getDocCommentTree(T element) { + return Optional.ofNullable(environment.getDocTrees().getDocCommentTree(element)); + } + + /** + * We make type shortening in assumption that package name doesn't contain uppercase characters + */ + public String makeTypeShort(String value) { + if (!value.contains(".")) { + return value; + } + return Stream.of(StringUtils.split(value, "<")) + .map(s -> RegExUtils.removeAll(s, "\\b[a-z0-9_.]+\\.")) + .collect(Collectors.joining("<")); + } + + private String getSeeAlsoSummary(Set seeItems) { + return String.format("\nSee Also: %s\n", String.join(", ", seeItems)); + } + + private String getDeprecatedSummary(DeprecatedTree deprecatedTree) { + return String.format( + "\nDeprecated. %s\n\n", + replaceLinksAndCodes(deprecatedTree.getBody())); + } + + private String getSeeTagRef(SeeTree seeTree) { + String ref = + seeTree.getReference().stream().map(r -> String.valueOf(r)).collect(Collectors.joining("")); + // if it's already a tag, use that otherwise build xref tag + if (ref.matches("^<.+>(.|\n)*")) { + return ref.replaceAll("\n", "").replaceAll("( )+", " "); + } + return String.format( + "%1$s", ref); + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java index f2da89d6..ecb5ca2e 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java @@ -13,8 +13,10 @@ import com.sun.source.doctree.ParamTree; import com.sun.source.doctree.ReturnTree; import com.sun.source.doctree.ThrowsTree; -import jdk.javadoc.doclet.DocletEnvironment; - +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; @@ -22,30 +24,30 @@ import javax.lang.model.element.TypeElement; import javax.lang.model.element.VariableElement; import javax.lang.model.type.TypeKind; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; +import jdk.javadoc.doclet.DocletEnvironment; public class ClassItemsLookup extends BaseLookup { - private Utils utils; + private Utils utils; - public ClassItemsLookup(DocletEnvironment environment, ElementUtil elementUtil) { - super(environment); - utils = new Utils(environment, elementUtil); - } + public ClassItemsLookup(DocletEnvironment environment, ElementUtil elementUtil) { + super(environment); + utils = new Utils(environment, elementUtil); + } + + @Override + protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) { + String packageName = determinePackageName(element); + TypeElement classElement = (TypeElement) element.getEnclosingElement(); + String classQName = String.valueOf(classElement.getQualifiedName()); + String elementQName = String.valueOf(element); + String classQNameWithGenericsSupport = String.valueOf(classElement.asType()); + String classSNameWithGenericsSupport = + classQNameWithGenericsSupport.replace(packageName.concat("."), ""); + String uid = String.format("%s.%s", classQName, elementQName); - @Override - protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) { - String packageName = determinePackageName(element); - TypeElement classElement = (TypeElement) element.getEnclosingElement(); - String classQName = String.valueOf(classElement.getQualifiedName()); - String elementQName = String.valueOf(element); - String classQNameWithGenericsSupport = String.valueOf(classElement.asType()); - String classSNameWithGenericsSupport = classQNameWithGenericsSupport.replace(packageName.concat("."), ""); - String uid = String.format("%s.%s", classQName, elementQName); - - ExtendedMetadataFileItem result = new ExtendedMetadataFileItem(uid) {{ + ExtendedMetadataFileItem result = + new ExtendedMetadataFileItem(uid) { + { setId(elementQName); setParent(classQName); setHref(classQName + ".yml"); @@ -53,171 +55,202 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) { setType(determineType(element)); setPackageName(packageName); setSummary(determineComment(element)); - }}; - - String modifiers = element.getModifiers().stream().map(String::valueOf).collect(Collectors.joining(" ")); - if (element instanceof ExecutableElement) { - ExecutableElement exeElement = (ExecutableElement) element; - List parameters = extractParameters(exeElement); - String paramsString = parameters.stream() - .map(parameter -> String.format("%s %s", makeTypeShort(parameter.getType()), parameter.getId())) - .collect(Collectors.joining(", ")); - String nameWithoutBrackets = elementQName.replaceAll("\\(.*\\)", ""); - String methodName = String.format("%s(%s)", nameWithoutBrackets, paramsString); - - result.setName(methodName); - result.setMethodContent(String.format("%s %s %s", modifiers, - makeTypeShort(String.valueOf(exeElement.getReturnType())), result.getName())); - result.setConstructorContent(String.format("%s %s", modifiers, result.getName())); - result.setParameters(parameters); - result.setExceptions(extractExceptions(exeElement)); - result.setReturn(extractReturn(exeElement)); - if (exeElement.getKind() == ElementKind.METHOD) { - result.setOverridden(extractOverriddenUid(utils.overriddenMethod(exeElement))); - result.setSummary(determineComment(exeElement)); - } - } - result.setNameWithType(String.format("%s.%s", classSNameWithGenericsSupport, result.getName())); - result.setFullName(String.format("%s.%s", classQNameWithGenericsSupport, result.getName())); - result.setOverload(convertFullNameToOverload(result.getFullName())); - - if (element instanceof VariableElement) { - String type = makeTypeShort(String.valueOf(element.asType())); - result.setFieldContent(String.format("%s %s %s", modifiers, type, elementQName)); - result.setReturn(extractReturn((VariableElement) element)); - } - - return result; - } + } + }; - List extractParameters(ExecutableElement element) { - return element.getParameters().stream().map(o -> { - String paramName = String.valueOf(o.getSimpleName()); - String paramType = String.valueOf(o.asType()); - return new MethodParameter(paramName, paramType, extractParameterDescription(element, paramName)); - }).collect(Collectors.toList()); - } + String modifiers = + element.getModifiers().stream().map(String::valueOf).collect(Collectors.joining(" ")); + if (element instanceof ExecutableElement) { + ExecutableElement exeElement = (ExecutableElement) element; + List parameters = extractParameters(exeElement); + String paramsString = + parameters.stream() + .map( + parameter -> + String.format("%s %s", makeTypeShort(parameter.getType()), parameter.getId())) + .collect(Collectors.joining(", ")); + String nameWithoutBrackets = elementQName.replaceAll("\\(.*\\)", ""); + String methodName = String.format("%s(%s)", nameWithoutBrackets, paramsString); - String extractParameterDescription(ExecutableElement method, String paramName) { - return getDocCommentTree(method).map(docTree -> docTree.getBlockTags().stream() - .filter(o -> o.getKind() == Kind.PARAM) - .map(o -> (ParamTree) o) - .filter(o -> paramName.equals(String.valueOf(o.getName()))) - .map(o -> replaceLinksAndCodes(o.getDescription())) - .findFirst().orElse(null) - ).orElse(null); + result.setName(methodName); + result.setMethodContent( + String.format( + "%s %s %s", + modifiers, + makeTypeShort(String.valueOf(exeElement.getReturnType())), + result.getName())); + result.setConstructorContent(String.format("%s %s", modifiers, result.getName())); + result.setParameters(parameters); + result.setExceptions(extractExceptions(exeElement)); + result.setReturn(extractReturn(exeElement)); + if (exeElement.getKind() == ElementKind.METHOD) { + result.setOverridden(extractOverriddenUid(utils.overriddenMethod(exeElement))); + result.setSummary(determineComment(exeElement)); + } } + result.setNameWithType(String.format("%s.%s", classSNameWithGenericsSupport, result.getName())); + result.setFullName(String.format("%s.%s", classQNameWithGenericsSupport, result.getName())); + result.setOverload(convertFullNameToOverload(result.getFullName())); - List extractExceptions(ExecutableElement methodElement) { - return methodElement.getThrownTypes().stream().map(o -> { - String exceptionType = String.valueOf(o); - return new ExceptionItem(exceptionType, extractExceptionDescription(methodElement)); - }).collect(Collectors.toList()); + if (element instanceof VariableElement) { + String type = makeTypeShort(String.valueOf(element.asType())); + result.setFieldContent(String.format("%s %s %s", modifiers, type, elementQName)); + result.setReturn(extractReturn((VariableElement) element)); } - String extractExceptionDescription(ExecutableElement methodElement) { - return getDocCommentTree(methodElement).map(docTree -> docTree.getBlockTags().stream() - .filter(o -> o.getKind() == Kind.THROWS) - .map(o -> (ThrowsTree) o) - .map(o -> replaceLinksAndCodes(o.getDescription())) - .findFirst().orElse(null) - ).orElse(null); - } + return result; + } - Return extractReturn(ExecutableElement methodElement) { - if (methodElement.getReturnType().getKind() == TypeKind.VOID) { - return null; - } - return new Return(String.valueOf(methodElement.getReturnType()), extractReturnDescription(methodElement)); - } + List extractParameters(ExecutableElement element) { + return element.getParameters().stream() + .map( + o -> { + String paramName = String.valueOf(o.getSimpleName()); + String paramType = String.valueOf(o.asType()); + return new MethodParameter( + paramName, paramType, extractParameterDescription(element, paramName)); + }) + .collect(Collectors.toList()); + } - String extractReturnDescription(ExecutableElement methodElement) { - return getDocCommentTree(methodElement).map(docTree -> docTree.getBlockTags().stream() - .filter(o -> o.getKind() == Kind.RETURN) - .map(o -> (ReturnTree) o) - .map(o -> replaceLinksAndCodes(o.getDescription())) - .findFirst().orElse(null) - ).orElse(null); - } + String extractParameterDescription(ExecutableElement method, String paramName) { + return getDocCommentTree(method) + .map( + docTree -> + docTree.getBlockTags().stream() + .filter(o -> o.getKind() == Kind.PARAM) + .map(o -> (ParamTree) o) + .filter(o -> paramName.equals(String.valueOf(o.getName()))) + .map(o -> replaceLinksAndCodes(o.getDescription())) + .findFirst() + .orElse(null)) + .orElse(null); + } + + List extractExceptions(ExecutableElement methodElement) { + return methodElement.getThrownTypes().stream() + .map( + o -> { + String exceptionType = String.valueOf(o); + return new ExceptionItem(exceptionType, extractExceptionDescription(methodElement)); + }) + .collect(Collectors.toList()); + } + + String extractExceptionDescription(ExecutableElement methodElement) { + return getDocCommentTree(methodElement) + .map( + docTree -> + docTree.getBlockTags().stream() + .filter(o -> o.getKind() == Kind.THROWS) + .map(o -> (ThrowsTree) o) + .map(o -> replaceLinksAndCodes(o.getDescription())) + .findFirst() + .orElse(null)) + .orElse(null); + } - Return extractReturn(VariableElement fieldElement) { - return new Return(String.valueOf(fieldElement.asType())); + Return extractReturn(ExecutableElement methodElement) { + if (methodElement.getReturnType().getKind() == TypeKind.VOID) { + return null; } + return new Return( + String.valueOf(methodElement.getReturnType()), extractReturnDescription(methodElement)); + } - String convertFullNameToOverload(String fullName) { - return fullName.replaceAll("\\(.*\\)", "*"); + String extractReturnDescription(ExecutableElement methodElement) { + return getDocCommentTree(methodElement) + .map( + docTree -> + docTree.getBlockTags().stream() + .filter(o -> o.getKind() == Kind.RETURN) + .map(o -> (ReturnTree) o) + .map(o -> replaceLinksAndCodes(o.getDescription())) + .findFirst() + .orElse(null)) + .orElse(null); + } + + Return extractReturn(VariableElement fieldElement) { + return new Return(String.valueOf(fieldElement.asType())); + } + + String convertFullNameToOverload(String fullName) { + return fullName.replaceAll("\\(.*\\)", "*"); + } + + String extractOverriddenUid(ExecutableElement ovr) { + if (ovr != null) { + TypeElement te = utils.getEnclosingTypeElement(ovr); + String uid = te.getQualifiedName().toString().concat(".") + String.valueOf(ovr); + return uid; } - String extractOverriddenUid(ExecutableElement ovr) { - if (ovr != null) { - TypeElement te = utils.getEnclosingTypeElement(ovr); - String uid = te.getQualifiedName().toString().concat(".") + String.valueOf(ovr); - return uid; - } + return ""; + } - return ""; + private String determineComment(ExecutableElement methodElement) { + String inheritedInlineComment = getInheritedInlineCommentString(methodElement); + Optional docCommentTree = getDocCommentTree(methodElement); + if (docCommentTree.isPresent()) { + return replaceBlockTags(docCommentTree.get(), inheritedInlineComment); } + return inheritedInlineComment; + } - private String determineComment(ExecutableElement methodElement) { - String inheritedInlineComment = getInheritedInlineCommentString(methodElement); - Optional docCommentTree = getDocCommentTree(methodElement); - if (docCommentTree.isPresent()) { - return replaceBlockTags(docCommentTree.get(), inheritedInlineComment); - } - return inheritedInlineComment; + /** + * If the item being inherited from is declared from external compiled package, or is declared in + * the packages like java.lang.Object, comments may be not available as doclet resolves from byte + * code. + */ + private String getInheritedInlineCommentString(ExecutableElement exeElement) { + CommentHelper ch = getInheritedInlineTags(new CommentHelper(exeElement, utils)); + // Remove unresolved "@inheritDoc" tag. + List dctree = utils.removeBlockTag(ch.inlineTags, DocTree.Kind.INHERIT_DOC); + return replaceLinksAndCodes(dctree); + } + + private CommentHelper getInheritedInlineTags(CommentHelper input) { + CommentHelper output = input.copy(); + if (!output.hasInheritDocTag() && !output.isSimpleOverride()) { + return output; } - /** - * If the item being inherited from is declared from external compiled package, - * or is declared in the packages like java.lang.Object, - * comments may be not available as doclet resolves from byte code. - */ - private String getInheritedInlineCommentString(ExecutableElement exeElement) { - CommentHelper ch = getInheritedInlineTags(new CommentHelper(exeElement, utils)); - // Remove unresolved "@inheritDoc" tag. - List dctree = utils.removeBlockTag(ch.inlineTags, DocTree.Kind.INHERIT_DOC); - return replaceLinksAndCodes(dctree); + CommentHelper inheritedSearchInput = input.copy(); + ExecutableElement overriddenMethod = utils.overriddenMethod((ExecutableElement) input.element); + + if (overriddenMethod != null) { + inheritedSearchInput.element = overriddenMethod; + CommentHelper ch = getInheritedInlineTags(inheritedSearchInput); + if (!ch.isSimpleOverride()) { + output = output.inherit(ch); + } } - private CommentHelper getInheritedInlineTags(CommentHelper input) { - CommentHelper output = input.copy(); - if (!output.hasInheritDocTag() && !output.isSimpleOverride()) { - return output; - } - - CommentHelper inheritedSearchInput = input.copy(); - ExecutableElement overriddenMethod = utils.overriddenMethod((ExecutableElement) input.element); - - if (overriddenMethod != null) { - inheritedSearchInput.element = overriddenMethod; - CommentHelper ch = getInheritedInlineTags(inheritedSearchInput); - if (!ch.isSimpleOverride()) { - output = output.inherit(ch); - } - } - - TypeElement encl = utils.getEnclosingTypeElement(input.element); - List implementedMethods = utils.getImplementedMethods(input.element.toString(), encl, new ArrayList()); - for (Element implementedMethod : implementedMethods) { - inheritedSearchInput.element = implementedMethod; - CommentHelper ch = getInheritedInlineTags(inheritedSearchInput); - if (!ch.isSimpleOverride()) { - output = output.inherit(ch); - } - } - - return output; + TypeElement encl = utils.getEnclosingTypeElement(input.element); + List implementedMethods = + utils.getImplementedMethods(input.element.toString(), encl, new ArrayList()); + for (Element implementedMethod : implementedMethods) { + inheritedSearchInput.element = implementedMethod; + CommentHelper ch = getInheritedInlineTags(inheritedSearchInput); + if (!ch.isSimpleOverride()) { + output = output.inherit(ch); + } } - public String extractJavaType(Element element) { - if (element.getModifiers().contains(Modifier.STATIC)) { - if (element.getKind().equals(ElementKind.METHOD)) { - return "static method"; - } - if (element.getKind().equals(ElementKind.FIELD) || element.getKind().equals(ElementKind.ENUM_CONSTANT)) { - return "static field"; - } - } - return null; + return output; + } + + public String extractJavaType(Element element) { + if (element.getModifiers().contains(Modifier.STATIC)) { + if (element.getKind().equals(ElementKind.METHOD)) { + return "static method"; + } + if (element.getKind().equals(ElementKind.FIELD) + || element.getKind().equals(ElementKind.ENUM_CONSTANT)) { + return "static field"; + } } + return null; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java index 3f1fcd9a..5d3889f3 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java @@ -5,16 +5,6 @@ import com.microsoft.model.TypeParameter; import com.microsoft.util.ElementUtil; import com.microsoft.util.Utils; -import java.util.Collections; -import jdk.javadoc.doclet.DocletEnvironment; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; - -import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; -import javax.lang.model.element.TypeElement; -import javax.lang.model.type.TypeKind; -import javax.lang.model.type.TypeMirror; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -22,199 +12,225 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.TypeElement; +import javax.lang.model.type.TypeKind; +import javax.lang.model.type.TypeMirror; +import jdk.javadoc.doclet.DocletEnvironment; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; public class ClassLookup extends BaseLookup { - private static final String JAVA_LANG_OBJECT = "java.lang.Object"; - - private final ElementUtil elementUtil; - - public ClassLookup(DocletEnvironment environment, ElementUtil elementUtil) { - super(environment); - this.elementUtil = elementUtil; - } - - @Override - protected ExtendedMetadataFileItem buildMetadataFileItem(TypeElement classElement) { - List inheritedMethods = new ArrayList<>(); - - String packageName = determinePackageName(classElement); - String classQName = String.valueOf(classElement.getQualifiedName()); - String classSName = String.valueOf(classElement.getSimpleName()); - String classQNameWithGenericsSupport = String.valueOf(classElement.asType()); - String classSNameWithGenericsSupport = classQNameWithGenericsSupport.replace(packageName.concat("."), ""); - - ExtendedMetadataFileItem result = new ExtendedMetadataFileItem(classQName); - result.setId(classSName); - result.setParent(packageName); - result.setHref(classQName + ".yml"); - result.setName(classSNameWithGenericsSupport); - result.setNameWithType(classSNameWithGenericsSupport); - result.setFullName(classQNameWithGenericsSupport); - result.setType(determineType(classElement)); - result.setPackageName(packageName); - result.setSummary(determineComment(classElement)); - result.setSuperclass(determineNestedSuperclass(classElement, result, inheritedMethods)); - result.setTypeParameters(determineTypeParameters(classElement)); - result.setInheritedMethods(determineInheritedMembers(inheritedMethods)); - result.setJavaType(extractJavaType(classElement)); - populateContent(classElement, classSNameWithGenericsSupport, result); - result.setTocName(classQName.replace(packageName.concat("."), "")); - return result; - } - - void populateContent(TypeElement classElement, String shortNameWithGenericsSupport, - ExtendedMetadataFileItem container) { - String type = elementKindLookup.get(classElement.getKind()); - String result = String.format("%s %s %s", - classElement.getModifiers().stream().map(String::valueOf) + private static final String JAVA_LANG_OBJECT = "java.lang.Object"; + + private final ElementUtil elementUtil; + + public ClassLookup(DocletEnvironment environment, ElementUtil elementUtil) { + super(environment); + this.elementUtil = elementUtil; + } + + @Override + protected ExtendedMetadataFileItem buildMetadataFileItem(TypeElement classElement) { + List inheritedMethods = new ArrayList<>(); + + String packageName = determinePackageName(classElement); + String classQName = String.valueOf(classElement.getQualifiedName()); + String classSName = String.valueOf(classElement.getSimpleName()); + String classQNameWithGenericsSupport = String.valueOf(classElement.asType()); + String classSNameWithGenericsSupport = + classQNameWithGenericsSupport.replace(packageName.concat("."), ""); + + ExtendedMetadataFileItem result = new ExtendedMetadataFileItem(classQName); + result.setId(classSName); + result.setParent(packageName); + result.setHref(classQName + ".yml"); + result.setName(classSNameWithGenericsSupport); + result.setNameWithType(classSNameWithGenericsSupport); + result.setFullName(classQNameWithGenericsSupport); + result.setType(determineType(classElement)); + result.setPackageName(packageName); + result.setSummary(determineComment(classElement)); + result.setSuperclass(determineNestedSuperclass(classElement, result, inheritedMethods)); + result.setTypeParameters(determineTypeParameters(classElement)); + result.setInheritedMethods(determineInheritedMembers(inheritedMethods)); + result.setJavaType(extractJavaType(classElement)); + populateContent(classElement, classSNameWithGenericsSupport, result); + result.setTocName(classQName.replace(packageName.concat("."), "")); + return result; + } + + void populateContent( + TypeElement classElement, + String shortNameWithGenericsSupport, + ExtendedMetadataFileItem container) { + String type = elementKindLookup.get(classElement.getKind()); + String result = + String.format( + "%s %s %s", + classElement.getModifiers().stream() + .map(String::valueOf) .filter(modifier -> !("Interface".equals(type) && "abstract".equals(modifier))) - .filter(modifier -> !("Enum".equals(type) && ("static".equals(modifier) || "final".equals(modifier)))) + .filter( + modifier -> + !("Enum".equals(type) + && ("static".equals(modifier) || "final".equals(modifier)))) .collect(Collectors.joining(" ")), - StringUtils.lowerCase(type), shortNameWithGenericsSupport); + StringUtils.lowerCase(type), + shortNameWithGenericsSupport); - String superclass = determineSuperclass(classElement); - if (superclass != null && !JAVA_LANG_OBJECT.equals(superclass)) { - result += " extends " + makeTypeShort(superclass); + String superclass = determineSuperclass(classElement); + if (superclass != null && !JAVA_LANG_OBJECT.equals(superclass)) { + result += " extends " + makeTypeShort(superclass); - addSuperclassToReferencesMap(superclass, container); - } - - List interfaces = classElement.getInterfaces(); - if (CollectionUtils.isNotEmpty(interfaces)) { - String prefix = (classElement.getKind() == ElementKind.INTERFACE) ? " extends " : " implements "; - result += prefix + interfaces.stream().map(String::valueOf).map(this::makeTypeShort) - .collect(Collectors.joining(", ")); - - container.setInterfaces(interfaces.stream() - .map(String::valueOf) - .collect(Collectors.toList())); - - addInterfacesToReferencesMap(interfaces, container); - - } - addInheritedMethodsToReferencesMap(container); - container.setContent(result); + addSuperclassToReferencesMap(superclass, container); } - void addSuperclassToReferencesMap(String superclass, ExtendedMetadataFileItem container) { - container.addReferences(Set.of(new MetadataFileItem(superclass, makeTypeShort(superclass), false))); + List interfaces = classElement.getInterfaces(); + if (CollectionUtils.isNotEmpty(interfaces)) { + String prefix = + (classElement.getKind() == ElementKind.INTERFACE) ? " extends " : " implements "; + result += + prefix + + interfaces.stream() + .map(String::valueOf) + .map(this::makeTypeShort) + .collect(Collectors.joining(", ")); + + container.setInterfaces( + interfaces.stream().map(String::valueOf).collect(Collectors.toList())); + + addInterfacesToReferencesMap(interfaces, container); } - - void addInheritedMethodsToReferencesMap(ExtendedMetadataFileItem container) { - container.addReferences(container.getInheritedMethods().stream() + addInheritedMethodsToReferencesMap(container); + container.setContent(result); + } + + void addSuperclassToReferencesMap(String superclass, ExtendedMetadataFileItem container) { + container.addReferences( + Set.of(new MetadataFileItem(superclass, makeTypeShort(superclass), false))); + } + + void addInheritedMethodsToReferencesMap(ExtendedMetadataFileItem container) { + container.addReferences( + container.getInheritedMethods().stream() .map(o -> new MetadataFileItem(o, makeTypeShort(o), false)) - .collect(Collectors.toSet()) - ); - } + .collect(Collectors.toSet())); + } - void addInterfacesToReferencesMap(List interfaces, ExtendedMetadataFileItem container) { - container.addReferences(interfaces.stream() + void addInterfacesToReferencesMap( + List interfaces, ExtendedMetadataFileItem container) { + container.addReferences( + interfaces.stream() .map(String::valueOf) .map(o -> new MetadataFileItem(o, makeTypeShort(o), false)) - .collect(Collectors.toSet()) - ); - } + .collect(Collectors.toSet())); + } - String determineSuperclass(TypeElement classElement) { - TypeMirror superclass = classElement.getSuperclass(); - if (superclass.getKind() == TypeKind.NONE) { - return null; - } - return String.valueOf(superclass); + String determineSuperclass(TypeElement classElement) { + TypeMirror superclass = classElement.getSuperclass(); + if (superclass.getKind() == TypeKind.NONE) { + return null; } + return String.valueOf(superclass); + } - List determineNestedSuperclass(TypeElement classElement, ExtendedMetadataFileItem result, List inheritedMethods) { - List nestedList = new ArrayList<>(); + List determineNestedSuperclass( + TypeElement classElement, + ExtendedMetadataFileItem result, + List inheritedMethods) { + List nestedList = new ArrayList<>(); - if (result.getSuperclass() != null) { - nestedList = result.getSuperclass(); - } + if (result.getSuperclass() != null) { + nestedList = result.getSuperclass(); + } - TypeMirror superclass = classElement.getSuperclass(); - if (superclass.getKind() != TypeKind.NONE) { - TypeElement superClassElement = (TypeElement) environment.getTypeUtils().asElement(superclass); + TypeMirror superclass = classElement.getSuperclass(); + if (superclass.getKind() != TypeKind.NONE) { + TypeElement superClassElement = + (TypeElement) environment.getTypeUtils().asElement(superclass); - nestedList.add(superClassElement.getQualifiedName().toString()); - result.setSuperclass(nestedList); - appendInheritedMethods(superClassElement, inheritedMethods); + nestedList.add(superClassElement.getQualifiedName().toString()); + result.setSuperclass(nestedList); + appendInheritedMethods(superClassElement, inheritedMethods); - determineNestedSuperclass(superClassElement, result, inheritedMethods); - } - return nestedList; + determineNestedSuperclass(superClassElement, result, inheritedMethods); } - - List determineTypeParameters(TypeElement element) { - return element.getTypeParameters().stream() - .map(typeParameter -> new TypeParameter(String.valueOf(typeParameter))) - .collect(Collectors.toList()); + return nestedList; + } + + List determineTypeParameters(TypeElement element) { + return element.getTypeParameters().stream() + .map(typeParameter -> new TypeParameter(String.valueOf(typeParameter))) + .collect(Collectors.toList()); + } + + void appendInheritedMethods( + TypeElement element, List inheritedMethods) { + List members = elementUtil.getEnclosedElements(element); + Integer level = Optional.ofNullable(getMaxNestedLevel(inheritedMethods)).orElse(0); + + for (Element m : members) { + if (m.getKind() == ElementKind.METHOD && !Utils.isPrivateOrPackagePrivate(m)) { + String uid = element.getQualifiedName().toString().concat(".") + String.valueOf(m); + + ExtendedMetadataFileItem item = new ExtendedMetadataFileItem(uid); + item.setName(String.valueOf(m)); + item.setNestedLevel(level + 1); + + inheritedMethods.add(item); + } } + } - void appendInheritedMethods(TypeElement element, List inheritedMethods) { - List members = elementUtil.getEnclosedElements(element); - Integer level = Optional.ofNullable(getMaxNestedLevel(inheritedMethods)) - .orElse(0); - - for (Element m : members) { - if (m.getKind() == ElementKind.METHOD && !Utils.isPrivateOrPackagePrivate(m)) { - String uid = element.getQualifiedName().toString().concat(".") + String.valueOf(m); + Integer getMaxNestedLevel(List inheritedMethods) { + Integer level = 0; - ExtendedMetadataFileItem item = new ExtendedMetadataFileItem(uid); - item.setName(String.valueOf(m)); - item.setNestedLevel(level + 1); - - inheritedMethods.add(item); - } - } + if (inheritedMethods.size() > 0) { + level = + inheritedMethods.stream() + .mapToInt(v -> v.getNestedLevel()) + .max() + .orElseThrow(NoSuchElementException::new); } - - Integer getMaxNestedLevel(List inheritedMethods) { - Integer level = 0; - - if (inheritedMethods.size() > 0) { - level = inheritedMethods - .stream() - .mapToInt(v -> v.getNestedLevel()) - .max().orElseThrow(NoSuchElementException::new); + return level; + } + + List determineInheritedMembers(List inheritedMethods) { + + if (inheritedMethods.size() > 0) { + HashMap map = new HashMap<>(); + for (ExtendedMetadataFileItem item : inheritedMethods) { + String key = item.getName(); + + if (map.containsKey(key) && map.get(key).getNestedLevel() > item.getNestedLevel()) { + // child class will have smaller than superclass, we only need the nearest methods + // inherited with same signature + map.put(key, item); + } else if (!map.containsKey(key)) { + map.put(key, item); } - return level; - } + } + List methods = + map.values().stream().map(x -> x.getUid()).collect(Collectors.toList()); - List determineInheritedMembers(List inheritedMethods) { - - if (inheritedMethods.size() > 0) { - HashMap map = new HashMap<>(); - for (ExtendedMetadataFileItem item : inheritedMethods - ) { - String key = item.getName(); - - if (map.containsKey(key) && map.get(key).getNestedLevel() > item.getNestedLevel()) { - // child class will have smaller than superclass, we only need the nearest methods inherited with same signature - map.put(key, item); - } else if (!map.containsKey(key)) { - map.put(key, item); - } - } - List methods = map.values() - .stream() - .map(x -> x.getUid()) - .collect(Collectors.toList()); - - return methods; - } - return new ArrayList<>(); + return methods; } + return new ArrayList<>(); + } - public String extractJavaType(TypeElement element) { - String superClass = determineSuperclass(element); - if (superClass != null && superClass.contains("Exception")) { - return "exception"; - } + public String extractJavaType(TypeElement element) { + String superClass = determineSuperclass(element); + if (superClass != null && superClass.contains("Exception")) { + return "exception"; + } - String javatype = element.getKind().name().toLowerCase().replaceAll("_",""); - if (javatype.equals("annotationtype")){ - return javatype; - } - return null; + String javatype = element.getKind().name().toLowerCase().replaceAll("_", ""); + if (javatype.equals("annotationtype")) { + return javatype; } -} \ No newline at end of file + return null; + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java index 8f939d49..a5953895 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java @@ -2,54 +2,53 @@ import com.microsoft.lookup.model.ExtendedMetadataFileItem; import com.microsoft.model.Status; -import jdk.javadoc.doclet.DocletEnvironment; - import javax.lang.model.element.PackageElement; +import jdk.javadoc.doclet.DocletEnvironment; public class PackageLookup extends BaseLookup { - public PackageLookup(DocletEnvironment environment) { - super(environment); + public PackageLookup(DocletEnvironment environment) { + super(environment); + } + + @Override + protected ExtendedMetadataFileItem buildMetadataFileItem(PackageElement packageElement) { + String qName = String.valueOf(packageElement.getQualifiedName()); + String sName = String.valueOf(packageElement.getSimpleName()); + + ExtendedMetadataFileItem result = new ExtendedMetadataFileItem(qName); + result.setId(sName); + result.setHref(qName + ".yml"); + result.setName(qName); + result.setNameWithType(qName); + result.setFullName(qName); + result.setType(determineType(packageElement)); + result.setJavaType(extractJavaType(packageElement)); + result.setSummary(determineComment(packageElement)); + result.setContent(determinePackageContent(packageElement)); + return result; + } + + public String extractStatus(PackageElement packageElement) { + String name = String.valueOf(packageElement.getQualifiedName()); + if (name.contains(Status.ALPHA.toString())) { + return Status.ALPHA.toString(); } - - @Override - protected ExtendedMetadataFileItem buildMetadataFileItem(PackageElement packageElement) { - String qName = String.valueOf(packageElement.getQualifiedName()); - String sName = String.valueOf(packageElement.getSimpleName()); - - ExtendedMetadataFileItem result = new ExtendedMetadataFileItem(qName); - result.setId(sName); - result.setHref(qName + ".yml"); - result.setName(qName); - result.setNameWithType(qName); - result.setFullName(qName); - result.setType(determineType(packageElement)); - result.setJavaType(extractJavaType(packageElement)); - result.setSummary(determineComment(packageElement)); - result.setContent(determinePackageContent(packageElement)); - return result; + if (name.contains(Status.BETA.toString())) { + return Status.BETA.toString(); } + return null; + } - public String extractStatus(PackageElement packageElement) { - String name = String.valueOf(packageElement.getQualifiedName()); - if (name.contains(Status.ALPHA.toString())) { - return Status.ALPHA.toString(); - } - if (name.contains(Status.BETA.toString())) { - return Status.BETA.toString(); - } - return null; - } - - String determinePackageContent(PackageElement packageElement) { - return "package " + packageElement.getQualifiedName(); - } + String determinePackageContent(PackageElement packageElement) { + return "package " + packageElement.getQualifiedName(); + } - public String extractJavaType(PackageElement element) { - String javaType = element.getKind().name().toLowerCase(); - if (javaType.equals("package")) { - return javaType; - } - return null; + public String extractJavaType(PackageElement element) { + String javaType = element.getKind().name().toLowerCase(); + if (javaType.equals("package")) { + return javaType; } + return null; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/model/ExtendedMetadataFileItem.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/model/ExtendedMetadataFileItem.java index dea5e61a..c4238280 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/model/ExtendedMetadataFileItem.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/model/ExtendedMetadataFileItem.java @@ -8,112 +8,114 @@ import java.util.List; import java.util.Set; -/** - * Just container to keep cached precalculated values for lookup - */ +/** Just container to keep cached precalculated values for lookup */ public class ExtendedMetadataFileItem extends MetadataFileItem { - private String methodContent; - private String fieldContent; - private String constructorContent; - private List parameters; - private Return returnValue; - private String content; - private List typeParameters; - private List superclass; - private String tocName; - private Set references = new LinkedHashSet<>(); - private Integer nestedLevel; - - public ExtendedMetadataFileItem(String uid) { - super(uid); - } - - public String getMethodContent() { - return methodContent; - } - - public void setMethodContent(String methodContent) { - this.methodContent = methodContent; - } - - public String getFieldContent() { - return fieldContent; - } - - public void setFieldContent(String fieldContent) { - this.fieldContent = fieldContent; - } - - public String getConstructorContent() { - return constructorContent; - } - - public void setConstructorContent(String constructorContent) { - this.constructorContent = constructorContent; - } - - public List getParameters() { - return parameters; - } - - public Integer getNestedLevel() {return nestedLevel;} - - public void setNestedLevel(Integer level) {this.nestedLevel = level;} - - @Override - public void setParameters(List parameters) { - this.parameters = parameters; - } - - public Return getReturn() { - return returnValue; - } - - @Override - public void setReturn(Return returnValue) { - this.returnValue = returnValue; - } - - public String getContent() { - return content; - } - - @Override - public void setContent(String content) { - this.content = content; - } - - public List getTypeParameters() { - return typeParameters; - } - - @Override - public void setTypeParameters(List typeParameters) { - this.typeParameters = typeParameters; - } - - public List getSuperclass() { - return superclass; - } - - public void setSuperclass(List superclass) { - this.superclass = superclass; - } - - public void setTocName(String tocName) { - this.tocName = tocName; - } - - public String getTocName() { - return tocName; - } - - public void addReferences(Set references) { - this.references.addAll(references); - } - - public Set getReferences() { - return references; - } + private String methodContent; + private String fieldContent; + private String constructorContent; + private List parameters; + private Return returnValue; + private String content; + private List typeParameters; + private List superclass; + private String tocName; + private Set references = new LinkedHashSet<>(); + private Integer nestedLevel; + + public ExtendedMetadataFileItem(String uid) { + super(uid); + } + + public String getMethodContent() { + return methodContent; + } + + public void setMethodContent(String methodContent) { + this.methodContent = methodContent; + } + + public String getFieldContent() { + return fieldContent; + } + + public void setFieldContent(String fieldContent) { + this.fieldContent = fieldContent; + } + + public String getConstructorContent() { + return constructorContent; + } + + public void setConstructorContent(String constructorContent) { + this.constructorContent = constructorContent; + } + + public List getParameters() { + return parameters; + } + + public Integer getNestedLevel() { + return nestedLevel; + } + + public void setNestedLevel(Integer level) { + this.nestedLevel = level; + } + + @Override + public void setParameters(List parameters) { + this.parameters = parameters; + } + + public Return getReturn() { + return returnValue; + } + + @Override + public void setReturn(Return returnValue) { + this.returnValue = returnValue; + } + + public String getContent() { + return content; + } + + @Override + public void setContent(String content) { + this.content = content; + } + + public List getTypeParameters() { + return typeParameters; + } + + @Override + public void setTypeParameters(List typeParameters) { + this.typeParameters = typeParameters; + } + + public List getSuperclass() { + return superclass; + } + + public void setSuperclass(List superclass) { + this.superclass = superclass; + } + + public void setTocName(String tocName) { + this.tocName = tocName; + } + + public String getTocName() { + return tocName; + } + + public void addReferences(Set references) { + this.references.addAll(references); + } + + public Set getReferences() { + return references; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ExceptionItem.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ExceptionItem.java index b833f6bd..2fda6b0f 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ExceptionItem.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ExceptionItem.java @@ -2,19 +2,19 @@ public class ExceptionItem { - private final String type; - private final String description; + private final String type; + private final String description; - public ExceptionItem(String type, String description) { - this.type = type; - this.description = description; - } + public ExceptionItem(String type, String description) { + this.type = type; + this.description = description; + } - public String getType() { - return type; - } + public String getType() { + return type; + } - public String getDescription() { - return description; - } + public String getDescription() { + return description; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Guide.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Guide.java index 55708f69..ebd071ce 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Guide.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Guide.java @@ -24,19 +24,19 @@ // name: name, // uid: package.name,...]] public class Guide { - private final String name; - private final String href; + private final String name; + private final String href; - public Guide(String name, String href) { - this.name = name; - this.href = href; - } + public Guide(String name, String href) { + this.name = name; + this.href = href; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public String getHref() { - return href; - } -} \ No newline at end of file + public String getHref() { + return href; + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/KindTitle.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/KindTitle.java index b098336c..65f438a7 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/KindTitle.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/KindTitle.java @@ -16,13 +16,19 @@ package com.microsoft.model; public class KindTitle { - private final String elementKind; - private final String title; + private final String elementKind; + private final String title; - public KindTitle(String elementKind, String title) { - this.elementKind = elementKind; - this.title = title; - } - public String getElementKind() { return elementKind; } - public String getTitle() { return title; } + public KindTitle(String elementKind, String title) { + this.elementKind = elementKind; + this.title = title; + } + + public String getElementKind() { + return elementKind; + } + + public String getTitle() { + return title; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFile.java index 15e7ebe6..c47de634 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFile.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.microsoft.util.YamlUtil; - import java.io.File; import java.util.LinkedHashSet; import java.util.Set; @@ -10,45 +9,45 @@ public class MetadataFile implements YmlFile { - private final static String METADATA_FILE_HEADER = "### YamlMime:ManagedReference\n"; - private final String outputPath; - private String fileName; - private Set items = new LinkedHashSet<>(); - private Set references = new LinkedHashSet<>(); - - public MetadataFile(String outputPath, String fileName) { - this.outputPath = outputPath; - this.fileName = fileName; - } - - public Set getItems() { - return items; - } - - public Set getReferences() { - return references; - } - - @JsonIgnore - @Override - public String getFileContent() { - Set sortedSet = new TreeSet<>(this.items); - this.items = sortedSet; - return METADATA_FILE_HEADER + YamlUtil.objectToYamlString(this); - } - - @JsonIgnore - @Override - public String getFileNameWithPath() { - return outputPath + File.separator + fileName; - } - - @JsonIgnore - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } + private static final String METADATA_FILE_HEADER = "### YamlMime:ManagedReference\n"; + private final String outputPath; + private String fileName; + private Set items = new LinkedHashSet<>(); + private Set references = new LinkedHashSet<>(); + + public MetadataFile(String outputPath, String fileName) { + this.outputPath = outputPath; + this.fileName = fileName; + } + + public Set getItems() { + return items; + } + + public Set getReferences() { + return references; + } + + @JsonIgnore + @Override + public String getFileContent() { + Set sortedSet = new TreeSet<>(this.items); + this.items = sortedSet; + return METADATA_FILE_HEADER + YamlUtil.objectToYamlString(this); + } + + @JsonIgnore + @Override + public String getFileNameWithPath() { + return outputPath + File.separator + fileName; + } + + @JsonIgnore + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java index a608148c..90192004 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java @@ -2,282 +2,318 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import org.apache.commons.lang3.RegExUtils; - import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.apache.commons.lang3.RegExUtils; -@JsonPropertyOrder({"uid", "id", "parent", "children", "href", "langs", "isExternal", "name", "nameWithType", - "fullName", "overload", "overridden", "type", "javatype", "package", "summary", "syntax", "inheritance", "implements", "exceptions", - "spec.java", "inheritedMembers", "status"}) +@JsonPropertyOrder({ + "uid", + "id", + "parent", + "children", + "href", + "langs", + "isExternal", + "name", + "nameWithType", + "fullName", + "overload", + "overridden", + "type", + "javatype", + "package", + "summary", + "syntax", + "inheritance", + "implements", + "exceptions", + "spec.java", + "inheritedMembers", + "status" +}) public class MetadataFileItem implements Comparable { - private final String uid; - private String id; - private String parent; - private List children = new ArrayList<>(); - private String href; - private String[] langs; - private String name; - private String nameWithType; - private String fullName; - private String overload; - private String overridden; - private String type; - private String javatype; - @JsonProperty("package") - private String packageName; - private String summary; - private Syntax syntax; - private List inheritance; - @JsonProperty("implements") - private List interfaces; - private List exceptions; - private boolean isExternal; - @JsonProperty("spec.java") - private List specForJava = new ArrayList<>(); - @JsonProperty("inheritedMembers") - private List inheritedMethods = new ArrayList<>(); - private String status; - - @Override - public int compareTo(MetadataFileItem item) { - return this.getUid().compareTo(item.getUid()); - } + private final String uid; + private String id; + private String parent; + private List children = new ArrayList<>(); + private String href; + private String[] langs; + private String name; + private String nameWithType; + private String fullName; + private String overload; + private String overridden; + private String type; + private String javatype; + + @JsonProperty("package") + private String packageName; + + private String summary; + private Syntax syntax; + private List inheritance; + + @JsonProperty("implements") + private List interfaces; + + private List exceptions; + private boolean isExternal; + + @JsonProperty("spec.java") + private List specForJava = new ArrayList<>(); + + @JsonProperty("inheritedMembers") + private List inheritedMethods = new ArrayList<>(); + + private String status; + + @Override + public int compareTo(MetadataFileItem item) { + return this.getUid().compareTo(item.getUid()); + } + + public MetadataFileItem(String[] langs, String uid) { + this(uid); + this.langs = langs; + } + + public MetadataFileItem(String uid) { + this.uid = uid; + } + + public MetadataFileItem(String uid, String name, boolean isExternal) { + this(uid); + this.name = name; + this.nameWithType = name; + this.fullName = uid; + this.isExternal = isExternal; + } + + public MetadataFileItem(String uid, List specs) { + this(uid); + this.specForJava = specs; + } + + public String getUid() { + return uid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getParent() { + return parent; + } + + public void setParent(String parent) { + this.parent = parent; + } + + public List getChildren() { + Collections.sort(children); + return children; + } + + public String getHref() { + return href; + } + + public void setHref(String href) { + this.href = href; + } + + public String[] getLangs() { + return langs; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNameWithType() { + return nameWithType; + } - public MetadataFileItem(String[] langs, String uid) { - this(uid); - this.langs = langs; - } + public void setNameWithType(String nameWithType) { + this.nameWithType = nameWithType; + } - public MetadataFileItem(String uid) { - this.uid = uid; - } + public String getFullName() { + return fullName; + } - public MetadataFileItem(String uid, String name, boolean isExternal) { - this(uid); - this.name = name; - this.nameWithType = name; - this.fullName = uid; - this.isExternal = isExternal; - } + public void setFullName(String fullName) { + this.fullName = fullName; + } - public MetadataFileItem(String uid, List specs) { - this(uid); - this.specForJava = specs; - } + public String getOverload() { + return overload; + } - public String getUid() { - return uid; - } + public void setOverload(String overload) { + this.overload = handleGenericForOverLoad(overload); + } + + public String getType() { + return type; + } - public String getId() { - return id; - } + public String getJavaType() { + return javatype; + } - public void setId(String id) { - this.id = id; - } + public void setType(String type) { + this.type = type; + } - public String getParent() { - return parent; - } + public void setJavaType(String javaType) { + this.javatype = javaType; + } + + public String getPackageName() { + return packageName; + } - public void setParent(String parent) { - this.parent = parent; - } + public void setPackageName(String packageName) { + this.packageName = packageName; + } - public List getChildren() { - Collections.sort(children); - return children; - } + public String getSummary() { + return summary; + } - public String getHref() { - return href; - } + public void setSummary(String summary) { + this.summary = summary; + } - public void setHref(String href) { - this.href = href; - } + public Syntax getSyntax() { + return syntax; + } - public String[] getLangs() { - return langs; - } + public void setSyntax(Syntax syntax) { + this.syntax = syntax; + } - public String getName() { - return name; - } + public List getInheritance() { + return inheritance; + } - public void setName(String name) { - this.name = name; - } + public void setInheritance(List superclass) { + this.inheritance = (superclass == null) ? null : superclass; + } - public String getNameWithType() { - return nameWithType; - } + public List getInterfaces() { + return interfaces; + } - public void setNameWithType(String nameWithType) { - this.nameWithType = nameWithType; - } + public void setInheritedMethods(List inheritedMethods) { + this.inheritedMethods = (inheritedMethods == null) ? null : inheritedMethods; + } - public String getFullName() { - return fullName; - } + public List getInheritedMethods() { + return inheritedMethods; + } - public void setFullName(String fullName) { - this.fullName = fullName; - } + public List getSpecForJava() { + return specForJava; + } - public String getOverload() { - return overload; - } + public void setInterfaces(List interfaces) { + this.interfaces = interfaces; + } - public void setOverload(String overload) { - this.overload = handleGenericForOverLoad(overload); - } + public List getExceptions() { + return exceptions; + } - public String getType() { - return type; - } + public void setExceptions(List exceptions) { + this.exceptions = exceptions; + } - public String getJavaType() { - return javatype; + public void setContent(String content) { + if (syntax == null) { + syntax = new Syntax(); } + syntax.setContent(content); + } - public void setType(String type) { - this.type = type; + public void setTypeParameters(List typeParameters) { + if (syntax == null) { + syntax = new Syntax(); } + syntax.setTypeParameters(typeParameters); + } - public void setJavaType(String javaType) { - this.javatype = javaType; + public void setParameters(List parameters) { + if (syntax == null) { + syntax = new Syntax(); } + syntax.setParameters(parameters); + } - public String getPackageName() { - return packageName; + public void setReturn(Return returnValue) { + if (syntax == null) { + syntax = new Syntax(); } + syntax.setReturnValue(returnValue); + } - public void setPackageName(String packageName) { - this.packageName = packageName; - } + public void setOverridden(String overridden) { + this.overridden = overridden; + } - public String getSummary() { - return summary; - } + public String getOverridden() { + return overridden; + } - public void setSummary(String summary) { - this.summary = summary; + @Override + public boolean equals(Object o) { + if (this == o) { + return true; } - public Syntax getSyntax() { - return syntax; + if (o == null || getClass() != o.getClass()) { + return false; } - public void setSyntax(Syntax syntax) { - this.syntax = syntax; - } + MetadataFileItem that = (MetadataFileItem) o; - public List getInheritance() { - return inheritance; - } + return uid.equals(that.uid); + } - public void setInheritance(List superclass) { - this.inheritance = (superclass == null) ? null : superclass; - } + @Override + public int hashCode() { + return uid.hashCode(); + } - public List getInterfaces() { - return interfaces; - } + public Boolean getIsExternal() { + return isExternal ? true : null; + } - public void setInheritedMethods(List inheritedMethods) { - this.inheritedMethods = (inheritedMethods == null) ? null : inheritedMethods; - } + public void setIsExternal(boolean external) { + isExternal = external; + } - public List getInheritedMethods() { - return inheritedMethods; - } - - public List getSpecForJava() { - return specForJava; - } - - public void setInterfaces(List interfaces) { - this.interfaces = interfaces; - } - - public List getExceptions() { - return exceptions; - } - - public void setExceptions(List exceptions) { - this.exceptions = exceptions; - } - - public void setContent(String content) { - if (syntax == null) { - syntax = new Syntax(); - } - syntax.setContent(content); - } - - public void setTypeParameters(List typeParameters) { - if (syntax == null) { - syntax = new Syntax(); - } - syntax.setTypeParameters(typeParameters); - } - - public void setParameters(List parameters) { - if (syntax == null) { - syntax = new Syntax(); - } - syntax.setParameters(parameters); - } - - public void setReturn(Return returnValue) { - if (syntax == null) { - syntax = new Syntax(); - } - syntax.setReturnValue(returnValue); - } - - public void setOverridden(String overridden) { - this.overridden = overridden; - } - - public String getOverridden() { - return overridden; - } - - @Override - public boolean equals(Object o) { - if (this == o) { return true; } - - if (o == null || getClass() != o.getClass()) { return false; } - - MetadataFileItem that = (MetadataFileItem) o; - - return uid.equals(that.uid); - } - - @Override - public int hashCode() { - return uid.hashCode(); - } - - public Boolean getIsExternal() { - return isExternal ? true : null; - } - - public void setIsExternal(boolean external) { - isExternal = external; - } - - public String handleGenericForOverLoad(String value) { - return RegExUtils.removeAll(value, "<\\w+(,\\s*\\w+)*>"); - } + public String handleGenericForOverLoad(String value) { + return RegExUtils.removeAll(value, "<\\w+(,\\s*\\w+)*>"); + } - public String getStatus() { return status; } + public String getStatus() { + return status; + } - public void setStatus(String status) { this.status = status; } + public void setStatus(String status) { + this.status = status; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MethodParameter.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MethodParameter.java index 2c6d5c05..981805a0 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MethodParameter.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MethodParameter.java @@ -2,29 +2,29 @@ public class MethodParameter { - private final String id; - private final String type; - private String description; + private final String id; + private final String type; + private String description; - public MethodParameter(String id, String type, String description) { - this.id = id; - this.type = type; - this.description = description; - } + public MethodParameter(String id, String type, String description) { + this.id = id; + this.type = type; + this.description = description; + } - public String getId() { - return id; - } + public String getId() { + return id; + } - public String getType() { - return type; - } + public String getType() { + return type; + } - public String getDescription() { - return description; - } + public String getDescription() { + return description; + } - public void setDescription(String description) { - this.description = description; - } + public void setDescription(String description) { + this.description = description; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ProjectContents.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ProjectContents.java index 629110ff..b2263df4 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ProjectContents.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ProjectContents.java @@ -21,19 +21,19 @@ // wraps guides + tocItems with product name hierarchy // [name: project-name, [items: [...]]] public class ProjectContents { - private final String name; - private final List items; + private final String name; + private final List items; - public ProjectContents(String name, List items) { - this.name = name; - this.items = items; - } + public ProjectContents(String name, List items) { + this.name = name; + this.items = items; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public List getItems() { - return items; - } -} \ No newline at end of file + public List getItems() { + return items; + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Return.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Return.java index 712c2828..7872bc0b 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Return.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Return.java @@ -4,29 +4,30 @@ public class Return { - @JsonProperty("type") - private final String returnType; - @JsonProperty("description") - private String returnDescription; - - public Return(String returnType, String returnDescription) { - this.returnType = returnType; - this.returnDescription = returnDescription; - } - - public Return(String returnType) { - this.returnType = returnType; - } - - public String getReturnType() { - return returnType; - } - - public String getReturnDescription() { - return returnDescription; - } - - public void setReturnDescription(String returnDescription) { - this.returnDescription = returnDescription; - } + @JsonProperty("type") + private final String returnType; + + @JsonProperty("description") + private String returnDescription; + + public Return(String returnType, String returnDescription) { + this.returnType = returnType; + this.returnDescription = returnDescription; + } + + public Return(String returnType) { + this.returnType = returnType; + } + + public String getReturnType() { + return returnType; + } + + public String getReturnDescription() { + return returnDescription; + } + + public void setReturnDescription(String returnDescription) { + this.returnDescription = returnDescription; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/SpecViewModel.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/SpecViewModel.java index 999e642c..654d4cb1 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/SpecViewModel.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/SpecViewModel.java @@ -1,64 +1,63 @@ package com.microsoft.model; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import org.apache.commons.lang3.StringUtils; - import java.util.*; +import org.apache.commons.lang3.StringUtils; @JsonPropertyOrder({"uid", "name", "fullName", "isExternal", "href"}) public class SpecViewModel { - private String uid; - private String name; - private String fullName; - private boolean isExternal; - private String href; - - public SpecViewModel(String uid, String fullName) { - this.uid = uid; - this.name = getShortName(fullName); - this.fullName = fullName; - } - - public String getUid() { - return uid; - } - - public String getName() { - return name; - } - - public String getFullName() { - return fullName; - } - - String getShortName(String fullName) { - - StringBuilder singleValue = new StringBuilder(); - Optional.ofNullable(fullName).ifPresent( - Param -> { - List strList = new ArrayList<>(); - strList = Arrays.asList(StringUtils.split(Param, ".")); - Collections.reverse(strList); - singleValue.append(strList.get(0)); - } - ); - return singleValue.toString(); - } - - public void setIsExternal(boolean isExternal) { - this.isExternal = isExternal; - } - - public boolean getIsExternal() { - return isExternal; - } - - public void setHref(String href) { - this.href = href; - } - - public String getHref() { - return href; - } + private String uid; + private String name; + private String fullName; + private boolean isExternal; + private String href; + + public SpecViewModel(String uid, String fullName) { + this.uid = uid; + this.name = getShortName(fullName); + this.fullName = fullName; + } + + public String getUid() { + return uid; + } + + public String getName() { + return name; + } + + public String getFullName() { + return fullName; + } + + String getShortName(String fullName) { + + StringBuilder singleValue = new StringBuilder(); + Optional.ofNullable(fullName) + .ifPresent( + Param -> { + List strList = new ArrayList<>(); + strList = Arrays.asList(StringUtils.split(Param, ".")); + Collections.reverse(strList); + singleValue.append(strList.get(0)); + }); + return singleValue.toString(); + } + + public void setIsExternal(boolean isExternal) { + this.isExternal = isExternal; + } + + public boolean getIsExternal() { + return isExternal; + } + + public void setHref(String href) { + this.href = href; + } + + public String getHref() { + return href; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Status.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Status.java index c70600dd..1ca7ea0e 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Status.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Status.java @@ -17,10 +17,12 @@ package com.microsoft.model; public enum Status { - DEPRECATED, ALPHA, BETA; + DEPRECATED, + ALPHA, + BETA; - @Override - public String toString() { - return name().toLowerCase(); - } + @Override + public String toString() { + return name().toLowerCase(); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Syntax.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Syntax.java index d7a84acc..f5bfcf04 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Syntax.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Syntax.java @@ -1,46 +1,47 @@ package com.microsoft.model; import com.fasterxml.jackson.annotation.JsonProperty; - import java.util.List; public class Syntax { - private String content; - private List parameters; - @JsonProperty("return") - private Return returnValue; - private List typeParameters; + private String content; + private List parameters; + + @JsonProperty("return") + private Return returnValue; + + private List typeParameters; - public String getContent() { - return content; - } + public String getContent() { + return content; + } - public void setContent(String content) { - this.content = content; - } + public void setContent(String content) { + this.content = content; + } - public List getParameters() { - return parameters; - } + public List getParameters() { + return parameters; + } - public void setParameters(List parameters) { - this.parameters = parameters; - } + public void setParameters(List parameters) { + this.parameters = parameters; + } - public Return getReturnValue() { - return returnValue; - } + public Return getReturnValue() { + return returnValue; + } - public void setReturnValue(Return returnValue) { - this.returnValue = returnValue; - } + public void setReturnValue(Return returnValue) { + this.returnValue = returnValue; + } - public List getTypeParameters() { - return typeParameters; - } + public List getTypeParameters() { + return typeParameters; + } - public void setTypeParameters(List typeParameters) { - this.typeParameters = typeParameters; - } + public void setTypeParameters(List typeParameters) { + this.typeParameters = typeParameters; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java index cd8e4ceb..eaeb01fa 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java @@ -20,37 +20,38 @@ import java.util.List; public class TocContents { - private final String projectName; - private final List contents = new ArrayList<>(); - - public TocContents(String projectName, boolean disableChangelog, List items) { - this.projectName = projectName; - - if (projectName == null || projectName.equals("")) { - contents.addAll(items); - } else { - // only include product hierarchy and guides if projectName included - createTocContents(projectName, disableChangelog, items); - } - } + private final String projectName; + private final List contents = new ArrayList<>(); - private void createTocContents(String projectName, boolean disableChangelog, List items) { - List tocItems = new ArrayList<>(); - // combine guides and tocItems - tocItems.add(new Guide("Overview", "overview.html")); - if (!disableChangelog) { - tocItems.add(new Guide("Version history", "history.md")); - } - tocItems.addAll(items); - // wrap guides + tocItems with product hierarchy - contents.add(new ProjectContents(projectName, tocItems)); - } + public TocContents(String projectName, boolean disableChangelog, List items) { + this.projectName = projectName; - public List getContents() { - return contents; + if (projectName == null || projectName.equals("")) { + contents.addAll(items); + } else { + // only include product hierarchy and guides if projectName included + createTocContents(projectName, disableChangelog, items); } - - public String getProjectName() { - return projectName; + } + + private void createTocContents( + String projectName, boolean disableChangelog, List items) { + List tocItems = new ArrayList<>(); + // combine guides and tocItems + tocItems.add(new Guide("Overview", "overview.html")); + if (!disableChangelog) { + tocItems.add(new Guide("Version history", "history.md")); } -} \ No newline at end of file + tocItems.addAll(items); + // wrap guides + tocItems with product hierarchy + contents.add(new ProjectContents(projectName, tocItems)); + } + + public List getContents() { + return contents; + } + + public String getProjectName() { + return projectName; + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java index e32af29b..765c015a 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java @@ -1,7 +1,6 @@ package com.microsoft.model; import com.microsoft.util.YamlUtil; - import java.io.File; import java.util.ArrayList; import java.util.Collections; @@ -10,35 +9,35 @@ public class TocFile extends ArrayList implements YmlFile { - private final static String TOC_FILE_HEADER = "### YamlMime:TableOfContent\n"; - private final static String TOC_FILE_NAME = "toc.yml"; - private final String outputPath; - private final String projectName; - private final boolean disableChangelog; - - public TocFile(String outputPath, String projectName, boolean disableChangelog) { - this.outputPath = outputPath; - this.projectName = projectName; - this.disableChangelog = disableChangelog; - } - - public void addTocItem(TocItem packageTocItem) { - add(packageTocItem); - } - - protected void sortByUid() { - Collections.sort(this, Comparator.comparing(TocItem::getUid)); - } - - @Override - public String getFileContent() { - sortByUid(); - List tocContents = new TocContents(projectName, disableChangelog, this).getContents(); - return TOC_FILE_HEADER + YamlUtil.objectToYamlString(tocContents); - } - - @Override - public String getFileNameWithPath() { - return outputPath + File.separator + TOC_FILE_NAME; - } + private static final String TOC_FILE_HEADER = "### YamlMime:TableOfContent\n"; + private static final String TOC_FILE_NAME = "toc.yml"; + private final String outputPath; + private final String projectName; + private final boolean disableChangelog; + + public TocFile(String outputPath, String projectName, boolean disableChangelog) { + this.outputPath = outputPath; + this.projectName = projectName; + this.disableChangelog = disableChangelog; + } + + public void addTocItem(TocItem packageTocItem) { + add(packageTocItem); + } + + protected void sortByUid() { + Collections.sort(this, Comparator.comparing(TocItem::getUid)); + } + + @Override + public String getFileContent() { + sortByUid(); + List tocContents = new TocContents(projectName, disableChangelog, this).getContents(); + return TOC_FILE_HEADER + YamlUtil.objectToYamlString(tocContents); + } + + @Override + public String getFileNameWithPath() { + return outputPath + File.separator + TOC_FILE_NAME; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java index bdbd3b43..948503e7 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java @@ -5,41 +5,44 @@ public class TocItem { - private String uid; - private String name; - private String status; - private String heading; - private List items = new ArrayList<>(); - - - public TocItem(String uid, String name) { - this.uid = uid; - this.name = name; - } - - public TocItem(String uid, String name, String status) { - this.uid = uid; - this.name = name; - this.status = status; - } - - public TocItem(String heading) { - this.heading = heading; - } - - public String getUid() { - return uid; - } - - public String getName() { - return name; - } - - public List getItems() { - return items; - } - - public String getStatus() { return status; } - - public String getHeading() { return heading; } + private String uid; + private String name; + private String status; + private String heading; + private List items = new ArrayList<>(); + + public TocItem(String uid, String name) { + this.uid = uid; + this.name = name; + } + + public TocItem(String uid, String name, String status) { + this.uid = uid; + this.name = name; + this.status = status; + } + + public TocItem(String heading) { + this.heading = heading; + } + + public String getUid() { + return uid; + } + + public String getName() { + return name; + } + + public List getItems() { + return items; + } + + public String getStatus() { + return status; + } + + public String getHeading() { + return heading; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocTypeMap.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocTypeMap.java index 55c470d6..7e8b9869 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocTypeMap.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocTypeMap.java @@ -15,29 +15,27 @@ */ package com.microsoft.model; -import org.apache.commons.lang3.tuple.Pair; - -import javax.lang.model.element.ElementKind; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import javax.lang.model.element.ElementKind; public class TocTypeMap extends HashMap> { - public TocTypeMap() { - this.put(ElementKind.CLASS.name(), new ArrayList<>()); - this.put(ElementKind.INTERFACE.name(), new ArrayList<>()); - this.put(ElementKind.ENUM.name(), new ArrayList<>()); - this.put(ElementKind.ANNOTATION_TYPE.name(), new ArrayList<>()); - this.put("EXCEPTION", new ArrayList<>()); - } + public TocTypeMap() { + this.put(ElementKind.CLASS.name(), new ArrayList<>()); + this.put(ElementKind.INTERFACE.name(), new ArrayList<>()); + this.put(ElementKind.ENUM.name(), new ArrayList<>()); + this.put(ElementKind.ANNOTATION_TYPE.name(), new ArrayList<>()); + this.put("EXCEPTION", new ArrayList<>()); + } - public List getTitleList() { - return List.of( - new KindTitle(ElementKind.INTERFACE.name(), "Interfaces"), - new KindTitle(ElementKind.CLASS.name(), "Classes"), - new KindTitle(ElementKind.ENUM.name(), "Enums"), - new KindTitle(ElementKind.ANNOTATION_TYPE.name(),"Annotation Types"), - new KindTitle("EXCEPTION", "Exceptions")); - } + public List getTitleList() { + return List.of( + new KindTitle(ElementKind.INTERFACE.name(), "Interfaces"), + new KindTitle(ElementKind.CLASS.name(), "Classes"), + new KindTitle(ElementKind.ENUM.name(), "Enums"), + new KindTitle(ElementKind.ANNOTATION_TYPE.name(), "Annotation Types"), + new KindTitle("EXCEPTION", "Exceptions")); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TypeParameter.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TypeParameter.java index df2a5a3c..557c61b1 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TypeParameter.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TypeParameter.java @@ -2,13 +2,13 @@ public class TypeParameter { - private final String id; + private final String id; - public TypeParameter(String id) { - this.id = id; - } + public TypeParameter(String id) { + this.id = id; + } - public String getId() { - return id; - } + public String getId() { + return id; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/YmlFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/YmlFile.java index 63c7554d..6743acc7 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/YmlFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/YmlFile.java @@ -2,7 +2,7 @@ public interface YmlFile { - String getFileContent(); + String getFileContent(); - String getFileNameWithPath(); + String getFileNameWithPath(); } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/CommentHelper.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/CommentHelper.java index f5dc9fed..eac5d636 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/CommentHelper.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/CommentHelper.java @@ -1,88 +1,86 @@ package com.microsoft.util; import com.sun.source.doctree.DocTree; - -import javax.lang.model.element.Element; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; +import javax.lang.model.element.Element; public class CommentHelper { - public Element element; - public List inlineTags = Collections.emptyList(); - private Utils utils; - private boolean hasInheritDocTag = false; - - public CommentHelper(Element element, Utils utils) { - this.element = element; - this.utils = utils; - this.inlineTags = utils.getFullBody(element); - this.hasInheritDocTag = utils.hasInlineTag(inlineTags, DocTree.Kind.INHERIT_DOC); + public Element element; + public List inlineTags = Collections.emptyList(); + private Utils utils; + private boolean hasInheritDocTag = false; + + public CommentHelper(Element element, Utils utils) { + this.element = element; + this.utils = utils; + this.inlineTags = utils.getFullBody(element); + this.hasInheritDocTag = utils.hasInlineTag(inlineTags, DocTree.Kind.INHERIT_DOC); + } + + public CommentHelper(Element element, Utils utils, List inlineTags) { + this.element = element; + this.utils = utils; + this.inlineTags = inlineTags; + this.hasInheritDocTag = utils.hasInlineTag(inlineTags, DocTree.Kind.INHERIT_DOC); + } + + /** + * Returns true if the method has no comments, or a lone @inheritDoc. + * + * @return true if there are no comments, false otherwise + */ + public boolean isSimpleOverride() { + return inlineTags.isEmpty() || (inlineTags.size() == 1 && hasInheritDocTag); + } + + public boolean hasInheritDocTag() { + return this.hasInheritDocTag; + } + + public CommentHelper copy() { + if (this.element == null) { + throw new NullPointerException(); } + CommentHelper clone = new CommentHelper(this.element, this.utils); + return clone; + } - public CommentHelper(Element element, Utils utils, List inlineTags) { - this.element = element; - this.utils = utils; - this.inlineTags = inlineTags; - this.hasInheritDocTag = utils.hasInlineTag(inlineTags, DocTree.Kind.INHERIT_DOC); - } + public CommentHelper inherit(CommentHelper chInheritFrom) { + List mergedTags = new ArrayList<>(); - /** - * Returns true if the method has no comments, or a lone @inheritDoc. - * - * @return true if there are no comments, false otherwise - */ - public boolean isSimpleOverride() { - return inlineTags.isEmpty() || - (inlineTags.size() == 1 && hasInheritDocTag); + if (this.isSimpleOverride()) mergedTags = chInheritFrom.inlineTags; + else { + mergedTags = inheritInlineTags(this, chInheritFrom); } - public boolean hasInheritDocTag() { - return this.hasInheritDocTag; - } + return new CommentHelper(this.element, this.utils, mergedTags); + } - public CommentHelper copy() { - if (this.element == null) { - throw new NullPointerException(); - } - CommentHelper clone = new CommentHelper(this.element, this.utils); - return clone; + List inheritInlineTags(CommentHelper origin, CommentHelper chInheritFrom) { + List mergedTags = new ArrayList<>(); + if (!origin.isSimpleOverride() && !origin.hasInheritDocTag) { + return origin.inlineTags; } - public CommentHelper inherit(CommentHelper chInheritFrom) { - List mergedTags = new ArrayList<>(); + // Get the index of "{@inheritedDoc}". + int index = + origin.inlineTags.stream() + .map(e -> e.getKind()) + .collect(Collectors.toList()) + .indexOf(DocTree.Kind.INHERIT_DOC); - if (this.isSimpleOverride()) - mergedTags = chInheritFrom.inlineTags; - else { - mergedTags = inheritInlineTags(this, chInheritFrom); - } + // Replace the "{@inheritedDoc}" with inherited inlineTags. + mergedTags = origin.inlineTags.stream().collect(Collectors.toList()); + mergedTags.remove(index); - return new CommentHelper(this.element, this.utils, mergedTags); + for (DocTree d : chInheritFrom.inlineTags) { + mergedTags.add(index, d); + index++; } - List inheritInlineTags(CommentHelper origin, CommentHelper chInheritFrom) { - List mergedTags = new ArrayList<>(); - if (!origin.isSimpleOverride() && !origin.hasInheritDocTag) { - return origin.inlineTags; - } - - // Get the index of "{@inheritedDoc}". - int index = origin.inlineTags.stream().map(e -> e.getKind()) - .collect(Collectors.toList()) - .indexOf(DocTree.Kind.INHERIT_DOC); - - // Replace the "{@inheritedDoc}" with inherited inlineTags. - mergedTags = origin.inlineTags.stream().collect(Collectors.toList()); - mergedTags.remove(index); - - for (DocTree d : chInheritFrom.inlineTags - ) { - mergedTags.add(index, d); - index++; - } - - return mergedTags; - } + return mergedTags; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java index d594ba4f..1212ce08 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java @@ -1,78 +1,82 @@ package com.microsoft.util; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import org.apache.commons.lang3.StringUtils; - -import javax.lang.model.element.Element; -import javax.lang.model.element.PackageElement; -import javax.lang.model.element.TypeElement; -import javax.lang.model.util.ElementFilter; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; +import javax.lang.model.element.Element; +import javax.lang.model.element.PackageElement; +import javax.lang.model.element.TypeElement; +import javax.lang.model.util.ElementFilter; +import org.apache.commons.lang3.StringUtils; public class ElementUtil { - private static final int INITIAL_CAPACITY = 1000000; - private final Set excludePackages = new HashSet<>(); - private final Set excludeClasses = new HashSet<>(); + private static final int INITIAL_CAPACITY = 1000000; + private final Set excludePackages = new HashSet<>(); + private final Set excludeClasses = new HashSet<>(); - private final Map> elementMap; - private final Map> elementSortedMap; + private final Map> elementMap; + private final Map> elementSortedMap; - public ElementUtil(String[] excludePackages, String[] excludeClasses) { - this.excludePackages.addAll(Stream.of(excludePackages) - .map(o -> Pattern.compile(o)).collect(Collectors.toSet())); - this.excludeClasses.addAll(Stream.of(excludeClasses) - .map(o -> Pattern.compile(o)).collect(Collectors.toSet())); - this.elementMap = new ConcurrentHashMap<>(INITIAL_CAPACITY); - this.elementSortedMap = new ConcurrentHashMap<>(INITIAL_CAPACITY); - } + public ElementUtil(String[] excludePackages, String[] excludeClasses) { + this.excludePackages.addAll( + Stream.of(excludePackages).map(o -> Pattern.compile(o)).collect(Collectors.toSet())); + this.excludeClasses.addAll( + Stream.of(excludeClasses).map(o -> Pattern.compile(o)).collect(Collectors.toSet())); + this.elementMap = new ConcurrentHashMap<>(INITIAL_CAPACITY); + this.elementSortedMap = new ConcurrentHashMap<>(INITIAL_CAPACITY); + } - public List extractSortedElements(Element element) { - elementSortedMap.computeIfAbsent(element, this::extractSortedElementsInternal); - return elementSortedMap.get(element); - } + public List extractSortedElements(Element element) { + elementSortedMap.computeIfAbsent(element, this::extractSortedElementsInternal); + return elementSortedMap.get(element); + } - private List extractSortedElementsInternal(Element element) { - // Need to apply sorting, because order of result items for Element.getEnclosedElements() depend on JDK implementation - // By default, exclude private and package-private items - // todo allow pass parameter for filter items by access modifiers - return ElementFilter.typesIn(getEnclosedElements(element)).stream() - .filter(o -> !Utils.isPrivateOrPackagePrivate(o)) - .filter(o -> !matchAnyPattern(excludeClasses, String.valueOf(o.getQualifiedName()))) - .sorted((o1, o2) -> - StringUtils.compare(String.valueOf(o1.getSimpleName()), String.valueOf(o2.getSimpleName())) - ).collect(Collectors.toList()); - } + private List extractSortedElementsInternal(Element element) { + // Need to apply sorting, because order of result items for Element.getEnclosedElements() depend + // on JDK implementation + // By default, exclude private and package-private items + // todo allow pass parameter for filter items by access modifiers + return ElementFilter.typesIn(getEnclosedElements(element)).stream() + .filter(o -> !Utils.isPrivateOrPackagePrivate(o)) + .filter(o -> !matchAnyPattern(excludeClasses, String.valueOf(o.getQualifiedName()))) + .sorted( + (o1, o2) -> + StringUtils.compare( + String.valueOf(o1.getSimpleName()), String.valueOf(o2.getSimpleName()))) + .collect(Collectors.toList()); + } - public List getEnclosedElements(Element element) { - elementMap.computeIfAbsent(element, this::getEnclosedElementsInternal); - return elementMap.get(element); - } + public List getEnclosedElements(Element element) { + elementMap.computeIfAbsent(element, this::getEnclosedElementsInternal); + return elementMap.get(element); + } - private List getEnclosedElementsInternal(Element element) { - return element.getEnclosedElements(); - } + private List getEnclosedElementsInternal(Element element) { + return element.getEnclosedElements(); + } - public List extractPackageElements(Set elements) { - return ElementFilter.packagesIn(elements).stream() - .filter(o -> !matchAnyPattern(excludePackages, String.valueOf(o))) - .sorted((o1, o2) -> - StringUtils.compare(String.valueOf(o1.getSimpleName()), String.valueOf(o2.getSimpleName())) - ).collect(Collectors.toList()); - } + public List extractPackageElements(Set elements) { + return ElementFilter.packagesIn(elements).stream() + .filter(o -> !matchAnyPattern(excludePackages, String.valueOf(o))) + .sorted( + (o1, o2) -> + StringUtils.compare( + String.valueOf(o1.getSimpleName()), String.valueOf(o2.getSimpleName()))) + .collect(Collectors.toList()); + } - boolean matchAnyPattern(Set patterns, String stringToCheck) { - for (Pattern pattern : patterns) { - if (pattern.matcher(stringToCheck).matches()) { - return true; - } - } - return false; + boolean matchAnyPattern(Set patterns, String stringToCheck) { + for (Pattern pattern : patterns) { + if (pattern.matcher(stringToCheck).matches()) { + return true; + } } -} \ No newline at end of file + return false; + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java index cbad4f7e..9f416219 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java @@ -1,7 +1,6 @@ package com.microsoft.util; import com.microsoft.model.YmlFile; - import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -9,21 +8,19 @@ public class FileUtil { - /** - * Dump string to file. Create required folders when needed - */ - public static void dumpToFile(String content, String fileName) { + /** Dump string to file. Create required folders when needed */ + public static void dumpToFile(String content, String fileName) { - try { - Path path = Paths.get(fileName); - Files.createDirectories(path.getParent()); - Files.write(path, content.getBytes()); - } catch (IOException ioe) { - throw new RuntimeException("Error during dump to file", ioe); - } + try { + Path path = Paths.get(fileName); + Files.createDirectories(path.getParent()); + Files.write(path, content.getBytes()); + } catch (IOException ioe) { + throw new RuntimeException("Error during dump to file", ioe); } + } - public static void dumpToFile(YmlFile ymlFile) { - dumpToFile(ymlFile.getFileContent(), ymlFile.getFileNameWithPath()); - } + public static void dumpToFile(YmlFile ymlFile) { + dumpToFile(ymlFile.getFileContent(), ymlFile.getFileNameWithPath()); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/OptionsFileUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/OptionsFileUtil.java index 6a9554e2..2605f2bc 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/OptionsFileUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/OptionsFileUtil.java @@ -9,32 +9,32 @@ public class OptionsFileUtil { - public static List processOptionsFile(String filename) { - List jargs = new ArrayList<>(); + public static List processOptionsFile(String filename) { + List jargs = new ArrayList<>(); - String options = readOptionsFromFile(filename); - StringTokenizer tokens = new StringTokenizer(options); - while (tokens.hasMoreTokens()) { - jargs.add(tokens.nextToken()); - } - - return jargs; + String options = readOptionsFromFile(filename); + StringTokenizer tokens = new StringTokenizer(options); + while (tokens.hasMoreTokens()) { + jargs.add(tokens.nextToken()); } - private static String readOptionsFromFile(String filename) { - StringBuffer buffer = new StringBuffer(); - try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filename))) { - String line; - while ((line = bufferedReader.readLine()) != null) { - // remove single quote at the head and tail - String trimmedLine = line.replaceAll("^'|'$", ""); - buffer.append(trimmedLine).append("\n"); - } - } catch (IOException ioe) { - buffer.setLength(0); - throw new RuntimeException("Error during reading options from file", ioe); - } + return jargs; + } - return buffer.toString(); + private static String readOptionsFromFile(String filename) { + StringBuffer buffer = new StringBuffer(); + try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filename))) { + String line; + while ((line = bufferedReader.readLine()) != null) { + // remove single quote at the head and tail + String trimmedLine = line.replaceAll("^'|'$", ""); + buffer.append(trimmedLine).append("\n"); + } + } catch (IOException ioe) { + buffer.setLength(0); + throw new RuntimeException("Error during reading options from file", ioe); } + + return buffer.toString(); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java index e901651f..ebc67ef3 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java @@ -1,263 +1,253 @@ package com.microsoft.util; +import static com.sun.source.doctree.DocTree.Kind.ERRONEOUS; +import static javax.lang.model.type.TypeKind.DECLARED; + import com.sun.source.doctree.DocCommentTree; import com.sun.source.doctree.DocTree; -import jdk.javadoc.doclet.DocletEnvironment; - -import javax.lang.model.element.*; -import javax.lang.model.type.TypeKind; -import javax.lang.model.type.TypeMirror; -import javax.lang.model.util.Elements; -import javax.lang.model.util.Types; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; - -import static com.sun.source.doctree.DocTree.Kind.ERRONEOUS; -import static javax.lang.model.type.TypeKind.DECLARED; +import javax.lang.model.element.*; +import javax.lang.model.type.TypeKind; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.Elements; +import javax.lang.model.util.Types; +import jdk.javadoc.doclet.DocletEnvironment; public class Utils { - public final DocletEnvironment docletEnvironment; - public final Elements elements; - public final Types typeUtils; - private final ElementUtil elementUtil; - - public Utils(DocletEnvironment docEnv, ElementUtil elementUtil) { - this.docletEnvironment = docEnv; - this.elements = docEnv.getElementUtils(); - this.typeUtils = docEnv.getTypeUtils(); - this.elementUtil = elementUtil; - } - - public static boolean isPackagePrivate(Element e) { - return !(isPublic(e) || isPrivate(e) || isProtected(e)); - } - - public static boolean isPrivate(Element e) { - return e.getModifiers().contains(Modifier.PRIVATE); - } - - public static boolean isProtected(Element e) { - return e.getModifiers().contains(Modifier.PROTECTED); - } - - public static boolean isPublic(Element e) { - return e.getModifiers().contains(Modifier.PUBLIC); - } - - public static boolean isPrivateOrPackagePrivate(Element e) { - return isPrivate(e) || isPackagePrivate(e); - } - - public static boolean isNoType(TypeMirror t) { - return t.getKind() == TypeKind.NONE; - } - - public boolean isStatic(Element e) { - return e.getModifiers().contains(Modifier.STATIC); - } - - /** - * Returns true if the method has no comments, or a lone @inheritDoc. - * - * @param m a method - * @return true if there are no comments, false otherwise - */ - public boolean isSimpleOverride(ExecutableElement m) { - - if (!getBlockTags(m).isEmpty()) - return false; - - List fullBody = getFullBody(m); - return fullBody.isEmpty() || - (fullBody.size() == 1 && fullBody.get(0).getKind().equals(DocTree.Kind.INHERIT_DOC)); - } - - public boolean hasInlineTag(List inlineTags, DocTree.Kind kind) { - for (DocTree dt : inlineTags) { - if (dt.getKind() == kind) { - return true; - } - } - return false; - } - - public Element getMemberBySignature(TypeElement te, ElementKind kind, String signature) { - return getMembers(te, kind).stream() - .filter(e -> e.toString().equals(signature)) - .findFirst().orElse(null); - } - - public TypeElement getObjectType() { - return elements.getTypeElement("java.lang.Object"); - } - - /** - * Return the element of given type. - */ - public TypeElement asTypeElement(TypeMirror t) { - if (t.getKind() != TypeKind.NONE) { - TypeElement element = (TypeElement) docletEnvironment.getTypeUtils().asElement(t); - return element; - } else return null; - } - - /** - * Return the lexically enclosing element for a nested type. - * The inherited items will not be listed. - */ - public TypeElement getEnclosingTypeElement(Element e) { - if (e.getKind() == ElementKind.PACKAGE) - return null; - Element encl = e.getEnclosingElement(); - ElementKind kind = encl.getKind(); - if (kind == ElementKind.PACKAGE) - return null; - while (!(kind.isClass() || kind.isInterface())) { - encl = encl.getEnclosingElement(); - kind = encl.getKind(); - } - return (TypeElement) encl; - } - - /** - * Follow the same behavior with Standard doclet. - * Return the ExecutableElement being overridden by given method, - * when a method in a class overrides a method in a superclass. - * For following cases, they will be marked as "Specified by": - *
    - *
  • a method in an interface overrides a method in a superinterface
  • - *
  • a method in a class implements a method in an interface
  • - *
- * todo add "Specified by" to yaml. - */ - public ExecutableElement overriddenMethod(ExecutableElement method) { - if (isStatic(method)) { - return null; - } - final TypeElement origin = getEnclosingTypeElement(method); - for (TypeMirror t = getSuperType(origin); - t.getKind() == DECLARED; - t = getSuperType(asTypeElement(t))) { - TypeElement te = asTypeElement(t); - if (te == null) { - return null; - } - - for (Element e : getMembers(te, ElementKind.METHOD)) { - ExecutableElement ee = (ExecutableElement) e; - if (elements.overrides(method, ee, origin) - ) { - return ee; - } - } - if (t.equals(getObjectType().asType())) - return null; - } + public final DocletEnvironment docletEnvironment; + public final Elements elements; + public final Types typeUtils; + private final ElementUtil elementUtil; + + public Utils(DocletEnvironment docEnv, ElementUtil elementUtil) { + this.docletEnvironment = docEnv; + this.elements = docEnv.getElementUtils(); + this.typeUtils = docEnv.getTypeUtils(); + this.elementUtil = elementUtil; + } + + public static boolean isPackagePrivate(Element e) { + return !(isPublic(e) || isPrivate(e) || isProtected(e)); + } + + public static boolean isPrivate(Element e) { + return e.getModifiers().contains(Modifier.PRIVATE); + } + + public static boolean isProtected(Element e) { + return e.getModifiers().contains(Modifier.PROTECTED); + } + + public static boolean isPublic(Element e) { + return e.getModifiers().contains(Modifier.PUBLIC); + } + + public static boolean isPrivateOrPackagePrivate(Element e) { + return isPrivate(e) || isPackagePrivate(e); + } + + public static boolean isNoType(TypeMirror t) { + return t.getKind() == TypeKind.NONE; + } + + public boolean isStatic(Element e) { + return e.getModifiers().contains(Modifier.STATIC); + } + + /** + * Returns true if the method has no comments, or a lone @inheritDoc. + * + * @param m a method + * @return true if there are no comments, false otherwise + */ + public boolean isSimpleOverride(ExecutableElement m) { + + if (!getBlockTags(m).isEmpty()) return false; + + List fullBody = getFullBody(m); + return fullBody.isEmpty() + || (fullBody.size() == 1 && fullBody.get(0).getKind().equals(DocTree.Kind.INHERIT_DOC)); + } + + public boolean hasInlineTag(List inlineTags, DocTree.Kind kind) { + for (DocTree dt : inlineTags) { + if (dt.getKind() == kind) { + return true; + } + } + return false; + } + + public Element getMemberBySignature(TypeElement te, ElementKind kind, String signature) { + return getMembers(te, kind).stream() + .filter(e -> e.toString().equals(signature)) + .findFirst() + .orElse(null); + } + + public TypeElement getObjectType() { + return elements.getTypeElement("java.lang.Object"); + } + + /** Return the element of given type. */ + public TypeElement asTypeElement(TypeMirror t) { + if (t.getKind() != TypeKind.NONE) { + TypeElement element = (TypeElement) docletEnvironment.getTypeUtils().asElement(t); + return element; + } else return null; + } + + /** + * Return the lexically enclosing element for a nested type. The inherited items will not be + * listed. + */ + public TypeElement getEnclosingTypeElement(Element e) { + if (e.getKind() == ElementKind.PACKAGE) return null; + Element encl = e.getEnclosingElement(); + ElementKind kind = encl.getKind(); + if (kind == ElementKind.PACKAGE) return null; + while (!(kind.isClass() || kind.isInterface())) { + encl = encl.getEnclosingElement(); + kind = encl.getKind(); + } + return (TypeElement) encl; + } + + /** + * Follow the same behavior with Standard doclet. Return the ExecutableElement being overridden by + * given method, when a method in a class overrides a method in a superclass. For following cases, + * they will be marked as "Specified by": + * + *
    + *
  • a method in an interface overrides a method in a superinterface + *
  • a method in a class implements a method in an interface + *
+ * + * todo add "Specified by" to yaml. + */ + public ExecutableElement overriddenMethod(ExecutableElement method) { + if (isStatic(method)) { + return null; + } + final TypeElement origin = getEnclosingTypeElement(method); + for (TypeMirror t = getSuperType(origin); + t.getKind() == DECLARED; + t = getSuperType(asTypeElement(t))) { + TypeElement te = asTypeElement(t); + if (te == null) { return null; - } + } - public TypeMirror getSuperType(TypeElement te) { - TypeMirror t = te.getSuperclass(); - return getType(t); - } - - private TypeMirror getType(TypeMirror t) { - return (isNoType(t)) ? getObjectType().asType() : t; - } - - public Optional getDocCommentTree(Element element) { - return Optional.ofNullable(docletEnvironment.getDocTrees().getDocCommentTree(element)); - } - - protected List getFullBody(Element element) { - return getDocCommentTree(element) - .map(DocCommentTree::getFullBody) - .orElse(Collections.emptyList()); - } - - public static List filteredList(List dlist, DocTree.Kind... select) { - List list = new ArrayList<>(); - if (select == null) - return dlist; - for (DocTree dt : dlist) { - if (dt.getKind() != ERRONEOUS) { - for (DocTree.Kind kind : select) { - if (dt.getKind() == kind) { - list.add(dt); - } - } - } + for (Element e : getMembers(te, ElementKind.METHOD)) { + ExecutableElement ee = (ExecutableElement) e; + if (elements.overrides(method, ee, origin)) { + return ee; } - return list; - } - - private List getBlockTags0(Element element, DocTree.Kind... kinds) { - Optional dcTree = getDocCommentTree(element); - if (dcTree.isEmpty()) - return Collections.emptyList(); - - return filteredList(dcTree.get().getBlockTags(), kinds); - } - - public List getBlockTags(Element element) { - return getBlockTags0(element, (DocTree.Kind[]) null); - } - - public List removeBlockTag(List dctree, DocTree.Kind kind) { - return dctree.stream() - .filter(dc -> !dc.getKind().equals(kind)) - .collect(Collectors.toList()); - } - - /** - * Returns a list of visible enclosed members of given kind, - * declared in this type element, and does not include - * any inherited members or extra members. - * - * @return a list of visible enclosed members in this type - */ - public List getMembers(TypeElement te, ElementKind kind) { - return elementUtil.getEnclosedElements(te).stream() - .filter(e -> e.getKind() == kind && !isPrivateOrPackagePrivate(e)) - .collect(Collectors.toList()); - } - - /** - * Returns a list of methods being implemented by given method. - * When a method in an interface overrides a method its superinterface, - * it will be considered as "implemented", instead of "overridden". - * - * @return a list of implemented methods - */ - public List getImplementedMethods(String signature, TypeElement encl, List implementedMethods) { - if (encl == null) { - return implementedMethods; + } + if (t.equals(getObjectType().asType())) return null; + } + return null; + } + + public TypeMirror getSuperType(TypeElement te) { + TypeMirror t = te.getSuperclass(); + return getType(t); + } + + private TypeMirror getType(TypeMirror t) { + return (isNoType(t)) ? getObjectType().asType() : t; + } + + public Optional getDocCommentTree(Element element) { + return Optional.ofNullable(docletEnvironment.getDocTrees().getDocCommentTree(element)); + } + + protected List getFullBody(Element element) { + return getDocCommentTree(element) + .map(DocCommentTree::getFullBody) + .orElse(Collections.emptyList()); + } + + public static List filteredList( + List dlist, DocTree.Kind... select) { + List list = new ArrayList<>(); + if (select == null) return dlist; + for (DocTree dt : dlist) { + if (dt.getKind() != ERRONEOUS) { + for (DocTree.Kind kind : select) { + if (dt.getKind() == kind) { + list.add(dt); + } } - - for (TypeElement interfaceType : getImplementedInterfaces(encl)) { - Element implementedMethod = getMemberBySignature(interfaceType, ElementKind.METHOD, signature); - if (implementedMethod != null) { - implementedMethods.add(implementedMethod); - } - // We need to search every implemented interface of the Inheritance chain. - getImplementedMethods(signature, interfaceType, implementedMethods); - } - return implementedMethods; - } - - /** - * Returns a list of implemented interface type elements of given type element. - * Follow Standard doclet, search in the order of appearance following the word implements in declaration. - * - * @return a list of implemented interfaces - */ - public List getImplementedInterfaces(TypeElement element) { - return element.getInterfaces().stream() - .map(e -> asTypeElement(e)) - .collect(Collectors.toList()); - } -} \ No newline at end of file + } + } + return list; + } + + private List getBlockTags0(Element element, DocTree.Kind... kinds) { + Optional dcTree = getDocCommentTree(element); + if (dcTree.isEmpty()) return Collections.emptyList(); + + return filteredList(dcTree.get().getBlockTags(), kinds); + } + + public List getBlockTags(Element element) { + return getBlockTags0(element, (DocTree.Kind[]) null); + } + + public List removeBlockTag(List dctree, DocTree.Kind kind) { + return dctree.stream().filter(dc -> !dc.getKind().equals(kind)).collect(Collectors.toList()); + } + + /** + * Returns a list of visible enclosed members of given kind, declared in this type element, and + * does not include any inherited members or extra members. + * + * @return a list of visible enclosed members in this type + */ + public List getMembers(TypeElement te, ElementKind kind) { + return elementUtil.getEnclosedElements(te).stream() + .filter(e -> e.getKind() == kind && !isPrivateOrPackagePrivate(e)) + .collect(Collectors.toList()); + } + + /** + * Returns a list of methods being implemented by given method. When a method in an interface + * overrides a method its superinterface, it will be considered as "implemented", instead of + * "overridden". + * + * @return a list of implemented methods + */ + public List getImplementedMethods( + String signature, TypeElement encl, List implementedMethods) { + if (encl == null) { + return implementedMethods; + } + + for (TypeElement interfaceType : getImplementedInterfaces(encl)) { + Element implementedMethod = + getMemberBySignature(interfaceType, ElementKind.METHOD, signature); + if (implementedMethod != null) { + implementedMethods.add(implementedMethod); + } + // We need to search every implemented interface of the Inheritance chain. + getImplementedMethods(signature, interfaceType, implementedMethods); + } + return implementedMethods; + } + + /** + * Returns a list of implemented interface type elements of given type element. Follow Standard + * doclet, search in the order of appearance following the word implements in declaration. + * + * @return a list of implemented interfaces + */ + public List getImplementedInterfaces(TypeElement element) { + return element.getInterfaces().stream().map(e -> asTypeElement(e)).collect(Collectors.toList()); + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java index 7fd6bbf6..5a4f8f0f 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java @@ -8,33 +8,38 @@ import org.apache.commons.lang3.StringUtils; public class YamlUtil { - private static final ObjectMapper mapper = new ObjectMapper(new YAMLFactory() - .disable(Feature.WRITE_DOC_START_MARKER) - .disable(Feature.SPLIT_LINES) - ) - .setSerializationInclusion(Include.NON_NULL) - .setSerializationInclusion(Include.NON_EMPTY); + private static final ObjectMapper mapper = + new ObjectMapper( + new YAMLFactory() + .disable(Feature.WRITE_DOC_START_MARKER) + .disable(Feature.SPLIT_LINES)) + .setSerializationInclusion(Include.NON_NULL) + .setSerializationInclusion(Include.NON_EMPTY); - public static String objectToYamlString(Object object) { - try { - return mapper.writeValueAsString(object); - } catch (JsonProcessingException jpe) { - throw new RuntimeException("Could not serialize object to yaml string", jpe); - } + public static String objectToYamlString(Object object) { + try { + return mapper.writeValueAsString(object); + } catch (JsonProcessingException jpe) { + throw new RuntimeException("Could not serialize object to yaml string", jpe); } + } - public static String cleanupHtml(String text) { - if (StringUtils.isBlank(text)) { - return text; - } - return text.replaceAll("
([^<]+)
","$1") - .replaceAll("
", "
")
-                .replaceAll("<([A-Z][^<]+||)>", "<$1>")
-                .replaceAll("`([^`]+)`", "$1")
-                .replaceAll("\\[([^]]+)]\\(([^)]+)\\)", "$1")
-                .replaceAll("\\{@link *\"([^\\{]+)\" *\\}", "$1")
-                .replaceAll("\\[([^]]+)]\\[([^]]+)\\]", "$1")
-                .replaceAll("\\{@link *([^\\{\"]+) *\\}", "$1")
-                .replaceAll("=======================([^=]+)=======================", "

$1

"); + public static String cleanupHtml(String text) { + if (StringUtils.isBlank(text)) { + return text; } + return text.replaceAll("
([^<]+)
", "$1") + .replaceAll("
", "
")
+        .replaceAll("<([A-Z][^<]+||)>", "<$1>")
+        .replaceAll("`([^`]+)`", "$1")
+        .replaceAll("\\[([^]]+)]\\(([^)]+)\\)", "$1")
+        .replaceAll("\\{@link *\"([^\\{]+)\" *\\}", "$1")
+        .replaceAll(
+            "\\[([^]]+)]\\[([^]]+)\\]",
+            "$1")
+        .replaceAll(
+            "\\{@link *([^\\{\"]+) *\\}",
+            "$1")
+        .replaceAll("=======================([^=]+)=======================", "

$1

"); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/BuilderUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/BuilderUtilTest.java index 03bdda31..b64e5fc7 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/BuilderUtilTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/BuilderUtilTest.java @@ -15,99 +15,126 @@ */ package com.microsoft.build; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; import com.microsoft.model.MethodParameter; import com.microsoft.model.Syntax; -import org.junit.Test; - import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import org.junit.Test; public class BuilderUtilTest { - @Test - public void populateUidValues() { - MetadataFile classMetadataFile = new MetadataFile("output", "name"); - - MetadataFileItem ownerClassItem = buildMetadataFileItem("a.b.OwnerClass", "Not important summary value"); - ownerClassItem.setNameWithType("OwnerClass"); - MetadataFileItem item1 = buildMetadataFileItem("UID unknown class", "UnknownClass"); - populateSyntax(item1, "SomeClass#someMethod(String param)"); - MetadataFileItem item2 = buildMetadataFileItem("UID known class", "SomeClass#someMethod(String param)"); - MetadataFileItem item3 = buildMetadataFileItem("UID method only", "#someMethod2(String p1, String p2)"); - classMetadataFile.getItems().addAll(Arrays.asList(ownerClassItem, item1, item2, item3)); - - MetadataFileItem reference1 = new MetadataFileItem("a.b.SomeClass.someMethod(String param)"); - reference1.setNameWithType("SomeClass.someMethod(String param)"); - MetadataFileItem reference2 = new MetadataFileItem("a.b.OwnerClass.someMethod2(String p1, String p2)"); - reference2.setNameWithType("OwnerClass.someMethod2(String p1, String p2)"); - classMetadataFile.getReferences().addAll(Arrays.asList(reference1, reference2)); - - BuilderUtil.populateUidValues(Collections.emptyList(), Arrays.asList(classMetadataFile)); - - assertEquals("Wrong summary for unknown class", item1.getSummary(), - "Bla bla UnknownClass bla"); - assertEquals("Wrong syntax description", item1.getSyntax().getParameters().get(0).getDescription(), - "One two SomeClass#someMethod(String param) three"); - assertEquals("Wrong summary for known class", item2.getSummary(), - "Bla bla SomeClass#someMethod(String param) bla"); - assertEquals("Wrong summary for method", item3.getSummary(), - "Bla bla #someMethod2(String p1, String p2) bla"); - - } - - private MetadataFileItem buildMetadataFileItem(String uid, String value) { - MetadataFileItem item = new MetadataFileItem(uid); - item.setSummary( - String.format("Bla bla %s bla", value, value)); - return item; - } - - private void populateSyntax(MetadataFileItem item, String value) { - Syntax syntax = new Syntax(); - String methodParamDescription = String - .format("One two %s three", value, value); - syntax.setParameters( - Arrays.asList(new MethodParameter("method param id", "method param type", methodParamDescription))); - item.setSyntax(syntax); - } - - @Test - public void determineUidByLinkContent() { - Map lookup = new HashMap<>() {{ + @Test + public void populateUidValues() { + MetadataFile classMetadataFile = new MetadataFile("output", "name"); + + MetadataFileItem ownerClassItem = + buildMetadataFileItem("a.b.OwnerClass", "Not important summary value"); + ownerClassItem.setNameWithType("OwnerClass"); + MetadataFileItem item1 = buildMetadataFileItem("UID unknown class", "UnknownClass"); + populateSyntax(item1, "SomeClass#someMethod(String param)"); + MetadataFileItem item2 = + buildMetadataFileItem("UID known class", "SomeClass#someMethod(String param)"); + MetadataFileItem item3 = + buildMetadataFileItem("UID method only", "#someMethod2(String p1, String p2)"); + classMetadataFile.getItems().addAll(Arrays.asList(ownerClassItem, item1, item2, item3)); + + MetadataFileItem reference1 = new MetadataFileItem("a.b.SomeClass.someMethod(String param)"); + reference1.setNameWithType("SomeClass.someMethod(String param)"); + MetadataFileItem reference2 = + new MetadataFileItem("a.b.OwnerClass.someMethod2(String p1, String p2)"); + reference2.setNameWithType("OwnerClass.someMethod2(String p1, String p2)"); + classMetadataFile.getReferences().addAll(Arrays.asList(reference1, reference2)); + + BuilderUtil.populateUidValues(Collections.emptyList(), Arrays.asList(classMetadataFile)); + + assertEquals( + "Wrong summary for unknown class", + item1.getSummary(), + "Bla bla UnknownClass bla"); + assertEquals( + "Wrong syntax description", + item1.getSyntax().getParameters().get(0).getDescription(), + "One two SomeClass#someMethod(String param) three"); + assertEquals( + "Wrong summary for known class", + item2.getSummary(), + "Bla bla SomeClass#someMethod(String param) bla"); + assertEquals( + "Wrong summary for method", + item3.getSummary(), + "Bla bla #someMethod2(String p1, String p2) bla"); + } + + private MetadataFileItem buildMetadataFileItem(String uid, String value) { + MetadataFileItem item = new MetadataFileItem(uid); + item.setSummary( + String.format( + "Bla bla %s bla", + value, value)); + return item; + } + + private void populateSyntax(MetadataFileItem item, String value) { + Syntax syntax = new Syntax(); + String methodParamDescription = + String.format( + "One two %s three", + value, value); + syntax.setParameters( + Arrays.asList( + new MethodParameter("method param id", "method param type", methodParamDescription))); + item.setSyntax(syntax); + } + + @Test + public void determineUidByLinkContent() { + Map lookup = + new HashMap<>() { + { put("SomeClass", "a.b.c.SomeClass"); put("SomeClass.someMethod()", "a.b.c.SomeClass.someMethod()"); put("SomeClass.someMethod(String param)", "a.b.c.SomeClass.someMethod(String param)"); - }}; - - LookupContext lookupContext = new LookupContext(lookup, lookup); - assertEquals("Wrong result for class", BuilderUtil. - resolveUidByLookup("SomeClass", lookupContext), "a.b.c.SomeClass"); - assertEquals("Wrong result for method", BuilderUtil. - resolveUidFromLinkContent("SomeClass#someMethod()", lookupContext), "a.b.c.SomeClass.someMethod()"); - assertEquals("Wrong result for method with param", BuilderUtil. - resolveUidFromLinkContent("SomeClass#someMethod(String param)", lookupContext), - "a.b.c.SomeClass.someMethod(String param)"); - - assertEquals("Wrong result for unknown class", BuilderUtil. - resolveUidByLookup("UnknownClass", lookupContext), ""); - assertEquals("Wrong result for null", BuilderUtil.resolveUidByLookup(null, lookupContext), ""); - assertEquals("Wrong result for whitespace", BuilderUtil.resolveUidByLookup(" ", lookupContext), ""); - } - - @Test - public void splitUidWithGenericsIntoClassNames() { - List result = BuilderUtil.splitUidWithGenericsIntoClassNames("a.b.c.List>"); - - assertEquals("Wrong result list size", result.size(), 3); - assertTrue("Wrong result list content", result.contains("a.b.c.List")); - assertTrue("Wrong result list content", result.contains("df.mn.ClassOne")); - assertTrue("Wrong result list content", result.contains("tr.T")); - } + } + }; + + LookupContext lookupContext = new LookupContext(lookup, lookup); + assertEquals( + "Wrong result for class", + BuilderUtil.resolveUidByLookup("SomeClass", lookupContext), + "a.b.c.SomeClass"); + assertEquals( + "Wrong result for method", + BuilderUtil.resolveUidFromLinkContent("SomeClass#someMethod()", lookupContext), + "a.b.c.SomeClass.someMethod()"); + assertEquals( + "Wrong result for method with param", + BuilderUtil.resolveUidFromLinkContent("SomeClass#someMethod(String param)", lookupContext), + "a.b.c.SomeClass.someMethod(String param)"); + + assertEquals( + "Wrong result for unknown class", + BuilderUtil.resolveUidByLookup("UnknownClass", lookupContext), + ""); + assertEquals("Wrong result for null", BuilderUtil.resolveUidByLookup(null, lookupContext), ""); + assertEquals( + "Wrong result for whitespace", BuilderUtil.resolveUidByLookup(" ", lookupContext), ""); + } + + @Test + public void splitUidWithGenericsIntoClassNames() { + List result = + BuilderUtil.splitUidWithGenericsIntoClassNames("a.b.c.List>"); + + assertEquals("Wrong result list size", result.size(), 3); + assertTrue("Wrong result list content", result.contains("a.b.c.List")); + assertTrue("Wrong result list content", result.contains("df.mn.ClassOne")); + assertTrue("Wrong result list content", result.contains("tr.T")); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java index cc170b23..9b8cbe97 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java @@ -15,6 +15,9 @@ */ package com.microsoft.build; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + import com.google.testing.compile.CompilationRule; import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; @@ -22,66 +25,65 @@ import com.microsoft.model.MetadataFileItem; import com.microsoft.util.ElementUtil; import com.sun.source.util.DocTrees; +import java.io.File; +import java.util.Collection; +import javax.lang.model.element.TypeElement; +import javax.lang.model.util.Elements; import jdk.javadoc.doclet.DocletEnvironment; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.mockito.Mockito; -import javax.lang.model.element.TypeElement; -import javax.lang.model.util.Elements; -import java.io.File; -import java.util.Collection; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - public class ClassBuilderTest { - @Rule - public CompilationRule rule = new CompilationRule(); - private Elements elements; - private ClassBuilder classBuilder; - private DocletEnvironment environment; - private DocTrees docTrees; + @Rule public CompilationRule rule = new CompilationRule(); + private Elements elements; + private ClassBuilder classBuilder; + private DocletEnvironment environment; + private DocTrees docTrees; - @Before - public void setup() { - elements = rule.getElements(); - environment = Mockito.mock(DocletEnvironment.class); - docTrees = Mockito.mock(DocTrees.class); - ElementUtil elementUtil = new ElementUtil(new String[0], new String[0]); - ClassLookup classLookup = new ClassLookup(environment, elementUtil); - classBuilder = new ClassBuilder( + @Before + public void setup() { + elements = rule.getElements(); + environment = Mockito.mock(DocletEnvironment.class); + docTrees = Mockito.mock(DocTrees.class); + ElementUtil elementUtil = new ElementUtil(new String[0], new String[0]); + ClassLookup classLookup = new ClassLookup(environment, elementUtil); + classBuilder = + new ClassBuilder( elementUtil, classLookup, new ClassItemsLookup(environment, elementUtil), "./target", new ReferenceBuilder(environment, classLookup, elementUtil)); - } - @Test - public void addConstructorsInfoWhenOnlyDefaultConstructor() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); - MetadataFile container = new MetadataFile("output", "name"); - when(environment.getElementUtils()).thenReturn(elements); - when(environment.getDocTrees()).thenReturn(docTrees); + } + + @Test + public void addConstructorsInfoWhenOnlyDefaultConstructor() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); + MetadataFile container = new MetadataFile("output", "name"); + when(environment.getElementUtils()).thenReturn(elements); + when(environment.getDocTrees()).thenReturn(docTrees); - classBuilder.addConstructorsInfo(element, container); + classBuilder.addConstructorsInfo(element, container); - assertEquals("Wrong file name", container.getFileNameWithPath(), "output" + File.separator + "name"); - assertEquals("Container should contain constructor item", container.getItems().size(), 1); - } + assertEquals( + "Wrong file name", container.getFileNameWithPath(), "output" + File.separator + "name"); + assertEquals("Container should contain constructor item", container.getItems().size(), 1); + } - @Test - public void addConstructorsInfo() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - MetadataFile container = new MetadataFile("output", "name"); - when(environment.getElementUtils()).thenReturn(elements); - when(environment.getDocTrees()).thenReturn(docTrees); + @Test + public void addConstructorsInfo() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + MetadataFile container = new MetadataFile("output", "name"); + when(environment.getElementUtils()).thenReturn(elements); + when(environment.getDocTrees()).thenReturn(docTrees); - classBuilder.addConstructorsInfo(element, container); + classBuilder.addConstructorsInfo(element, container); - assertEquals("Wrong file name", container.getFileNameWithPath(), "output" + File.separator + "name"); - Collection constructorItems = container.getItems(); - assertEquals("Container should contain 2 constructor items", constructorItems.size(), 2); - } -} \ No newline at end of file + assertEquals( + "Wrong file name", container.getFileNameWithPath(), "output" + File.separator + "name"); + Collection constructorItems = container.getItems(); + assertEquals("Container should contain 2 constructor items", constructorItems.size(), 2); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/LookupContextTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/LookupContextTest.java index 1c8872b3..b634e355 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/LookupContextTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/LookupContextTest.java @@ -1,52 +1,53 @@ package com.microsoft.build; -import org.junit.Before; -import org.junit.Test; +import static org.junit.Assert.*; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; - -import static org.junit.Assert.*; +import org.junit.Before; +import org.junit.Test; public class LookupContextTest { - private LookupContext lookupContext; - private Map globalLookup = new HashMap<>(); - private Map localLookup = new LinkedHashMap<>(); - private String[] localKeys = {"local key 1", "local key 2"}; - private String[] localValues = {"local value 1", "local value 2"}; - private String globalKey = "global key"; - private String globalValue = "global value"; - private String unknownKey = "unknown key"; - - @Before - public void setUp() { - localLookup.put(localKeys[0], localValues[0]); - localLookup.put(localKeys[1], localValues[1]); - globalLookup.put(globalKey, globalValue); - globalLookup.putAll(localLookup); - lookupContext = new LookupContext(globalLookup, localLookup); - } - - @Test - public void resolve() { - assertEquals("Wrong value for global key", lookupContext.resolve(globalKey), globalValue); - assertEquals("Wrong value for local key 1", lookupContext.resolve(localKeys[0]), localValues[0]); - assertEquals("Wrong value for local key 2", lookupContext.resolve(localKeys[1]), localValues[1]); - assertNull("Wrong value for unknown key", lookupContext.resolve(unknownKey)); - } - - @Test - public void getOwnerUid() { - assertEquals("Wrong ownerUid", lookupContext.getOwnerUid(), localKeys[0]); - } - - @Test - public void containsKey() { - assertTrue("Wrong value for global key", lookupContext.containsKey(globalKey)); - assertTrue("Wrong value for local key 1", lookupContext.containsKey(localKeys[0])); - assertTrue("Wrong value for local key 2", lookupContext.containsKey(localKeys[1])); - assertFalse("Wrong value for unknown key", lookupContext.containsKey(unknownKey)); - } + private LookupContext lookupContext; + private Map globalLookup = new HashMap<>(); + private Map localLookup = new LinkedHashMap<>(); + private String[] localKeys = {"local key 1", "local key 2"}; + private String[] localValues = {"local value 1", "local value 2"}; + private String globalKey = "global key"; + private String globalValue = "global value"; + private String unknownKey = "unknown key"; + + @Before + public void setUp() { + localLookup.put(localKeys[0], localValues[0]); + localLookup.put(localKeys[1], localValues[1]); + globalLookup.put(globalKey, globalValue); + globalLookup.putAll(localLookup); + lookupContext = new LookupContext(globalLookup, localLookup); + } + + @Test + public void resolve() { + assertEquals("Wrong value for global key", lookupContext.resolve(globalKey), globalValue); + assertEquals( + "Wrong value for local key 1", lookupContext.resolve(localKeys[0]), localValues[0]); + assertEquals( + "Wrong value for local key 2", lookupContext.resolve(localKeys[1]), localValues[1]); + assertNull("Wrong value for unknown key", lookupContext.resolve(unknownKey)); + } + + @Test + public void getOwnerUid() { + assertEquals("Wrong ownerUid", lookupContext.getOwnerUid(), localKeys[0]); + } + + @Test + public void containsKey() { + assertTrue("Wrong value for global key", lookupContext.containsKey(globalKey)); + assertTrue("Wrong value for local key 1", lookupContext.containsKey(localKeys[0])); + assertTrue("Wrong value for local key 2", lookupContext.containsKey(localKeys[1])); + assertFalse("Wrong value for unknown key", lookupContext.containsKey(unknownKey)); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/LookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/LookupTest.java index a3e85226..60de26bc 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/LookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/LookupTest.java @@ -1,84 +1,93 @@ package com.microsoft.build; +import static org.junit.Assert.*; + import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; -import org.junit.Before; -import org.junit.Test; - import java.util.ArrayList; import java.util.List; - -import static org.junit.Assert.*; +import org.junit.Before; +import org.junit.Test; public class LookupTest { - private Lookup lookup; - private String packageUid = "package uid"; - private String packageNameWithType = "package name with type"; - private String classUid = "com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String,boolean)"; - private String classNameWithType = "Person.setFirstName(String firstName, boolean flag)"; + private Lookup lookup; + private String packageUid = "package uid"; + private String packageNameWithType = "package name with type"; + private String classUid = + "com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String,boolean)"; + private String classNameWithType = "Person.setFirstName(String firstName, boolean flag)"; - private List packageFiles = new ArrayList<>() {{ - MetadataFile packageFile = new MetadataFile("package path", "package name"); - packageFile.getItems().add(buildMetadataFileItem(packageUid, packageNameWithType)); - add(packageFile); - }}; - private List classFiles = new ArrayList<>() {{ - MetadataFile classFile = new MetadataFile("class path", "class name"); - classFile.getItems().add(buildMetadataFileItem(classUid, classNameWithType)); - add(classFile); - }}; + private List packageFiles = + new ArrayList<>() { + { + MetadataFile packageFile = new MetadataFile("package path", "package name"); + packageFile.getItems().add(buildMetadataFileItem(packageUid, packageNameWithType)); + add(packageFile); + } + }; + private List classFiles = + new ArrayList<>() { + { + MetadataFile classFile = new MetadataFile("class path", "class name"); + classFile.getItems().add(buildMetadataFileItem(classUid, classNameWithType)); + add(classFile); + } + }; - @Before - public void setUp() { - lookup = new Lookup(packageFiles, classFiles); - } + @Before + public void setUp() { + lookup = new Lookup(packageFiles, classFiles); + } - @Test - public void buildContext() { - LookupContext context = lookup.buildContext(classFiles.get(0)); + @Test + public void buildContext() { + LookupContext context = lookup.buildContext(classFiles.get(0)); - String[] localKeys = { - // Uid as is - "com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String,boolean)", - // Uid as is with spaces between params - "com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String, boolean)", - // Uid with param types without package - "com.microsoft.samples.subpackage.Person.setFirstName(String,boolean)", - // Uid with param types without package with spaces between params - "com.microsoft.samples.subpackage.Person.setFirstName(String, boolean)", - // Uid without package - "Person.setFirstName(java.lang.String,boolean)", - // Uid without package with spaces between params - "Person.setFirstName(java.lang.String, boolean)", + String[] localKeys = { + // Uid as is + "com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String,boolean)", + // Uid as is with spaces between params + "com.microsoft.samples.subpackage.Person.setFirstName(java.lang.String, boolean)", + // Uid with param types without package + "com.microsoft.samples.subpackage.Person.setFirstName(String,boolean)", + // Uid with param types without package with spaces between params + "com.microsoft.samples.subpackage.Person.setFirstName(String, boolean)", + // Uid without package + "Person.setFirstName(java.lang.String,boolean)", + // Uid without package with spaces between params + "Person.setFirstName(java.lang.String, boolean)", - // Name with type as is - "Person.setFirstName(String, boolean)", - // Name with type without generics - "Person.setFirstName(String firstName, boolean flag)", - // Name with type without generics and param names - "Person.setFirstName(String, boolean)", - // Name with type without generics and param names without spaces between params - "Person.setFirstName(String,boolean)" - }; - assertEquals("Wrong owner uid", context.getOwnerUid(), "Person.setFirstName(String firstName, boolean flag)"); + // Name with type as is + "Person.setFirstName(String, boolean)", + // Name with type without generics + "Person.setFirstName(String firstName, boolean flag)", + // Name with type without generics and param names + "Person.setFirstName(String, boolean)", + // Name with type without generics and param names without spaces between params + "Person.setFirstName(String,boolean)" + }; + assertEquals( + "Wrong owner uid", + context.getOwnerUid(), + "Person.setFirstName(String firstName, boolean flag)"); - for (String localKey : localKeys) { - assertTrue("Context should contain local key=" + localKey, context.containsKey(localKey)); - assertEquals("Wrong value for local key=" + localKey, context.resolve(localKey), classUid); - } + for (String localKey : localKeys) { + assertTrue("Context should contain local key=" + localKey, context.containsKey(localKey)); + assertEquals("Wrong value for local key=" + localKey, context.resolve(localKey), classUid); + } - assertTrue("Context should contain global key", context.containsKey(packageNameWithType)); - assertTrue("Context should contain global value as a key", context.containsKey(packageUid)); - assertEquals("Wrong value for global key", context.resolve(packageNameWithType), packageUid); - assertEquals("Wrong value for local value as a key", context.resolve(packageUid), packageUid); + assertTrue("Context should contain global key", context.containsKey(packageNameWithType)); + assertTrue("Context should contain global value as a key", context.containsKey(packageUid)); + assertEquals("Wrong value for global key", context.resolve(packageNameWithType), packageUid); + assertEquals("Wrong value for local value as a key", context.resolve(packageUid), packageUid); - assertFalse("Context shouldn't contain unknown key", context.containsKey("unknown key")); - } + assertFalse("Context shouldn't contain unknown key", context.containsKey("unknown key")); + } - private MetadataFileItem buildMetadataFileItem(String uid, String nameWithType) { - MetadataFileItem result = new MetadataFileItem(uid); - result.setNameWithType(nameWithType); - return result; - } + private MetadataFileItem buildMetadataFileItem(String uid, String nameWithType) { + MetadataFileItem result = new MetadataFileItem(uid); + result.setNameWithType(nameWithType); + return result; + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java index b4509a2f..71354f42 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java @@ -15,99 +15,110 @@ */ package com.microsoft.build; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import com.microsoft.lookup.ClassLookup; import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; import com.microsoft.util.ElementUtil; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import jdk.javadoc.doclet.DocletEnvironment; import org.apache.commons.lang3.RegExUtils; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - public class ReferenceBuilderTest { - private ReferenceBuilder referenceBuilder; - - @Before - public void setup() { - DocletEnvironment environment = Mockito.mock(DocletEnvironment.class); - ElementUtil elementUtil = new ElementUtil(new String[0], new String[0]); - ClassLookup classLookup = new ClassLookup(environment, elementUtil); - referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); - } - - @Test - public void expandComplexGenericsInReferences() { - MetadataFile classMetadataFile = new MetadataFile("path", "name"); - MetadataFileItem referenceItem = new MetadataFileItem("a.b.c.List>"); - Set references = classMetadataFile.getReferences(); - references.add(referenceItem); - - referenceBuilder.expandComplexGenericsInReferences(classMetadataFile); - - assertEquals("Wrong references amount", references.size(), 4); - - List content = references.stream().map(MetadataFileItem::getUid).collect(Collectors.toList()); - assertTrue("Wrong references content", content.contains("a.b.c.List")); - assertTrue("Wrong references content", content.contains("df.mn.ClassOne")); - assertTrue("Wrong references content", content.contains("tr.T")); - assertTrue("Wrong references content", content.contains("a.b.c.List>")); - } - - //todo add test case to cover reference item with in package - @Test - public void buildRefItem() { - buildRefItemAndCheckAssertions("java.lang.Some.String", "java.lang.Some.String", "String"); - buildRefItemAndCheckAssertions("java.lang.Some.String[]", "java.lang.Some.String[]", "String"); - } - - private void buildRefItemAndCheckAssertions(String initialValue, String expectedUid, String expectedName) { - MetadataFileItem result = referenceBuilder.buildRefItem(initialValue); - - assertEquals("Wrong uid", result.getUid(), expectedUid); - assertEquals("Wrong name", result.getSpecForJava().iterator().next().getUid(), RegExUtils.removeAll(expectedUid, "\\[\\]$")); - assertEquals("Wrong name", result.getSpecForJava().iterator().next().getName(), expectedName); - assertEquals("Wrong fullName", result.getSpecForJava().iterator().next().getFullName(), RegExUtils.removeAll(expectedUid, "\\[\\]$")); - } - - @Test - public void getJavaReferenceHref() { - String result1 = referenceBuilder.getJavaReferenceHref("java.lang.Object"); - String result2 = referenceBuilder.getJavaReferenceHref("java.lang.Object.equals(java.lang.Object)"); - String result3 = referenceBuilder.getJavaReferenceHref("java.lang.Object.notify()"); - String result4 = referenceBuilder.getJavaReferenceHref("java.util.List"); - String result5 = referenceBuilder.getJavaReferenceHref("java.lang.Object.wait(long,int)"); - String result6 = referenceBuilder.getJavaReferenceHref("java.lang.Object.getClass()"); - String result7 = referenceBuilder.getJavaReferenceHref("java.io.IOException"); - String result8 = referenceBuilder.getJavaReferenceHref("java.io.InputStream"); - String result9 = referenceBuilder.getJavaReferenceHref("java.lang.Enum.hashCode()"); - String result10 = referenceBuilder.getJavaReferenceHref("java.nio.ByteBuffer"); - String result11 = referenceBuilder.getJavaReferenceHref("java.lang.Enum.valueOf(java.lang.Class,java.lang.String)"); - String result12 = referenceBuilder.getJavaReferenceHref(""); - String result13 = referenceBuilder.getJavaReferenceHref(null); - - String baseURL = "https://docs.oracle.com/javase/8/docs/api/"; - - assertEquals(baseURL + "java/lang/Object.html", result1); - assertEquals(baseURL + "java/lang/Object.html#equals-java.lang.Object-", result2); - assertEquals(baseURL + "java/lang/Object.html#notify--", result3); - assertEquals(baseURL + "java/util/List.html", result4); - assertEquals(baseURL + "java/lang/Object.html#wait-long-int-", result5); - assertEquals(baseURL + "java/lang/Object.html#getClass--", result6); - assertEquals(baseURL + "java/io/IOException.html", result7); - assertEquals(baseURL + "java/io/InputStream.html", result8); - assertEquals(baseURL + "java/lang/Enum.html#hashCode--", result9); - assertEquals(baseURL + "java/nio/ByteBuffer.html", result10); - assertEquals(baseURL + "java/lang/Enum.html#valueOf-java.lang.Class-java.lang.String-", result11); - assertEquals(baseURL, result12); - assertEquals(baseURL, result13); - } -} \ No newline at end of file + private ReferenceBuilder referenceBuilder; + + @Before + public void setup() { + DocletEnvironment environment = Mockito.mock(DocletEnvironment.class); + ElementUtil elementUtil = new ElementUtil(new String[0], new String[0]); + ClassLookup classLookup = new ClassLookup(environment, elementUtil); + referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); + } + + @Test + public void expandComplexGenericsInReferences() { + MetadataFile classMetadataFile = new MetadataFile("path", "name"); + MetadataFileItem referenceItem = new MetadataFileItem("a.b.c.List>"); + Set references = classMetadataFile.getReferences(); + references.add(referenceItem); + + referenceBuilder.expandComplexGenericsInReferences(classMetadataFile); + + assertEquals("Wrong references amount", references.size(), 4); + + List content = + references.stream().map(MetadataFileItem::getUid).collect(Collectors.toList()); + assertTrue("Wrong references content", content.contains("a.b.c.List")); + assertTrue("Wrong references content", content.contains("df.mn.ClassOne")); + assertTrue("Wrong references content", content.contains("tr.T")); + assertTrue("Wrong references content", content.contains("a.b.c.List>")); + } + + // todo add test case to cover reference item with in package + @Test + public void buildRefItem() { + buildRefItemAndCheckAssertions("java.lang.Some.String", "java.lang.Some.String", "String"); + buildRefItemAndCheckAssertions("java.lang.Some.String[]", "java.lang.Some.String[]", "String"); + } + + private void buildRefItemAndCheckAssertions( + String initialValue, String expectedUid, String expectedName) { + MetadataFileItem result = referenceBuilder.buildRefItem(initialValue); + + assertEquals("Wrong uid", result.getUid(), expectedUid); + assertEquals( + "Wrong name", + result.getSpecForJava().iterator().next().getUid(), + RegExUtils.removeAll(expectedUid, "\\[\\]$")); + assertEquals("Wrong name", result.getSpecForJava().iterator().next().getName(), expectedName); + assertEquals( + "Wrong fullName", + result.getSpecForJava().iterator().next().getFullName(), + RegExUtils.removeAll(expectedUid, "\\[\\]$")); + } + + @Test + public void getJavaReferenceHref() { + String result1 = referenceBuilder.getJavaReferenceHref("java.lang.Object"); + String result2 = + referenceBuilder.getJavaReferenceHref("java.lang.Object.equals(java.lang.Object)"); + String result3 = referenceBuilder.getJavaReferenceHref("java.lang.Object.notify()"); + String result4 = referenceBuilder.getJavaReferenceHref("java.util.List"); + String result5 = referenceBuilder.getJavaReferenceHref("java.lang.Object.wait(long,int)"); + String result6 = referenceBuilder.getJavaReferenceHref("java.lang.Object.getClass()"); + String result7 = referenceBuilder.getJavaReferenceHref("java.io.IOException"); + String result8 = referenceBuilder.getJavaReferenceHref("java.io.InputStream"); + String result9 = referenceBuilder.getJavaReferenceHref("java.lang.Enum.hashCode()"); + String result10 = referenceBuilder.getJavaReferenceHref("java.nio.ByteBuffer"); + String result11 = + referenceBuilder.getJavaReferenceHref( + "java.lang.Enum.valueOf(java.lang.Class,java.lang.String)"); + String result12 = referenceBuilder.getJavaReferenceHref(""); + String result13 = referenceBuilder.getJavaReferenceHref(null); + + String baseURL = "https://docs.oracle.com/javase/8/docs/api/"; + + assertEquals(baseURL + "java/lang/Object.html", result1); + assertEquals(baseURL + "java/lang/Object.html#equals-java.lang.Object-", result2); + assertEquals(baseURL + "java/lang/Object.html#notify--", result3); + assertEquals(baseURL + "java/util/List.html", result4); + assertEquals(baseURL + "java/lang/Object.html#wait-long-int-", result5); + assertEquals(baseURL + "java/lang/Object.html#getClass--", result6); + assertEquals(baseURL + "java/io/IOException.html", result7); + assertEquals(baseURL + "java/io/InputStream.html", result8); + assertEquals(baseURL + "java/lang/Enum.html#hashCode--", result9); + assertEquals(baseURL + "java/nio/ByteBuffer.html", result10); + assertEquals( + baseURL + "java/lang/Enum.html#valueOf-java.lang.Class-java.lang.String-", result11); + assertEquals(baseURL, result12); + assertEquals(baseURL, result13); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java index f5905351..bbfbf423 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java @@ -1,7 +1,11 @@ package com.microsoft.build; +import static org.junit.Assert.assertEquals; + import com.microsoft.model.TocItem; import com.microsoft.model.TocTypeMap; +import java.util.List; +import javax.lang.model.element.ElementKind; import jdk.javadoc.doclet.DocletEnvironment; import org.junit.Before; import org.junit.Test; @@ -9,53 +13,55 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import javax.lang.model.element.ElementKind; -import java.util.List; - -import static org.junit.Assert.assertEquals; - @RunWith(MockitoJUnitRunner.class) public class YmlFilesBuilderTest { - private YmlFilesBuilder ymlFilesBuilder; - private DocletEnvironment environment; + private YmlFilesBuilder ymlFilesBuilder; + private DocletEnvironment environment; - @Before - public void setup() { - environment = Mockito.mock(DocletEnvironment.class); - ymlFilesBuilder = new YmlFilesBuilder(environment, "./target", new String[]{}, new String[]{}, "google-cloud-product", false); - } + @Before + public void setup() { + environment = Mockito.mock(DocletEnvironment.class); + ymlFilesBuilder = + new YmlFilesBuilder( + environment, + "./target", + new String[] {}, + new String[] {}, + "google-cloud-product", + false); + } - @Test - public void joinTocTypeItems(){ - TocTypeMap typeMap = new TocTypeMap(); - TocItem classToc = new TocItem("uid1", "name1"); - TocItem interfaceToc = new TocItem("uid2", "name2"); - TocItem enumToc = new TocItem("uid3", "name3"); - TocItem annotationToc = new TocItem("uid4", "name4"); - TocItem exceptionToc = new TocItem("uid5", "name5"); + @Test + public void joinTocTypeItems() { + TocTypeMap typeMap = new TocTypeMap(); + TocItem classToc = new TocItem("uid1", "name1"); + TocItem interfaceToc = new TocItem("uid2", "name2"); + TocItem enumToc = new TocItem("uid3", "name3"); + TocItem annotationToc = new TocItem("uid4", "name4"); + TocItem exceptionToc = new TocItem("uid5", "name5"); - typeMap.get(ElementKind.CLASS.name()).add(classToc); - typeMap.get(ElementKind.INTERFACE.name()).add(interfaceToc); - typeMap.get(ElementKind.ENUM.name()).add(enumToc); - typeMap.get(ElementKind.ANNOTATION_TYPE.name()).add(annotationToc); - typeMap.get("EXCEPTION").add(exceptionToc); + typeMap.get(ElementKind.CLASS.name()).add(classToc); + typeMap.get(ElementKind.INTERFACE.name()).add(interfaceToc); + typeMap.get(ElementKind.ENUM.name()).add(enumToc); + typeMap.get(ElementKind.ANNOTATION_TYPE.name()).add(annotationToc); + typeMap.get("EXCEPTION").add(exceptionToc); - List tocItems = ymlFilesBuilder.joinTocTypeItems(typeMap); + List tocItems = ymlFilesBuilder.joinTocTypeItems(typeMap); - assertEquals("Interfaces", tocItems.get(0).getHeading()); - assertEquals(interfaceToc, tocItems.get(1)); + assertEquals("Interfaces", tocItems.get(0).getHeading()); + assertEquals(interfaceToc, tocItems.get(1)); - assertEquals("Classes", tocItems.get(2).getHeading()); - assertEquals(classToc, tocItems.get(3)); + assertEquals("Classes", tocItems.get(2).getHeading()); + assertEquals(classToc, tocItems.get(3)); - assertEquals("Enums", tocItems.get(4).getHeading()); - assertEquals(enumToc, tocItems.get(5)); + assertEquals("Enums", tocItems.get(4).getHeading()); + assertEquals(enumToc, tocItems.get(5)); - assertEquals("Annotation Types", tocItems.get(6).getHeading()); - assertEquals(annotationToc, tocItems.get(7)); + assertEquals("Annotation Types", tocItems.get(6).getHeading()); + assertEquals(annotationToc, tocItems.get(7)); - assertEquals("Exceptions", tocItems.get(8).getHeading()); - assertEquals(exceptionToc, tocItems.get(9)); - } -} \ No newline at end of file + assertEquals("Exceptions", tocItems.get(8).getHeading()); + assertEquals(exceptionToc, tocItems.get(9)); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocFxDocletTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocFxDocletTest.java index 47caf06d..d342f780 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocFxDocletTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocFxDocletTest.java @@ -1,65 +1,65 @@ package com.microsoft.doclet; +import static org.junit.Assert.assertEquals; + import com.microsoft.doclet.DocFxDoclet.CustomOption; import com.microsoft.doclet.DocFxDoclet.FakeOptionForCompatibilityWithStandardDoclet; +import java.util.Arrays; +import java.util.List; +import javax.lang.model.SourceVersion; import jdk.javadoc.doclet.Doclet.Option.Kind; import org.junit.Before; import org.junit.Test; -import javax.lang.model.SourceVersion; -import java.util.Arrays; -import java.util.List; - -import static org.junit.Assert.assertEquals; - public class DocFxDocletTest { - private DocFxDoclet doclet; + private DocFxDoclet doclet; - @Before - public void setup() { - doclet = new DocFxDoclet(); - } + @Before + public void setup() { + doclet = new DocFxDoclet(); + } - @Test - public void getSupportedSourceVersion() { - assertEquals("Wrong version used", doclet.getSupportedSourceVersion(), SourceVersion.latest()); - } + @Test + public void getSupportedSourceVersion() { + assertEquals("Wrong version used", doclet.getSupportedSourceVersion(), SourceVersion.latest()); + } - @Test - public void getDocletName() { - assertEquals("Wrong doclet name", doclet.getName(), "DocFxDoclet"); - } + @Test + public void getDocletName() { + assertEquals("Wrong doclet name", doclet.getName(), "DocFxDoclet"); + } - @Test - public void testCustomOptionCreation() { - String description = "Some desc"; - List names = Arrays.asList("name 1", "name 2"); - String params = "Some params"; + @Test + public void testCustomOptionCreation() { + String description = "Some desc"; + List names = Arrays.asList("name 1", "name 2"); + String params = "Some params"; - CustomOption option = new CustomOption(description, names, params) { - @Override - public boolean process(String option, List arguments) { - return false; - } + CustomOption option = + new CustomOption(description, names, params) { + @Override + public boolean process(String option, List arguments) { + return false; + } }; - assertEquals("Wrong args count", option.getArgumentCount(), 1); - assertEquals("Wrong description", option.getDescription(), description); - assertEquals("Wrong kind", option.getKind(), Kind.STANDARD); - assertEquals("Wrong names", option.getNames(), names); - assertEquals("Wrong params", option.getParameters(), params); - } + assertEquals("Wrong args count", option.getArgumentCount(), 1); + assertEquals("Wrong description", option.getDescription(), description); + assertEquals("Wrong kind", option.getKind(), Kind.STANDARD); + assertEquals("Wrong names", option.getNames(), names); + assertEquals("Wrong params", option.getParameters(), params); + } - @Test - public void testFakeOptionCreation() { - FakeOptionForCompatibilityWithStandardDoclet option = - new FakeOptionForCompatibilityWithStandardDoclet("Some description", "title"); + @Test + public void testFakeOptionCreation() { + FakeOptionForCompatibilityWithStandardDoclet option = + new FakeOptionForCompatibilityWithStandardDoclet("Some description", "title"); - assertEquals("Wrong args count", option.getArgumentCount(), 1); - assertEquals("Wrong description", option.getDescription(), "Some description"); - assertEquals("Wrong kind", option.getKind(), Kind.STANDARD); - assertEquals("Wrong names", option.getNames(), Arrays.asList("title")); - assertEquals("Wrong params", option.getParameters(), "none"); - } + assertEquals("Wrong args count", option.getArgumentCount(), 1); + assertEquals("Wrong description", option.getDescription(), "Some description"); + assertEquals("Wrong kind", option.getKind(), Kind.STANDARD); + assertEquals("Wrong names", option.getNames(), Arrays.asList("title")); + assertEquals("Wrong params", option.getParameters(), "none"); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java index 0a4ac777..1974c5cb 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java @@ -1,10 +1,9 @@ package com.microsoft.doclet; -import com.microsoft.util.FileUtilTest; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import com.microsoft.util.FileUtilTest; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStream; @@ -12,78 +11,87 @@ import java.nio.file.Path; import java.util.List; import java.util.stream.Collectors; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; public class DocletRunnerTest { - private final String PARAMS_DIR = "src/test/resources/test-doclet-params.txt"; - private final String EXPECTED_GENERATED_FILES_DIR = "src/test/resources/expected-generated-files"; - private final String OUTPUT_DIR = "target/test-out"; - - private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); - private final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); - private final PrintStream originalOut = System.out; - private final PrintStream originalErr = System.err; - - @Before - public void cleanup() throws IOException { - FileUtilTest.deleteDirectory(OUTPUT_DIR); - - System.setOut(new PrintStream(outContent)); - System.setErr(new PrintStream(errContent)); - } - - @After - public void restoreStreams() { - System.setOut(originalOut); - System.setErr(originalErr); - } - - @Test - public void testFilesGenerationWhenNoParams() { - DocletRunner.main(new String[]{}); - - assertEquals("Wrong System.err content", - errContent.toString().trim(), "Usage: java DocletRunner "); - } - - @Test - public void testFilesGenerationWhenTargetFileDoesNotExist() { - try { - DocletRunner.main(new String[]{"some-name.txt"}); - fail(); - } catch (RuntimeException ex) { - assertEquals("Wrong System.err content", - errContent.toString().trim(), "File 'some-name.txt' does not exist"); - } + private final String PARAMS_DIR = "src/test/resources/test-doclet-params.txt"; + private final String EXPECTED_GENERATED_FILES_DIR = "src/test/resources/expected-generated-files"; + private final String OUTPUT_DIR = "target/test-out"; + + private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + private final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); + private final PrintStream originalOut = System.out; + private final PrintStream originalErr = System.err; + + @Before + public void cleanup() throws IOException { + FileUtilTest.deleteDirectory(OUTPUT_DIR); + + System.setOut(new PrintStream(outContent)); + System.setErr(new PrintStream(errContent)); + } + + @After + public void restoreStreams() { + System.setOut(originalOut); + System.setErr(originalErr); + } + + @Test + public void testFilesGenerationWhenNoParams() { + DocletRunner.main(new String[] {}); + + assertEquals( + "Wrong System.err content", + errContent.toString().trim(), + "Usage: java DocletRunner "); + } + + @Test + public void testFilesGenerationWhenTargetFileDoesNotExist() { + try { + DocletRunner.main(new String[] {"some-name.txt"}); + fail(); + } catch (RuntimeException ex) { + assertEquals( + "Wrong System.err content", + errContent.toString().trim(), + "File 'some-name.txt' does not exist"); } + } - @Test - public void testFilesGeneration() throws IOException { - DocletRunner.main(new String[]{PARAMS_DIR}); + @Test + public void testFilesGeneration() throws IOException { + DocletRunner.main(new String[] {PARAMS_DIR}); - List expectedFilePaths = Files.list(Path.of(EXPECTED_GENERATED_FILES_DIR)).collect(Collectors.toList()); - List generatedFilePaths = Files.list(Path.of(OUTPUT_DIR)).collect(Collectors.toList()); - assertEquals("Wrong files count", generatedFilePaths.size(), expectedFilePaths.size()); + List expectedFilePaths = + Files.list(Path.of(EXPECTED_GENERATED_FILES_DIR)).collect(Collectors.toList()); + List generatedFilePaths = Files.list(Path.of(OUTPUT_DIR)).collect(Collectors.toList()); + assertEquals("Wrong files count", generatedFilePaths.size(), expectedFilePaths.size()); - for (Path expectedFilePath : expectedFilePaths) { - Path generatedFilePath = Path.of(OUTPUT_DIR, expectedFilePath.getFileName().toString()); + for (Path expectedFilePath : expectedFilePaths) { + Path generatedFilePath = Path.of(OUTPUT_DIR, expectedFilePath.getFileName().toString()); - String generatedFileContent = Files.readString(generatedFilePath); - String expectedFileContent = Files.readString(expectedFilePath); + String generatedFileContent = Files.readString(generatedFilePath); + String expectedFileContent = Files.readString(expectedFilePath); - String[] generatedFileLines = generatedFileContent.split("\n"); - String[] expectedFileLines = expectedFileContent.split("\n"); + String[] generatedFileLines = generatedFileContent.split("\n"); + String[] expectedFileLines = expectedFileContent.split("\n"); - assertEquals("Unexpected amount of lines in file " + generatedFilePath, generatedFileLines.length, - expectedFileLines.length); + assertEquals( + "Unexpected amount of lines in file " + generatedFilePath, + generatedFileLines.length, + expectedFileLines.length); - for (int i = 0; i < generatedFileLines.length; i++) { - assertEquals("Wrong file content for file " + generatedFilePath, - generatedFileLines[i], expectedFileLines[i]); - } - } + for (int i = 0; i < generatedFileLines.length; i++) { + assertEquals( + "Wrong file content for file " + generatedFilePath, + generatedFileLines[i], + expectedFileLines[i]); + } } + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java index 4078facd..f53a7594 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java @@ -1,11 +1,21 @@ package com.microsoft.lookup; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.mockito.Mockito.*; + import com.google.testing.compile.CompilationRule; import com.microsoft.lookup.model.ExtendedMetadataFileItem; import com.microsoft.model.*; import com.sun.source.doctree.*; import com.sun.source.doctree.DocTree.Kind; import com.sun.source.util.DocTrees; +import java.util.Arrays; +import java.util.Collections; +import java.util.Set; +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import javax.lang.model.util.Elements; import jdk.javadoc.doclet.DocletEnvironment; import org.junit.Before; import org.junit.Rule; @@ -14,245 +24,285 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; -import javax.lang.model.element.PackageElement; -import javax.lang.model.element.TypeElement; -import javax.lang.model.util.Elements; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Set; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.mockito.Mockito.*; - @RunWith(MockitoJUnitRunner.class) public class BaseLookupTest { - @Rule - public CompilationRule rule = new CompilationRule(); - private Elements elements; - private DocletEnvironment environment; - private DocTrees docTrees; - private DocCommentTree docCommentTree; - private TextTree textTree; - private LinkTree linkTree; - private ReferenceTree referenceTree; - private LiteralTree literalTree; - private TypeElement typeElement; - private BaseLookup baseLookup; - private ExtendedMetadataFileItem lastBuiltItem; - - @Before - public void setup() { - elements = rule.getElements(); - environment = Mockito.mock(DocletEnvironment.class); - docTrees = Mockito.mock(DocTrees.class); - docCommentTree = Mockito.mock(DocCommentTree.class); - textTree = Mockito.mock(TextTree.class); - linkTree = Mockito.mock(LinkTree.class); - referenceTree = Mockito.mock(ReferenceTree.class); - literalTree = Mockito.mock(LiteralTree.class); - typeElement = Mockito.mock(TypeElement.class); - - baseLookup = new BaseLookup<>(environment) { - @Override - protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) { - lastBuiltItem = buildExtendedMetadataFileItem(element); - return lastBuiltItem; - } + @Rule public CompilationRule rule = new CompilationRule(); + private Elements elements; + private DocletEnvironment environment; + private DocTrees docTrees; + private DocCommentTree docCommentTree; + private TextTree textTree; + private LinkTree linkTree; + private ReferenceTree referenceTree; + private LiteralTree literalTree; + private TypeElement typeElement; + private BaseLookup baseLookup; + private ExtendedMetadataFileItem lastBuiltItem; + + @Before + public void setup() { + elements = rule.getElements(); + environment = Mockito.mock(DocletEnvironment.class); + docTrees = Mockito.mock(DocTrees.class); + docCommentTree = Mockito.mock(DocCommentTree.class); + textTree = Mockito.mock(TextTree.class); + linkTree = Mockito.mock(LinkTree.class); + referenceTree = Mockito.mock(ReferenceTree.class); + literalTree = Mockito.mock(LiteralTree.class); + typeElement = Mockito.mock(TypeElement.class); + + baseLookup = + new BaseLookup<>(environment) { + @Override + protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) { + lastBuiltItem = buildExtendedMetadataFileItem(element); + return lastBuiltItem; + } }; - } - - @Test - public void determineComment() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(element)).thenReturn(docCommentTree); - doReturn(Arrays.asList(textTree, linkTree)).when(docCommentTree).getFullBody(); - when(textTree.getKind()).thenReturn(Kind.TEXT); - when(linkTree.getKind()).thenReturn(Kind.LINK); - when(linkTree.getReference()).thenReturn(referenceTree); - when(referenceTree.getSignature()).thenReturn("Some#signature"); - when(textTree.toString()).thenReturn("Some text 1"); - - String result = baseLookup.determineComment(element); - - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(element); - verify(docCommentTree).getFullBody(); - verify(textTree).getKind(); - verify(linkTree).getKind(); - verify(linkTree).getReference(); - verify(linkTree).getLabel(); - assertEquals("Wrong result", result, "Some text 1Some#signature"); - } - - @Test - public void makeTypeShort() { - assertEquals("Wrong result for primitive type", baseLookup.makeTypeShort("int"), "int"); - assertEquals("Wrong result", baseLookup.makeTypeShort("java.lang.String"), "String"); - assertEquals("Wrong result for inner class", - baseLookup.makeTypeShort("org.apache.commons.lang3.arch.Processor.Arch"), "Processor.Arch"); - assertEquals("Wrong result for class with generic", - baseLookup.makeTypeShort("java.util.List"), "List"); - assertEquals("Wrong result for inner class with generic", - baseLookup.makeTypeShort("java.util.List.Custom"), "List.Custom"); - assertEquals("Wrong result for inner class with complex generic", - baseLookup.makeTypeShort("a.b.c.D.E.G>>"), "D.E.G>>"); - assertEquals("Wrong result for inner class with generic & inheritance", - baseLookup.makeTypeShort("a.b.G"), "G"); - } - - @Test - public void buildXrefTag() { - when(linkTree.getReference()).thenReturn(referenceTree); - when(referenceTree.getSignature()).thenReturn("Some#signature"); - when(linkTree.getLabel()).thenReturn(Collections.emptyList()); - - String result = baseLookup.buildXrefTag(linkTree); - - assertEquals("Wrong result", result, - "Some#signature"); - } - - @Test - public void buildXrefTagWhenLabelPresents() { - when(linkTree.getReference()).thenReturn(referenceTree); - when(referenceTree.getSignature()).thenReturn("Some#signature"); - doReturn(Arrays.asList(textTree)).when(linkTree).getLabel(); - String labelValue = "IamLabel"; - when(textTree.toString()).thenReturn(labelValue); - - String result = baseLookup.buildXrefTag(linkTree); - - assertEquals("Wrong result", result, - "" + labelValue + ""); - } - - @Test - public void buildCodeTag() { - String tagContent = "Some text ≤"; - when(literalTree.getBody()).thenReturn(textTree); - when(textTree.toString()).thenReturn(tagContent); - - String result = baseLookup.buildCodeTag(literalTree); - - assertEquals("Wrong result", result, "" + tagContent + ""); - } - - @Test - public void expandLiteralBody() { - String tagContent = "Some text ≤ \u2264"; - when(literalTree.getBody()).thenReturn(textTree); - when(textTree.toString()).thenReturn(tagContent); - - String result = baseLookup.expandLiteralBody(literalTree); - String expected = "Some text ≤ ≤"; - - assertEquals("Wrong result", result, expected); - } - - @Test - public void replaceLinksAndCodes() { - when(linkTree.getReference()).thenReturn(referenceTree); - when(referenceTree.getSignature()).thenReturn("Some#signature"); - when(linkTree.getLabel()).thenReturn(Collections.emptyList()); - String textTreeContent = "Some text content ≤ \u2264"; - when(literalTree.getBody()).thenReturn(textTree); - when(textTree.toString()).thenReturn(textTreeContent); - when(linkTree.getKind()).thenReturn(Kind.LINK); - when(literalTree.getKind()).thenReturn(Kind.CODE); - when(textTree.getKind()).thenReturn(Kind.TEXT); - - String result = baseLookup.replaceLinksAndCodes(Arrays.asList(linkTree, literalTree, textTree)); - - assertEquals("Wrong result", result, "" - + "Some#signatureSome text content ≤ ≤" + textTreeContent); - } - - @Test - public void resolve() { - TypeElement element1 = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); - TypeElement element2 = elements.getTypeElement("com.microsoft.samples.subpackage.Display"); - - ExtendedMetadataFileItem resultForKey1 = baseLookup.resolve(element1); - ExtendedMetadataFileItem resultForKey2 = baseLookup.resolve(element2); - ExtendedMetadataFileItem consequenceCallResultForKey1 = baseLookup.resolve(element1); - - assertEquals("Consequence call should return same instance", resultForKey1, consequenceCallResultForKey1); - assertNotEquals("Resolve for another key should return another instance", resultForKey2, resultForKey1); - } - - @Test - public void testExtractMethods() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); - - assertEquals("Wrong packageName", baseLookup.extractPackageName(element), lastBuiltItem.getPackageName()); - assertEquals("Wrong fullName", baseLookup.extractFullName(element), lastBuiltItem.getFullName()); - assertEquals("Wrong name", baseLookup.extractName(element), lastBuiltItem.getName()); - assertEquals("Wrong href", baseLookup.extractHref(element), lastBuiltItem.getHref()); - assertEquals("Wrong parent", baseLookup.extractParent(element), lastBuiltItem.getParent()); - assertEquals("Wrong id", baseLookup.extractId(element), lastBuiltItem.getId()); - assertEquals("Wrong uid", baseLookup.extractUid(element), lastBuiltItem.getUid()); - assertEquals("Wrong nameWithType", baseLookup.extractNameWithType(element), lastBuiltItem.getNameWithType()); - assertEquals("Wrong methodContent", baseLookup.extractMethodContent(element), - lastBuiltItem.getMethodContent()); - assertEquals("Wrong fieldContent", baseLookup.extractFieldContent(element), lastBuiltItem.getFieldContent()); - assertEquals("Wrong constructorContent", baseLookup.extractConstructorContent(element), - lastBuiltItem.getConstructorContent()); - assertEquals("Wrong overload", baseLookup.extractOverload(element), lastBuiltItem.getOverload()); - assertEquals("Wrong parameters", baseLookup.extractParameters(element), lastBuiltItem.getParameters()); - assertEquals("Wrong exceptions", baseLookup.extractExceptions(element), lastBuiltItem.getExceptions()); - - assertEquals("Wrong return", baseLookup.extractReturn(element).getReturnType(), - lastBuiltItem.getReturn().getReturnType()); - assertEquals("Wrong return", baseLookup.extractReturn(element).getReturnDescription(), - lastBuiltItem.getReturn().getReturnDescription()); - - assertEquals("Wrong summary", baseLookup.extractSummary(element), lastBuiltItem.getSummary()); - assertEquals("Wrong type", baseLookup.extractType(element), lastBuiltItem.getType()); - assertEquals("Wrong content", baseLookup.extractContent(element), lastBuiltItem.getContent()); - assertEquals("Wrong typeParameters", baseLookup.extractTypeParameters(element), - lastBuiltItem.getTypeParameters()); - assertEquals("Wrong superclass", baseLookup.extractSuperclass(element), lastBuiltItem.getSuperclass()); - assertEquals("Wrong interfaces", baseLookup.extractInterfaces(element), lastBuiltItem.getInterfaces()); - assertEquals("Wrong tocName", baseLookup.extractTocName(element), lastBuiltItem.getTocName()); - assertEquals("Wrong references", baseLookup.extractReferences(element), lastBuiltItem.getReferences()); - } - - private ExtendedMetadataFileItem buildExtendedMetadataFileItem(Element element) { - ExtendedMetadataFileItem result = new ExtendedMetadataFileItem(String.valueOf(element)); - result.setPackageName("Some package name"); - result.setFullName("Some full name"); - result.setName("Some name"); - result.setHref("Some href"); - result.setParent("Some parent"); - result.setId("Some id"); - result.setNameWithType("Some name with type"); - result.setMethodContent("Some method content"); - result.setFieldContent("Some field content"); - result.setConstructorContent("Some constructor content"); - result.setOverload("Some overload"); - result.setParameters(Arrays.asList(new MethodParameter("method id", "method type", "method desc"))); - result.setExceptions(Arrays.asList(new ExceptionItem("ex type", "ex desc"))); - result.setReturn(new Return("return type", "return desc")); - result.setSummary("Some summary"); - result.setType("Some type"); - result.setJavaType("Some type"); - result.setContent("Some content"); - result.setTypeParameters(Arrays.asList(new TypeParameter("type param id"))); - result.setSuperclass(Arrays.asList("Some ")); - result.setInterfaces(Arrays.asList("Some interface")); - result.setTocName("Some toc name"); - result.addReferences(Set.of(new MetadataFileItem("ref uid"))); - return result; - } - - @Test - public void testExtractJavaType() { - assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement), null); - } + } + + @Test + public void determineComment() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); + when(environment.getDocTrees()).thenReturn(docTrees); + when(docTrees.getDocCommentTree(element)).thenReturn(docCommentTree); + doReturn(Arrays.asList(textTree, linkTree)).when(docCommentTree).getFullBody(); + when(textTree.getKind()).thenReturn(Kind.TEXT); + when(linkTree.getKind()).thenReturn(Kind.LINK); + when(linkTree.getReference()).thenReturn(referenceTree); + when(referenceTree.getSignature()).thenReturn("Some#signature"); + when(textTree.toString()).thenReturn("Some text 1"); + + String result = baseLookup.determineComment(element); + + verify(environment).getDocTrees(); + verify(docTrees).getDocCommentTree(element); + verify(docCommentTree).getFullBody(); + verify(textTree).getKind(); + verify(linkTree).getKind(); + verify(linkTree).getReference(); + verify(linkTree).getLabel(); + assertEquals( + "Wrong result", + result, + "Some text 1Some#signature"); + } + + @Test + public void makeTypeShort() { + assertEquals("Wrong result for primitive type", baseLookup.makeTypeShort("int"), "int"); + assertEquals("Wrong result", baseLookup.makeTypeShort("java.lang.String"), "String"); + assertEquals( + "Wrong result for inner class", + baseLookup.makeTypeShort("org.apache.commons.lang3.arch.Processor.Arch"), + "Processor.Arch"); + assertEquals( + "Wrong result for class with generic", + baseLookup.makeTypeShort("java.util.List"), + "List"); + assertEquals( + "Wrong result for inner class with generic", + baseLookup.makeTypeShort("java.util.List.Custom"), + "List.Custom"); + assertEquals( + "Wrong result for inner class with complex generic", + baseLookup.makeTypeShort("a.b.c.D.E.G>>"), + "D.E.G>>"); + assertEquals( + "Wrong result for inner class with generic & inheritance", + baseLookup.makeTypeShort("a.b.G"), + "G"); + } + + @Test + public void buildXrefTag() { + when(linkTree.getReference()).thenReturn(referenceTree); + when(referenceTree.getSignature()).thenReturn("Some#signature"); + when(linkTree.getLabel()).thenReturn(Collections.emptyList()); + + String result = baseLookup.buildXrefTag(linkTree); + + assertEquals( + "Wrong result", + result, + "Some#signature"); + } + + @Test + public void buildXrefTagWhenLabelPresents() { + when(linkTree.getReference()).thenReturn(referenceTree); + when(referenceTree.getSignature()).thenReturn("Some#signature"); + doReturn(Arrays.asList(textTree)).when(linkTree).getLabel(); + String labelValue = "IamLabel"; + when(textTree.toString()).thenReturn(labelValue); + + String result = baseLookup.buildXrefTag(linkTree); + + assertEquals( + "Wrong result", + result, + "" + + labelValue + + ""); + } + + @Test + public void buildCodeTag() { + String tagContent = "Some text ≤"; + when(literalTree.getBody()).thenReturn(textTree); + when(textTree.toString()).thenReturn(tagContent); + + String result = baseLookup.buildCodeTag(literalTree); + + assertEquals("Wrong result", result, "" + tagContent + ""); + } + + @Test + public void expandLiteralBody() { + String tagContent = "Some text ≤ \u2264"; + when(literalTree.getBody()).thenReturn(textTree); + when(textTree.toString()).thenReturn(tagContent); + + String result = baseLookup.expandLiteralBody(literalTree); + String expected = "Some text ≤ ≤"; + + assertEquals("Wrong result", result, expected); + } + + @Test + public void replaceLinksAndCodes() { + when(linkTree.getReference()).thenReturn(referenceTree); + when(referenceTree.getSignature()).thenReturn("Some#signature"); + when(linkTree.getLabel()).thenReturn(Collections.emptyList()); + String textTreeContent = "Some text content ≤ \u2264"; + when(literalTree.getBody()).thenReturn(textTree); + when(textTree.toString()).thenReturn(textTreeContent); + when(linkTree.getKind()).thenReturn(Kind.LINK); + when(literalTree.getKind()).thenReturn(Kind.CODE); + when(textTree.getKind()).thenReturn(Kind.TEXT); + + String result = baseLookup.replaceLinksAndCodes(Arrays.asList(linkTree, literalTree, textTree)); + + assertEquals( + "Wrong result", + result, + "" + + "Some#signatureSome text content ≤ ≤" + + textTreeContent); + } + + @Test + public void resolve() { + TypeElement element1 = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); + TypeElement element2 = elements.getTypeElement("com.microsoft.samples.subpackage.Display"); + + ExtendedMetadataFileItem resultForKey1 = baseLookup.resolve(element1); + ExtendedMetadataFileItem resultForKey2 = baseLookup.resolve(element2); + ExtendedMetadataFileItem consequenceCallResultForKey1 = baseLookup.resolve(element1); + + assertEquals( + "Consequence call should return same instance", + resultForKey1, + consequenceCallResultForKey1); + assertNotEquals( + "Resolve for another key should return another instance", resultForKey2, resultForKey1); + } + + @Test + public void testExtractMethods() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); + + assertEquals( + "Wrong packageName", + baseLookup.extractPackageName(element), + lastBuiltItem.getPackageName()); + assertEquals( + "Wrong fullName", baseLookup.extractFullName(element), lastBuiltItem.getFullName()); + assertEquals("Wrong name", baseLookup.extractName(element), lastBuiltItem.getName()); + assertEquals("Wrong href", baseLookup.extractHref(element), lastBuiltItem.getHref()); + assertEquals("Wrong parent", baseLookup.extractParent(element), lastBuiltItem.getParent()); + assertEquals("Wrong id", baseLookup.extractId(element), lastBuiltItem.getId()); + assertEquals("Wrong uid", baseLookup.extractUid(element), lastBuiltItem.getUid()); + assertEquals( + "Wrong nameWithType", + baseLookup.extractNameWithType(element), + lastBuiltItem.getNameWithType()); + assertEquals( + "Wrong methodContent", + baseLookup.extractMethodContent(element), + lastBuiltItem.getMethodContent()); + assertEquals( + "Wrong fieldContent", + baseLookup.extractFieldContent(element), + lastBuiltItem.getFieldContent()); + assertEquals( + "Wrong constructorContent", + baseLookup.extractConstructorContent(element), + lastBuiltItem.getConstructorContent()); + assertEquals( + "Wrong overload", baseLookup.extractOverload(element), lastBuiltItem.getOverload()); + assertEquals( + "Wrong parameters", baseLookup.extractParameters(element), lastBuiltItem.getParameters()); + assertEquals( + "Wrong exceptions", baseLookup.extractExceptions(element), lastBuiltItem.getExceptions()); + + assertEquals( + "Wrong return", + baseLookup.extractReturn(element).getReturnType(), + lastBuiltItem.getReturn().getReturnType()); + assertEquals( + "Wrong return", + baseLookup.extractReturn(element).getReturnDescription(), + lastBuiltItem.getReturn().getReturnDescription()); + + assertEquals("Wrong summary", baseLookup.extractSummary(element), lastBuiltItem.getSummary()); + assertEquals("Wrong type", baseLookup.extractType(element), lastBuiltItem.getType()); + assertEquals("Wrong content", baseLookup.extractContent(element), lastBuiltItem.getContent()); + assertEquals( + "Wrong typeParameters", + baseLookup.extractTypeParameters(element), + lastBuiltItem.getTypeParameters()); + assertEquals( + "Wrong superclass", baseLookup.extractSuperclass(element), lastBuiltItem.getSuperclass()); + assertEquals( + "Wrong interfaces", baseLookup.extractInterfaces(element), lastBuiltItem.getInterfaces()); + assertEquals("Wrong tocName", baseLookup.extractTocName(element), lastBuiltItem.getTocName()); + assertEquals( + "Wrong references", baseLookup.extractReferences(element), lastBuiltItem.getReferences()); + } + + private ExtendedMetadataFileItem buildExtendedMetadataFileItem(Element element) { + ExtendedMetadataFileItem result = new ExtendedMetadataFileItem(String.valueOf(element)); + result.setPackageName("Some package name"); + result.setFullName("Some full name"); + result.setName("Some name"); + result.setHref("Some href"); + result.setParent("Some parent"); + result.setId("Some id"); + result.setNameWithType("Some name with type"); + result.setMethodContent("Some method content"); + result.setFieldContent("Some field content"); + result.setConstructorContent("Some constructor content"); + result.setOverload("Some overload"); + result.setParameters( + Arrays.asList(new MethodParameter("method id", "method type", "method desc"))); + result.setExceptions(Arrays.asList(new ExceptionItem("ex type", "ex desc"))); + result.setReturn(new Return("return type", "return desc")); + result.setSummary("Some summary"); + result.setType("Some type"); + result.setJavaType("Some type"); + result.setContent("Some content"); + result.setTypeParameters(Arrays.asList(new TypeParameter("type param id"))); + result.setSuperclass(Arrays.asList("Some ")); + result.setInterfaces(Arrays.asList("Some interface")); + result.setTocName("Some toc name"); + result.addReferences(Set.of(new MetadataFileItem("ref uid"))); + return result; + } + + @Test + public void testExtractJavaType() { + assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement), null); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java index 54cfac2b..950987d4 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java @@ -1,5 +1,12 @@ package com.microsoft.lookup; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import com.google.testing.compile.CompilationRule; import com.microsoft.model.ExceptionItem; import com.microsoft.model.MethodParameter; @@ -14,6 +21,15 @@ import com.sun.source.doctree.TextTree; import com.sun.source.doctree.ThrowsTree; import com.sun.source.util.DocTrees; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import javax.lang.model.element.Element; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; +import javax.lang.model.util.ElementFilter; +import javax.lang.model.util.Elements; import jdk.javadoc.doclet.DocletEnvironment; import org.junit.Before; import org.junit.Rule; @@ -22,294 +38,291 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import javax.lang.model.element.Element; -import javax.lang.model.element.ExecutableElement; -import javax.lang.model.element.TypeElement; -import javax.lang.model.element.VariableElement; -import javax.lang.model.util.ElementFilter; -import javax.lang.model.util.Elements; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @RunWith(MockitoJUnitRunner.class) public class ClassItemsLookupTest { - @Rule - public CompilationRule rule = new CompilationRule(); - private Elements elements; - private List allGenderElements; - private List allPersonElements; - private DocletEnvironment environment; - private DocTrees docTrees; - private DocCommentTree docCommentTree; - private ParamTree paramTree; - private ThrowsTree throwsTree; - private ReturnTree returnTree; - private DeprecatedTree deprecatedTree; - private TextTree textTree; - private IdentifierTree identifierTree; - private ClassItemsLookup classItemsLookup; - - @Before - public void setup() { - elements = rule.getElements(); - allGenderElements = elements.getTypeElement("com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender") - .getEnclosedElements().stream().collect(Collectors.toList()); - allPersonElements = elements.getTypeElement("com.microsoft.samples.subpackage.Person") - .getEnclosedElements().stream().collect(Collectors.toList()); - environment = Mockito.mock(DocletEnvironment.class); - docTrees = Mockito.mock(DocTrees.class); - docCommentTree = Mockito.mock(DocCommentTree.class); - paramTree = Mockito.mock(ParamTree.class); - throwsTree = Mockito.mock(ThrowsTree.class); - returnTree = Mockito.mock(ReturnTree.class); - deprecatedTree = Mockito.mock(DeprecatedTree.class); - textTree = Mockito.mock(TextTree.class); - identifierTree = Mockito.mock(IdentifierTree.class); - classItemsLookup = new ClassItemsLookup(environment, Mockito.mock(ElementUtil.class)); - } - - @Test - public void extractParameters() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - ExecutableElement method = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(method)).thenReturn(docCommentTree); - doReturn(Arrays.asList(paramTree)).when(docCommentTree).getBlockTags(); - when(paramTree.getKind()).thenReturn(Kind.PARAM); - when(textTree.getKind()).thenReturn(Kind.TEXT); - when(paramTree.getName()).thenReturn(identifierTree); - doReturn(Arrays.asList(textTree)).when(paramTree).getDescription(); - when(textTree.toString()).thenReturn("some text bla", "some text bla-bla"); - when(identifierTree.toString()).thenReturn("incomingDamage", "damageType"); - - List result = classItemsLookup.extractParameters(method); - - verify(environment, times(2)).getDocTrees(); - verify(docTrees, times(2)).getDocCommentTree(method); - verify(docCommentTree, times(2)).getBlockTags(); - assertEquals("Wrong parameters count", result.size(), 2); - - assertEquals("Wrong first param id", result.get(0).getId(), "incomingDamage"); - assertEquals("Wrong first param type", result.get(0).getType(), "int"); - assertEquals("Wrong first param description", result.get(0).getDescription(), "some text bla"); - - assertEquals("Wrong second param id", result.get(1).getId(), "damageType"); - assertEquals("Wrong second param type", result.get(1).getType(), "java.lang.String"); - assertEquals("Wrong second param description", result.get(1).getDescription(), "some text bla-bla"); - } - - @Test - public void extractParameterDescription() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - ExecutableElement method = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); - String paramName = "incomingDamage"; - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(method)).thenReturn(docCommentTree); - doReturn(Arrays.asList(paramTree)).when(docCommentTree).getBlockTags(); - when(paramTree.getKind()).thenReturn(Kind.PARAM); - doReturn(identifierTree).when(paramTree).getName(); - doReturn(Arrays.asList(textTree)).when(paramTree).getDescription(); - when(textTree.getKind()).thenReturn(Kind.TEXT); - when(textTree.toString()).thenReturn("some weird text"); - when(identifierTree.toString()).thenReturn(paramName); - - String result = classItemsLookup.extractParameterDescription(method, paramName); - - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(method); - verify(docCommentTree).getBlockTags(); - assertEquals("Wrong param description", result, "some weird text"); - } - - @Test - public void extractExceptions() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - ExecutableElement method = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(method)).thenReturn(docCommentTree); - doReturn(Arrays.asList(throwsTree)).when(docCommentTree).getBlockTags(); - when(throwsTree.getKind()).thenReturn(Kind.THROWS); - doReturn(Arrays.asList(textTree)).when(throwsTree).getDescription(); - when(textTree.getKind()).thenReturn(Kind.TEXT); - when(textTree.toString()).thenReturn("some text"); - - List result = classItemsLookup.extractExceptions(method); - - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(method); - verify(docCommentTree).getBlockTags(); - verify(throwsTree).getKind(); - assertEquals("Wrong exceptions count", result.size(), 1); - assertEquals("Wrong type", result.get(0).getType(), "java.lang.IllegalArgumentException"); - assertEquals("Wrong description", result.get(0).getDescription(), "some text"); - } - - @Test - public void extractExceptionDescription() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - ExecutableElement method = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(method)).thenReturn(docCommentTree); - doReturn(Arrays.asList(throwsTree)).when(docCommentTree).getBlockTags(); - when(throwsTree.getKind()).thenReturn(Kind.THROWS); - doReturn(Arrays.asList(textTree)).when(throwsTree).getDescription(); - when(textTree.getKind()).thenReturn(Kind.TEXT); - when(textTree.toString()).thenReturn("some weird text"); - - String result = classItemsLookup.extractExceptionDescription(method); - - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(method); - verify(docCommentTree).getBlockTags(); - verify(throwsTree).getKind(); - assertEquals("Wrong description", result, "some weird text"); - } - - @Test - public void extractReturnForExecutableElement() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - ExecutableElement method0 = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); - ExecutableElement method1 = ElementFilter.methodsIn(element.getEnclosedElements()).get(1); - ExecutableElement method2 = ElementFilter.methodsIn(element.getEnclosedElements()).get(2); - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(method0)).thenReturn(docCommentTree); - when(docTrees.getDocCommentTree(method1)).thenReturn(docCommentTree); - doReturn(Arrays.asList(returnTree)).when(docCommentTree).getBlockTags(); - when(returnTree.getKind()).thenReturn(Kind.RETURN); - doReturn(Arrays.asList(textTree)).when(returnTree).getDescription(); - when(textTree.getKind()).thenReturn(Kind.TEXT); - when(textTree.toString()).thenReturn("bla", "bla-bla"); - - checkReturnForExecutableElement(method0, "int", "bla"); - checkReturnForExecutableElement(method1, "java.lang.String", "bla-bla"); - checkVoidReturnForExecutableElement(method2); - - verify(environment, times(2)).getDocTrees(); - verify(docTrees).getDocCommentTree(method0); - verify(docTrees).getDocCommentTree(method1); - verify(docCommentTree, times(2)).getBlockTags(); - verify(returnTree, times(2)).getKind(); - verify(textTree, times(2)).getKind(); - } - - private void checkReturnForExecutableElement(ExecutableElement executableElement, String expectedType, - String expectedDescription) { - Return result = classItemsLookup.extractReturn(executableElement); - - assertEquals(result.getReturnType(), expectedType); - assertEquals(result.getReturnDescription(), expectedDescription); - } - - private void checkVoidReturnForExecutableElement(ExecutableElement executableElement) { - assertNull(classItemsLookup.extractReturn(executableElement)); - } - - @Test - public void extractReturnDescription() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - ExecutableElement method0 = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(method0)).thenReturn(docCommentTree); - doReturn(Arrays.asList(returnTree)).when(docCommentTree).getBlockTags(); - when(returnTree.getKind()).thenReturn(Kind.RETURN); - when(textTree.getKind()).thenReturn(Kind.TEXT); - doReturn(Arrays.asList(textTree)).when(returnTree).getDescription(); - when(textTree.toString()).thenReturn("bla-bla description"); - - String result = classItemsLookup.extractReturnDescription(method0); - - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(method0); - verify(docCommentTree).getBlockTags(); - verify(returnTree).getKind(); - assertEquals("Wrong description", result, "bla-bla description"); - } - - @Test - public void extractReturnForVariableElement() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - - checkReturnForVariableElement(element, 0, "java.lang.String"); - checkReturnForVariableElement(element, 1, "java.lang.String"); - checkReturnForVariableElement(element, 2, "int"); - checkReturnForVariableElement(element, 3, "int"); - checkReturnForVariableElement(element, 4, "java.lang.String"); - } - - private void checkReturnForVariableElement(TypeElement element, int variableNumber, String expectedType) { - VariableElement variableElement = ElementFilter.fieldsIn(element.getEnclosedElements()).get(variableNumber); - - Return result = classItemsLookup.extractReturn(variableElement); - - assertEquals(result.getReturnType(), expectedType); - } - - @Test - public void convertFullNameToOverload() { - assertEquals("Wrong result", classItemsLookup.convertFullNameToOverload( - "com.microsoft.samples.SuperHero.successfullyAttacked(int,java.lang.String)"), - "com.microsoft.samples.SuperHero.successfullyAttacked*"); - - assertEquals("Wrong result for case with generics", classItemsLookup.convertFullNameToOverload( - "com.microsoft.samples.subpackage.Display.show()"), - "com.microsoft.samples.subpackage.Display.show*"); - - assertEquals("Wrong result for constructor case", classItemsLookup.convertFullNameToOverload( - "com.microsoft.samples.SuperHero.SuperHero()"), - "com.microsoft.samples.SuperHero.SuperHero*"); - } - - @Test - public void determineTypeForEnumConstant() { - TypeElement element = elements - .getTypeElement("com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender"); - - assertEquals(classItemsLookup.determineType(element.getEnclosedElements().get(0)), "Field"); - assertEquals(classItemsLookup.determineType(element.getEnclosedElements().get(1)), "Field"); - } - - @Test - public void testExtractJavaTypeStaticMethod() { - Element staticMethod = getElementByName(allGenderElements,"valueOf(java.lang.String)"); - assertEquals("Wrong javaType","static method", classItemsLookup.extractJavaType(staticMethod)); - } - - @Test - public void testExtractJavaTypeStaticField() { - Element field = getElementByName(allGenderElements,"FEMALE"); - assertEquals("Wrong javaType", "static field", classItemsLookup.extractJavaType(field)); - } - - @Test - public void testExtractJavaTypeNonStatic() { - Element constructor = getElementByName(allGenderElements,"Gender()"); - assertEquals("Wrong javaType",null, classItemsLookup.extractJavaType(constructor)); - - Element nonStaticMethod = getElementByName(allPersonElements,"getFirstName()"); - assertEquals("Wrong javaType",null, classItemsLookup.extractJavaType(nonStaticMethod)); - - Element nonStaticField = getElementByName(allPersonElements,"age"); - assertEquals("Wrong javaType",null, classItemsLookup.extractJavaType(nonStaticField)); - } - - private Element getElementByName(List elements, String name) { - return elements.stream() - .filter(e -> e.toString().equals(name)) - .findFirst().orElse(null); - } + @Rule public CompilationRule rule = new CompilationRule(); + private Elements elements; + private List allGenderElements; + private List allPersonElements; + private DocletEnvironment environment; + private DocTrees docTrees; + private DocCommentTree docCommentTree; + private ParamTree paramTree; + private ThrowsTree throwsTree; + private ReturnTree returnTree; + private DeprecatedTree deprecatedTree; + private TextTree textTree; + private IdentifierTree identifierTree; + private ClassItemsLookup classItemsLookup; + + @Before + public void setup() { + elements = rule.getElements(); + allGenderElements = + elements + .getTypeElement("com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender") + .getEnclosedElements() + .stream() + .collect(Collectors.toList()); + allPersonElements = + elements + .getTypeElement("com.microsoft.samples.subpackage.Person") + .getEnclosedElements() + .stream() + .collect(Collectors.toList()); + environment = Mockito.mock(DocletEnvironment.class); + docTrees = Mockito.mock(DocTrees.class); + docCommentTree = Mockito.mock(DocCommentTree.class); + paramTree = Mockito.mock(ParamTree.class); + throwsTree = Mockito.mock(ThrowsTree.class); + returnTree = Mockito.mock(ReturnTree.class); + deprecatedTree = Mockito.mock(DeprecatedTree.class); + textTree = Mockito.mock(TextTree.class); + identifierTree = Mockito.mock(IdentifierTree.class); + classItemsLookup = new ClassItemsLookup(environment, Mockito.mock(ElementUtil.class)); + } + + @Test + public void extractParameters() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + ExecutableElement method = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); + + when(environment.getDocTrees()).thenReturn(docTrees); + when(docTrees.getDocCommentTree(method)).thenReturn(docCommentTree); + doReturn(Arrays.asList(paramTree)).when(docCommentTree).getBlockTags(); + when(paramTree.getKind()).thenReturn(Kind.PARAM); + when(textTree.getKind()).thenReturn(Kind.TEXT); + when(paramTree.getName()).thenReturn(identifierTree); + doReturn(Arrays.asList(textTree)).when(paramTree).getDescription(); + when(textTree.toString()).thenReturn("some text bla", "some text bla-bla"); + when(identifierTree.toString()).thenReturn("incomingDamage", "damageType"); + + List result = classItemsLookup.extractParameters(method); + + verify(environment, times(2)).getDocTrees(); + verify(docTrees, times(2)).getDocCommentTree(method); + verify(docCommentTree, times(2)).getBlockTags(); + assertEquals("Wrong parameters count", result.size(), 2); + + assertEquals("Wrong first param id", result.get(0).getId(), "incomingDamage"); + assertEquals("Wrong first param type", result.get(0).getType(), "int"); + assertEquals("Wrong first param description", result.get(0).getDescription(), "some text bla"); + + assertEquals("Wrong second param id", result.get(1).getId(), "damageType"); + assertEquals("Wrong second param type", result.get(1).getType(), "java.lang.String"); + assertEquals( + "Wrong second param description", result.get(1).getDescription(), "some text bla-bla"); + } + + @Test + public void extractParameterDescription() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + ExecutableElement method = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); + String paramName = "incomingDamage"; + + when(environment.getDocTrees()).thenReturn(docTrees); + when(docTrees.getDocCommentTree(method)).thenReturn(docCommentTree); + doReturn(Arrays.asList(paramTree)).when(docCommentTree).getBlockTags(); + when(paramTree.getKind()).thenReturn(Kind.PARAM); + doReturn(identifierTree).when(paramTree).getName(); + doReturn(Arrays.asList(textTree)).when(paramTree).getDescription(); + when(textTree.getKind()).thenReturn(Kind.TEXT); + when(textTree.toString()).thenReturn("some weird text"); + when(identifierTree.toString()).thenReturn(paramName); + + String result = classItemsLookup.extractParameterDescription(method, paramName); + + verify(environment).getDocTrees(); + verify(docTrees).getDocCommentTree(method); + verify(docCommentTree).getBlockTags(); + assertEquals("Wrong param description", result, "some weird text"); + } + + @Test + public void extractExceptions() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + ExecutableElement method = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); + + when(environment.getDocTrees()).thenReturn(docTrees); + when(docTrees.getDocCommentTree(method)).thenReturn(docCommentTree); + doReturn(Arrays.asList(throwsTree)).when(docCommentTree).getBlockTags(); + when(throwsTree.getKind()).thenReturn(Kind.THROWS); + doReturn(Arrays.asList(textTree)).when(throwsTree).getDescription(); + when(textTree.getKind()).thenReturn(Kind.TEXT); + when(textTree.toString()).thenReturn("some text"); + + List result = classItemsLookup.extractExceptions(method); + + verify(environment).getDocTrees(); + verify(docTrees).getDocCommentTree(method); + verify(docCommentTree).getBlockTags(); + verify(throwsTree).getKind(); + assertEquals("Wrong exceptions count", result.size(), 1); + assertEquals("Wrong type", result.get(0).getType(), "java.lang.IllegalArgumentException"); + assertEquals("Wrong description", result.get(0).getDescription(), "some text"); + } + + @Test + public void extractExceptionDescription() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + ExecutableElement method = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); + + when(environment.getDocTrees()).thenReturn(docTrees); + when(docTrees.getDocCommentTree(method)).thenReturn(docCommentTree); + doReturn(Arrays.asList(throwsTree)).when(docCommentTree).getBlockTags(); + when(throwsTree.getKind()).thenReturn(Kind.THROWS); + doReturn(Arrays.asList(textTree)).when(throwsTree).getDescription(); + when(textTree.getKind()).thenReturn(Kind.TEXT); + when(textTree.toString()).thenReturn("some weird text"); + + String result = classItemsLookup.extractExceptionDescription(method); + + verify(environment).getDocTrees(); + verify(docTrees).getDocCommentTree(method); + verify(docCommentTree).getBlockTags(); + verify(throwsTree).getKind(); + assertEquals("Wrong description", result, "some weird text"); + } + + @Test + public void extractReturnForExecutableElement() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + ExecutableElement method0 = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); + ExecutableElement method1 = ElementFilter.methodsIn(element.getEnclosedElements()).get(1); + ExecutableElement method2 = ElementFilter.methodsIn(element.getEnclosedElements()).get(2); + + when(environment.getDocTrees()).thenReturn(docTrees); + when(docTrees.getDocCommentTree(method0)).thenReturn(docCommentTree); + when(docTrees.getDocCommentTree(method1)).thenReturn(docCommentTree); + doReturn(Arrays.asList(returnTree)).when(docCommentTree).getBlockTags(); + when(returnTree.getKind()).thenReturn(Kind.RETURN); + doReturn(Arrays.asList(textTree)).when(returnTree).getDescription(); + when(textTree.getKind()).thenReturn(Kind.TEXT); + when(textTree.toString()).thenReturn("bla", "bla-bla"); + + checkReturnForExecutableElement(method0, "int", "bla"); + checkReturnForExecutableElement(method1, "java.lang.String", "bla-bla"); + checkVoidReturnForExecutableElement(method2); + + verify(environment, times(2)).getDocTrees(); + verify(docTrees).getDocCommentTree(method0); + verify(docTrees).getDocCommentTree(method1); + verify(docCommentTree, times(2)).getBlockTags(); + verify(returnTree, times(2)).getKind(); + verify(textTree, times(2)).getKind(); + } + + private void checkReturnForExecutableElement( + ExecutableElement executableElement, String expectedType, String expectedDescription) { + Return result = classItemsLookup.extractReturn(executableElement); + + assertEquals(result.getReturnType(), expectedType); + assertEquals(result.getReturnDescription(), expectedDescription); + } + + private void checkVoidReturnForExecutableElement(ExecutableElement executableElement) { + assertNull(classItemsLookup.extractReturn(executableElement)); + } + + @Test + public void extractReturnDescription() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + ExecutableElement method0 = ElementFilter.methodsIn(element.getEnclosedElements()).get(0); + + when(environment.getDocTrees()).thenReturn(docTrees); + when(docTrees.getDocCommentTree(method0)).thenReturn(docCommentTree); + doReturn(Arrays.asList(returnTree)).when(docCommentTree).getBlockTags(); + when(returnTree.getKind()).thenReturn(Kind.RETURN); + when(textTree.getKind()).thenReturn(Kind.TEXT); + doReturn(Arrays.asList(textTree)).when(returnTree).getDescription(); + when(textTree.toString()).thenReturn("bla-bla description"); + + String result = classItemsLookup.extractReturnDescription(method0); + + verify(environment).getDocTrees(); + verify(docTrees).getDocCommentTree(method0); + verify(docCommentTree).getBlockTags(); + verify(returnTree).getKind(); + assertEquals("Wrong description", result, "bla-bla description"); + } + + @Test + public void extractReturnForVariableElement() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + + checkReturnForVariableElement(element, 0, "java.lang.String"); + checkReturnForVariableElement(element, 1, "java.lang.String"); + checkReturnForVariableElement(element, 2, "int"); + checkReturnForVariableElement(element, 3, "int"); + checkReturnForVariableElement(element, 4, "java.lang.String"); + } + + private void checkReturnForVariableElement( + TypeElement element, int variableNumber, String expectedType) { + VariableElement variableElement = + ElementFilter.fieldsIn(element.getEnclosedElements()).get(variableNumber); + + Return result = classItemsLookup.extractReturn(variableElement); + + assertEquals(result.getReturnType(), expectedType); + } + + @Test + public void convertFullNameToOverload() { + assertEquals( + "Wrong result", + classItemsLookup.convertFullNameToOverload( + "com.microsoft.samples.SuperHero.successfullyAttacked(int,java.lang.String)"), + "com.microsoft.samples.SuperHero.successfullyAttacked*"); + + assertEquals( + "Wrong result for case with generics", + classItemsLookup.convertFullNameToOverload( + "com.microsoft.samples.subpackage.Display.show()"), + "com.microsoft.samples.subpackage.Display.show*"); + + assertEquals( + "Wrong result for constructor case", + classItemsLookup.convertFullNameToOverload("com.microsoft.samples.SuperHero.SuperHero()"), + "com.microsoft.samples.SuperHero.SuperHero*"); + } + + @Test + public void determineTypeForEnumConstant() { + TypeElement element = + elements.getTypeElement( + "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender"); + + assertEquals(classItemsLookup.determineType(element.getEnclosedElements().get(0)), "Field"); + assertEquals(classItemsLookup.determineType(element.getEnclosedElements().get(1)), "Field"); + } + + @Test + public void testExtractJavaTypeStaticMethod() { + Element staticMethod = getElementByName(allGenderElements, "valueOf(java.lang.String)"); + assertEquals("Wrong javaType", "static method", classItemsLookup.extractJavaType(staticMethod)); + } + + @Test + public void testExtractJavaTypeStaticField() { + Element field = getElementByName(allGenderElements, "FEMALE"); + assertEquals("Wrong javaType", "static field", classItemsLookup.extractJavaType(field)); + } + + @Test + public void testExtractJavaTypeNonStatic() { + Element constructor = getElementByName(allGenderElements, "Gender()"); + assertEquals("Wrong javaType", null, classItemsLookup.extractJavaType(constructor)); + + Element nonStaticMethod = getElementByName(allPersonElements, "getFirstName()"); + assertEquals("Wrong javaType", null, classItemsLookup.extractJavaType(nonStaticMethod)); + + Element nonStaticField = getElementByName(allPersonElements, "age"); + assertEquals("Wrong javaType", null, classItemsLookup.extractJavaType(nonStaticField)); + } + + private Element getElementByName(List elements, String name) { + return elements.stream().filter(e -> e.toString().equals(name)).findFirst().orElse(null); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java index f2c4869d..92f90c9b 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java @@ -32,190 +32,213 @@ @RunWith(MockitoJUnitRunner.class) public class ClassLookupTest { - @Rule - public CompilationRule rule = new CompilationRule(); - private Elements elements; - private ClassLookup classLookup; - private DocletEnvironment environment; - private DocTrees docTrees; - private DocTree docTree; - private DocCommentTree docCommentTree; - private DeprecatedTree deprecatedTree; - private TextTree textTree; - private TypeMirror typeMirror; - - @Before - public void setup() { - elements = rule.getElements(); - environment = Mockito.mock(DocletEnvironment.class); - classLookup = new ClassLookup(environment, Mockito.mock(ElementUtil.class)); - docTrees = Mockito.mock(DocTrees.class); - docTree = Mockito.mock(DocTree.class); - docCommentTree = Mockito.mock(DocCommentTree.class); - deprecatedTree = Mockito.mock(DeprecatedTree.class); - textTree = Mockito.mock(TextTree.class); - typeMirror = Mockito.mock(TypeMirror.class); - } - - @Test - public void determineTypeParameters() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); - - List result = classLookup.determineTypeParameters(element); - - assertEquals("Wrong type params size", result.size(), 1); - assertEquals("Wrong type parameter id", result.get(0).getId(), "T"); - } - - @Test - public void determineSuperclass() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); - - String result = classLookup.determineSuperclass(element); - - assertEquals("Wrong result", result, "java.lang.Object"); - } - - @Test - public void determineSuperclassForChildClass() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - - String result = classLookup.determineSuperclass(element); - - assertEquals("Wrong result", result, "com.microsoft.samples.subpackage.Person"); - } - - @Test - public void determineSuperclassForEnum() { - TypeElement element = elements - .getTypeElement("com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender"); - - String result = classLookup.determineSuperclass(element); - - assertEquals("Wrong result", result, - "java.lang.Enum"); - } - - @Test - public void determineClassContent() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - ExtendedMetadataFileItem container = new ExtendedMetadataFileItem("UID"); - - classLookup.populateContent(element, "SuperHero", container); - - assertEquals("Wrong content", container.getContent(), - "public class SuperHero extends Person implements Serializable, Cloneable"); - - - assertTrue("Wrong set of interfaces", container.getInterfaces().contains("java.io.Serializable")); - assertTrue("Wrong set of interfaces", container.getInterfaces().contains("java.lang.Cloneable")); - } - - @Test - public void determineClassContentForInterface() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Display"); - ExtendedMetadataFileItem container = new ExtendedMetadataFileItem("UID"); - - classLookup.populateContent(element, "Display", container); - - assertEquals("Wrong content", container.getContent(), - "public interface Display extends Serializable, List>"); - - - assertTrue("Wrong set of interfaces", container.getInterfaces().contains("java.io.Serializable")); - assertTrue("Wrong set of interfaces", container.getInterfaces().contains("java.util.List>")); - } - - @Test - public void determineClassContentForEnum() { - TypeElement element = elements - .getTypeElement("com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender"); - ExtendedMetadataFileItem container = new ExtendedMetadataFileItem("UID"); - - classLookup.populateContent(element, "Person.IdentificationInfo.Gender", container); - - assertEquals("Wrong content", container.getContent(), - "public enum Person.IdentificationInfo.Gender extends Enum"); - } - - @Test - public void determineClassContentForStaticClass() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person.IdentificationInfo"); - ExtendedMetadataFileItem container = new ExtendedMetadataFileItem("UID"); - - classLookup.populateContent(element, "Person.IdentificationInfo", container); - - assertEquals("Wrong content", container.getContent(), "public static class Person.IdentificationInfo"); - } - - @Test - public void determineTypeForInterface() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Display"); - - assertEquals(classLookup.determineType(element), "Interface"); - } - - @Test - public void determineTypeForEnum() { - TypeElement element = elements - .getTypeElement("com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender"); - - assertEquals(classLookup.determineType(element), "Enum"); - } - - @Test - public void determineTypeForClass() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person.IdentificationInfo"); - - assertEquals(classLookup.determineType(element), "Class"); - } - - @Test - public void extractStatusDeprecated() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.agreements.AgreementDetailsCollectionOperations"); - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(element)).thenReturn(docCommentTree); - doReturn(Arrays.asList(deprecatedTree)).when(docCommentTree).getBlockTags(); - when(deprecatedTree.getKind()).thenReturn(DocTree.Kind.DEPRECATED); - - String result = classLookup.extractStatus(element); - - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(element); - verify(docCommentTree).getBlockTags(); - verify(deprecatedTree).getKind(); - assertEquals("Wrong description", result, Status.DEPRECATED.toString()); - } - - @Test - public void extractStatusNotDeprecated() { - TypeElement element = elements.getTypeElement("com.microsoft.samples.agreements.AgreementDetailsCollectionOperations"); - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(element)).thenReturn(docCommentTree); - doReturn(Arrays.asList()).when(docCommentTree).getBlockTags(); - - String result = classLookup.extractStatus(element); - - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(element); - verify(docCommentTree).getBlockTags(); - assertEquals("Wrong description", result, null); - } - - @Test - public void testExtractJavaType() { - TypeElement typeElement = elements.getTypeElement("com.microsoft.samples.google.ValidationException"); - assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), "exception"); - - typeElement = elements.getTypeElement("com.microsoft.samples.google.RecognitionAudio"); - assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), null); - - typeElement = elements.getTypeElement("com.microsoft.samples.google.BetaApi"); - assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), "annotationtype"); - - typeElement = elements.getTypeElement("com.microsoft.samples.IPartner"); - assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), null); - } + @Rule public CompilationRule rule = new CompilationRule(); + private Elements elements; + private ClassLookup classLookup; + private DocletEnvironment environment; + private DocTrees docTrees; + private DocTree docTree; + private DocCommentTree docCommentTree; + private DeprecatedTree deprecatedTree; + private TextTree textTree; + private TypeMirror typeMirror; + + @Before + public void setup() { + elements = rule.getElements(); + environment = Mockito.mock(DocletEnvironment.class); + classLookup = new ClassLookup(environment, Mockito.mock(ElementUtil.class)); + docTrees = Mockito.mock(DocTrees.class); + docTree = Mockito.mock(DocTree.class); + docCommentTree = Mockito.mock(DocCommentTree.class); + deprecatedTree = Mockito.mock(DeprecatedTree.class); + textTree = Mockito.mock(TextTree.class); + typeMirror = Mockito.mock(TypeMirror.class); + } + + @Test + public void determineTypeParameters() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); + + List result = classLookup.determineTypeParameters(element); + + assertEquals("Wrong type params size", result.size(), 1); + assertEquals("Wrong type parameter id", result.get(0).getId(), "T"); + } + + @Test + public void determineSuperclass() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Person"); + + String result = classLookup.determineSuperclass(element); + + assertEquals("Wrong result", result, "java.lang.Object"); + } + + @Test + public void determineSuperclassForChildClass() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + + String result = classLookup.determineSuperclass(element); + + assertEquals("Wrong result", result, "com.microsoft.samples.subpackage.Person"); + } + + @Test + public void determineSuperclassForEnum() { + TypeElement element = + elements.getTypeElement( + "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender"); + + String result = classLookup.determineSuperclass(element); + + assertEquals( + "Wrong result", + result, + "java.lang.Enum"); + } + + @Test + public void determineClassContent() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + ExtendedMetadataFileItem container = new ExtendedMetadataFileItem("UID"); + + classLookup.populateContent(element, "SuperHero", container); + + assertEquals( + "Wrong content", + container.getContent(), + "public class SuperHero extends Person implements Serializable, Cloneable"); + + assertTrue( + "Wrong set of interfaces", container.getInterfaces().contains("java.io.Serializable")); + assertTrue( + "Wrong set of interfaces", container.getInterfaces().contains("java.lang.Cloneable")); + } + + @Test + public void determineClassContentForInterface() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Display"); + ExtendedMetadataFileItem container = new ExtendedMetadataFileItem("UID"); + + classLookup.populateContent(element, "Display", container); + + assertEquals( + "Wrong content", + container.getContent(), + "public interface Display extends Serializable, List>"); + + assertTrue( + "Wrong set of interfaces", container.getInterfaces().contains("java.io.Serializable")); + assertTrue( + "Wrong set of interfaces", + container + .getInterfaces() + .contains("java.util.List>")); + } + + @Test + public void determineClassContentForEnum() { + TypeElement element = + elements.getTypeElement( + "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender"); + ExtendedMetadataFileItem container = new ExtendedMetadataFileItem("UID"); + + classLookup.populateContent(element, "Person.IdentificationInfo.Gender", container); + + assertEquals( + "Wrong content", + container.getContent(), + "public enum Person.IdentificationInfo.Gender extends Enum"); + } + + @Test + public void determineClassContentForStaticClass() { + TypeElement element = + elements.getTypeElement("com.microsoft.samples.subpackage.Person.IdentificationInfo"); + ExtendedMetadataFileItem container = new ExtendedMetadataFileItem("UID"); + + classLookup.populateContent(element, "Person.IdentificationInfo", container); + + assertEquals( + "Wrong content", container.getContent(), "public static class Person.IdentificationInfo"); + } + + @Test + public void determineTypeForInterface() { + TypeElement element = elements.getTypeElement("com.microsoft.samples.subpackage.Display"); + + assertEquals(classLookup.determineType(element), "Interface"); + } + + @Test + public void determineTypeForEnum() { + TypeElement element = + elements.getTypeElement( + "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender"); + + assertEquals(classLookup.determineType(element), "Enum"); + } + + @Test + public void determineTypeForClass() { + TypeElement element = + elements.getTypeElement("com.microsoft.samples.subpackage.Person.IdentificationInfo"); + + assertEquals(classLookup.determineType(element), "Class"); + } + + @Test + public void extractStatusDeprecated() { + TypeElement element = + elements.getTypeElement( + "com.microsoft.samples.agreements.AgreementDetailsCollectionOperations"); + + when(environment.getDocTrees()).thenReturn(docTrees); + when(docTrees.getDocCommentTree(element)).thenReturn(docCommentTree); + doReturn(Arrays.asList(deprecatedTree)).when(docCommentTree).getBlockTags(); + when(deprecatedTree.getKind()).thenReturn(DocTree.Kind.DEPRECATED); + + String result = classLookup.extractStatus(element); + + verify(environment).getDocTrees(); + verify(docTrees).getDocCommentTree(element); + verify(docCommentTree).getBlockTags(); + verify(deprecatedTree).getKind(); + assertEquals("Wrong description", result, Status.DEPRECATED.toString()); + } + + @Test + public void extractStatusNotDeprecated() { + TypeElement element = + elements.getTypeElement( + "com.microsoft.samples.agreements.AgreementDetailsCollectionOperations"); + + when(environment.getDocTrees()).thenReturn(docTrees); + when(docTrees.getDocCommentTree(element)).thenReturn(docCommentTree); + doReturn(Arrays.asList()).when(docCommentTree).getBlockTags(); + + String result = classLookup.extractStatus(element); + + verify(environment).getDocTrees(); + verify(docTrees).getDocCommentTree(element); + verify(docCommentTree).getBlockTags(); + assertEquals("Wrong description", result, null); + } + + @Test + public void testExtractJavaType() { + TypeElement typeElement = + elements.getTypeElement("com.microsoft.samples.google.ValidationException"); + assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), "exception"); + + typeElement = elements.getTypeElement("com.microsoft.samples.google.RecognitionAudio"); + assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), null); + + typeElement = elements.getTypeElement("com.microsoft.samples.google.BetaApi"); + assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), "annotationtype"); + + typeElement = elements.getTypeElement("com.microsoft.samples.IPartner"); + assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), null); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java index 90408fb7..0cdbbf10 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java @@ -1,7 +1,11 @@ package com.microsoft.lookup; +import static org.junit.Assert.assertEquals; + import com.google.testing.compile.CompilationRule; import com.microsoft.model.Status; +import javax.lang.model.element.PackageElement; +import javax.lang.model.util.Elements; import jdk.javadoc.doclet.DocletEnvironment; import org.junit.Before; import org.junit.Rule; @@ -10,52 +14,47 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import javax.lang.model.element.PackageElement; -import javax.lang.model.element.TypeElement; -import javax.lang.model.util.Elements; - -import static org.junit.Assert.assertEquals; - @RunWith(MockitoJUnitRunner.class) public class PackageLookupTest { - @Rule - public CompilationRule rule = new CompilationRule(); - private Elements elements; - private PackageLookup packageLookup; - private DocletEnvironment environment; - - @Before - public void setup() { - elements = rule.getElements(); - environment = Mockito.mock(DocletEnvironment.class); - packageLookup = new PackageLookup(environment); - } - - @Test - public void extractPackageContent() { - PackageElement element = elements.getPackageElement("com.microsoft.samples"); - - String result = packageLookup.determinePackageContent(element); - - assertEquals("Wrong result", result, "package com.microsoft.samples"); - } - - @Test - public void extractPackageStatus() { - PackageElement elementBeta = elements.getPackageElement("com.microsoft.samples.google.v1beta"); - PackageElement elementAlpha = elements.getPackageElement("com.microsoft.samples.google.v1p1alpha"); - - String resultA = packageLookup.extractStatus(elementAlpha); - String resultB = packageLookup.extractStatus(elementBeta); - - assertEquals("Wrong result", resultA, Status.ALPHA.toString()); - assertEquals("Wrong result", resultB, Status.BETA.toString()); - } - - @Test - public void testExtractJavaType() { - PackageElement packageElement = elements.getPackageElement("com.microsoft.samples.google.v1beta"); - assertEquals("Wrong javaType", packageLookup.extractJavaType(packageElement), "package"); - } + @Rule public CompilationRule rule = new CompilationRule(); + private Elements elements; + private PackageLookup packageLookup; + private DocletEnvironment environment; + + @Before + public void setup() { + elements = rule.getElements(); + environment = Mockito.mock(DocletEnvironment.class); + packageLookup = new PackageLookup(environment); + } + + @Test + public void extractPackageContent() { + PackageElement element = elements.getPackageElement("com.microsoft.samples"); + + String result = packageLookup.determinePackageContent(element); + + assertEquals("Wrong result", result, "package com.microsoft.samples"); + } + + @Test + public void extractPackageStatus() { + PackageElement elementBeta = elements.getPackageElement("com.microsoft.samples.google.v1beta"); + PackageElement elementAlpha = + elements.getPackageElement("com.microsoft.samples.google.v1p1alpha"); + + String resultA = packageLookup.extractStatus(elementAlpha); + String resultB = packageLookup.extractStatus(elementBeta); + + assertEquals("Wrong result", resultA, Status.ALPHA.toString()); + assertEquals("Wrong result", resultB, Status.BETA.toString()); + } + + @Test + public void testExtractJavaType() { + PackageElement packageElement = + elements.getPackageElement("com.microsoft.samples.google.v1beta"); + assertEquals("Wrong javaType", packageLookup.extractJavaType(packageElement), "package"); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/MetadataFileItemTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/MetadataFileItemTest.java index 534be760..a5a9bd8f 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/MetadataFileItemTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/MetadataFileItemTest.java @@ -1,163 +1,165 @@ package com.microsoft.model; -import org.junit.Test; +import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; - -import static org.junit.Assert.*; +import org.junit.Test; public class MetadataFileItemTest { - @Test - public void testEquals() { - MetadataFileItem object1 = new MetadataFileItem("123"); - MetadataFileItem object2 = new MetadataFileItem("1234"); - MetadataFileItem object3 = new MetadataFileItem("123"); - - assertTrue("Should be equal to self", object1.equals(object1)); - assertFalse("Should not be equal to null", object1.equals(null)); - assertFalse("Should not be equal to object of another type", object1.equals(123)); - assertFalse("Should not be equal to object with another uid", object1.equals(object2)); - assertTrue("Should be equal to object with same uid", object1.equals(object3)); - } - - @Test - public void testHashCode() { - String uid = "123"; - MetadataFileItem object = new MetadataFileItem(uid); - - assertEquals("Wrong result", uid.hashCode(), object.hashCode()); - } - - @Test - public void setTypeParameters() { - MetadataFileItem object = new MetadataFileItem("123"); - List typeParams = new ArrayList<>(); - - object.setTypeParameters(typeParams); + @Test + public void testEquals() { + MetadataFileItem object1 = new MetadataFileItem("123"); + MetadataFileItem object2 = new MetadataFileItem("1234"); + MetadataFileItem object3 = new MetadataFileItem("123"); - assertNotNull("Syntax should not be null", object.getSyntax()); - assertEquals("Wrong typeParameters value", object.getSyntax().getTypeParameters(), typeParams); - } + assertTrue("Should be equal to self", object1.equals(object1)); + assertFalse("Should not be equal to null", object1.equals(null)); + assertFalse("Should not be equal to object of another type", object1.equals(123)); + assertFalse("Should not be equal to object with another uid", object1.equals(object2)); + assertTrue("Should be equal to object with same uid", object1.equals(object3)); + } - @Test - public void setTypeParametersWhenSyntaxAlreadyPresent() { - MetadataFileItem object = new MetadataFileItem("123"); - Syntax existingSyntax = new Syntax(); - object.setSyntax(existingSyntax); - List typeParams = new ArrayList<>(); + @Test + public void testHashCode() { + String uid = "123"; + MetadataFileItem object = new MetadataFileItem(uid); - object.setTypeParameters(typeParams); + assertEquals("Wrong result", uid.hashCode(), object.hashCode()); + } - assertEquals("Syntax object should remain the same", object.getSyntax(), existingSyntax); - assertEquals("Wrong typeParameters value", object.getSyntax().getTypeParameters(), typeParams); - } + @Test + public void setTypeParameters() { + MetadataFileItem object = new MetadataFileItem("123"); + List typeParams = new ArrayList<>(); - @Test - public void setParameters() { - MetadataFileItem object = new MetadataFileItem("123"); - List params = new ArrayList<>(); - - object.setParameters(params); - - assertNotNull("Syntax should not be null", object.getSyntax()); - assertEquals("Wrong parameters value", object.getSyntax().getParameters(), params); - } - - @Test - public void setParametersWhenSyntaxAlreadyPresent() { - MetadataFileItem object = new MetadataFileItem("123"); - Syntax existingSyntax = new Syntax(); - object.setSyntax(existingSyntax); - List params = new ArrayList<>(); - - object.setParameters(params); - - assertEquals("Syntax object should remain the same", object.getSyntax(), existingSyntax); - assertEquals("Wrong parameters value", object.getSyntax().getParameters(), params); - } - - @Test - public void setReturn() { - MetadataFileItem object = new MetadataFileItem("123"); - Return returnValue = new Return("type"); - - object.setReturn(returnValue); - - assertNotNull("Syntax should not be null", object.getSyntax()); - assertEquals("Wrong return value", object.getSyntax().getReturnValue(), returnValue); - } - - @Test - public void setReturnWhenSyntaxAlreadyPresent() { - MetadataFileItem object = new MetadataFileItem("123"); - Syntax existingSyntax = new Syntax(); - object.setSyntax(existingSyntax); - Return returnValue = new Return("type"); - - object.setReturn(returnValue); - - assertEquals("Syntax object should remain the same", object.getSyntax(), existingSyntax); - assertEquals("Wrong return value", object.getSyntax().getReturnValue(), returnValue); - } - - @Test - public void setContent() { - MetadataFileItem object = new MetadataFileItem("123"); - String content = "Some content"; - - object.setContent(content); - - assertNotNull("Syntax should not be null", object.getSyntax()); - assertEquals("Wrong content value", object.getSyntax().getContent(), content); - } - - @Test - public void setContentWhenSyntaxAlreadyPresent() { - MetadataFileItem object = new MetadataFileItem("123"); - Syntax existingSyntax = new Syntax(); - object.setSyntax(existingSyntax); - String content = "Some content"; - - object.setContent(content); + object.setTypeParameters(typeParams); - assertEquals("Syntax object should remain the same", object.getSyntax(), existingSyntax); - assertEquals("Wrong content value", object.getSyntax().getContent(), content); - } + assertNotNull("Syntax should not be null", object.getSyntax()); + assertEquals("Wrong typeParameters value", object.getSyntax().getTypeParameters(), typeParams); + } - @Test - public void setInheritance() { - MetadataFileItem object = new MetadataFileItem("123"); + @Test + public void setTypeParametersWhenSyntaxAlreadyPresent() { + MetadataFileItem object = new MetadataFileItem("123"); + Syntax existingSyntax = new Syntax(); + object.setSyntax(existingSyntax); + List typeParams = new ArrayList<>(); - object.setInheritance(Arrays.asList("Some value")); - - assertEquals("Wrong inheritance size", object.getInheritance().size(), 1); - assertTrue("Wrong inheritance content", object.getInheritance().contains("Some value")); - } - - @Test - public void setInheritanceForNull() { - MetadataFileItem object = new MetadataFileItem("123"); - - object.setInheritance(null); - - assertNull("Wrong inheritance", object.getInheritance()); - } + object.setTypeParameters(typeParams); - @Test - public void getIsExternal() { - assertNull("Wrong isExternal when null", (new MetadataFileItem("123")).getIsExternal()); - assertTrue("Wrong isExternal when true", (new MetadataFileItem("123", "name", true)).getIsExternal()); - assertNull("Wrong isExternal when false", (new MetadataFileItem("123", "name", false)).getIsExternal()); - } - - @Test - public void setJavaType() { - MetadataFileItem metadataFileItem = new MetadataFileItem("123"); - assertNull("Wrong javaType when null", metadataFileItem.getJavaType()); - metadataFileItem.setJavaType("javaType"); - assertEquals("Wrong javaType when set","javaType", metadataFileItem.getJavaType()); - } + assertEquals("Syntax object should remain the same", object.getSyntax(), existingSyntax); + assertEquals("Wrong typeParameters value", object.getSyntax().getTypeParameters(), typeParams); + } + + @Test + public void setParameters() { + MetadataFileItem object = new MetadataFileItem("123"); + List params = new ArrayList<>(); + + object.setParameters(params); + + assertNotNull("Syntax should not be null", object.getSyntax()); + assertEquals("Wrong parameters value", object.getSyntax().getParameters(), params); + } + + @Test + public void setParametersWhenSyntaxAlreadyPresent() { + MetadataFileItem object = new MetadataFileItem("123"); + Syntax existingSyntax = new Syntax(); + object.setSyntax(existingSyntax); + List params = new ArrayList<>(); + + object.setParameters(params); + + assertEquals("Syntax object should remain the same", object.getSyntax(), existingSyntax); + assertEquals("Wrong parameters value", object.getSyntax().getParameters(), params); + } + + @Test + public void setReturn() { + MetadataFileItem object = new MetadataFileItem("123"); + Return returnValue = new Return("type"); + + object.setReturn(returnValue); + + assertNotNull("Syntax should not be null", object.getSyntax()); + assertEquals("Wrong return value", object.getSyntax().getReturnValue(), returnValue); + } + + @Test + public void setReturnWhenSyntaxAlreadyPresent() { + MetadataFileItem object = new MetadataFileItem("123"); + Syntax existingSyntax = new Syntax(); + object.setSyntax(existingSyntax); + Return returnValue = new Return("type"); + + object.setReturn(returnValue); + + assertEquals("Syntax object should remain the same", object.getSyntax(), existingSyntax); + assertEquals("Wrong return value", object.getSyntax().getReturnValue(), returnValue); + } + + @Test + public void setContent() { + MetadataFileItem object = new MetadataFileItem("123"); + String content = "Some content"; + + object.setContent(content); + + assertNotNull("Syntax should not be null", object.getSyntax()); + assertEquals("Wrong content value", object.getSyntax().getContent(), content); + } + + @Test + public void setContentWhenSyntaxAlreadyPresent() { + MetadataFileItem object = new MetadataFileItem("123"); + Syntax existingSyntax = new Syntax(); + object.setSyntax(existingSyntax); + String content = "Some content"; + + object.setContent(content); + + assertEquals("Syntax object should remain the same", object.getSyntax(), existingSyntax); + assertEquals("Wrong content value", object.getSyntax().getContent(), content); + } + + @Test + public void setInheritance() { + MetadataFileItem object = new MetadataFileItem("123"); + + object.setInheritance(Arrays.asList("Some value")); + + assertEquals("Wrong inheritance size", object.getInheritance().size(), 1); + assertTrue("Wrong inheritance content", object.getInheritance().contains("Some value")); + } + + @Test + public void setInheritanceForNull() { + MetadataFileItem object = new MetadataFileItem("123"); + + object.setInheritance(null); + + assertNull("Wrong inheritance", object.getInheritance()); + } + + @Test + public void getIsExternal() { + assertNull("Wrong isExternal when null", (new MetadataFileItem("123")).getIsExternal()); + assertTrue( + "Wrong isExternal when true", (new MetadataFileItem("123", "name", true)).getIsExternal()); + assertNull( + "Wrong isExternal when false", + (new MetadataFileItem("123", "name", false)).getIsExternal()); + } + + @Test + public void setJavaType() { + MetadataFileItem metadataFileItem = new MetadataFileItem("123"); + assertNull("Wrong javaType when null", metadataFileItem.getJavaType()); + metadataFileItem.setJavaType("javaType"); + assertEquals("Wrong javaType when set", "javaType", metadataFileItem.getJavaType()); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/StatusTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/StatusTest.java index cff62ebb..62a40698 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/StatusTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/StatusTest.java @@ -16,15 +16,15 @@ package com.microsoft.model; -import org.junit.Test; - import static org.junit.Assert.assertEquals; +import org.junit.Test; + public class StatusTest { - @Test - public void statusName() { - String name = Status.DEPRECATED.toString(); - assertEquals("Status should be deprecated", name, "deprecated"); - } -} \ No newline at end of file + @Test + public void statusName() { + String name = Status.DEPRECATED.toString(); + assertEquals("Status should be deprecated", name, "deprecated"); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java index 530910d8..31833830 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java @@ -16,88 +16,91 @@ package com.microsoft.model; -import org.junit.Before; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import java.util.ArrayList; import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; +import org.junit.Before; +import org.junit.Test; public class TocContentsTest { - private TocItem tocItemA; - private TocItem tocItemB; - private TocItem tocItemC; - private List tocItems; - private String projectName = "google-cloud-project"; - private boolean disableChangelog = false; - - @Before - public void setup() { - tocItemA = new TocItem("A.uid.package.class", "nameA"); - tocItemB = new TocItem("B.uid.package.class", "nameB"); - tocItemC = new TocItem("C.uid.package.class", "nameC"); - - tocItems = new ArrayList<>(); - tocItems.add(tocItemA); - tocItems.add(tocItemB); - tocItems.add(tocItemC); - } - - @Test - public void getContentsWithProjectName() { - // should include ProjectContents and Guides - List tocContents = new TocContents(projectName, disableChangelog, tocItems).getContents(); - - assertEquals("Should only include 1 item", tocContents.size(), 1); - assertEquals("Should include ProjectContents", tocContents.get(0).getClass(), ProjectContents.class); - - ProjectContents contents = (ProjectContents) tocContents.get(0); - assertEquals(contents.getName(), "google-cloud-project"); - - List items = contents.getItems(); - assertEquals("Should be 5 items", items.size(), 5); - - assertEquals("Guide should be first", items.get(0).getClass(), Guide.class); - Guide overview = (Guide) items.get(0); - assertEquals("First guide should be Overview", overview.getName(), "Overview"); - - assertEquals("Guide should be second", items.get(1).getClass(), Guide.class); - Guide history = (Guide) items.get(1); - assertEquals("Second guide should be Version History", history.getName(), "Version history"); - - assertEquals("Item A should be third", items.get(2), tocItemA); - assertEquals("Item B should be fourth", items.get(3), tocItemB); - assertEquals("Item C should be fifth", items.get(4), tocItemC); - } - - @Test - public void getContentsNoProjectName() { - List tocContents = new TocContents("", disableChangelog, tocItems).getContents(); - - // should not include ProjectContents or Guides - assertEquals("Should be 3 items", tocContents.size(), 3); - assertEquals("Item A should be first", tocContents.get(0), tocItemA); - assertEquals("Item B should be second", tocContents.get(1), tocItemB); - assertEquals("Item C should be third", tocContents.get(2), tocItemC); - } - - @Test - public void getContentsWithDisabledChangelog() { - disableChangelog = true; - List tocContents = new TocContents(projectName, disableChangelog, tocItems).getContents(); - - ProjectContents contents = (ProjectContents) tocContents.get(0); - List items = contents.getItems(); - assertEquals("Should be 4 items", items.size(), 4); - - Guide overview = (Guide) items.get(0); - assertEquals("First guide should be Overview", overview.getName(), "Overview"); - assertNotEquals("Second item should not be Version History guide", items.get(1).getClass(), Guide.class); - assertEquals("Item A should be second", items.get(1), tocItemA); - assertEquals("Item B should be third", items.get(2), tocItemB); - assertEquals("Item C should be fourth", items.get(3), tocItemC); - } -} \ No newline at end of file + private TocItem tocItemA; + private TocItem tocItemB; + private TocItem tocItemC; + private List tocItems; + private String projectName = "google-cloud-project"; + private boolean disableChangelog = false; + + @Before + public void setup() { + tocItemA = new TocItem("A.uid.package.class", "nameA"); + tocItemB = new TocItem("B.uid.package.class", "nameB"); + tocItemC = new TocItem("C.uid.package.class", "nameC"); + + tocItems = new ArrayList<>(); + tocItems.add(tocItemA); + tocItems.add(tocItemB); + tocItems.add(tocItemC); + } + + @Test + public void getContentsWithProjectName() { + // should include ProjectContents and Guides + List tocContents = + new TocContents(projectName, disableChangelog, tocItems).getContents(); + + assertEquals("Should only include 1 item", tocContents.size(), 1); + assertEquals( + "Should include ProjectContents", tocContents.get(0).getClass(), ProjectContents.class); + + ProjectContents contents = (ProjectContents) tocContents.get(0); + assertEquals(contents.getName(), "google-cloud-project"); + + List items = contents.getItems(); + assertEquals("Should be 5 items", items.size(), 5); + + assertEquals("Guide should be first", items.get(0).getClass(), Guide.class); + Guide overview = (Guide) items.get(0); + assertEquals("First guide should be Overview", overview.getName(), "Overview"); + + assertEquals("Guide should be second", items.get(1).getClass(), Guide.class); + Guide history = (Guide) items.get(1); + assertEquals("Second guide should be Version History", history.getName(), "Version history"); + + assertEquals("Item A should be third", items.get(2), tocItemA); + assertEquals("Item B should be fourth", items.get(3), tocItemB); + assertEquals("Item C should be fifth", items.get(4), tocItemC); + } + + @Test + public void getContentsNoProjectName() { + List tocContents = new TocContents("", disableChangelog, tocItems).getContents(); + + // should not include ProjectContents or Guides + assertEquals("Should be 3 items", tocContents.size(), 3); + assertEquals("Item A should be first", tocContents.get(0), tocItemA); + assertEquals("Item B should be second", tocContents.get(1), tocItemB); + assertEquals("Item C should be third", tocContents.get(2), tocItemC); + } + + @Test + public void getContentsWithDisabledChangelog() { + disableChangelog = true; + List tocContents = + new TocContents(projectName, disableChangelog, tocItems).getContents(); + + ProjectContents contents = (ProjectContents) tocContents.get(0); + List items = contents.getItems(); + assertEquals("Should be 4 items", items.size(), 4); + + Guide overview = (Guide) items.get(0); + assertEquals("First guide should be Overview", overview.getName(), "Overview"); + assertNotEquals( + "Second item should not be Version History guide", items.get(1).getClass(), Guide.class); + assertEquals("Item A should be second", items.get(1), tocItemA); + assertEquals("Item B should be third", items.get(2), tocItemB); + assertEquals("Item C should be fourth", items.get(3), tocItemC); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java index c1c174ff..990b4e11 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java @@ -16,31 +16,31 @@ package com.microsoft.model; -import org.junit.Test; - import static org.junit.Assert.assertEquals; +import org.junit.Test; + public class TocFileTest { - @Test - public void sortsByUid() { - TocFile tocFile = new TocFile("outputPath", "google-cloud-project", false); - TocItem tocItemA = new TocItem("A.uid.package.class", "name"); - TocItem tocItemB = new TocItem("B.uid.package.class", "name"); - TocItem tocItemC = new TocItem("C.uid.package.class", "name"); + @Test + public void sortsByUid() { + TocFile tocFile = new TocFile("outputPath", "google-cloud-project", false); + TocItem tocItemA = new TocItem("A.uid.package.class", "name"); + TocItem tocItemB = new TocItem("B.uid.package.class", "name"); + TocItem tocItemC = new TocItem("C.uid.package.class", "name"); - tocFile.addTocItem(tocItemC); - tocFile.addTocItem(tocItemA); - tocFile.addTocItem(tocItemB); + tocFile.addTocItem(tocItemC); + tocFile.addTocItem(tocItemA); + tocFile.addTocItem(tocItemB); - assertEquals("Should be out of uid order", tocFile.get(0), tocItemC); - assertEquals("Should be out of uid order", tocFile.get(1), tocItemA); - assertEquals("Should be out of uid order", tocFile.get(2), tocItemB); + assertEquals("Should be out of uid order", tocFile.get(0), tocItemC); + assertEquals("Should be out of uid order", tocFile.get(1), tocItemA); + assertEquals("Should be out of uid order", tocFile.get(2), tocItemB); - tocFile.sortByUid(); + tocFile.sortByUid(); - assertEquals("Should sort toc by uid", tocFile.get(0), tocItemA); - assertEquals("Should sort toc by uid", tocFile.get(1), tocItemB); - assertEquals("Should sort toc by uid", tocFile.get(2), tocItemC); - } -} \ No newline at end of file + assertEquals("Should sort toc by uid", tocFile.get(0), tocItemA); + assertEquals("Should sort toc by uid", tocFile.get(1), tocItemB); + assertEquals("Should sort toc by uid", tocFile.get(2), tocItemC); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocTypeMapTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocTypeMapTest.java index 77593e8c..ae06c264 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocTypeMapTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocTypeMapTest.java @@ -15,26 +15,29 @@ */ package com.microsoft.model; +import static org.junit.Assert.*; + +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; -import java.util.List; - -import static org.junit.Assert.*; - @RunWith(MockitoJUnitRunner.class) public class TocTypeMapTest { - @Test - public void elementKindsExistInMap() { - TocTypeMap tocTypeMap = new TocTypeMap(); - List titleList = tocTypeMap.getTitleList(); + @Test + public void elementKindsExistInMap() { + TocTypeMap tocTypeMap = new TocTypeMap(); + List titleList = tocTypeMap.getTitleList(); - assertEquals("Should include 5 items in list", 5, titleList.size()); + assertEquals("Should include 5 items in list", 5, titleList.size()); - titleList.stream().forEach(kindtitle -> assertNotNull("Element kind should exist in map", - tocTypeMap.get(kindtitle.getElementKind()))); + titleList.stream() + .forEach( + kindtitle -> + assertNotNull( + "Element kind should exist in map", + tocTypeMap.get(kindtitle.getElementKind()))); - assertNull("Should not include provided key", tocTypeMap.get("FAKE_VALUE")); - } + assertNull("Should not include provided key", tocTypeMap.get("FAKE_VALUE")); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/BasePartnerComponent.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/BasePartnerComponent.java index 93d352f9..9dd4580d 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/BasePartnerComponent.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/BasePartnerComponent.java @@ -7,48 +7,40 @@ package com.microsoft.samples; /** - * Holds common partner component properties and behavior. All components should inherit from this class. The context - * object type. + * Holds common partner component properties and behavior. All components should inherit from this + * class. The context object type. */ public abstract class BasePartnerComponent { - /** - * Initializes a new instance of the BasePartnerComponent class. - * - * @param rootPartnerOperations The root partner operations that created this component. - * @param componentContext A component context object to work with. - */ - protected BasePartnerComponent(IPartner rootPartnerOperations, TContext componentContext) { - if (rootPartnerOperations == null) { - throw new NullPointerException("rootPartnerOperations null"); - } - - this.setPartner(rootPartnerOperations); - this.setContext(componentContext); + /** + * Initializes a new instance of the BasePartnerComponent class. + * + * @param rootPartnerOperations The root partner operations that created this component. + * @param componentContext A component context object to work with. + */ + protected BasePartnerComponent(IPartner rootPartnerOperations, TContext componentContext) { + if (rootPartnerOperations == null) { + throw new NullPointerException("rootPartnerOperations null"); } - /** - * Gets a reference to the partner operations instance that generated this component. - */ - private IPartner partner; + this.setPartner(rootPartnerOperations); + this.setContext(componentContext); + } + /** Gets a reference to the partner operations instance that generated this component. */ + private IPartner partner; - private void setPartner(IPartner value) { - partner = value; - } + private void setPartner(IPartner value) { + partner = value; + } - /** - * Gets the component context object. - */ - private TContext context; + /** Gets the component context object. */ + private TContext context; + private void setContext(TContext value) { + context = value; + } - private void setContext(TContext value) { - context = value; - } + protected void testBase() {} - protected void testBase() { - } - - protected void testInherited() { - } -} \ No newline at end of file + protected void testInherited() {} +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/BasePartnerComponentString.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/BasePartnerComponentString.java index 6324e1e1..546d0d82 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/BasePartnerComponentString.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/BasePartnerComponentString.java @@ -9,28 +9,26 @@ /** * Holds common partner component properties and behavior. The context is string type by default. */ -public abstract class BasePartnerComponentString - extends BasePartnerComponent { - /** - * Initializes a new instance of the BasePartnerComponent class. - * - * @param rootPartnerOperations The root partner operations that created this component. - */ - protected BasePartnerComponentString(IPartner rootPartnerOperations) { - super(rootPartnerOperations, null); - } +public abstract class BasePartnerComponentString extends BasePartnerComponent { + /** + * Initializes a new instance of the BasePartnerComponent class. + * + * @param rootPartnerOperations The root partner operations that created this component. + */ + protected BasePartnerComponentString(IPartner rootPartnerOperations) { + super(rootPartnerOperations, null); + } - /** - * Initializes a new instance of the BasePartnerComponent class. - * - * @param rootPartnerOperations The root partner operations that created this component. - * @param componentContext A component context object to work with. - */ - protected BasePartnerComponentString(IPartner rootPartnerOperations, String componentContext) { - super(rootPartnerOperations, componentContext); - } + /** + * Initializes a new instance of the BasePartnerComponent class. + * + * @param rootPartnerOperations The root partner operations that created this component. + * @param componentContext A component context object to work with. + */ + protected BasePartnerComponentString(IPartner rootPartnerOperations, String componentContext) { + super(rootPartnerOperations, componentContext); + } - @Override - protected void testInherited() { - } -} \ No newline at end of file + @Override + protected void testInherited() {} +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/ExceptionHandler.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/ExceptionHandler.java index 693090ab..982f797e 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/ExceptionHandler.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/ExceptionHandler.java @@ -16,6 +16,8 @@ package com.microsoft.samples; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.api.core.BetaApi; import com.google.api.gax.retrying.ResultRetryAlgorithm; import com.google.api.gax.retrying.TimedAttemptSettings; @@ -24,15 +26,12 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; - import java.io.Serializable; import java.lang.reflect.Method; import java.util.Objects; import java.util.Set; import java.util.concurrent.Callable; -import static com.google.common.base.Preconditions.checkNotNull; - /** Exception retry algorithm implementation used by {@link RetryHelper}. */ @BetaApi public final class ExceptionHandler implements ResultRetryAlgorithm, Serializable { diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/IPartner.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/IPartner.java index 73aa4db0..cf13e154 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/IPartner.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/IPartner.java @@ -6,24 +6,22 @@ package com.microsoft.samples; - /** - * The main entry point into using the partner SDK functionality. Represents a partner and encapsulates all the behavior - * attached to partners. Use this interface to get to the partner's customers, profiles, and customer orders, profiles - * and subscriptions and more. + * The main entry point into using the partner SDK functionality. Represents a partner and + * encapsulates all the behavior attached to partners. Use this interface to get to the partner's + * customers, profiles, and customer orders, profiles and subscriptions and more. */ public interface IPartner { - /** - * Gets the partner credentials. - * - * @return The partner credentials. - */ - String getCredentials(); - - /** - * Gets the request context. - * - * @return The request context. - */ + /** + * Gets the partner credentials. + * + * @return The partner credentials. + */ + String getCredentials(); -} \ No newline at end of file + /** + * Gets the request context. + * + * @return The request context. + */ +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/KeyValuePair.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/KeyValuePair.java index bb052bf2..672df61d 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/KeyValuePair.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/KeyValuePair.java @@ -2,22 +2,21 @@ public class KeyValuePair { - private K key; - private V value; + private K key; + private V value; - public KeyValuePair() { - } + public KeyValuePair() {} - public KeyValuePair(K key, V value) { - this.key = key; - this.value = value; - } + public KeyValuePair(K key, V value) { + this.key = key; + this.value = value; + } - public K getKey() { - return key; - } + public K getKey() { + return key; + } - public V getValue() { - return value; - } + public V getValue() { + return value; + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/Link.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/Link.java index d96c8ef9..be15ef95 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/Link.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/Link.java @@ -4,41 +4,37 @@ public class Link { - public Link() { - } - - /** - * Initializes a new instance of the Link class. - * - * @param uri The URI. - */ - - /** - * Gets the URI. - *

- * /** - * Gets the method. - */ - private String method; - - public String getMethod() { - return method; - } - - public void setMethod(String value) { - method = value; - } - - /** - * Gets the link headers. - */ - private Collection> headers; - - public Collection> getHeaders() { - return headers; - } - - public void setHeaders(Collection> value) { - headers = value; - } + public Link() {} + + /** + * Initializes a new instance of the Link class. + * + * @param uri The URI. + */ + + /** + * Gets the URI. + * + *

/** Gets the method. + */ + private String method; + + public String getMethod() { + return method; + } + + public void setMethod(String value) { + method = value; + } + + /** Gets the link headers. */ + private Collection> headers; + + public Collection> getHeaders() { + return headers; + } + + public void setHeaders(Collection> value) { + headers = value; + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/Subpackage.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/Subpackage.java index 8e2b679b..b16d190c 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/Subpackage.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/Subpackage.java @@ -1,5 +1,3 @@ package com.microsoft.samples; -public class Subpackage { - -} +public class Subpackage {} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/SuperHero.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/SuperHero.java index 54276e67..04055a3a 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/SuperHero.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/SuperHero.java @@ -1,9 +1,8 @@ package com.microsoft.samples; import com.microsoft.samples.subpackage.Person; -import org.apache.commons.lang3.StringUtils; - import java.io.Serializable; +import org.apache.commons.lang3.StringUtils; /** * Hero is the main entity we will be using to something @@ -12,99 +11,98 @@ */ public class SuperHero extends Person implements Serializable, Cloneable { - /** - * The public name of a hero that is common knowledge - */ - private String heroName; - private String uniquePower; - private int health; - private int defense; - String hobby; - - public final String SOME_PUBLIC_STRING = "So important string value"; - - public SuperHero() { - } - - public SuperHero(String heroName, String uniquePower, int health, int defense) { - this.heroName = heroName; - this.uniquePower = uniquePower; - this.health = health; - this.defense = defense; - } - - /** - *

This is a simple description of the method. . . - * Superman! - *

- * - * @param incomingDamage the amount of incoming damage for {@link SuperHero} - * @param damageType type of damage with similar word damageTypeLong, sure - * @return the amount of health hero has after attack - * @throws IllegalArgumentException when incomingDamage is negative and thanks for {@link Exception} - * @version 1.2 - * @see HERO-402 - * @since 1.0 - * @deprecated As of version 1.1, use . . . instead - */ - @Deprecated - public int successfullyAttacked(int incomingDamage, String damageType) throws IllegalArgumentException { - // do things - if (incomingDamage < 0) { - throw new IllegalArgumentException("Cannot cause negative damage"); - } - return 0; - } - - public String getHeroName() { - return heroName; - } - - public void setHeroName(String heroName) { - this.heroName = heroName; - } - - /** - * Get capitalized last name. But it's not the end, - * because of multiline comment - * - * @return lastName in uppercase. But it's not the end, - * because of multiline comment - */ - @Override - public String getLastName() { - return StringUtils.upperCase(super.getLastName()); - } - - public String getUniquePower() { - return uniquePower; - } - - public void setUniquePower(String uniquePower) { - this.uniquePower = uniquePower; - } - - protected int getHealth() { - return health; - } - - protected void setHealth(int health) { - this.health = health; - } - - public int getDefense() { - return defense; - } - - public void setDefense(int defense) { - this.defense = defense; - } - - private void setHobby(String hobby) { - this.hobby = hobby; - } - - String getHobby() { - return hobby; + /** The public name of a hero that is common knowledge */ + private String heroName; + + private String uniquePower; + private int health; + private int defense; + String hobby; + + public final String SOME_PUBLIC_STRING = "So important string value"; + + public SuperHero() {} + + public SuperHero(String heroName, String uniquePower, int health, int defense) { + this.heroName = heroName; + this.uniquePower = uniquePower; + this.health = health; + this.defense = defense; + } + + /** + * This is a simple description of the method. . . Superman! + * + * @param incomingDamage the amount of incoming damage for {@link SuperHero} + * @param damageType type of damage with similar word damageTypeLong, sure + * @return the amount of health hero has after attack + * @throws IllegalArgumentException when incomingDamage is negative and thanks for {@link + * Exception} + * @version 1.2 + * @see HERO-402 + * @since 1.0 + * @deprecated As of version 1.1, use . . . instead + */ + @Deprecated + public int successfullyAttacked(int incomingDamage, String damageType) + throws IllegalArgumentException { + // do things + if (incomingDamage < 0) { + throw new IllegalArgumentException("Cannot cause negative damage"); } + return 0; + } + + public String getHeroName() { + return heroName; + } + + public void setHeroName(String heroName) { + this.heroName = heroName; + } + + /** + * Get capitalized last name. But it's not the end, because we add a lot of text to make this a + * multiline comment + * + * @return lastName in uppercase. But it's not the end, because we add a lot of text to make this + * a multiline comment + */ + @Override + public String getLastName() { + return StringUtils.upperCase(super.getLastName()); + } + + public String getUniquePower() { + return uniquePower; + } + + public void setUniquePower(String uniquePower) { + this.uniquePower = uniquePower; + } + + protected int getHealth() { + return health; + } + + protected void setHealth(int health) { + this.health = health; + } + + public int getDefense() { + return defense; + } + + public void setDefense(int defense) { + this.defense = defense; + } + + private void setHobby(String hobby) { + this.hobby = hobby; + } + + String getHobby() { + return hobby; + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementDetailsCollectionOperations.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementDetailsCollectionOperations.java index 55a9b2b1..740a1bdc 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementDetailsCollectionOperations.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementDetailsCollectionOperations.java @@ -3,30 +3,29 @@ import com.microsoft.samples.BasePartnerComponentString; import com.microsoft.samples.IPartner; - /** * Agreement details collection operations implementation class. + * * @deprecated Use {@link AgreementMetaData} instead. */ -public class AgreementDetailsCollectionOperations - extends BasePartnerComponentString - implements IAgreementDetailsCollection { - /** - * Initializes a new instance of the AgreementDetailsCollectionOperations class. - * - * @param rootPartnerOperations The root partner operations instance. - */ - public AgreementDetailsCollectionOperations(IPartner rootPartnerOperations) { - super(rootPartnerOperations); - } +public class AgreementDetailsCollectionOperations extends BasePartnerComponentString + implements IAgreementDetailsCollection { + /** + * Initializes a new instance of the AgreementDetailsCollectionOperations class. + * + * @param rootPartnerOperations The root partner operations instance. + */ + public AgreementDetailsCollectionOperations(IPartner rootPartnerOperations) { + super(rootPartnerOperations); + } - /** - * Retrieves the agreement details. - * - * @return A list of agreement details. - * @deprecated Some text - */ - public ResourceCollection get() { - return null; - } -} \ No newline at end of file + /** + * Retrieves the agreement details. + * + * @return A list of agreement details. + * @deprecated Some text + */ + public ResourceCollection get() { + return null; + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementMetaData.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementMetaData.java index 277c5b7d..cc06cab6 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementMetaData.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementMetaData.java @@ -3,55 +3,49 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * The AgreementMetaData provides metadata about the agreement type - * that partner can provide confirmation of customer acceptance. + * The AgreementMetaData provides metadata about the agreement type that partner can provide + * confirmation of customer acceptance. */ public class AgreementMetaData { - /** - * Gets or sets the unique identifier of an agreement template. - */ - @JsonProperty("templateId") - private String templateId; - - public String getTemplateId() { - return templateId; - } - - public void setTemplateId(String value) { - templateId = value; - } - - /** - * Gets or sets agreement type. - */ - - - /** - * Gets or sets URL to the agreement template. - * @deprecated - */ - @JsonProperty("agreementLink") - private String agreementLink; - - public String getAgreementLink() { - return agreementLink; - } - - public void setAgreementLink(String value) { - agreementLink = value; - } - - /** - * Gets or sets the version rank of an agreement template. - */ - @JsonProperty("versionRank") - private int versionRank; - - public int getVersionRank() { - return versionRank; - } - - public void setVersionRank(int value) { - versionRank = value; - } -} \ No newline at end of file + /** Gets or sets the unique identifier of an agreement template. */ + @JsonProperty("templateId") + private String templateId; + + public String getTemplateId() { + return templateId; + } + + public void setTemplateId(String value) { + templateId = value; + } + + /** Gets or sets agreement type. */ + + /** + * Gets or sets URL to the agreement template. + * + * @deprecated + */ + @JsonProperty("agreementLink") + private String agreementLink; + + public String getAgreementLink() { + return agreementLink; + } + + public void setAgreementLink(String value) { + agreementLink = value; + } + + /** Gets or sets the version rank of an agreement template. */ + @JsonProperty("versionRank") + private int versionRank; + + public int getVersionRank() { + return versionRank; + } + + public void setVersionRank(int value) { + versionRank = value; + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/IAgreementDetailsCollection.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/IAgreementDetailsCollection.java index 5d8a5944..8b80e81d 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/IAgreementDetailsCollection.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/IAgreementDetailsCollection.java @@ -1,15 +1,15 @@ package com.microsoft.samples.agreements; - /** * Encapsulates the operations on the agreement metadata collection. + * * @deprecated This one is deprecated :( */ public interface IAgreementDetailsCollection { - /** - * Retrieves all current agreement metadata. - * - * @return The current agreement metadata. - */ - ResourceCollection get(); -} \ No newline at end of file + /** + * Retrieves all current agreement metadata. + * + * @return The current agreement metadata. + */ + ResourceCollection get(); +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/ResourceCollection.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/ResourceCollection.java index 9b829aed..7b8d8ca2 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/ResourceCollection.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/ResourceCollection.java @@ -1,8 +1,7 @@ package com.microsoft.samples.agreements; /** - * Contains a collection of resources with JSON properties to represent the output Type of objects in collection + * Contains a collection of resources with JSON properties to represent the output Type of objects + * in collection */ -public class ResourceCollection { - -} \ No newline at end of file +public class ResourceCollection {} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Animal.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Animal.java index 6ac38bc8..2d1d7a94 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Animal.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Animal.java @@ -1,28 +1,16 @@ package com.microsoft.samples.commentinheritance; -/** - * Animal. - */ +/** Animal. */ public abstract class Animal implements Organism { - /** - * Breathe. - */ - public void breathe() { - } + /** Breathe. */ + public void breathe() {} - /** - * Communicate verbally. - */ - public abstract void verballyCommunicate(); + /** Communicate verbally. */ + public abstract void verballyCommunicate(); - /** - * Feed offspring. - */ - public abstract void feed(); + /** Feed offspring. */ + public abstract void feed(); - /** - * {@inheritDoc} - * Get kind from Animal. - */ - public abstract String getKind(); + /** {@inheritDoc} Get kind from Animal. */ + public abstract String getKind(); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Carnivorous.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Carnivorous.java index 96811e00..3bc8be6d 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Carnivorous.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Carnivorous.java @@ -1,18 +1,14 @@ package com.microsoft.samples.commentinheritance; -/** - * Marks an Animal that eats other animals. - */ +/** Marks an Animal that eats other animals. */ public interface Carnivorous { - /** - * Eat the provided animal. - * - * @param animalBeingEaten Animal that will be eaten. - */ - void eat(Animal animalBeingEaten); + /** + * Eat the provided animal. + * + * @param animalBeingEaten Animal that will be eaten. + */ + void eat(Animal animalBeingEaten); - /** - * Get kind from Carnivorous. - */ - String getKind(); + /** Get kind from Carnivorous. */ + String getKind(); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Dog.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Dog.java index 09e7d2d5..a950f1cd 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Dog.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Dog.java @@ -1,71 +1,58 @@ package com.microsoft.samples.commentinheritance; -import java.awt.*; - import static java.lang.System.out; -/** - * Canine and man's best friend. - */ -public class Dog extends Mammal implements Omnivorous, Viviparous { - private final Color hairColor = null; - - /** - * {@inheritDoc} - * - * @param otherAnimal Tasty treat. - */ - @Override - public void eat(final Animal otherAnimal) { - } - - /** - * {@inheritDoc} - * - * @param plantToBeEaten Plant that this dog will eat. - */ - @Override - public void eat(final Plant plantToBeEaten) { - } - - /** - * {@inheritDoc} Bark. - */ - public void verballyCommunicate() { - out.println("Woof!"); - } - - /** - * {@inheritDoc} - * - * @param numberPuppies Number of puppies being born. - */ - @Override - public void giveBirth(final int numberPuppies) { - } - - /** - * Provide the color of the dog's hair. - * - * @return Color of the dog's fur. - */ - public Color getHairColor() { - return hairColor; - } - - /** - * {@inheritDoc} - */ - @Override - public void feed() { - } +import java.awt.*; - /** - * {@inheritDoc} - * Get kind from Dog. - */ - @Override - public String getKind() { - return "Dog"; - } +/** Canine and man's best friend. */ +public class Dog extends Mammal implements Omnivorous, Viviparous { + private final Color hairColor = null; + + /** + * {@inheritDoc} + * + * @param otherAnimal Tasty treat. + */ + @Override + public void eat(final Animal otherAnimal) {} + + /** + * {@inheritDoc} + * + * @param plantToBeEaten Plant that this dog will eat. + */ + @Override + public void eat(final Plant plantToBeEaten) {} + + /** {@inheritDoc} Bark. */ + public void verballyCommunicate() { + out.println("Woof!"); + } + + /** + * {@inheritDoc} + * + * @param numberPuppies Number of puppies being born. + */ + @Override + public void giveBirth(final int numberPuppies) {} + + /** + * Provide the color of the dog's hair. + * + * @return Color of the dog's fur. + */ + public Color getHairColor() { + return hairColor; + } + + /** {@inheritDoc} */ + @Override + public void feed() {} + + /** {@inheritDoc} Get kind from Dog. */ + @Override + public String getKind() { + return "Dog"; + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Herbivorous.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Herbivorous.java index 32abea1f..5102185d 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Herbivorous.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Herbivorous.java @@ -1,22 +1,16 @@ package com.microsoft.samples.commentinheritance; -/** - * Marks animals that eat plants. - */ +/** Marks animals that eat plants. */ public interface Herbivorous { - /** - * Eat the provided plant. - * - * @param plantToBeEaten Plant that will be eaten. - */ - void eat(Plant plantToBeEaten); + /** + * Eat the provided plant. + * + * @param plantToBeEaten Plant that will be eaten. + */ + void eat(Plant plantToBeEaten); - /** - * Get kind from Herbivorous. - */ - String getKind(); - - public class Plant { - } + /** Get kind from Herbivorous. */ + String getKind(); + public class Plant {} } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Mammal.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Mammal.java index a72edc13..2b5b2306 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Mammal.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Mammal.java @@ -1,13 +1,8 @@ package com.microsoft.samples.commentinheritance; -/** - * Mammal. - */ +/** Mammal. */ public abstract class Mammal extends Animal { - /** - * {@inheritDoc} - * Get kind from Mammal. - */ - public abstract String getKind(); + /** {@inheritDoc} Get kind from Mammal. */ + public abstract String getKind(); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Omnivorous.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Omnivorous.java index b5686eb5..a7a3244c 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Omnivorous.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Omnivorous.java @@ -1,19 +1,14 @@ package com.microsoft.samples.commentinheritance; -/** - * Eats plants and animals. - */ +/** Eats plants and animals. */ public interface Omnivorous extends Carnivorous, Herbivorous { - @Override - void eat(Animal animalToBeEaten); + @Override + void eat(Animal animalToBeEaten); - @Override - void eat(Plant plantToBeEaten); + @Override + void eat(Plant plantToBeEaten); - /** - * {@inheritDoc} - * Get kind from Omnivorous. - */ - @Override - String getKind(); + /** {@inheritDoc} Get kind from Omnivorous. */ + @Override + String getKind(); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Organism.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Organism.java index 8edf9a62..751dad3d 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Organism.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Organism.java @@ -2,8 +2,6 @@ public interface Organism { - /** - * Get kind from Organism. - */ - String getKind(); + /** Get kind from Organism. */ + String getKind(); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Viviparous.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Viviparous.java index 685eba41..1fd59bf0 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Viviparous.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/commentinheritance/Viviparous.java @@ -1,14 +1,10 @@ package com.microsoft.samples.commentinheritance; -/** - * Mammals that give birth to young that develop within the mother's body. - */ +/** Mammals that give birth to young that develop within the mother's body. */ public interface Viviparous { - void giveBirth(int numberOfOffspring); + void giveBirth(int numberOfOffspring); - /** - * Get kind from Viviparous. - */ - String getKind(); + /** Get kind from Viviparous. */ + String getKind(); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/BetaApi.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/BetaApi.java index ca32def1..4cb3b930 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/BetaApi.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/BetaApi.java @@ -40,15 +40,15 @@ * Indicates a public API that can change at any time, and has no guarantee of API stability and * backward-compatibility. * - *

- * Usage guidelines: + *

Usage guidelines: + * *

    - *
  1. This annotation is used only on APIs with public visibility. Internal interfaces should not - * use it.
  2. - *
  3. This annotation should only be added to new APIs. Adding it to an existing API is considered - * API-breaking.
  4. - *
  5. Removing this annotation from an API gives it stable status, assuming the API doesn't have - * other annotations denoting instability. + *
  6. This annotation is used only on APIs with public visibility. Internal interfaces should not + * use it. + *
  7. This annotation should only be added to new APIs. Adding it to an existing API is + * considered API-breaking. + *
  8. Removing this annotation from an API gives it stable status, assuming the API doesn't have + * other annotations denoting instability. *
*/ @BetaApi @@ -63,8 +63,6 @@ }) @Documented public @interface BetaApi { - /** - * Context information such as links to a discussion thread, tracking issue, etc. - */ + /** Context information such as links to a discussion thread, tracking issue, etc. */ String value() default ""; } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ProductSearchSettings.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ProductSearchSettings.java index fdb97d6e..50d9b44b 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ProductSearchSettings.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ProductSearchSettings.java @@ -16,6 +16,8 @@ package com.microsoft.samples.google; +import static com.google.cloud.vision.v1.ProductSearchClient.*; + import com.google.api.core.ApiFunction; import com.google.api.core.BetaApi; import com.google.api.gax.core.GoogleCredentialsProvider; @@ -26,12 +28,9 @@ import com.google.cloud.vision.v1.stub.ProductSearchStubSettings; import com.google.longrunning.Operation; import com.google.protobuf.Empty; - -import javax.annotation.Generated; import java.io.IOException; import java.util.List; - -import static com.google.cloud.vision.v1.ProductSearchClient.*; +import javax.annotation.Generated; // AUTO-GENERATED DOCUMENTATION AND CLASS. diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/RecognitionAudio.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/RecognitionAudio.java index 6a8ecd80..79583de0 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/RecognitionAudio.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/RecognitionAudio.java @@ -52,9 +52,9 @@ * Protobuf type {@code google.cloud.speech.v1.RecognitionAudio} */ public final class RecognitionAudio extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:google.cloud.speech.v1.RecognitionAudio) - RecognitionAudioOrBuilder { + implements + // @@protoc_insertion_point(message_implements:google.cloud.speech.v1.RecognitionAudio) + RecognitionAudioOrBuilder { private static final long serialVersionUID = 0L; // Use RecognitionAudio.newBuilder() to construct. @@ -67,8 +67,7 @@ protected FieldAccessorTable internalGetFieldAccessorTable() { return null; } - private RecognitionAudio() { - } + private RecognitionAudio() {} @java.lang.Override @SuppressWarnings({"unused"}) @@ -92,15 +91,15 @@ public final com.google.protobuf.UnknownFieldSet getUnknownFields() { } private RecognitionAudio( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { this(); if (extensionRegistry == null) { throw new java.lang.NullPointerException(); } com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); + com.google.protobuf.UnknownFieldSet.newBuilder(); try { boolean done = false; while (!done) { @@ -109,23 +108,26 @@ private RecognitionAudio( case 0: done = true; break; - case 10: { - audioSourceCase_ = 1; - audioSource_ = input.readBytes(); - break; - } - case 18: { - java.lang.String s = input.readStringRequireUtf8(); - audioSourceCase_ = 2; - audioSource_ = s; - break; - } - default: { - if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) { - done = true; + case 10: + { + audioSourceCase_ = 1; + audioSource_ = input.readBytes(); + break; + } + case 18: + { + java.lang.String s = input.readStringRequireUtf8(); + audioSourceCase_ = 2; + audioSource_ = s; + break; + } + default: + { + if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; } - break; - } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -152,7 +154,7 @@ public Message.Builder toBuilder() { } public enum AudioSourceCase - implements + implements com.google.protobuf.Internal.EnumLite, com.google.protobuf.AbstractMessage.InternalOneOfEnum { CONTENT(1), @@ -190,9 +192,7 @@ public static AudioSourceCase forNumber(int value) { public int getNumber() { return this.value; } - } - - ; + }; public com.google.cloud.speech.v1.RecognitionAudio.AudioSourceCase getAudioSourceCase() { return com.google.cloud.speech.v1.RecognitionAudio.AudioSourceCase.forNumber(audioSourceCase_); @@ -201,6 +201,8 @@ public com.google.cloud.speech.v1.RecognitionAudio.AudioSourceCase getAudioSourc public static final int CONTENT_FIELD_NUMBER = 1; /** + * + * *
    * The audio data bytes encoded as specified in
    * `RecognitionConfig`. Note: as with all bytes fields, proto buffers use a
@@ -217,6 +219,8 @@ public boolean hasContent() {
   }
 
   /**
+   *
+   *
    * 
    * The audio data bytes encoded as specified in
    * `RecognitionConfig`. Note: as with all bytes fields, proto buffers use a
@@ -238,6 +242,8 @@ public com.google.protobuf.ByteString getContent() {
   public static final int URI_FIELD_NUMBER = 2;
 
   /**
+   *
+   *
    * 
    * URI that points to a file that contains audio data bytes as specified in
    * `RecognitionConfig`. The file must not be compressed (for example, gzip).
@@ -257,6 +263,8 @@ public boolean hasUri() {
   }
 
   /**
+   *
+   *
    * 
    * URI that points to a file that contains audio data bytes as specified in
    * `RecognitionConfig`. The file must not be compressed (for example, gzip).
@@ -289,6 +297,8 @@ public java.lang.String getUri() {
   }
 
   /**
+   *
+   *
    * 
    * URI that points to a file that contains audio data bytes as specified in
    * `RecognitionConfig`. The file must not be compressed (for example, gzip).
@@ -310,7 +320,7 @@ public com.google.protobuf.ByteString getUriBytes() {
     }
     if (ref instanceof java.lang.String) {
       com.google.protobuf.ByteString b =
-              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
       if (audioSourceCase_ == 2) {
         audioSource_ = b;
       }
@@ -351,8 +361,8 @@ public int getSerializedSize() {
     size = 0;
     if (audioSourceCase_ == 1) {
       size +=
-              com.google.protobuf.CodedOutputStream.computeBytesSize(
-                      1, (com.google.protobuf.ByteString) audioSource_);
+          com.google.protobuf.CodedOutputStream.computeBytesSize(
+              1, (com.google.protobuf.ByteString) audioSource_);
     }
     if (audioSourceCase_ == 2) {
       size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, audioSource_);
@@ -362,4 +372,3 @@ public int getSerializedSize() {
     return size;
   }
 }
-
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechClient.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechClient.java
index 386caaee..263eede4 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechClient.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechClient.java
@@ -22,16 +22,15 @@
 import com.google.api.gax.rpc.BidiStreamingCallable;
 import com.google.api.gax.rpc.OperationCallable;
 import com.google.api.gax.rpc.UnaryCallable;
-import com.google.cloud.speech.v1p1beta1.RecognitionAudio;
 import com.google.cloud.speech.v1p1beta1.*;
+import com.google.cloud.speech.v1p1beta1.RecognitionAudio;
 import com.google.cloud.speech.v1p1beta1.stub.SpeechStub;
 import com.google.cloud.speech.v1p1beta1.stub.SpeechStubSettings;
 import com.google.longrunning.Operation;
 import com.google.longrunning.OperationsClient;
-
-import javax.annotation.Generated;
 import java.io.IOException;
 import java.util.concurrent.TimeUnit;
+import javax.annotation.Generated;
 
 // AUTO-GENERATED DOCUMENTATION AND CLASS.
 
@@ -177,7 +176,8 @@ public final OperationsClient getOperationsClient() {
    * @param audio Required. The audio data to be recognized.
    * @throws com.google.api.gax.rpc.ApiException if the remote call fails
    */
-  public final RecognizeResponse recognize(RecognitionConfig config, com.google.cloud.speech.v1p1beta1.RecognitionAudio audio) {
+  public final RecognizeResponse recognize(
+      RecognitionConfig config, com.google.cloud.speech.v1p1beta1.RecognitionAudio audio) {
     RecognizeRequest request =
         RecognizeRequest.newBuilder().setConfig(config).setAudio(audio).build();
     return recognize(request);
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java
index fc51244e..fca83c3a 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java
@@ -22,14 +22,13 @@
 import com.google.api.gax.core.InstantiatingExecutorProvider;
 import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
 import com.google.api.gax.rpc.*;
-import com.google.cloud.speech.v1p1beta1.SpeechClient;
 import com.google.cloud.speech.v1p1beta1.*;
+import com.google.cloud.speech.v1p1beta1.SpeechClient;
 import com.google.cloud.speech.v1p1beta1.stub.SpeechStubSettings;
 import com.google.longrunning.Operation;
-
-import javax.annotation.Generated;
 import java.io.IOException;
 import java.util.List;
+import javax.annotation.Generated;
 
 // AUTO-GENERATED DOCUMENTATION AND CLASS.
 
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ValidationException.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ValidationException.java
index acebe8c9..602af46a 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ValidationException.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ValidationException.java
@@ -37,8 +37,9 @@
  * Exception thrown if there is a validation problem with a path template, http config, or related
  * framework methods. Comes as an illegal argument exception subclass. Allows to globally set a
  * thread-local validation context description which each exception inherits.
+ *
  * @see Google Cloud
- *      Storage error codes
+ *     Storage error codes
  */
 public class ValidationException extends IllegalArgumentException {
 
@@ -71,9 +72,7 @@ public String get() {
         });
   }
 
-  /**
-   * Clears the validation context.
-   */
+  /** Clears the validation context. */
   public static void popCurrentThreadValidationContext() {
     Stack stack = contextLocal.get();
     if (stack != null) {
@@ -81,9 +80,7 @@ public static void popCurrentThreadValidationContext() {
     }
   }
 
-  /**
-   * Construct validation exception with implicit context.
-   */
+  /** Construct validation exception with implicit context. */
   public ValidationException(String format, Object... args) {
     super(message(contextLocal.get(), format, args));
   }
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1beta/SpeechClient.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1beta/SpeechClient.java
index e145e0c3..37fd187d 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1beta/SpeechClient.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1beta/SpeechClient.java
@@ -27,10 +27,9 @@
 import com.google.cloud.speech.v1p1beta1.stub.SpeechStubSettings;
 import com.google.longrunning.Operation;
 import com.google.longrunning.OperationsClient;
-
-import javax.annotation.Generated;
 import java.io.IOException;
 import java.util.concurrent.TimeUnit;
+import javax.annotation.Generated;
 
 // AUTO-GENERATED DOCUMENTATION AND CLASS.
 
@@ -109,7 +108,8 @@ public static final SpeechClient create() throws IOException {
    * Constructs an instance of SpeechClient, using the given settings. The channels are created
    * based on the settings passed in, or defaults for any settings that are not set.
    */
-  public static final SpeechClient create(com.microsoft.samples.google.SpeechSettings settings) throws IOException {
+  public static final SpeechClient create(com.microsoft.samples.google.SpeechSettings settings)
+      throws IOException {
     return new SpeechClient(settings);
   }
 
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1p1alpha/SpeechClient.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1p1alpha/SpeechClient.java
index d8f00ead..ec2c7dae 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1p1alpha/SpeechClient.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1p1alpha/SpeechClient.java
@@ -27,10 +27,9 @@
 import com.google.cloud.speech.v1p1beta1.stub.SpeechStubSettings;
 import com.google.longrunning.Operation;
 import com.google.longrunning.OperationsClient;
-
-import javax.annotation.Generated;
 import java.io.IOException;
 import java.util.concurrent.TimeUnit;
+import javax.annotation.Generated;
 
 // AUTO-GENERATED DOCUMENTATION AND CLASS.
 
@@ -107,11 +106,12 @@ public static final SpeechClient create() throws IOException {
 
   /**
    * Constructs an instance of SpeechClient, using the given settings. The channels are created
-   * based on the settings passed in, or defaults for any settings that are not set.
-   * Example broken links: {@link "http://tools.ietf.org/html/rfc2616#section-3.7"}
-   * {@link ApiFutures#immediateFuture(null)}.
+   * based on the settings passed in, or defaults for any settings that are not set. Example broken
+   * links: {@link "http://tools.ietf.org/html/rfc2616#section-3.7"} {@link
+   * ApiFutures#immediateFuture(null)}.
    */
-  public static final SpeechClient create(com.microsoft.samples.google.SpeechSettings settings) throws IOException {
+  public static final SpeechClient create(com.microsoft.samples.google.SpeechSettings settings)
+      throws IOException {
     return new SpeechClient(settings);
   }
 
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/offers/Offer.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/offers/Offer.java
index 0cb9025d..51ed3a23 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/offers/Offer.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/offers/Offer.java
@@ -1,38 +1,35 @@
 package com.microsoft.samples.offers;
 
-/**
- * Represents a form of product availability to customer
- */
+/** Represents a form of product availability to customer */
 public class Offer {
-    /**
-     * Initializes a new instance of the Offer class.
-     */
-    public Offer() {
-    }
+  /** Initializes a new instance of the Offer class. */
+  public Offer() {}
 
-    /**
-     * Gets or sets qualifications required by the Partner in order to purchase the offer for a customer.
-     */
-    private String[] __ResellerQualifications;
+  /**
+   * Gets or sets qualifications required by the Partner in order to purchase the offer for a
+   * customer.
+   */
+  private String[] __ResellerQualifications;
 
-    public String[] getResellerQualifications() {
-        return __ResellerQualifications;
-    }
+  public String[] getResellerQualifications() {
+    return __ResellerQualifications;
+  }
 
-    public void setResellerQualifications(String[] value) {
-        __ResellerQualifications = value;
-    }
+  public void setResellerQualifications(String[] value) {
+    __ResellerQualifications = value;
+  }
 
-    /**
-     * Gets or sets qualifications required by the customer for the partner to purchase it for the customer.
-     */
-    private String[] __ReselleeQualifications;
+  /**
+   * Gets or sets qualifications required by the customer for the partner to purchase it for the
+   * customer.
+   */
+  private String[] __ReselleeQualifications;
 
-    public String[] getReselleeQualifications() {
-        return __ReselleeQualifications;
-    }
+  public String[] getReselleeQualifications() {
+    return __ReselleeQualifications;
+  }
 
-    public void setReselleeQualifications(String[] value) {
-        __ReselleeQualifications = value;
-    }
-}
\ No newline at end of file
+  public void setReselleeQualifications(String[] value) {
+    __ReselleeQualifications = value;
+  }
+}
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/someexcludedpackage/SomeClassInExcludedPackage.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/someexcludedpackage/SomeClassInExcludedPackage.java
index 8d9d4133..8b01667b 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/someexcludedpackage/SomeClassInExcludedPackage.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/someexcludedpackage/SomeClassInExcludedPackage.java
@@ -2,13 +2,13 @@
 
 public class SomeClassInExcludedPackage {
 
-    private String field;
+  private String field;
 
-    public String getField() {
-        return field;
-    }
+  public String getField() {
+    return field;
+  }
 
-    public void setField(String field) {
-        this.field = field;
-    }
+  public void setField(String field) {
+    this.field = field;
+  }
 }
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/CustomException.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/CustomException.java
index 8717af6b..dc982f91 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/CustomException.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/CustomException.java
@@ -2,20 +2,20 @@
 
 public class CustomException extends Exception {
 
-    public CustomException(String message) {
-        super(message);
-    }
+  public CustomException(String message) {
+    super(message);
+  }
 
-    /**
-     * We need to have such method that throw exception declared in the same class
-     *
-     * @throws CustomException with reason message
-     */
-    public void makeSomething() throws CustomException {
-        throw new CustomException("It happened!");
-    }
+  /**
+   * We need to have such method that throw exception declared in the same class
+   *
+   * @throws CustomException with reason message
+   */
+  public void makeSomething() throws CustomException {
+    throw new CustomException("It happened!");
+  }
 
-    private class PrivateException {
-        private String message;
-    }
+  private class PrivateException {
+    private String message;
+  }
 }
diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Display.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Display.java
index c1b0eed1..6fa6ae8f 100644
--- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Display.java
+++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Display.java
@@ -5,12 +5,12 @@
 
 /**
  * Do you see some First code block?
- * 

- * Or this {@code Second} code block? + * + *

Or this {@code Second} code block? */ public interface Display extends Serializable, List> { - void show(); + void show(); - void hide(); + void hide(); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/InternalException.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/InternalException.java index c868a4cc..788d88ac 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/InternalException.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/InternalException.java @@ -2,7 +2,7 @@ class InternalException extends Exception { - public InternalException(String message) { - super(message); - } + public InternalException(String message) { + super(message); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Person.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Person.java index fb09f8af..32a64e16 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Person.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Person.java @@ -7,71 +7,70 @@ /** * Class that describes some person * - * This comment has links to: + *

This comment has links to: + * *

    - *
  • Owner class {@link Person}
  • - *
  • Its inner class {@link Person.IdentificationInfo}
  • - *
  • Its method {@link Person#setLastName(String lastName)}
  • - *
  • Its method without params {@link Person#setLastName()}
  • - *
  • Its public field {@link Person#age}
  • - *
  • Another class which used here {@link Set}
  • - *
  • Another class which not used here {@link List}
  • - *
  • Broken link {@link sdfdsagdsfghfgh}
  • - *
  • Plain link {@linkplain someContent}
  • - *
  • Link that starts from '#' {@link #setLastName()}
  • - *
  • Link with label {@link Set WordOne}
  • + *
  • Owner class {@link Person} + *
  • Its inner class {@link Person.IdentificationInfo} + *
  • Its method {@link Person#setLastName(String lastName)} + *
  • Its method without params {@link Person#setLastName()} + *
  • Its public field {@link Person#age} + *
  • Another class which used here {@link Set} + *
  • Another class which not used here {@link List} + *
  • Broken link {@link sdfdsagdsfghfgh} + *
  • Plain link {@linkplain someContent} + *
  • Link that starts from '#' {@link #setLastName()} + *
  • Link with label {@link Set WordOne} *
* * This is an "at" symbol: {@literal @} + * * @see Display */ public class Person { - private String firstName; - private String lastName; - public int age; + private String firstName; + private String lastName; + public int age; - public String getFirstName() { - return firstName; - } + public String getFirstName() { + return firstName; + } - public void setFirstName(String firstName) { - this.firstName = firstName; - } + public void setFirstName(String firstName) { + this.firstName = firstName; + } - public String getLastName() { - return lastName; - } + public String getLastName() { + return lastName; + } - public void setLastName(String lastName) { - this.lastName = lastName; - } + public void setLastName(String lastName) { + this.lastName = lastName; + } - public void setLastName() { - this.lastName = null; - } + public void setLastName() { + this.lastName = null; + } - public Set getSomeSet() { - return Collections.emptySet(); - } + public Set getSomeSet() { + return Collections.emptySet(); + } - /** - * We need to have this method that takes parameter and return types declared in the current class - */ - public static Person buildPerson(Person seed) { - return seed; - } + /** + * We need to have this method that takes parameter and return types declared in the current class + */ + public static Person buildPerson(Person seed) { + return seed; + } - /** - * Class that describes person's identification - */ - public static class IdentificationInfo { + /** Class that describes person's identification */ + public static class IdentificationInfo { - /** - * Enum describes person's gender - */ - public enum Gender { - MALE, FEMALE - } + /** Enum describes person's gender */ + public enum Gender { + MALE, + FEMALE } + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/SomeExcludedClass.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/SomeExcludedClass.java index 66a87af6..6cf5d103 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/SomeExcludedClass.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/SomeExcludedClass.java @@ -2,13 +2,13 @@ public class SomeExcludedClass { - private String field; + private String field; - public String getField() { - return field; - } + public String getField() { + return field; + } - public void setField(String field) { - this.field = field; - } + public void setField(String field) { + this.field = field; + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Tuple.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Tuple.java index 2ab5e686..f028a231 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Tuple.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/Tuple.java @@ -1,29 +1,28 @@ package com.microsoft.samples.subpackage; public class Tuple { - private T1 item1; + private T1 item1; - private T2 item2; + private T2 item2; - public Tuple(T1 item1, T2 item2) { - this.item1 = item1; - this.item2 = item2; - } + public Tuple(T1 item1, T2 item2) { + this.item1 = item1; + this.item2 = item2; + } - public T1 getItem1() { - return item1; - } + public T1 getItem1() { + return item1; + } - public void setItem1(T1 item1) { - this.item1 = item1; - } + public void setItem1(T1 item1) { + this.item1 = item1; + } - public T2 getItem2() { - return item2; - } + public T2 getItem2() { + return item2; + } - public void setItem2(T2 item2) { - this.item2 = item2; - } - -} \ No newline at end of file + public void setItem2(T2 item2) { + this.item2 = item2; + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/package-info.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/package-info.java index 8d5be309..e076a379 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/package-info.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/subpackage/package-info.java @@ -1,4 +1,2 @@ -/** - * This subpackage contains the sample set of classes for testing DocFx doclet. - */ +/** This subpackage contains the sample set of classes for testing DocFx doclet. */ package com.microsoft.samples.subpackage; diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ElementUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ElementUtilTest.java index 312aae07..178be191 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ElementUtilTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ElementUtilTest.java @@ -1,85 +1,104 @@ package com.microsoft.util; -import com.google.testing.compile.CompilationRule; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import static org.junit.Assert.*; -import javax.lang.model.element.Element; -import javax.lang.model.util.Elements; +import com.google.testing.compile.CompilationRule; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.regex.Pattern; import java.util.stream.Collectors; - -import static org.junit.Assert.*; +import javax.lang.model.element.Element; +import javax.lang.model.util.Elements; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class ElementUtilTest { - @Rule - public CompilationRule rule = new CompilationRule(); - private Elements elements; - private ElementUtil elementUtil; - - @Before - public void setup() { - elements = rule.getElements(); - elementUtil = new ElementUtil( - new String[]{"samples\\.someexcludedpackage"}, - new String[]{"com\\.microsoft\\..*SomeExcludedClass"}); - } - - @Test - public void extractPackageElements() { - Set elementsSet = new HashSet<>() {{ + @Rule public CompilationRule rule = new CompilationRule(); + private Elements elements; + private ElementUtil elementUtil; + + @Before + public void setup() { + elements = rule.getElements(); + elementUtil = + new ElementUtil( + new String[] {"samples\\.someexcludedpackage"}, + new String[] {"com\\.microsoft\\..*SomeExcludedClass"}); + } + + @Test + public void extractPackageElements() { + Set elementsSet = + new HashSet<>() { + { add(elements.getPackageElement("com.microsoft.samples")); add(elements.getTypeElement("com.microsoft.samples.SuperHero")); add(elements.getPackageElement("com.microsoft.samples.subpackage")); - }}; - - List result = elementUtil.extractPackageElements(elementsSet) - .stream().map(String::valueOf).collect(Collectors.toList()); - - assertEquals("Wrong result list size", result.size(), 2); - assertEquals("Unexpected first item", result.get(0), "com.microsoft.samples"); - assertEquals("Unexpected second item", result.get(1), "com.microsoft.samples.subpackage"); - } - - @Test - public void extractSortedElements() { - Element element = elements.getPackageElement("com.microsoft.samples.subpackage"); - - List allElements = element.getEnclosedElements() - .stream().map(String::valueOf).collect(Collectors.toList()); - - // Ensure items to exclude exist. - assertEquals("Wrong enclosed elements number", allElements.size(), 6); - assertTrue("Unexpected package private class", allElements.contains("com.microsoft.samples.subpackage.InternalException")); - assertTrue("Unexpected to-exclude class", allElements.contains("com.microsoft.samples.subpackage.SomeExcludedClass")); - - - List extractedElements = elementUtil.extractSortedElements(element) - .stream().map(String::valueOf).collect(Collectors.toList()); - - // Verify filtered and sorted result - assertEquals("Wrong result list size", extractedElements.size(), 4); - assertEquals("Unexpected first item in the result list after invoke method extractSortedElements()", extractedElements.get(0), "com.microsoft.samples.subpackage.CustomException"); - assertEquals("Unexpected second item in the result list after invoke method extractSortedElements()", extractedElements.get(1), "com.microsoft.samples.subpackage.Display"); - assertEquals("Unexpected third item in the result list after invoke method extractSortedElements()", extractedElements.get(2), "com.microsoft.samples.subpackage.Person"); - } - - @Test - public void matchAnyPattern() { - HashSet patterns = new HashSet<>( - Arrays.asList(Pattern.compile("com\\.ms\\.Some.*"), Pattern.compile(".*UsualClass"))); - assertTrue(elementUtil.matchAnyPattern(patterns, "com.ms.SomeStrangeClass")); - assertTrue(elementUtil.matchAnyPattern(patterns, "UsualClass")); - assertFalse(elementUtil.matchAnyPattern(patterns, "EngineFive")); - assertFalse(elementUtil.matchAnyPattern(patterns, "com.ms.Awesome")); - } + } + }; + + List result = + elementUtil.extractPackageElements(elementsSet).stream() + .map(String::valueOf) + .collect(Collectors.toList()); + + assertEquals("Wrong result list size", result.size(), 2); + assertEquals("Unexpected first item", result.get(0), "com.microsoft.samples"); + assertEquals("Unexpected second item", result.get(1), "com.microsoft.samples.subpackage"); + } + + @Test + public void extractSortedElements() { + Element element = elements.getPackageElement("com.microsoft.samples.subpackage"); + + List allElements = + element.getEnclosedElements().stream().map(String::valueOf).collect(Collectors.toList()); + + // Ensure items to exclude exist. + assertEquals("Wrong enclosed elements number", allElements.size(), 6); + assertTrue( + "Unexpected package private class", + allElements.contains("com.microsoft.samples.subpackage.InternalException")); + assertTrue( + "Unexpected to-exclude class", + allElements.contains("com.microsoft.samples.subpackage.SomeExcludedClass")); + + List extractedElements = + elementUtil.extractSortedElements(element).stream() + .map(String::valueOf) + .collect(Collectors.toList()); + + // Verify filtered and sorted result + assertEquals("Wrong result list size", extractedElements.size(), 4); + assertEquals( + "Unexpected first item in the result list after invoke method extractSortedElements()", + extractedElements.get(0), + "com.microsoft.samples.subpackage.CustomException"); + assertEquals( + "Unexpected second item in the result list after invoke method extractSortedElements()", + extractedElements.get(1), + "com.microsoft.samples.subpackage.Display"); + assertEquals( + "Unexpected third item in the result list after invoke method extractSortedElements()", + extractedElements.get(2), + "com.microsoft.samples.subpackage.Person"); + } + + @Test + public void matchAnyPattern() { + HashSet patterns = + new HashSet<>( + Arrays.asList(Pattern.compile("com\\.ms\\.Some.*"), Pattern.compile(".*UsualClass"))); + assertTrue(elementUtil.matchAnyPattern(patterns, "com.ms.SomeStrangeClass")); + assertTrue(elementUtil.matchAnyPattern(patterns, "UsualClass")); + assertFalse(elementUtil.matchAnyPattern(patterns, "EngineFive")); + assertFalse(elementUtil.matchAnyPattern(patterns, "com.ms.Awesome")); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/FileUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/FileUtilTest.java index dfb675bd..16c379ad 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/FileUtilTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/FileUtilTest.java @@ -1,8 +1,7 @@ package com.microsoft.util; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; @@ -10,60 +9,58 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.Comparator; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; public class FileUtilTest { - private final String ROOT_DIR = "target/dir1"; - private final String FILE_NAME = ROOT_DIR + "/dir2/out.txt"; + private final String ROOT_DIR = "target/dir1"; + private final String FILE_NAME = ROOT_DIR + "/dir2/out.txt"; - @Before - public void setup() throws IOException { - deleteDirectory(ROOT_DIR); - } + @Before + public void setup() throws IOException { + deleteDirectory(ROOT_DIR); + } - @After - public void tearDown() throws IOException { - deleteDirectory(ROOT_DIR); - } + @After + public void tearDown() throws IOException { + deleteDirectory(ROOT_DIR); + } - @Test - public void dumpToFileWithDirectoryCreation() throws IOException { - String content = "Bla-bla content"; + @Test + public void dumpToFileWithDirectoryCreation() throws IOException { + String content = "Bla-bla content"; - FileUtil.dumpToFile(content, FILE_NAME); + FileUtil.dumpToFile(content, FILE_NAME); - assertTrue("New file should appear", Files.exists(Paths.get(FILE_NAME))); - assertEquals("Invalid file content", Files.readString(Paths.get(FILE_NAME)), content); - } + assertTrue("New file should appear", Files.exists(Paths.get(FILE_NAME))); + assertEquals("Invalid file content", Files.readString(Paths.get(FILE_NAME)), content); + } - @Test - public void dumpToFileForExistingNonEmptyDirectory() throws IOException { - createDirectoryWithFile(ROOT_DIR + "/dir2/tmp1.txt"); - String content = "Bla-bla content"; + @Test + public void dumpToFileForExistingNonEmptyDirectory() throws IOException { + createDirectoryWithFile(ROOT_DIR + "/dir2/tmp1.txt"); + String content = "Bla-bla content"; - FileUtil.dumpToFile(content, FILE_NAME); + FileUtil.dumpToFile(content, FILE_NAME); - assertTrue("Existing file should not be deleted", Files.exists(Path.of(ROOT_DIR + "/dir2/tmp1.txt"))); - assertTrue("New file should appear", Files.exists(Paths.get(FILE_NAME))); - assertEquals("Invalid file content", Files.readString(Paths.get(FILE_NAME)), content); - } + assertTrue( + "Existing file should not be deleted", Files.exists(Path.of(ROOT_DIR + "/dir2/tmp1.txt"))); + assertTrue("New file should appear", Files.exists(Paths.get(FILE_NAME))); + assertEquals("Invalid file content", Files.readString(Paths.get(FILE_NAME)), content); + } - public static void deleteDirectory(String pathString) throws IOException { - Path path = Paths.get(pathString); - if (Files.exists(path)) { - Files.walk(path) - .sorted(Comparator.reverseOrder()) - .map(Path::toFile) - .forEach(File::delete); - } + public static void deleteDirectory(String pathString) throws IOException { + Path path = Paths.get(pathString); + if (Files.exists(path)) { + Files.walk(path).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete); } + } - public static void createDirectoryWithFile(String pathString) throws IOException { - Path path = Paths.get(pathString); - Files.createDirectories(path.getParent()); - Files.createFile(path); - } + public static void createDirectoryWithFile(String pathString) throws IOException { + Path path = Paths.get(pathString); + Files.createDirectories(path.getParent()); + Files.createFile(path); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/OptionsFileUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/OptionsFileUtilTest.java index 093fa9b0..3491b94e 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/OptionsFileUtilTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/OptionsFileUtilTest.java @@ -1,40 +1,46 @@ package com.microsoft.util; -import org.junit.Test; -import java.util.List; - import static org.junit.Assert.assertTrue; +import java.util.List; +import org.junit.Test; + public class OptionsFileUtilTest { - private final String PARAMS_DIR = "src/test/resources/test-doclet-params.txt"; + private final String PARAMS_DIR = "src/test/resources/test-doclet-params.txt"; - @Test - public void processOptionsFile() { - List strings = OptionsFileUtil.processOptionsFile(PARAMS_DIR); + @Test + public void processOptionsFile() { + List strings = OptionsFileUtil.processOptionsFile(PARAMS_DIR); - assertTrue("Wrong result", strings.contains("-doclet")); - assertTrue("Wrong result", strings.contains("com.microsoft.doclet.DocFxDoclet")); + assertTrue("Wrong result", strings.contains("-doclet")); + assertTrue("Wrong result", strings.contains("com.microsoft.doclet.DocFxDoclet")); - assertTrue("Wrong result", strings.contains("-sourcepath")); - assertTrue("Wrong result", strings.contains("./src/test/java")); + assertTrue("Wrong result", strings.contains("-sourcepath")); + assertTrue("Wrong result", strings.contains("./src/test/java")); - assertTrue("Wrong result", strings.contains("-outputpath")); - assertTrue("Wrong result", strings.contains("./target/test-out")); + assertTrue("Wrong result", strings.contains("-outputpath")); + assertTrue("Wrong result", strings.contains("./target/test-out")); - assertTrue("Wrong result", strings.contains("-encoding")); - assertTrue("Wrong result", strings.contains("UTF-8")); + assertTrue("Wrong result", strings.contains("-encoding")); + assertTrue("Wrong result", strings.contains("UTF-8")); - assertTrue("Wrong result", strings.contains("-projectname")); - assertTrue("Wrong result", strings.contains("google-cloud-project-parent")); + assertTrue("Wrong result", strings.contains("-projectname")); + assertTrue("Wrong result", strings.contains("google-cloud-project-parent")); - assertTrue("Wrong result", strings.contains("-excludepackages")); - assertTrue("Wrong result", strings.contains("com\\.microsoft\\.samples\\.someexcludedpack.*:com\\.microsoft\\.samples\\.someunexistingpackage")); + assertTrue("Wrong result", strings.contains("-excludepackages")); + assertTrue( + "Wrong result", + strings.contains( + "com\\.microsoft\\.samples\\.someexcludedpack.*:com\\.microsoft\\.samples\\.someunexistingpackage")); - assertTrue("Wrong result", strings.contains("-excludeclasses")); - assertTrue("Wrong result", strings.contains("com\\.microsoft\\.samples\\.subpackage\\.SomeExcluded.*:com\\.microsoft\\.samples\\.subpackage\\.SomeUnexistingClass")); + assertTrue("Wrong result", strings.contains("-excludeclasses")); + assertTrue( + "Wrong result", + strings.contains( + "com\\.microsoft\\.samples\\.subpackage\\.SomeExcluded.*:com\\.microsoft\\.samples\\.subpackage\\.SomeUnexistingClass")); - assertTrue("Wrong result", strings.contains("-subpackages")); - assertTrue("Wrong result", strings.contains("com.microsoft.samples")); - } + assertTrue("Wrong result", strings.contains("-subpackages")); + assertTrue("Wrong result", strings.contains("com.microsoft.samples")); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/UtilsTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/UtilsTest.java index 2acf975f..ff9ad5b8 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/UtilsTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/UtilsTest.java @@ -1,97 +1,98 @@ package com.microsoft.util; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import com.google.testing.compile.CompilationRule; +import java.util.List; +import java.util.stream.Collectors; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.util.Elements; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; -import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; -import javax.lang.model.util.Elements; -import java.util.List; -import java.util.stream.Collectors; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - @RunWith(MockitoJUnitRunner.class) public class UtilsTest { - @Rule - public CompilationRule rule = new CompilationRule(); - private Elements elements; - private List allElements; - - @Before - public void setup() { - elements = rule.getElements(); - Element element = elements.getTypeElement("com.microsoft.samples.SuperHero"); - allElements = element.getEnclosedElements().stream().collect(Collectors.toList()); - } - - // Test isPackagePrivate() method - @Test - public void isPackagePrivate_True_PackagePrivateMethod() { - Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getHobby()"); - assertTrue(Utils.isPackagePrivate(method)); - } - - @Test - public void isPackagePrivate_True_PackagePrivateField() { - Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "hobby"); - assertTrue(Utils.isPackagePrivate(field)); - } - - // Test isPrivate() method - @Test - public void isPrivate_True_PrivateMethod() { - Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "setHobby(java.lang.String)"); - assertTrue(Utils.isPrivate(method)); - } - - @Test - public void isPrivate_True_PrivateField() { - Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "uniquePower"); - assertTrue(Utils.isPrivate(field)); - } - - // Test isPrivateOrPackagePrivate() method - @Test - public void isPrivateOrPackagePrivate_True_PackagePrivateMethod() { - Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getHobby()"); - assertTrue(Utils.isPrivateOrPackagePrivate(method)); - } - - @Test - public void isPrivateOrPackagePrivate_True_PrivateFiled() { - Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "uniquePower"); - assertTrue(Utils.isPrivateOrPackagePrivate(field)); - } - - @Test - public void isPrivateOrPackagePrivate_False_PublicMethod() { - Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getUniquePower()"); - assertFalse(Utils.isPrivateOrPackagePrivate(method)); - } - - @Test - public void isPrivateOrPackagePrivate_False_PublicField() { - Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "SOME_PUBLIC_STRING"); - assertFalse(Utils.isPrivateOrPackagePrivate(field)); - } - - @Test - public void isPrivateOrPackagePrivate_False_ProtectedMethod() { - Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getHealth()"); - assertFalse(Utils.isPrivateOrPackagePrivate(method)); - } - - private Element getElementByKindAndName(List elements, ElementKind elementKind, String name) { - return elements.stream() - .filter(e -> e.toString().equals(name)) - .filter(e -> e.getKind() == elementKind) - .findFirst().orElse(null); - } + @Rule public CompilationRule rule = new CompilationRule(); + private Elements elements; + private List allElements; + + @Before + public void setup() { + elements = rule.getElements(); + Element element = elements.getTypeElement("com.microsoft.samples.SuperHero"); + allElements = element.getEnclosedElements().stream().collect(Collectors.toList()); + } + + // Test isPackagePrivate() method + @Test + public void isPackagePrivate_True_PackagePrivateMethod() { + Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getHobby()"); + assertTrue(Utils.isPackagePrivate(method)); + } + + @Test + public void isPackagePrivate_True_PackagePrivateField() { + Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "hobby"); + assertTrue(Utils.isPackagePrivate(field)); + } + + // Test isPrivate() method + @Test + public void isPrivate_True_PrivateMethod() { + Element method = + getElementByKindAndName(allElements, ElementKind.METHOD, "setHobby(java.lang.String)"); + assertTrue(Utils.isPrivate(method)); + } + + @Test + public void isPrivate_True_PrivateField() { + Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "uniquePower"); + assertTrue(Utils.isPrivate(field)); + } + + // Test isPrivateOrPackagePrivate() method + @Test + public void isPrivateOrPackagePrivate_True_PackagePrivateMethod() { + Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getHobby()"); + assertTrue(Utils.isPrivateOrPackagePrivate(method)); + } + + @Test + public void isPrivateOrPackagePrivate_True_PrivateFiled() { + Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "uniquePower"); + assertTrue(Utils.isPrivateOrPackagePrivate(field)); + } + + @Test + public void isPrivateOrPackagePrivate_False_PublicMethod() { + Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getUniquePower()"); + assertFalse(Utils.isPrivateOrPackagePrivate(method)); + } + + @Test + public void isPrivateOrPackagePrivate_False_PublicField() { + Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "SOME_PUBLIC_STRING"); + assertFalse(Utils.isPrivateOrPackagePrivate(field)); + } + + @Test + public void isPrivateOrPackagePrivate_False_ProtectedMethod() { + Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getHealth()"); + assertFalse(Utils.isPrivateOrPackagePrivate(method)); + } + + private Element getElementByKindAndName( + List elements, ElementKind elementKind, String name) { + return elements.stream() + .filter(e -> e.toString().equals(name)) + .filter(e -> e.getKind() == elementKind) + .findFirst() + .orElse(null); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java index b2856fda..44c26e60 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/YamlUtilTest.java @@ -1,174 +1,211 @@ package com.microsoft.util; +import static org.junit.Assert.*; + import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; import com.microsoft.model.MethodParameter; -import org.apache.commons.io.FileUtils; -import org.junit.Test; - -import java.io.File; -import java.io.IOException; import java.util.Collections; import java.util.UUID; - -import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.Assert.*; +import org.junit.Test; public class YamlUtilTest { - @Test - public void objectToYamlString() { - MetadataFile metadataFile = new MetadataFile("", "SomeFileName"); - metadataFile.getItems().add(buildMetadataFileItem(3)); - metadataFile.getReferences().add(buildMetadataFileItem(5)); - - String result = YamlUtil.objectToYamlString(metadataFile); - - assertEquals("Wrong result", result, "" - + "items:\n" - + "- uid: \"Some uid 3\"\n" - + " id: \"Some id3\"\n" - + " href: \"Some href3\"\n" - + " syntax:\n" - + " parameters:\n" - + " - id: \"Some id 3\"\n" - + " type: \"Some type 3\"\n" - + " description: \"Some desc 3\"\n" - + "references:\n" - + "- uid: \"Some uid 5\"\n" - + " id: \"Some id5\"\n" - + " href: \"Some href5\"\n" - + " syntax:\n" - + " parameters:\n" - + " - id: \"Some id 5\"\n" - + " type: \"Some type 5\"\n" - + " description: \"Some desc 5\"\n"); - } - - private MetadataFileItem buildMetadataFileItem(int seed) { - MetadataFileItem metadataFileItem = new MetadataFileItem("Some uid " + seed); - metadataFileItem.setId("Some id" + seed); - metadataFileItem.setHref("Some href" + seed); - metadataFileItem.setParameters(Collections.singletonList( - new MethodParameter("Some id " + seed, "Some type " + seed, "Some desc " + seed))); - - return metadataFileItem; - } - - - @Test - public void cleanupHtmlRemoveLonePreTagsTest() { - String expectedActual = "
text
"; - String expectedResult = "text"; - String expectedWithCode = "
text
"; - String random = UUID.randomUUID().toString(); - - assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); - assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); - assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); - assertEquals(expectedWithCode, YamlUtil.cleanupHtml(expectedWithCode)); - } - - @Test - public void cleanupHtmlIncludePrettyPrintTest() { - String expectedActual = "
";
-        String expectedResult = "
";
-        String random = UUID.randomUUID().toString();
-
-        assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual));
-        assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random));
-        assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual));
-        assertNotEquals(expectedResult, YamlUtil.cleanupHtml("
" + random + ""));
-        assertFalse(YamlUtil.cleanupHtml("
" + random + "").contains("class=\"prettyprint lang-java\""));
-    }
-
-    @Test
-    public void cleanupHtmlEncodeBracketsTest() {
-        String expectedActual = " List things = new ArrayList<>(); \n  

text

" ; - String expectedResult = " List<String> things = new ArrayList<>(); \n

text

<Object>"; - String random = UUID.randomUUID().toString(); - - assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); - assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); - } - - @Test - public void cleanupHtmlAddCodeTagsTest() { - String expectedActual = "`text`"; - String expectedResult = "text"; - String random = UUID.randomUUID().toString(); - - assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); - assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); - assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); - assertEquals("`" + expectedResult, YamlUtil.cleanupHtml("`" + expectedActual)); - assertFalse(YamlUtil.cleanupHtml("`" + random).contains("")); - } - - @Test - public void cleanupHtmlAddHrefTagsTest() { - String expectedActual = "[text](link)"; - String expectedResult = "text"; - String random = UUID.randomUUID().toString(); - - assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); - assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); - assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); - assertEquals("[text]](link)", YamlUtil.cleanupHtml("[text]](link)")); - assertFalse(YamlUtil.cleanupHtml("[text(link)]").contains("href")); - } - - @Test - public void cleanupHtmlEqualTitlesTest() { - String expectedActual = "======================= SpeechClient ======================="; - String expectedResult = "

SpeechClient

"; - String random = UUID.randomUUID().toString(); - - assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); - assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); - assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); - - assertEquals("= text =", YamlUtil.cleanupHtml("= text =")); - assertEquals("==testing==", YamlUtil.cleanupHtml("==testing==")); - assertEquals("=======================SpeechClient=======================", "=======================SpeechClient======================="); - assertEquals("\"scikit-learn\":\"==0.19.0\"TextTextText\"botocore\":\"==1.7.14\"", "\"scikit-learn\":\"==0.19.0\"TextTextText\"botocore\":\"==1.7.14\""); - assertEquals("======= test1234 ===== 1234test === 1234test1234 == test =", YamlUtil.cleanupHtml("======= test1234 ===== 1234test === 1234test1234 == test =")); - assertEquals("====== Markdown H1 Test ======", YamlUtil.cleanupHtml("====== Markdown H1 Test ======")); - } - - @Test - public void cleanupHtmlReferenceTest() { - String expectedActual = "[KeyRing][google.cloud.kms.v1.KeyRing]"; - String expectedResult = "KeyRing"; - String random = UUID.randomUUID().toString(); - - assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); - assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); - assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); - - assertEquals("[uid]][text]", YamlUtil.cleanupHtml("[uid]][text]")); - assertFalse(YamlUtil.cleanupHtml("[text[uid]]").contains("xref")); - } - - @Test - public void cleanupHtmlLinkTagWithLinkTest() { - String expectedActual = "{@link \"http://www.bad-way-to-include-link.com#section\"}"; - String expectedResult = "http://www.bad-way-to-include-link.com#section"; - String random = UUID.randomUUID().toString(); - - assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); - assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); - assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); - } - - @Test - public void cleanupHtmlLinkTagNotRecognizedTest() { - String expectedActual = "{@link WeirdLink#didntResolve(null)}"; - String expectedResult = "WeirdLink#didntResolve(null)"; - String random = UUID.randomUUID().toString(); - - assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); - assertEquals(random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); - assertEquals(expectedResult + random + expectedResult, YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); - } + @Test + public void objectToYamlString() { + MetadataFile metadataFile = new MetadataFile("", "SomeFileName"); + metadataFile.getItems().add(buildMetadataFileItem(3)); + metadataFile.getReferences().add(buildMetadataFileItem(5)); + + String result = YamlUtil.objectToYamlString(metadataFile); + + assertEquals( + "Wrong result", + result, + "" + + "items:\n" + + "- uid: \"Some uid 3\"\n" + + " id: \"Some id3\"\n" + + " href: \"Some href3\"\n" + + " syntax:\n" + + " parameters:\n" + + " - id: \"Some id 3\"\n" + + " type: \"Some type 3\"\n" + + " description: \"Some desc 3\"\n" + + "references:\n" + + "- uid: \"Some uid 5\"\n" + + " id: \"Some id5\"\n" + + " href: \"Some href5\"\n" + + " syntax:\n" + + " parameters:\n" + + " - id: \"Some id 5\"\n" + + " type: \"Some type 5\"\n" + + " description: \"Some desc 5\"\n"); + } + + private MetadataFileItem buildMetadataFileItem(int seed) { + MetadataFileItem metadataFileItem = new MetadataFileItem("Some uid " + seed); + metadataFileItem.setId("Some id" + seed); + metadataFileItem.setHref("Some href" + seed); + metadataFileItem.setParameters( + Collections.singletonList( + new MethodParameter("Some id " + seed, "Some type " + seed, "Some desc " + seed))); + + return metadataFileItem; + } + + @Test + public void cleanupHtmlRemoveLonePreTagsTest() { + String expectedActual = "
text
"; + String expectedResult = "text"; + String expectedWithCode = "
text
"; + String random = UUID.randomUUID().toString(); + + assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); + assertEquals( + random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); + assertEquals( + expectedResult + random + expectedResult, + YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); + assertEquals(expectedWithCode, YamlUtil.cleanupHtml(expectedWithCode)); + } + + @Test + public void cleanupHtmlIncludePrettyPrintTest() { + String expectedActual = "
";
+    String expectedResult = "
";
+    String random = UUID.randomUUID().toString();
+
+    assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual));
+    assertEquals(
+        random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random));
+    assertEquals(
+        expectedResult + random + expectedResult,
+        YamlUtil.cleanupHtml(expectedActual + random + expectedActual));
+    assertNotEquals(expectedResult, YamlUtil.cleanupHtml("
" + random + ""));
+    assertFalse(
+        YamlUtil.cleanupHtml("
" + random + "")
+            .contains("class=\"prettyprint lang-java\""));
+  }
+
+  @Test
+  public void cleanupHtmlEncodeBracketsTest() {
+    String expectedActual =
+        " List things = new ArrayList<>(); \n  

text

"; + String expectedResult = + " List<String> things = new ArrayList<>(); \n

text

<Object>"; + String random = UUID.randomUUID().toString(); + + assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); + assertEquals( + random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); + } + + @Test + public void cleanupHtmlAddCodeTagsTest() { + String expectedActual = "`text`"; + String expectedResult = "text"; + String random = UUID.randomUUID().toString(); + + assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); + assertEquals( + random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); + assertEquals( + expectedResult + random + expectedResult, + YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); + assertEquals("`" + expectedResult, YamlUtil.cleanupHtml("`" + expectedActual)); + assertFalse(YamlUtil.cleanupHtml("`" + random).contains("")); + } + + @Test + public void cleanupHtmlAddHrefTagsTest() { + String expectedActual = "[text](link)"; + String expectedResult = "text"; + String random = UUID.randomUUID().toString(); + + assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); + assertEquals( + random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); + assertEquals( + expectedResult + random + expectedResult, + YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); + assertEquals("[text]](link)", YamlUtil.cleanupHtml("[text]](link)")); + assertFalse(YamlUtil.cleanupHtml("[text(link)]").contains("href")); + } + + @Test + public void cleanupHtmlEqualTitlesTest() { + String expectedActual = "======================= SpeechClient ======================="; + String expectedResult = "

SpeechClient

"; + String random = UUID.randomUUID().toString(); + + assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); + assertEquals( + random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); + assertEquals( + expectedResult + random + expectedResult, + YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); + + assertEquals("= text =", YamlUtil.cleanupHtml("= text =")); + assertEquals("==testing==", YamlUtil.cleanupHtml("==testing==")); + assertEquals( + "=======================SpeechClient=======================", + "=======================SpeechClient======================="); + assertEquals( + "\"scikit-learn\":\"==0.19.0\"TextTextText\"botocore\":\"==1.7.14\"", + "\"scikit-learn\":\"==0.19.0\"TextTextText\"botocore\":\"==1.7.14\""); + assertEquals( + "======= test1234 ===== 1234test === 1234test1234 == test =", + YamlUtil.cleanupHtml("======= test1234 ===== 1234test === 1234test1234 == test =")); + assertEquals( + "====== Markdown H1 Test ======", YamlUtil.cleanupHtml("====== Markdown H1 Test ======")); + } + + @Test + public void cleanupHtmlReferenceTest() { + String expectedActual = "[KeyRing][google.cloud.kms.v1.KeyRing]"; + String expectedResult = + "KeyRing"; + String random = UUID.randomUUID().toString(); + + assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); + assertEquals( + random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); + assertEquals( + expectedResult + random + expectedResult, + YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); + + assertEquals("[uid]][text]", YamlUtil.cleanupHtml("[uid]][text]")); + assertFalse(YamlUtil.cleanupHtml("[text[uid]]").contains("xref")); + } + + @Test + public void cleanupHtmlLinkTagWithLinkTest() { + String expectedActual = "{@link \"http://www.bad-way-to-include-link.com#section\"}"; + String expectedResult = + "http://www.bad-way-to-include-link.com#section"; + String random = UUID.randomUUID().toString(); + + assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); + assertEquals( + random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); + assertEquals( + expectedResult + random + expectedResult, + YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); + } + + @Test + public void cleanupHtmlLinkTagNotRecognizedTest() { + String expectedActual = "{@link WeirdLink#didntResolve(null)}"; + String expectedResult = + "WeirdLink#didntResolve(null)"; + String random = UUID.randomUUID().toString(); + + assertEquals(expectedResult, YamlUtil.cleanupHtml(expectedActual)); + assertEquals( + random + expectedResult + random, YamlUtil.cleanupHtml(random + expectedActual + random)); + assertEquals( + expectedResult + random + expectedResult, + YamlUtil.cleanupHtml(expectedActual + random + expectedActual)); + } } diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.BasePartnerComponent.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.BasePartnerComponent.yml index 5aa4cfcf..5d4b9f0d 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.BasePartnerComponent.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.BasePartnerComponent.yml @@ -14,7 +14,7 @@ items: fullName: "com.microsoft.samples.BasePartnerComponent" type: "Class" package: "com.microsoft.samples" - summary: "Holds common partner component properties and behavior. All components should inherit from this class. The context\n object type." + summary: "Holds common partner component properties and behavior. All components should inherit from this\n class. The context object type." syntax: content: "public abstract class BasePartnerComponent" typeParameters: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.IPartner.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.IPartner.yml index 9bae6eeb..f225f621 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.IPartner.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.IPartner.yml @@ -12,7 +12,7 @@ items: fullName: "com.microsoft.samples.IPartner" type: "Interface" package: "com.microsoft.samples" - summary: "The main entry point into using the partner SDK functionality. Represents a partner and encapsulates all the behavior\n attached to partners. Use this interface to get to the partner's customers, profiles, and customer orders, profiles\n and subscriptions and more." + summary: "The main entry point into using the partner SDK functionality. Represents a partner and\n encapsulates all the behavior attached to partners. Use this interface to get to the partner's\n customers, profiles, and customer orders, profiles and subscriptions and more." syntax: content: "public interface IPartner" - uid: "com.microsoft.samples.IPartner.getCredentials()" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml index 457fbbdc..c86e4904 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml @@ -158,12 +158,12 @@ items: overridden: "com.microsoft.samples.subpackage.Person.getLastName()" type: "Method" package: "com.microsoft.samples" - summary: "Get capitalized last name. But it's not the end,\n because of multiline comment" + summary: "Get capitalized last name. But it's not the end, because we add a lot of text to make this a\n multiline comment" syntax: content: "public String getLastName()" return: type: "java.lang.String" - description: "lastName in uppercase. But it's not the end,\n because of multiline comment" + description: "lastName in uppercase. But it's not the end, because we add a lot of text to make this\n a multiline comment" - uid: "com.microsoft.samples.SuperHero.getUniquePower()" id: "getUniquePower()" parent: "com.microsoft.samples.SuperHero" @@ -254,7 +254,7 @@ items: overload: "com.microsoft.samples.SuperHero.successfullyAttacked*" type: "Method" package: "com.microsoft.samples" - summary: "\nDeprecated. As of version 1.1, use . . . instead\n\n

This is a simple description of the method. . .\n Superman!\n

\nSee Also: HERO-402\n" + summary: "\nDeprecated. As of version 1.1, use . . . instead\n\nThis is a simple description of the method. . . Superman!\nSee Also: HERO-402\n" syntax: content: "public int successfullyAttacked(int incomingDamage, String damageType)" parameters: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.AgreementMetaData.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.AgreementMetaData.yml index 50cdfb1e..6dc7f8cd 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.AgreementMetaData.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.AgreementMetaData.yml @@ -18,7 +18,7 @@ items: fullName: "com.microsoft.samples.agreements.AgreementMetaData" type: "Class" package: "com.microsoft.samples.agreements" - summary: "The AgreementMetaData provides metadata about the agreement type\n that partner can provide confirmation of customer acceptance." + summary: "The AgreementMetaData provides metadata about the agreement type that partner can provide\n confirmation of customer acceptance." syntax: content: "public class AgreementMetaData" inheritance: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.ResourceCollection.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.ResourceCollection.yml index 59cea190..80f3dd10 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.ResourceCollection.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.ResourceCollection.yml @@ -12,7 +12,7 @@ items: fullName: "com.microsoft.samples.agreements.ResourceCollection" type: "Class" package: "com.microsoft.samples.agreements" - summary: "Contains a collection of resources with JSON properties to represent the output Type of objects in collection" + summary: "Contains a collection of resources with JSON properties to represent the output Type of objects\n in collection" syntax: content: "public class ResourceCollection" typeParameters: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Animal.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Animal.yml index b3a2d5c4..4ded03b4 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Animal.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Animal.yml @@ -87,7 +87,7 @@ items: overload: "com.microsoft.samples.commentinheritance.Animal.getKind*" type: "Method" package: "com.microsoft.samples.commentinheritance" - summary: "Get kind from Organism.\n Get kind from Animal." + summary: "Get kind from Organism. Get kind from Animal." syntax: content: "public abstract String getKind()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Dog.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Dog.yml index 169cf75c..91c05db5 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Dog.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Dog.yml @@ -138,7 +138,7 @@ items: overridden: "com.microsoft.samples.commentinheritance.Mammal.getKind()" type: "Method" package: "com.microsoft.samples.commentinheritance" - summary: "Get kind from Organism.\n Get kind from Animal.\n Get kind from Mammal.\n Get kind from Dog." + summary: "Get kind from Organism. Get kind from Animal. Get kind from Mammal. Get kind from Dog." syntax: content: "public String getKind()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Mammal.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Mammal.yml index 82c30c40..16d78013 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Mammal.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Mammal.yml @@ -60,7 +60,7 @@ items: overridden: "com.microsoft.samples.commentinheritance.Animal.getKind()" type: "Method" package: "com.microsoft.samples.commentinheritance" - summary: "Get kind from Organism.\n Get kind from Animal.\n Get kind from Mammal." + summary: "Get kind from Organism. Get kind from Animal. Get kind from Mammal." syntax: content: "public abstract String getKind()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Omnivorous.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Omnivorous.yml index 7dc54473..87bc961b 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Omnivorous.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.Omnivorous.yml @@ -65,7 +65,7 @@ items: overload: "com.microsoft.samples.commentinheritance.Omnivorous.getKind*" type: "Method" package: "com.microsoft.samples.commentinheritance" - summary: "Get kind from Carnivorous.\n Get kind from Omnivorous." + summary: "Get kind from Carnivorous. Get kind from Omnivorous." syntax: content: "public abstract String getKind()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml index d70e3939..3094daf5 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml @@ -12,7 +12,7 @@ items: fullName: "com.microsoft.samples.google.BetaApi" type: "Interface" package: "com.microsoft.samples.google" - summary: "Indicates a public API that can change at any time, and has no guarantee of API stability and\n backward-compatibility.\n\n

\n Usage guidelines:\n

    \n
  1. This annotation is used only on APIs with public visibility. Internal interfaces should not\n use it.
  2. \n
  3. This annotation should only be added to new APIs. Adding it to an existing API is considered\n API-breaking.
  4. \n
  5. Removing this annotation from an API gives it stable status, assuming the API doesn't have\n other annotations denoting instability.\n
" + summary: "Indicates a public API that can change at any time, and has no guarantee of API stability and\n backward-compatibility.\n\n

Usage guidelines:\n\n

    \n
  1. This annotation is used only on APIs with public visibility. Internal interfaces should not\n use it.\n
  2. This annotation should only be added to new APIs. Adding it to an existing API is\n considered API-breaking.\n
  3. Removing this annotation from an API gives it stable status, assuming the API doesn't have\n other annotations denoting instability.\n
" syntax: content: "public interface BetaApi implements Annotation" implements: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml index 74124c8a..d45df9d5 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ValidationException.yml @@ -16,7 +16,7 @@ items: fullName: "com.microsoft.samples.google.ValidationException" type: "Class" package: "com.microsoft.samples.google" - summary: "Exception thrown if there is a validation problem with a path template, http config, or related\n framework methods. Comes as an illegal argument exception subclass. Allows to globally set a\n thread-local validation context description which each exception inherits.\nSee Also: Google Cloud Storage error codes\n" + summary: "Exception thrown if there is a validation problem with a path template, http config, or related\n framework methods. Comes as an illegal argument exception subclass. Allows to globally set a\n thread-local validation context description which each exception inherits.\nSee Also: Google Cloud Storage error codes\n" syntax: content: "public class ValidationException extends IllegalArgumentException" inheritance: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml index 759edda9..5b6934f3 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml @@ -170,7 +170,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.create*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Constructs an instance of SpeechClient, using the given settings. The channels are created\n based on the settings passed in, or defaults for any settings that are not set.\n Example broken links: http://tools.ietf.org/html/rfc2616#section-3.7\n ApiFutures#immediateFuture(null)." + summary: "Constructs an instance of SpeechClient, using the given settings. The channels are created\n based on the settings passed in, or defaults for any settings that are not set. Example broken\n links: http://tools.ietf.org/html/rfc2616#section-3.7 \n ApiFutures#immediateFuture(null)." syntax: content: "public static final SpeechClient create(SpeechSettings settings)" parameters: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Display.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Display.yml index 116528a9..a67b1121 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Display.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Display.yml @@ -13,7 +13,7 @@ items: fullName: "com.microsoft.samples.subpackage.Display" type: "Interface" package: "com.microsoft.samples.subpackage" - summary: "Do you see some First code block?\n

\n Or this Second code block?" + summary: "Do you see some First code block?\n\n

Or this Second code block?" syntax: content: "public interface Display extends Serializable, List>" typeParameters: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml index 1aa47a46..129b95ca 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml @@ -21,7 +21,7 @@ items: fullName: "com.microsoft.samples.subpackage.Person" type: "Class" package: "com.microsoft.samples.subpackage" - summary: "Class that describes some person\n\n This comment has links to:\n

    \n
  • Owner class Person
  • \n
  • Its inner class Person.IdentificationInfo
  • \n
  • Its method Person#setLastName(String lastName)
  • \n
  • Its method without params Person#setLastName()
  • \n
  • Its public field Person#age
  • \n
  • Another class which used here Set
  • \n
  • Another class which not used here List
  • \n
  • Broken link sdfdsagdsfghfgh
  • \n
  • Plain link someContent
  • \n
  • Link that starts from '#' #setLastName()
  • \n
  • Link with label WordOne
  • \n
\n\n This is an \"at\" symbol: @\nSee Also: Display\n" + summary: "Class that describes some person\n\n

This comment has links to:\n\n

    \n
  • Owner class Person\n
  • Its inner class Person.IdentificationInfo\n
  • Its method Person#setLastName(String lastName)\n
  • Its method without params Person#setLastName()\n
  • Its public field Person#age\n
  • Another class which used here Set\n
  • Another class which not used here List\n
  • Broken link sdfdsagdsfghfgh\n
  • Plain link someContent\n
  • Link that starts from '#' #setLastName()\n
  • Link with label WordOne\n
\n\n This is an \"at\" symbol: @\nSee Also: Display\n" syntax: content: "public class Person" typeParameters: From 1917a3cad27360d329781edeb7c892e54d1bdd00 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 18 Aug 2023 23:41:24 +0200 Subject: [PATCH 096/168] chore(deps): update dependency com.google.googlejavaformat:google-java-format to v1.17.0 (#188) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 25983b61..505daa81 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -106,7 +106,7 @@ com.google.googlejavaformat google-java-format - 1.16.0 + 1.17.0 From 569b29dda2c41b42c884489daae392a4c584a3c9 Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Tue, 29 Aug 2023 18:18:56 +0000 Subject: [PATCH 097/168] feat: add ApiVersion parser and comparison (#189) * feat: add ApiVersion parser and comparison * feat: add guava * chore: ApiVersion equals and hashCode --- third_party/docfx-doclet-143274/pom.xml | 5 + .../com/google/docfx/doclet/ApiVersion.java | 120 ++++++++++++++++++ .../com/microsoft/util/ApiVersionTest.java | 73 +++++++++++ 3 files changed, 198 insertions(+) create mode 100644 third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 505daa81..aa59d1b0 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -149,6 +149,11 @@ jsoup 1.16.1 + + com.google.guava + guava + 32.1.1-jre + diff --git a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java new file mode 100644 index 00000000..c577cb22 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java @@ -0,0 +1,120 @@ +package com.google.docfx.doclet; + +import com.google.common.base.MoreObjects; +import java.util.Objects; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.annotation.Nullable; + +public class ApiVersion implements Comparable { + public static ApiVersion NONE = new ApiVersion(0, 0, null, 0); + + private static final Pattern VALID_VERSION_REGEX = + Pattern.compile("^v(\\d+)p?(\\d+)?(alpha|beta)?(\\d+)?"); + + /** + * Creates an ApiVersion instance, if the given input matches the correct format. + * + *

Supported Format: + * + *

+   * v1p2beta3
+   *  │└┤└──┤│
+   *  │ │   ││
+   *  │ │   │└─── Optional: Prerelease major version
+   *  │ │   └──── Optional: Stability level. See AIP 181
+   *  │ └──────── Optional: Minor version
+   *  └────────── Required: Major version
+   * 
+ * + * @return Optional.empty() if the given input doesn't match the version pattern + */ + public static Optional parse(@Nullable String input) { + if (input != null) { + Matcher matcher = VALID_VERSION_REGEX.matcher(input); + if (matcher.matches()) { + return Optional.of( + new ApiVersion( + safeParseInt(matcher.group(1)), + safeParseInt(matcher.group(2)), + matcher.group(3), + safeParseInt(matcher.group(4)))); + } + } + return Optional.empty(); + } + + private static int safeParseInt(@Nullable String input) { + if (input == null) { + return 0; + } + return Integer.parseInt(input); + } + + private final int major; + private final int minor; + private final String stability; + private final int prerelease; + + private ApiVersion(int major, int minor, String stability, int prerelease) { + this.major = major; + this.minor = minor; + this.stability = stability; + this.prerelease = prerelease; + } + + public boolean isStable() { + return stability == null; + } + + @Override + public int compareTo(ApiVersion other) { + if (major != other.major) { + return major - other.major; + } + if (minor != other.minor) { + return minor - other.minor; + } + if (!Objects.equals(stability, other.stability)) { + if (stability == null) { + return 1; // Other is a prerelease version, but this is not. + } + if (other.stability == null) { + return -1; // This is a prerelease version, but the other is not. + } + return stability.compareTo(other.stability); // Based on alphabetical order + } + return prerelease - other.prerelease; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ApiVersion other = (ApiVersion) o; + return major == other.major + && minor == other.minor + && prerelease == other.prerelease + && Objects.equals(stability, other.stability); + } + + @Override + public int hashCode() { + return Objects.hash(major, minor, stability, prerelease); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(ApiVersion.class) + .add("major", major) + .add("minor", minor) + .add("stability", stability) + .add("prerelease", prerelease) + .toString(); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java new file mode 100644 index 00000000..aaa67c29 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java @@ -0,0 +1,73 @@ +package com.microsoft.util; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.google.docfx.doclet.ApiVersion; +import org.junit.Test; + +public class ApiVersionTest { + + @Test + public void badFormat() { + assertFalse(ApiVersion.parse("badFormat").isPresent()); + assertFalse(ApiVersion.parse("1p1").isPresent()); + assertFalse(ApiVersion.parse("v1p2p3").isPresent()); + assertFalse(ApiVersion.parse("v1a").isPresent()); + assertFalse(ApiVersion.parse("v1beta2p3").isPresent()); + } + + @Test + public void goodFormat() { + assertTrue(ApiVersion.parse("v99").isPresent()); + assertTrue(ApiVersion.parse("v1p2").isPresent()); + assertTrue(ApiVersion.parse("v2alpha").isPresent()); + assertTrue(ApiVersion.parse("v3beta").isPresent()); + assertTrue(ApiVersion.parse("v3beta1").isPresent()); + assertTrue(ApiVersion.parse("v3beta1").isPresent()); + assertTrue(ApiVersion.parse("v3p1beta2").isPresent()); + } + + @Test + public void testAisGreaterThanB() { + String[][] comparisons = { + {"v3", "v2"}, + {"v1p1", "v1"}, + {"v1", "v1alpha"}, + {"v1", "v1beta"}, + {"v1beta", "v1alpha"}, + {"v1beta", "v1alpha2"}, + {"v1beta1", "v1alpha"}, + {"v1beta1", "v1beta"}, + {"v1beta2", "v1beta1"}, + {"v2p1alpha0", "v1p1alpha0"}, + }; + + for (String[] testcase : comparisons) { + ApiVersion a = parse(testcase[0]); + ApiVersion b = parse(testcase[1]); + assertThat(a).isGreaterThan(b); + } + } + + @Test + public void stability() { + assertTrue(parse("v12").isStable()); + assertTrue(parse("v1p3").isStable()); + + assertFalse(parse("v1alpha").isStable()); + assertFalse(parse("v1p1beta1").isStable()); + } + + @Test + public void equals() { + assertThat(parse("v1")).isEqualTo(parse("v1p0")); + assertThat(parse("v1p0")).isEqualTo(parse("v1")); + assertThat(parse("v2p1beta")).isEqualTo(parse("v2p1beta0")); + } + + private ApiVersion parse(String s) { + return ApiVersion.parse(s).orElseThrow(() -> new IllegalStateException("Unable to parse " + s)); + } +} From 2b838bed052cf9aa06088c9e51ef009400e7ba3c Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 29 Aug 2023 20:35:31 +0200 Subject: [PATCH 098/168] fix(deps): update dependency com.google.guava:guava to v32.1.2-jre (#191) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index aa59d1b0..d32571af 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -152,7 +152,7 @@ com.google.guava guava - 32.1.1-jre + 32.1.2-jre From caf61a815177577279bccf206228108b5a2db559 Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Wed, 20 Sep 2023 11:39:04 -0400 Subject: [PATCH 099/168] feat: organize with Older and prerelease packages (#192) * feat: organize with Older and prerelease packages * chore: clarity and use 'equals' * chore: explicit recommendation error conditions * chore: add 2-release test case to ApiVersionTest --- .../com/google/docfx/doclet/ApiVersion.java | 17 + .../com/microsoft/build/YmlFilesBuilder.java | 129 +-- .../com/microsoft/lookup/PackageLookup.java | 123 +++ .../java/com/microsoft/model/TocFile.java | 3 +- .../java/com/microsoft/model/TocItem.java | 6 + .../microsoft/doclet/DocletRunnerTest.java | 33 +- .../microsoft/lookup/PackageLookupTest.java | 140 ++- .../java/com/microsoft/model/TocFileTest.java | 16 +- .../samples/google/v1/SpeechClient.java | 404 +++++++++ .../com/microsoft/util/ApiVersionTest.java | 36 + ...crosoft.samples.google.v1.SpeechClient.yml | 833 ++++++++++++++++++ .../com.microsoft.samples.google.v1.yml | 20 + .../expected-generated-files/overview.yml | 13 +- .../expected-generated-files/toc.yml | 39 +- 14 files changed, 1723 insertions(+), 89 deletions(-) create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/SpeechClient.java create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.yml diff --git a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java index c577cb22..51867f09 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java @@ -1,6 +1,8 @@ package com.google.docfx.doclet; import com.google.common.base.MoreObjects; +import java.util.Collection; +import java.util.Comparator; import java.util.Objects; import java.util.Optional; import java.util.regex.Matcher; @@ -52,6 +54,21 @@ private static int safeParseInt(@Nullable String input) { return Integer.parseInt(input); } + public static ApiVersion getRecommended(Collection versions) { + if (versions.size() == 1) { + return versions.iterator().next(); + } + + Optional latestReleaseVersion = + versions.stream().filter(ApiVersion::isStable).max(Comparator.naturalOrder()); + + return latestReleaseVersion.orElseGet( + () -> // No (stable) release version found + versions.stream() + .max(Comparator.naturalOrder()) // Select latest prerelease version + .orElseThrow(() -> new IllegalArgumentException("Versions must not be empty."))); + } + private final int major; private final int minor; private final String stability; diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 7e0d1f66..bef901ed 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -2,9 +2,12 @@ import static com.microsoft.build.BuilderUtil.populateUidValues; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableListMultimap; import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; import com.microsoft.lookup.PackageLookup; +import com.microsoft.lookup.PackageLookup.PackageGroup; import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; import com.microsoft.model.TocFile; @@ -19,16 +22,18 @@ import jdk.javadoc.doclet.DocletEnvironment; public class YmlFilesBuilder { - private DocletEnvironment environment; - private String outputPath; - private ElementUtil elementUtil; - private PackageLookup packageLookup; - private String projectName; - private boolean disableChangelog; - private ProjectBuilder projectBuilder; - private PackageBuilder packageBuilder; - private ClassBuilder classBuilder; - private ReferenceBuilder referenceBuilder; + private static final String OLDER_AND_PRERELEASE = "Older and prerelease packages"; + + private final DocletEnvironment environment; + private final String outputPath; + private final ElementUtil elementUtil; + private final PackageLookup packageLookup; + private final String projectName; + private final boolean disableChangelog; + private final ProjectBuilder projectBuilder; + private final PackageBuilder packageBuilder; + private final ClassBuilder classBuilder; + private final ReferenceBuilder referenceBuilder; public YmlFilesBuilder( DocletEnvironment environment, @@ -57,60 +62,84 @@ public YmlFilesBuilder( } public boolean build() { + Processor processor = new Processor(); + processor.process(); + + // write to yaml files + FileUtil.dumpToFile(processor.projectMetadataFile); + processor.packageMetadataFiles.forEach(FileUtil::dumpToFile); + processor.classMetadataFiles.forEach(FileUtil::dumpToFile); + FileUtil.dumpToFile(processor.tocFile); + + return true; + } + + @VisibleForTesting + class Processor { // table of contents - TocFile tocFile = new TocFile(outputPath, projectName, disableChangelog); + final TocFile tocFile = new TocFile(outputPath, projectName, disableChangelog); // overview page - MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); + final MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); // package summary pages - List packageMetadataFiles = new ArrayList<>(); + final List packageMetadataFiles = new ArrayList<>(); // packages - List packageItems = new ArrayList<>(); + final List packageItems = new ArrayList<>(); // class/enum/interface/etc. pages - List classMetadataFiles = new ArrayList<>(); + final List classMetadataFiles = new ArrayList<>(); - for (PackageElement packageElement : - elementUtil.extractPackageElements(environment.getIncludedElements())) { - String packageUid = packageLookup.extractUid(packageElement); - String packageStatus = packageLookup.extractStatus(packageElement); - TocItem packageTocItem = new TocItem(packageUid, packageUid, packageStatus); - // build package summary - packageMetadataFiles.add(packageBuilder.buildPackageMetadataFile(packageElement)); - // add package summary to toc - packageTocItem.getItems().add(new TocItem(packageUid, "Package summary")); - tocFile.addTocItem(packageTocItem); + @VisibleForTesting + void process() { + ImmutableListMultimap organizedPackages = + packageLookup.organize( + elementUtil.extractPackageElements(environment.getIncludedElements())); - // build classes/interfaces/enums/exceptions/annotations - TocTypeMap typeMap = new TocTypeMap(); - classBuilder.buildFilesForInnerClasses(packageElement, typeMap, classMetadataFiles); - packageTocItem.getItems().addAll(joinTocTypeItems(typeMap)); - } + for (PackageElement element : organizedPackages.get(PackageGroup.VISIBLE)) { + tocFile.addTocItem(buildPackage(element)); + } - for (MetadataFile packageFile : packageMetadataFiles) { - packageItems.addAll(packageFile.getItems()); - String packageFileName = packageFile.getFileName(); - for (MetadataFile classFile : classMetadataFiles) { - String classFileName = classFile.getFileName(); - if (packageFileName.equalsIgnoreCase(classFileName)) { - packageFile.setFileName(packageFileName.replaceAll("\\.yml$", "(package).yml")); - classFile.setFileName(classFileName.replaceAll("\\.yml$", "(class).yml")); - break; + TocItem older = new TocItem(OLDER_AND_PRERELEASE, OLDER_AND_PRERELEASE, null); + for (PackageElement element : organizedPackages.get(PackageGroup.OLDER_AND_PRERELEASE)) { + older.getItems().add(buildPackage(element)); + } + tocFile.addTocItem(older); + + for (MetadataFile packageFile : packageMetadataFiles) { + packageItems.addAll(packageFile.getItems()); + String packageFileName = packageFile.getFileName(); + for (MetadataFile classFile : classMetadataFiles) { + String classFileName = classFile.getFileName(); + if (packageFileName.equalsIgnoreCase(classFileName)) { + packageFile.setFileName(packageFileName.replaceAll("\\.yml$", "(package).yml")); + classFile.setFileName(classFileName.replaceAll("\\.yml$", "(class).yml")); + break; + } } } + // build project summary page + projectBuilder.buildProjectMetadataFile(packageItems, projectMetadataFile); + + // post-processing + populateUidValues(packageMetadataFiles, classMetadataFiles); + referenceBuilder.updateExternalReferences(classMetadataFiles); } - // build project summary page - projectBuilder.buildProjectMetadataFile(packageItems, projectMetadataFile); - // post-processing - populateUidValues(packageMetadataFiles, classMetadataFiles); - referenceBuilder.updateExternalReferences(classMetadataFiles); + private TocItem buildPackage(PackageElement element) { + String packageUid = packageLookup.extractUid(element); + String packageStatus = packageLookup.extractStatus(element); - // write to yaml files - FileUtil.dumpToFile(projectMetadataFile); - packageMetadataFiles.forEach(FileUtil::dumpToFile); - classMetadataFiles.forEach(FileUtil::dumpToFile); - FileUtil.dumpToFile(tocFile); + TocItem packageTocItem = new TocItem(packageUid, packageUid, packageStatus); + packageTocItem.getItems().add(new TocItem(packageUid, "Package summary")); - return true; + // build package summary + packageMetadataFiles.add(packageBuilder.buildPackageMetadataFile(element)); + + // build classes/interfaces/enums/exceptions/annotations + TocTypeMap typeMap = new TocTypeMap(); + classBuilder.buildFilesForInnerClasses(element, typeMap, classMetadataFiles); + packageTocItem.getItems().addAll(joinTocTypeItems(typeMap)); + + return packageTocItem; + } } List joinTocTypeItems(TocTypeMap tocTypeMap) { diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java index a5953895..05d1a964 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java @@ -1,7 +1,22 @@ package com.microsoft.lookup; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.MultimapBuilder; +import com.google.common.collect.Multimaps; +import com.google.docfx.doclet.ApiVersion; import com.microsoft.lookup.model.ExtendedMetadataFileItem; import com.microsoft.model.Status; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; import javax.lang.model.element.PackageElement; import jdk.javadoc.doclet.DocletEnvironment; @@ -51,4 +66,112 @@ public String extractJavaType(PackageElement element) { } return null; } + + /** Compare PackageElements by their parsed ApiVersion */ + private final Comparator byComparingApiVersion = + Comparator.comparing(pkg -> extractApiVersion(pkg).orElse(ApiVersion.NONE)); + + public Optional extractApiVersion(PackageElement pkg) { + String name = String.valueOf(pkg.getQualifiedName()); + int lastPackageIndex = name.lastIndexOf('.'); + String leafPackage = name.substring(lastPackageIndex + 1); + return ApiVersion.parse(leafPackage); + } + + public enum PackageGroup { + VISIBLE, + OLDER_AND_PRERELEASE + } + + /** + * Organize packages into PackageGroups, making some VISIBLE the rest hidden under the + * OLDER_AND_PRERELEASE category. + */ + public ImmutableListMultimap organize( + List packages) { + + ListMultimap organized = + MultimapBuilder.enumKeys(PackageGroup.class).arrayListValues().build(); + + Multimap packagesGroups = groupVersions(packages); + ImmutableList alphabetizedPackageGroups = + packagesGroups.keySet().stream().sorted().collect(ImmutableList.toImmutableList()); + + for (String name : alphabetizedPackageGroups) { + Collection versions = packagesGroups.get(name); + + // The recommended package of each group is made visible. + PackageElement recommendedVersion = getRecommended(versions); + organized.put(PackageGroup.VISIBLE, recommendedVersion); + + // All others are added to "Older and prerelease versions" + versions.stream() + .filter(version -> !version.equals(recommendedVersion)) + .sorted(byComparingApiVersion) + .forEach( + version -> { + organized.put(PackageGroup.OLDER_AND_PRERELEASE, version); + }); + } + + return ImmutableListMultimap.copyOf(organized); + } + + /** + * This 'grouping' logic combines all versioned packages together in a single `a.b.c.v#` group. + * + *

For example: a.b.v1 and a.b.v2 will be in the same group, but a.b and a.b.c will be in their + * own groups. + * + *

When packages are grouped, only one package within the group will be VISIBLE and the rest + * will be placed in the OLDER_AND_PRERELEASE category. + */ + @VisibleForTesting + Multimap groupVersions(List packages) { + return Multimaps.index( + packages, + (pkg) -> { + String name = String.valueOf(pkg.getQualifiedName()); + int lastPackageIndex = name.lastIndexOf('.'); + String leafPackage = name.substring(lastPackageIndex + 1); + // For package a.b.c.d, the value of leafPackage is 'd'. + + boolean packageIsApiVersion = ApiVersion.parse(leafPackage).isPresent(); + if (packageIsApiVersion) { + String packageWithoutVersion = name.substring(0, lastPackageIndex); + // For package a.b.c.v1, the value of packageWithoutVersion is a.b.c + return packageWithoutVersion + ".v#"; // Use "v#" package to group all versions + } + // Using 'name' ensures this package is placed in a group of size 1. + return name; + }); + } + + /** + * @throws java.lang.IllegalStateException if the collections has multiple entries, and any of the + * packages are not versioned. + * @throws java.lang.IllegalArgumentException if the collection is empty or contains entries with + * duplicate API versions. + */ + @VisibleForTesting + PackageElement getRecommended(Collection packages) { + Preconditions.checkArgument(!packages.isEmpty(), "Packages must not be empty."); + + if (packages.size() == 1) { + return packages.iterator().next(); + } + + ImmutableMap versions = + Maps.uniqueIndex( + packages, + (pkg) -> + extractApiVersion(pkg) + .orElseThrow( + () -> + new IllegalStateException( + "Unable to parse version from package " + pkg))); + + ApiVersion recommended = ApiVersion.getRecommended(versions.keySet()); + return versions.get(recommended); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java index 765c015a..c8a51810 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java @@ -4,7 +4,6 @@ import java.io.File; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.List; public class TocFile extends ArrayList implements YmlFile { @@ -26,7 +25,7 @@ public void addTocItem(TocItem packageTocItem) { } protected void sortByUid() { - Collections.sort(this, Comparator.comparing(TocItem::getUid)); + Collections.sort(this, (a, b) -> a.getUid().compareToIgnoreCase(b.getUid())); } @Override diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java index 948503e7..1dde6e6e 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java @@ -1,5 +1,6 @@ package com.microsoft.model; +import com.google.common.base.MoreObjects; import java.util.ArrayList; import java.util.List; @@ -45,4 +46,9 @@ public String getStatus() { public String getHeading() { return heading; } + + @Override + public String toString() { + return MoreObjects.toStringHelper(TocItem.class).add("uid", uid).toString(); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java index 1974c5cb..2b1c28f7 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java @@ -1,5 +1,7 @@ package com.microsoft.doclet; +import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; @@ -68,9 +70,11 @@ public void testFilesGeneration() throws IOException { DocletRunner.main(new String[] {PARAMS_DIR}); List expectedFilePaths = - Files.list(Path.of(EXPECTED_GENERATED_FILES_DIR)).collect(Collectors.toList()); - List generatedFilePaths = Files.list(Path.of(OUTPUT_DIR)).collect(Collectors.toList()); - assertEquals("Wrong files count", generatedFilePaths.size(), expectedFilePaths.size()); + Files.list(Path.of(EXPECTED_GENERATED_FILES_DIR)).sorted().collect(Collectors.toList()); + List generatedFilePaths = + Files.list(Path.of(OUTPUT_DIR)).sorted().collect(Collectors.toList()); + + assertSameFileNames(expectedFilePaths, generatedFilePaths); for (Path expectedFilePath : expectedFilePaths) { Path generatedFilePath = Path.of(OUTPUT_DIR, expectedFilePath.getFileName().toString()); @@ -94,4 +98,27 @@ public void testFilesGeneration() throws IOException { } } } + + public void assertSameFileNames(List expected, List generated) { + List expectedFilenames = + expected.stream().map(Path::getFileName).map(Path::toString).collect(Collectors.toList()); + List generatedFilenames = + generated.stream().map(Path::getFileName).map(Path::toString).collect(Collectors.toList()); + + assertWithMessage("Expected files were not generated.") + .that( + expectedFilenames.stream() + .filter(file -> !generatedFilenames.contains(file)) + .collect(Collectors.toList())) + .isEmpty(); + + assertWithMessage("Files were generated that should not have been.") + .that( + generatedFilenames.stream() + .filter(file -> !expectedFilenames.contains(file)) + .collect(Collectors.toList())) + .isEmpty(); + + assertThat(expected.size()).isEqualTo(generated.size()); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java index 0cdbbf10..f175f18e 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java @@ -1,9 +1,17 @@ package com.microsoft.lookup; +import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.Multimap; import com.google.testing.compile.CompilationRule; +import com.microsoft.lookup.PackageLookup.PackageGroup; import com.microsoft.model.Status; +import java.util.List; +import java.util.stream.Collectors; import javax.lang.model.element.PackageElement; import javax.lang.model.util.Elements; import jdk.javadoc.doclet.DocletEnvironment; @@ -40,15 +48,17 @@ public void extractPackageContent() { @Test public void extractPackageStatus() { - PackageElement elementBeta = elements.getPackageElement("com.microsoft.samples.google.v1beta"); - PackageElement elementAlpha = - elements.getPackageElement("com.microsoft.samples.google.v1p1alpha"); + PackageElement beta = elements.getPackageElement("com.microsoft.samples.google.v1beta"); + PackageElement alpha = elements.getPackageElement("com.microsoft.samples.google.v1p1alpha"); + PackageElement v1 = elements.getPackageElement("com.microsoft.samples.google.v1"); - String resultA = packageLookup.extractStatus(elementAlpha); - String resultB = packageLookup.extractStatus(elementBeta); + String resultA = packageLookup.extractStatus(alpha); + String resultB = packageLookup.extractStatus(beta); + String resultV1 = packageLookup.extractStatus(v1); - assertEquals("Wrong result", resultA, Status.ALPHA.toString()); - assertEquals("Wrong result", resultB, Status.BETA.toString()); + assertThat(resultA).isEqualTo(Status.ALPHA.toString()); + assertThat(resultB).isEqualTo(Status.BETA.toString()); + assertThat(resultV1).isNull(); } @Test @@ -57,4 +67,120 @@ public void testExtractJavaType() { elements.getPackageElement("com.microsoft.samples.google.v1beta"); assertEquals("Wrong javaType", packageLookup.extractJavaType(packageElement), "package"); } + + @Test + public void testGroupVersions() { + ImmutableList packages = + ImmutableList.of( + elements.getPackageElement("com.microsoft.samples.google.v1p1alpha"), + elements.getPackageElement("com.microsoft.samples.google.v1beta"), + elements.getPackageElement("com.microsoft.samples.google.v1"), + elements.getPackageElement("com.microsoft.samples.google"), + elements.getPackageElement("com.microsoft.samples")); + + Multimap groupedPackages = packageLookup.groupVersions(packages); + + assertThat(groupedPackages.keys()).hasCount("com.microsoft.samples.google.v#", 3); + assertThat(groupedPackages.keys()).hasCount("com.microsoft.samples.google", 1); + assertThat(groupedPackages.keys()).hasCount("com.microsoft.samples", 1); + } + + @Test + public void testRecommendation() { + ImmutableList packages = + ImmutableList.of( + elements.getPackageElement("com.microsoft.samples.google.v1p1alpha"), + elements.getPackageElement("com.microsoft.samples.google.v1beta")); + + PackageElement recommended = packageLookup.getRecommended(packages); + + assertThat(String.valueOf(recommended.getQualifiedName())) + .isEqualTo("com.microsoft.samples.google.v1p1alpha"); + } + + @Test + public void testRecommendation_SinglePackage() { + ImmutableList packages = + ImmutableList.of(elements.getPackageElement("com.microsoft.samples.google.v1beta")); + + PackageElement recommended = packageLookup.getRecommended(packages); + + assertThat(String.valueOf(recommended.getQualifiedName())) + .isEqualTo("com.microsoft.samples.google.v1beta"); + } + + @Test + public void testRecommendation_WithUnversionedPackageCollection() { + ImmutableList packages = + ImmutableList.of( + elements.getPackageElement("com.microsoft.samples.google"), + elements.getPackageElement("com.microsoft.samples")); + + assertThrows(IllegalStateException.class, () -> packageLookup.getRecommended(packages)); + } + + @Test + public void testRecommendation_WithDuplicates() { + ImmutableList packages = + ImmutableList.of( + elements.getPackageElement("com.microsoft.samples.google.v1beta"), + elements.getPackageElement("com.microsoft.samples.google.v1beta")); + + assertThrows(IllegalArgumentException.class, () -> packageLookup.getRecommended(packages)); + } + + @Test + public void testOrganize() { + ImmutableList packages = + ImmutableList.of( + elements.getPackageElement("com.microsoft.samples.google.v1p1alpha"), + elements.getPackageElement("com.microsoft.samples.google.v1beta"), + elements.getPackageElement("com.microsoft.samples.google.v1"), + elements.getPackageElement("com.microsoft.samples.google"), + elements.getPackageElement("com.microsoft.samples")); + + ImmutableListMultimap organized = + packageLookup.organize(packages); + + assertThat(organized.keys()).hasCount(PackageGroup.VISIBLE, 3); + assertThat(organized.keys()).hasCount(PackageGroup.OLDER_AND_PRERELEASE, 2); + + assertThat(toPackageNames(organized.get(PackageGroup.VISIBLE))) + .containsExactly( + "com.microsoft.samples", + "com.microsoft.samples.google", + "com.microsoft.samples.google.v1"); + + assertThat(toPackageNames(organized.get(PackageGroup.OLDER_AND_PRERELEASE))) + .containsExactly( + "com.microsoft.samples.google.v1beta", "com.microsoft.samples.google.v1p1alpha"); + } + + @Test + public void testOrganize_WithoutReleasePackage() { + ImmutableList packages = + ImmutableList.of( + elements.getPackageElement("com.microsoft.samples.google.v1p1alpha"), + elements.getPackageElement("com.microsoft.samples.google.v1beta"), + elements.getPackageElement("com.microsoft.samples.google"), + elements.getPackageElement("com.microsoft.samples")); + + ImmutableListMultimap organized = + packageLookup.organize(packages); + + assertThat(toPackageNames(organized.get(PackageGroup.VISIBLE))) + .containsExactly( + "com.microsoft.samples", + "com.microsoft.samples.google", + "com.microsoft.samples.google.v1p1alpha"); + + assertThat(toPackageNames(organized.get(PackageGroup.OLDER_AND_PRERELEASE))) + .containsExactly("com.microsoft.samples.google.v1beta"); + } + + private List toPackageNames(List packages) { + return packages.stream() + .map(pkg -> String.valueOf(pkg.getQualifiedName())) + .collect(Collectors.toList()); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java index 990b4e11..cd0281ed 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java @@ -16,7 +16,7 @@ package com.microsoft.model; -import static org.junit.Assert.assertEquals; +import static com.google.common.truth.Truth.assertThat; import org.junit.Test; @@ -25,22 +25,20 @@ public class TocFileTest { @Test public void sortsByUid() { TocFile tocFile = new TocFile("outputPath", "google-cloud-project", false); - TocItem tocItemA = new TocItem("A.uid.package.class", "name"); + TocItem tocItemA = new TocItem("a.uid.package.class", "name"); TocItem tocItemB = new TocItem("B.uid.package.class", "name"); - TocItem tocItemC = new TocItem("C.uid.package.class", "name"); + TocItem tocItemC = new TocItem("c.uid.package.class", "name"); + TocItem olderItem = new TocItem("Older and prerelease packages", "name"); tocFile.addTocItem(tocItemC); tocFile.addTocItem(tocItemA); + tocFile.addTocItem(olderItem); tocFile.addTocItem(tocItemB); - assertEquals("Should be out of uid order", tocFile.get(0), tocItemC); - assertEquals("Should be out of uid order", tocFile.get(1), tocItemA); - assertEquals("Should be out of uid order", tocFile.get(2), tocItemB); + assertThat(tocFile).containsExactly(tocItemC, tocItemA, olderItem, tocItemB).inOrder(); tocFile.sortByUid(); - assertEquals("Should sort toc by uid", tocFile.get(0), tocItemA); - assertEquals("Should sort toc by uid", tocFile.get(1), tocItemB); - assertEquals("Should sort toc by uid", tocFile.get(2), tocItemC); + assertThat(tocFile).containsExactly(tocItemA, tocItemB, tocItemC, olderItem).inOrder(); } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/SpeechClient.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/SpeechClient.java new file mode 100644 index 00000000..b727e35a --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/SpeechClient.java @@ -0,0 +1,404 @@ +/* + * Copyright 2021 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 + * + * https://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.microsoft.samples.google.v1; + +import com.google.api.core.BetaApi; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.longrunning.OperationFuture; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.cloud.speech.v1p1beta1.*; +import com.google.cloud.speech.v1p1beta1.stub.SpeechStub; +import com.google.cloud.speech.v1p1beta1.stub.SpeechStubSettings; +import com.google.longrunning.Operation; +import com.google.longrunning.OperationsClient; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. + +/** + * Service Description: Service that implements Google Cloud Speech API. + * + *

This class provides the ability to make remote calls to the backing service through method + * calls that map to API methods. Sample code to get started: + * + *

{@code
+ * try (SpeechClient speechClient = SpeechClient.create()) {
+ *   RecognitionConfig config = RecognitionConfig.newBuilder().build();
+ *   RecognitionAudio audio = RecognitionAudio.newBuilder().build();
+ *   RecognizeResponse response = speechClient.recognize(config, audio);
+ * }
+ * }
+ * + *

Note: close() needs to be called on the SpeechClient object to clean up resources such as + * threads. In the example above, try-with-resources is used, which automatically calls close(). + * + *

The surface of this class includes several types of Java methods for each of the API's + * methods: + * + *

    + *
  1. A "flattened" method. With this type of method, the fields of the request type have been + * converted into function parameters. It may be the case that not all fields are available as + * parameters, and not every API method will have a flattened method entry point. + *
  2. A "request object" method. This type of method only takes one parameter, a request object, + * which must be constructed before the call. Not every API method will have a request object + * method. + *
  3. A "callable" method. This type of method takes no parameters and returns an immutable API + * callable object, which can be used to initiate calls to the service. + *
+ * + *

See the individual methods for example code. + * + *

Many parameters require resource names to be formatted in a particular way. To assist with + * these names, this class includes a format method for each type of name, and additionally a parse + * method to extract the individual identifiers contained within names that are returned. + * + *

This class can be customized by passing in a custom instance of SpeechSettings to create(). + * For example: + * + *

To customize credentials: + * + *

{@code
+ * SpeechSettings speechSettings =
+ *     SpeechSettings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
+ *         .build();
+ * SpeechClient speechClient = SpeechClient.create(speechSettings);
+ * }
+ * + *

To customize the endpoint: + * + *

{@code
+ * SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();
+ * SpeechClient speechClient = SpeechClient.create(speechSettings);
+ * }
+ * + *

Please refer to the GitHub repository's samples for more quickstart code snippets. + */ +@BetaApi +@Generated("by gapic-generator-java") +public class SpeechClient implements BackgroundResource { + private final com.microsoft.samples.google.SpeechSettings settings; + private final SpeechStub stub; + private final OperationsClient operationsClient; + + /** Constructs an instance of SpeechClient with default settings. */ + public static final SpeechClient create() throws IOException { + return create(com.microsoft.samples.google.SpeechSettings.newBuilder().build()); + } + + /** + * Constructs an instance of SpeechClient, using the given settings. The channels are created + * based on the settings passed in, or defaults for any settings that are not set. + */ + public static final SpeechClient create(com.microsoft.samples.google.SpeechSettings settings) + throws IOException { + return new SpeechClient(settings); + } + + /** + * Constructs an instance of SpeechClient, using the given stub for making calls. This is for + * advanced usage - prefer using create(SpeechSettings). + */ + @BetaApi("A restructuring of stub classes is planned, so this may break in the future") + public static final SpeechClient create(SpeechStub stub) { + return new SpeechClient(stub); + } + + /** + * Constructs an instance of SpeechClient, using the given settings. This is protected so that it + * is easy to make a subclass, but otherwise, the static factory methods should be preferred. + */ + protected SpeechClient(com.microsoft.samples.google.SpeechSettings settings) throws IOException { + this.settings = settings; + this.stub = ((SpeechStubSettings) settings.getStubSettings()).createStub(); + this.operationsClient = OperationsClient.create(this.stub.getOperationsStub()); + } + + @BetaApi("A restructuring of stub classes is planned, so this may break in the future") + protected SpeechClient(SpeechStub stub) { + this.settings = null; + this.stub = stub; + this.operationsClient = OperationsClient.create(this.stub.getOperationsStub()); + } + + public final com.microsoft.samples.google.SpeechSettings getSettings() { + return settings; + } + + @BetaApi("A restructuring of stub classes is planned, so this may break in the future") + public SpeechStub getStub() { + return stub; + } + + /** + * Returns the OperationsClient that can be used to query the status of a long-running operation + * returned by another API method call. + */ + public final OperationsClient getOperationsClient() { + return operationsClient; + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Performs synchronous speech recognition: receive results after all audio has been sent and + * processed. + * + *

Sample code: + * + *

{@code
+   * try (SpeechClient speechClient = SpeechClient.create()) {
+   *   RecognitionConfig config = RecognitionConfig.newBuilder().build();
+   *   RecognitionAudio audio = RecognitionAudio.newBuilder().build();
+   *   RecognizeResponse response = speechClient.recognize(config, audio);
+   * }
+   * }
+ * + * @param config Required. Provides information to the recognizer that specifies how to process + * the request. + * @param audio Required. The audio data to be recognized. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final RecognizeResponse recognize(RecognitionConfig config, RecognitionAudio audio) { + RecognizeRequest request = + RecognizeRequest.newBuilder().setConfig(config).setAudio(audio).build(); + return recognize(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Performs synchronous speech recognition: receive results after all audio has been sent and + * processed. + * + *

Sample code: + * + *

{@code
+   * try (SpeechClient speechClient = SpeechClient.create()) {
+   *   RecognizeRequest request =
+   *       RecognizeRequest.newBuilder()
+   *           .setConfig(RecognitionConfig.newBuilder().build())
+   *           .setAudio(RecognitionAudio.newBuilder().build())
+   *           .build();
+   *   RecognizeResponse response = speechClient.recognize(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final RecognizeResponse recognize(RecognizeRequest request) { + return recognizeCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Performs synchronous speech recognition: receive results after all audio has been sent and + * processed. + * + *

Sample code: + * + *

{@code
+   * try (SpeechClient speechClient = SpeechClient.create()) {
+   *   RecognizeRequest request =
+   *       RecognizeRequest.newBuilder()
+   *           .setConfig(RecognitionConfig.newBuilder().build())
+   *           .setAudio(RecognitionAudio.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = speechClient.recognizeCallable().futureCall(request);
+   *   // Do something.
+   *   RecognizeResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable recognizeCallable() { + return stub.recognizeCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Performs asynchronous speech recognition: receive results via the google.longrunning.Operations + * interface. Returns either an `Operation.error` or an `Operation.response` which contains a + * `LongRunningRecognizeResponse` message. For more information on asynchronous speech + * recognition, see the [how-to](https://cloud.google.com/speech-to-text/docs/async-recognize). + * + *

Sample code: + * + *

{@code
+   * try (SpeechClient speechClient = SpeechClient.create()) {
+   *   RecognitionConfig config = RecognitionConfig.newBuilder().build();
+   *   RecognitionAudio audio = RecognitionAudio.newBuilder().build();
+   *   LongRunningRecognizeResponse response =
+   *       speechClient.longRunningRecognizeAsync(config, audio).get();
+   * }
+   * }
+ * + * @param config Required. Provides information to the recognizer that specifies how to process + * the request. + * @param audio Required. The audio data to be recognized. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final OperationFuture + longRunningRecognizeAsync(RecognitionConfig config, RecognitionAudio audio) { + LongRunningRecognizeRequest request = + LongRunningRecognizeRequest.newBuilder().setConfig(config).setAudio(audio).build(); + return longRunningRecognizeAsync(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Performs asynchronous speech recognition: receive results via the google.longrunning.Operations + * interface. Returns either an `Operation.error` or an `Operation.response` which contains a + * `LongRunningRecognizeResponse` message. For more information on asynchronous speech + * recognition, see the [how-to](https://cloud.google.com/speech-to-text/docs/async-recognize). + * + *

Sample code: + * + *

{@code
+   * try (SpeechClient speechClient = SpeechClient.create()) {
+   *   LongRunningRecognizeRequest request =
+   *       LongRunningRecognizeRequest.newBuilder()
+   *           .setConfig(RecognitionConfig.newBuilder().build())
+   *           .setAudio(RecognitionAudio.newBuilder().build())
+   *           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())
+   *           .build();
+   *   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final OperationFuture + longRunningRecognizeAsync(LongRunningRecognizeRequest request) { + return longRunningRecognizeOperationCallable().futureCall(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Performs asynchronous speech recognition: receive results via the google.longrunning.Operations + * interface. Returns either an `Operation.error` or an `Operation.response` which contains a + * `LongRunningRecognizeResponse` message. For more information on asynchronous speech + * recognition, see the [how-to](https://cloud.google.com/speech-to-text/docs/async-recognize). + * + *

Sample code: + * + *

{@code
+   * try (SpeechClient speechClient = SpeechClient.create()) {
+   *   LongRunningRecognizeRequest request =
+   *       LongRunningRecognizeRequest.newBuilder()
+   *           .setConfig(RecognitionConfig.newBuilder().build())
+   *           .setAudio(RecognitionAudio.newBuilder().build())
+   *           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())
+   *           .build();
+   *   OperationFuture future =
+   *       speechClient.longRunningRecognizeOperationCallable().futureCall(request);
+   *   // Do something.
+   *   LongRunningRecognizeResponse response = future.get();
+   * }
+   * }
+ */ + public final OperationCallable< + LongRunningRecognizeRequest, LongRunningRecognizeResponse, LongRunningRecognizeMetadata> + longRunningRecognizeOperationCallable() { + return stub.longRunningRecognizeOperationCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Performs asynchronous speech recognition: receive results via the google.longrunning.Operations + * interface. Returns either an `Operation.error` or an `Operation.response` which contains a + * `LongRunningRecognizeResponse` message. For more information on asynchronous speech + * recognition, see the [how-to](https://cloud.google.com/speech-to-text/docs/async-recognize). + * + *

Sample code: + * + *

{@code
+   * try (SpeechClient speechClient = SpeechClient.create()) {
+   *   LongRunningRecognizeRequest request =
+   *       LongRunningRecognizeRequest.newBuilder()
+   *           .setConfig(RecognitionConfig.newBuilder().build())
+   *           .setAudio(RecognitionAudio.newBuilder().build())
+   *           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = speechClient.longRunningRecognizeCallable().futureCall(request);
+   *   // Do something.
+   *   Operation response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable + longRunningRecognizeCallable() { + return stub.longRunningRecognizeCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Performs bidirectional streaming speech recognition: receive results while sending audio. This + * method is only available via the gRPC API (not REST). + * + *

Sample code: + * + *

{@code
+   * try (SpeechClient speechClient = SpeechClient.create()) {
+   *   BidiStream bidiStream =
+   *       speechClient.streamingRecognizeCallable().call();
+   *   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();
+   *   bidiStream.send(request);
+   *   for (StreamingRecognizeResponse response : bidiStream) {
+   *     // Do something when a response is received.
+   *   }
+   * }
+   * }
+ */ + public final BidiStreamingCallable + streamingRecognizeCallable() { + return stub.streamingRecognizeCallable(); + } + + @Override + public final void close() { + stub.close(); + } + + @Override + public void shutdown() { + stub.shutdown(); + } + + @Override + public boolean isShutdown() { + return stub.isShutdown(); + } + + @Override + public boolean isTerminated() { + return stub.isTerminated(); + } + + @Override + public void shutdownNow() { + stub.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return stub.awaitTermination(duration, unit); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java index aaa67c29..2be79e0d 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java @@ -2,9 +2,12 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; +import com.google.common.collect.ImmutableList; import com.google.docfx.doclet.ApiVersion; +import java.util.Collections; import org.junit.Test; public class ApiVersionTest { @@ -70,4 +73,37 @@ public void equals() { private ApiVersion parse(String s) { return ApiVersion.parse(s).orElseThrow(() -> new IllegalStateException("Unable to parse " + s)); } + + @Test + public void testRecommendation_PrioritizesReleaseVersions() { + ImmutableList versions = + ImmutableList.of(parse("v101beta"), parse("v2p1"), parse("v1p14alpha15"), parse("v1")); + + ApiVersion recommended = ApiVersion.getRecommended(versions); + assertThat(recommended).isEqualTo(parse("v2p1")); + } + + @Test + public void testRecommendation_ChoosesLatestPrerelease_WhenNoReleaseVersionsAvailable() { + ImmutableList versions = + ImmutableList.of( + parse("v101beta"), parse("v1p14alpha15"), parse("v102alpha"), parse("v1p2beta3")); + + ApiVersion recommended = ApiVersion.getRecommended(versions); + assertThat(recommended).isEqualTo(parse("v102alpha")); + } + + @Test + public void testRecommendation_SingleOption() { + ImmutableList versions = ImmutableList.of(parse("v1p14alpha15")); + + ApiVersion recommended = ApiVersion.getRecommended(versions); + assertThat(recommended).isEqualTo(parse("v1p14alpha15")); + } + + @Test + public void testRecommendation_doesNotAllowEmptyInput() { + assertThrows( + IllegalArgumentException.class, () -> ApiVersion.getRecommended(Collections.emptyList())); + } } diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml new file mode 100644 index 00000000..1bbac731 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml @@ -0,0 +1,833 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.google.v1.SpeechClient" + id: "SpeechClient" + parent: "com.microsoft.samples.google.v1" + children: + - "com.microsoft.samples.google.v1.SpeechClient.SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" + - "com.microsoft.samples.google.v1.SpeechClient.SpeechClient(com.microsoft.samples.google.SpeechSettings)" + - "com.microsoft.samples.google.v1.SpeechClient.awaitTermination(long,java.util.concurrent.TimeUnit)" + - "com.microsoft.samples.google.v1.SpeechClient.close()" + - "com.microsoft.samples.google.v1.SpeechClient.create()" + - "com.microsoft.samples.google.v1.SpeechClient.create(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" + - "com.microsoft.samples.google.v1.SpeechClient.create(com.microsoft.samples.google.SpeechSettings)" + - "com.microsoft.samples.google.v1.SpeechClient.getOperationsClient()" + - "com.microsoft.samples.google.v1.SpeechClient.getSettings()" + - "com.microsoft.samples.google.v1.SpeechClient.getStub()" + - "com.microsoft.samples.google.v1.SpeechClient.isShutdown()" + - "com.microsoft.samples.google.v1.SpeechClient.isTerminated()" + - "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeAsync(com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest)" + - "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeAsync(com.google.cloud.speech.v1p1beta1.RecognitionConfig,com.google.cloud.speech.v1p1beta1.RecognitionAudio)" + - "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeCallable()" + - "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeOperationCallable()" + - "com.microsoft.samples.google.v1.SpeechClient.recognize(com.google.cloud.speech.v1p1beta1.RecognitionConfig,com.google.cloud.speech.v1p1beta1.RecognitionAudio)" + - "com.microsoft.samples.google.v1.SpeechClient.recognize(com.google.cloud.speech.v1p1beta1.RecognizeRequest)" + - "com.microsoft.samples.google.v1.SpeechClient.recognizeCallable()" + - "com.microsoft.samples.google.v1.SpeechClient.shutdown()" + - "com.microsoft.samples.google.v1.SpeechClient.shutdownNow()" + - "com.microsoft.samples.google.v1.SpeechClient.streamingRecognizeCallable()" + langs: + - "java" + name: "SpeechClient" + nameWithType: "SpeechClient" + fullName: "com.microsoft.samples.google.v1.SpeechClient" + type: "Class" + package: "com.microsoft.samples.google.v1" + summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." + syntax: + content: "public class SpeechClient implements BackgroundResource" + inheritance: + - "java.lang.Object" + implements: + - "com.google.api.gax.core.BackgroundResource" + inheritedMembers: + - "java.lang.Object.clone()" + - "java.lang.Object.equals(java.lang.Object)" + - "java.lang.Object.finalize()" + - "java.lang.Object.getClass()" + - "java.lang.Object.hashCode()" + - "java.lang.Object.notify()" + - "java.lang.Object.notifyAll()" + - "java.lang.Object.toString()" + - "java.lang.Object.wait()" + - "java.lang.Object.wait(long)" + - "java.lang.Object.wait(long,int)" +- uid: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" + id: "SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "SpeechClient(SpeechStub stub)" + nameWithType: "SpeechClient.SpeechClient(SpeechStub stub)" + fullName: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient(SpeechStub stub)" + overload: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient*" + type: "Constructor" + package: "com.microsoft.samples.google.v1" + syntax: + content: "protected SpeechClient(SpeechStub stub)" + parameters: + - id: "stub" + type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" +- uid: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient(com.microsoft.samples.google.SpeechSettings)" + id: "SpeechClient(com.microsoft.samples.google.SpeechSettings)" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "SpeechClient(SpeechSettings settings)" + nameWithType: "SpeechClient.SpeechClient(SpeechSettings settings)" + fullName: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient(SpeechSettings settings)" + overload: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient*" + type: "Constructor" + package: "com.microsoft.samples.google.v1" + summary: "Constructs an instance of SpeechClient, using the given settings. This is protected so that it\n is easy to make a subclass, but otherwise, the static factory methods should be preferred." + syntax: + content: "protected SpeechClient(SpeechSettings settings)" + parameters: + - id: "settings" + type: "com.microsoft.samples.google.SpeechSettings" +- uid: "com.microsoft.samples.google.v1.SpeechClient.awaitTermination(long,java.util.concurrent.TimeUnit)" + id: "awaitTermination(long,java.util.concurrent.TimeUnit)" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "awaitTermination(long duration, TimeUnit unit)" + nameWithType: "SpeechClient.awaitTermination(long duration, TimeUnit unit)" + fullName: "com.microsoft.samples.google.v1.SpeechClient.awaitTermination(long duration, TimeUnit unit)" + overload: "com.microsoft.samples.google.v1.SpeechClient.awaitTermination*" + type: "Method" + package: "com.microsoft.samples.google.v1" + syntax: + content: "public boolean awaitTermination(long duration, TimeUnit unit)" + parameters: + - id: "duration" + type: "long" + - id: "unit" + type: "java.util.concurrent.TimeUnit" + return: + type: "boolean" + exceptions: + - type: "java.lang.InterruptedException" +- uid: "com.microsoft.samples.google.v1.SpeechClient.close()" + id: "close()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "close()" + nameWithType: "SpeechClient.close()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.close()" + overload: "com.microsoft.samples.google.v1.SpeechClient.close*" + type: "Method" + package: "com.microsoft.samples.google.v1" + syntax: + content: "public final void close()" +- uid: "com.microsoft.samples.google.v1.SpeechClient.create()" + id: "create()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "create()" + nameWithType: "SpeechClient.create()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.create()" + overload: "com.microsoft.samples.google.v1.SpeechClient.create*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Constructs an instance of SpeechClient with default settings." + syntax: + content: "public static final SpeechClient create()" + return: + type: "com.microsoft.samples.google.v1.SpeechClient" + exceptions: + - type: "java.io.IOException" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.SpeechClient.create(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" + id: "create(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "create(SpeechStub stub)" + nameWithType: "SpeechClient.create(SpeechStub stub)" + fullName: "com.microsoft.samples.google.v1.SpeechClient.create(SpeechStub stub)" + overload: "com.microsoft.samples.google.v1.SpeechClient.create*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Constructs an instance of SpeechClient, using the given stub for making calls. This is for\n advanced usage - prefer using create(SpeechSettings)." + syntax: + content: "public static final SpeechClient create(SpeechStub stub)" + parameters: + - id: "stub" + type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + return: + type: "com.microsoft.samples.google.v1.SpeechClient" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.SpeechClient.create(com.microsoft.samples.google.SpeechSettings)" + id: "create(com.microsoft.samples.google.SpeechSettings)" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "create(SpeechSettings settings)" + nameWithType: "SpeechClient.create(SpeechSettings settings)" + fullName: "com.microsoft.samples.google.v1.SpeechClient.create(SpeechSettings settings)" + overload: "com.microsoft.samples.google.v1.SpeechClient.create*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Constructs an instance of SpeechClient, using the given settings. The channels are created\n based on the settings passed in, or defaults for any settings that are not set." + syntax: + content: "public static final SpeechClient create(SpeechSettings settings)" + parameters: + - id: "settings" + type: "com.microsoft.samples.google.SpeechSettings" + return: + type: "com.microsoft.samples.google.v1.SpeechClient" + exceptions: + - type: "java.io.IOException" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.SpeechClient.getOperationsClient()" + id: "getOperationsClient()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "getOperationsClient()" + nameWithType: "SpeechClient.getOperationsClient()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.getOperationsClient()" + overload: "com.microsoft.samples.google.v1.SpeechClient.getOperationsClient*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Returns the OperationsClient that can be used to query the status of a long-running operation\n returned by another API method call." + syntax: + content: "public final OperationsClient getOperationsClient()" + return: + type: "com.google.longrunning.OperationsClient" +- uid: "com.microsoft.samples.google.v1.SpeechClient.getSettings()" + id: "getSettings()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "getSettings()" + nameWithType: "SpeechClient.getSettings()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.getSettings()" + overload: "com.microsoft.samples.google.v1.SpeechClient.getSettings*" + type: "Method" + package: "com.microsoft.samples.google.v1" + syntax: + content: "public final SpeechSettings getSettings()" + return: + type: "com.microsoft.samples.google.SpeechSettings" +- uid: "com.microsoft.samples.google.v1.SpeechClient.getStub()" + id: "getStub()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "getStub()" + nameWithType: "SpeechClient.getStub()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.getStub()" + overload: "com.microsoft.samples.google.v1.SpeechClient.getStub*" + type: "Method" + package: "com.microsoft.samples.google.v1" + syntax: + content: "public SpeechStub getStub()" + return: + type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" +- uid: "com.microsoft.samples.google.v1.SpeechClient.isShutdown()" + id: "isShutdown()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "isShutdown()" + nameWithType: "SpeechClient.isShutdown()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.isShutdown()" + overload: "com.microsoft.samples.google.v1.SpeechClient.isShutdown*" + type: "Method" + package: "com.microsoft.samples.google.v1" + syntax: + content: "public boolean isShutdown()" + return: + type: "boolean" +- uid: "com.microsoft.samples.google.v1.SpeechClient.isTerminated()" + id: "isTerminated()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "isTerminated()" + nameWithType: "SpeechClient.isTerminated()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.isTerminated()" + overload: "com.microsoft.samples.google.v1.SpeechClient.isTerminated*" + type: "Method" + package: "com.microsoft.samples.google.v1" + syntax: + content: "public boolean isTerminated()" + return: + type: "boolean" +- uid: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeAsync(com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest)" + id: "longRunningRecognizeAsync(com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest)" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "longRunningRecognizeAsync(LongRunningRecognizeRequest request)" + nameWithType: "SpeechClient.longRunningRecognizeAsync(LongRunningRecognizeRequest request)" + fullName: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeAsync(LongRunningRecognizeRequest request)" + overload: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeAsync*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   LongRunningRecognizeResponse response = speechClient.longRunningRecognizeAsync(request).get();\n }\n 
" + syntax: + content: "public final OperationFuture longRunningRecognizeAsync(LongRunningRecognizeRequest request)" + parameters: + - id: "request" + type: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + description: "The request object containing all of the parameters for the API call." + return: + type: "com.google.api.gax.longrunning.OperationFuture" +- uid: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeAsync(com.google.cloud.speech.v1p1beta1.RecognitionConfig,com.google.cloud.speech.v1p1beta1.RecognitionAudio)" + id: "longRunningRecognizeAsync(com.google.cloud.speech.v1p1beta1.RecognitionConfig,com.google.cloud.speech.v1p1beta1.RecognitionAudio)" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "longRunningRecognizeAsync(RecognitionConfig config, RecognitionAudio audio)" + nameWithType: "SpeechClient.longRunningRecognizeAsync(RecognitionConfig config, RecognitionAudio audio)" + fullName: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeAsync(RecognitionConfig config, RecognitionAudio audio)" + overload: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeAsync*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   LongRunningRecognizeResponse response =\n       speechClient.longRunningRecognizeAsync(config, audio).get();\n }\n 
" + syntax: + content: "public final OperationFuture longRunningRecognizeAsync(RecognitionConfig config, RecognitionAudio audio)" + parameters: + - id: "config" + type: "com.google.cloud.speech.v1p1beta1.RecognitionConfig" + description: "Required. Provides information to the recognizer that specifies how to process\n the request." + - id: "audio" + type: "com.google.cloud.speech.v1p1beta1.RecognitionAudio" + description: "Required. The audio data to be recognized." + return: + type: "com.google.api.gax.longrunning.OperationFuture" +- uid: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeCallable()" + id: "longRunningRecognizeCallable()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "longRunningRecognizeCallable()" + nameWithType: "SpeechClient.longRunningRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeCallable()" + overload: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeCallable*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   ApiFuture<Operation> future = speechClient.longRunningRecognizeCallable().futureCall(request);\n   // Do something.\n   Operation response = future.get();\n }\n 
" + syntax: + content: "public final UnaryCallable longRunningRecognizeCallable()" + return: + type: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeOperationCallable()" + id: "longRunningRecognizeOperationCallable()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "longRunningRecognizeOperationCallable()" + nameWithType: "SpeechClient.longRunningRecognizeOperationCallable()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeOperationCallable()" + overload: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeOperationCallable*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Performs asynchronous speech recognition: receive results via the google.longrunning.Operations\n interface. Returns either an Operation.error or an Operation.response which contains a\n LongRunningRecognizeResponse message. For more information on asynchronous speech\n recognition, see the how-to.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   LongRunningRecognizeRequest request =\n       LongRunningRecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .setOutputConfig(TranscriptOutputConfig.newBuilder().build())\n           .build();\n   OperationFuture<LongRunningRecognizeResponse, LongRunningRecognizeMetadata> future =\n       speechClient.longRunningRecognizeOperationCallable().futureCall(request);\n   // Do something.\n   LongRunningRecognizeResponse response = future.get();\n }\n 
" + syntax: + content: "public final OperationCallable longRunningRecognizeOperationCallable()" + return: + type: "com.google.api.gax.rpc.OperationCallable" +- uid: "com.microsoft.samples.google.v1.SpeechClient.recognize(com.google.cloud.speech.v1p1beta1.RecognitionConfig,com.google.cloud.speech.v1p1beta1.RecognitionAudio)" + id: "recognize(com.google.cloud.speech.v1p1beta1.RecognitionConfig,com.google.cloud.speech.v1p1beta1.RecognitionAudio)" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "recognize(RecognitionConfig config, RecognitionAudio audio)" + nameWithType: "SpeechClient.recognize(RecognitionConfig config, RecognitionAudio audio)" + fullName: "com.microsoft.samples.google.v1.SpeechClient.recognize(RecognitionConfig config, RecognitionAudio audio)" + overload: "com.microsoft.samples.google.v1.SpeechClient.recognize*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
" + syntax: + content: "public final RecognizeResponse recognize(RecognitionConfig config, RecognitionAudio audio)" + parameters: + - id: "config" + type: "com.google.cloud.speech.v1p1beta1.RecognitionConfig" + description: "Required. Provides information to the recognizer that specifies how to process\n the request." + - id: "audio" + type: "com.google.cloud.speech.v1p1beta1.RecognitionAudio" + description: "Required. The audio data to be recognized." + return: + type: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" +- uid: "com.microsoft.samples.google.v1.SpeechClient.recognize(com.google.cloud.speech.v1p1beta1.RecognizeRequest)" + id: "recognize(com.google.cloud.speech.v1p1beta1.RecognizeRequest)" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "recognize(RecognizeRequest request)" + nameWithType: "SpeechClient.recognize(RecognizeRequest request)" + fullName: "com.microsoft.samples.google.v1.SpeechClient.recognize(RecognizeRequest request)" + overload: "com.microsoft.samples.google.v1.SpeechClient.recognize*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   RecognizeResponse response = speechClient.recognize(request);\n }\n 
" + syntax: + content: "public final RecognizeResponse recognize(RecognizeRequest request)" + parameters: + - id: "request" + type: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + description: "The request object containing all of the parameters for the API call." + return: + type: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" +- uid: "com.microsoft.samples.google.v1.SpeechClient.recognizeCallable()" + id: "recognizeCallable()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "recognizeCallable()" + nameWithType: "SpeechClient.recognizeCallable()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.recognizeCallable()" + overload: "com.microsoft.samples.google.v1.SpeechClient.recognizeCallable*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Performs synchronous speech recognition: receive results after all audio has been sent and\n processed.\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognizeRequest request =\n       RecognizeRequest.newBuilder()\n           .setConfig(RecognitionConfig.newBuilder().build())\n           .setAudio(RecognitionAudio.newBuilder().build())\n           .build();\n   ApiFuture<RecognizeResponse> future = speechClient.recognizeCallable().futureCall(request);\n   // Do something.\n   RecognizeResponse response = future.get();\n }\n 
" + syntax: + content: "public final UnaryCallable recognizeCallable()" + return: + type: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.microsoft.samples.google.v1.SpeechClient.shutdown()" + id: "shutdown()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "shutdown()" + nameWithType: "SpeechClient.shutdown()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.shutdown()" + overload: "com.microsoft.samples.google.v1.SpeechClient.shutdown*" + type: "Method" + package: "com.microsoft.samples.google.v1" + syntax: + content: "public void shutdown()" +- uid: "com.microsoft.samples.google.v1.SpeechClient.shutdownNow()" + id: "shutdownNow()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "shutdownNow()" + nameWithType: "SpeechClient.shutdownNow()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.shutdownNow()" + overload: "com.microsoft.samples.google.v1.SpeechClient.shutdownNow*" + type: "Method" + package: "com.microsoft.samples.google.v1" + syntax: + content: "public void shutdownNow()" +- uid: "com.microsoft.samples.google.v1.SpeechClient.streamingRecognizeCallable()" + id: "streamingRecognizeCallable()" + parent: "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "streamingRecognizeCallable()" + nameWithType: "SpeechClient.streamingRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.SpeechClient.streamingRecognizeCallable()" + overload: "com.microsoft.samples.google.v1.SpeechClient.streamingRecognizeCallable*" + type: "Method" + package: "com.microsoft.samples.google.v1" + summary: "Performs bidirectional streaming speech recognition: receive results while sending audio. This\n method is only available via the gRPC API (not REST).\n\n

Sample code:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   BidiStream<StreamingRecognizeRequest, StreamingRecognizeResponse> bidiStream =\n       speechClient.streamingRecognizeCallable().call();\n   StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build();\n   bidiStream.send(request);\n   for (StreamingRecognizeResponse response : bidiStream) {\n     // Do something when a response is received.\n   }\n }\n 
" + syntax: + content: "public final BidiStreamingCallable streamingRecognizeCallable()" + return: + type: "com.google.api.gax.rpc.BidiStreamingCallable" +references: +- uid: "com.microsoft.samples.google.SpeechSettings" + name: "SpeechSettings" + nameWithType: "SpeechSettings" + fullName: "com.microsoft.samples.google.SpeechSettings" +- uid: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient*" + name: "SpeechClient" + nameWithType: "SpeechClient.SpeechClient" + fullName: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient" + package: "com.microsoft.samples.google.v1" +- uid: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + spec.java: + - uid: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + name: "SpeechStub" + fullName: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + isExternal: false +- uid: "java.io.IOException" + href: "https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html" + spec.java: + - uid: "java.io.IOException" + name: "IOException" + fullName: "java.io.IOException" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html" +- uid: "com.microsoft.samples.google.v1.SpeechClient.create*" + name: "create" + nameWithType: "SpeechClient.create" + fullName: "com.microsoft.samples.google.v1.SpeechClient.create" + package: "com.microsoft.samples.google.v1" +- uid: "com.microsoft.samples.google.v1.SpeechClient.getSettings*" + name: "getSettings" + nameWithType: "SpeechClient.getSettings" + fullName: "com.microsoft.samples.google.v1.SpeechClient.getSettings" + package: "com.microsoft.samples.google.v1" +- uid: "com.microsoft.samples.google.v1.SpeechClient.getStub*" + name: "getStub" + nameWithType: "SpeechClient.getStub" + fullName: "com.microsoft.samples.google.v1.SpeechClient.getStub" + package: "com.microsoft.samples.google.v1" +- uid: "com.google.longrunning.OperationsClient" + isExternal: true + spec.java: + - uid: "com.google.longrunning.OperationsClient" + name: "OperationsClient" + fullName: "com.google.longrunning.OperationsClient" + isExternal: true +- uid: "com.microsoft.samples.google.v1.SpeechClient.getOperationsClient*" + name: "getOperationsClient" + nameWithType: "SpeechClient.getOperationsClient" + fullName: "com.microsoft.samples.google.v1.SpeechClient.getOperationsClient" + package: "com.microsoft.samples.google.v1" +- uid: "com.google.cloud.speech.v1p1beta1.RecognitionConfig" + spec.java: + - uid: "com.google.cloud.speech.v1p1beta1.RecognitionConfig" + name: "RecognitionConfig" + fullName: "com.google.cloud.speech.v1p1beta1.RecognitionConfig" + isExternal: false +- uid: "com.google.cloud.speech.v1p1beta1.RecognitionAudio" + spec.java: + - uid: "com.google.cloud.speech.v1p1beta1.RecognitionAudio" + name: "RecognitionAudio" + fullName: "com.google.cloud.speech.v1p1beta1.RecognitionAudio" + isExternal: false +- uid: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + spec.java: + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + isExternal: false +- uid: "com.microsoft.samples.google.v1.SpeechClient.recognize*" + name: "recognize" + nameWithType: "SpeechClient.recognize" + fullName: "com.microsoft.samples.google.v1.SpeechClient.recognize" + package: "com.microsoft.samples.google.v1" +- uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + spec.java: + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + name: "RecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + isExternal: false +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallable" + name: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + name: "RecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.SpeechClient.recognizeCallable*" + name: "recognizeCallable" + nameWithType: "SpeechClient.recognizeCallable" + fullName: "com.microsoft.samples.google.v1.SpeechClient.recognizeCallable" + package: "com.microsoft.samples.google.v1" +- uid: "com.google.api.gax.longrunning.OperationFuture" + isExternal: true + spec.java: + - uid: "com.google.api.gax.longrunning.OperationFuture" + name: "OperationFuture" + fullName: "com.google.api.gax.longrunning.OperationFuture" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + name: "LongRunningRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeAsync*" + name: "longRunningRecognizeAsync" + nameWithType: "SpeechClient.longRunningRecognizeAsync" + fullName: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeAsync" + package: "com.microsoft.samples.google.v1" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + spec.java: + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false +- uid: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.OperationCallable" + name: "OperationCallable" + fullName: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + name: "LongRunningRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeOperationCallable*" + name: "longRunningRecognizeOperationCallable" + nameWithType: "SpeechClient.longRunningRecognizeOperationCallable" + fullName: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeOperationCallable" + package: "com.microsoft.samples.google.v1" +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallable" + name: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.longrunning.Operation" + name: "Operation" + fullName: "com.google.longrunning.Operation" + isExternal: true + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeCallable*" + name: "longRunningRecognizeCallable" + nameWithType: "SpeechClient.longRunningRecognizeCallable" + fullName: "com.microsoft.samples.google.v1.SpeechClient.longRunningRecognizeCallable" + package: "com.microsoft.samples.google.v1" +- uid: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.BidiStreamingCallable" + name: "BidiStreamingCallable" + fullName: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + name: "StreamingRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.SpeechClient.streamingRecognizeCallable*" + name: "streamingRecognizeCallable" + nameWithType: "SpeechClient.streamingRecognizeCallable" + fullName: "com.microsoft.samples.google.v1.SpeechClient.streamingRecognizeCallable" + package: "com.microsoft.samples.google.v1" +- uid: "com.microsoft.samples.google.v1.SpeechClient.close*" + name: "close" + nameWithType: "SpeechClient.close" + fullName: "com.microsoft.samples.google.v1.SpeechClient.close" + package: "com.microsoft.samples.google.v1" +- uid: "com.microsoft.samples.google.v1.SpeechClient.shutdown*" + name: "shutdown" + nameWithType: "SpeechClient.shutdown" + fullName: "com.microsoft.samples.google.v1.SpeechClient.shutdown" + package: "com.microsoft.samples.google.v1" +- uid: "boolean" + href: "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html" + spec.java: + - uid: "boolean" + name: "boolean" + fullName: "boolean" + isExternal: false +- uid: "com.microsoft.samples.google.v1.SpeechClient.isShutdown*" + name: "isShutdown" + nameWithType: "SpeechClient.isShutdown" + fullName: "com.microsoft.samples.google.v1.SpeechClient.isShutdown" + package: "com.microsoft.samples.google.v1" +- uid: "com.microsoft.samples.google.v1.SpeechClient.isTerminated*" + name: "isTerminated" + nameWithType: "SpeechClient.isTerminated" + fullName: "com.microsoft.samples.google.v1.SpeechClient.isTerminated" + package: "com.microsoft.samples.google.v1" +- uid: "com.microsoft.samples.google.v1.SpeechClient.shutdownNow*" + name: "shutdownNow" + nameWithType: "SpeechClient.shutdownNow" + fullName: "com.microsoft.samples.google.v1.SpeechClient.shutdownNow" + package: "com.microsoft.samples.google.v1" +- uid: "java.lang.InterruptedException" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html" + spec.java: + - uid: "java.lang.InterruptedException" + name: "InterruptedException" + fullName: "java.lang.InterruptedException" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html" +- uid: "long" + href: "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html" + spec.java: + - uid: "long" + name: "long" + fullName: "long" + isExternal: false +- uid: "java.util.concurrent.TimeUnit" + href: "https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html" + spec.java: + - uid: "java.util.concurrent.TimeUnit" + name: "TimeUnit" + fullName: "java.util.concurrent.TimeUnit" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html" +- uid: "com.microsoft.samples.google.v1.SpeechClient.awaitTermination*" + name: "awaitTermination" + nameWithType: "SpeechClient.awaitTermination" + fullName: "com.microsoft.samples.google.v1.SpeechClient.awaitTermination" + package: "com.microsoft.samples.google.v1" +- uid: "com.google.api.gax.core.BackgroundResource" + isExternal: true + name: "BackgroundResource" + nameWithType: "BackgroundResource" + fullName: "com.google.api.gax.core.BackgroundResource" +- uid: "java.lang.Object.notify()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" + name: "Object.notify()" + nameWithType: "Object.notify()" + fullName: "java.lang.Object.notify()" +- uid: "java.lang.Object.wait()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" + name: "Object.wait()" + nameWithType: "Object.wait()" + fullName: "java.lang.Object.wait()" +- uid: "java.lang.Object.finalize()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--" + name: "Object.finalize()" + nameWithType: "Object.finalize()" + fullName: "java.lang.Object.finalize()" +- uid: "java.lang.Object.clone()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--" + name: "Object.clone()" + nameWithType: "Object.clone()" + fullName: "java.lang.Object.clone()" +- uid: "java.lang.Object.notifyAll()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" + name: "Object.notifyAll()" + nameWithType: "Object.notifyAll()" + fullName: "java.lang.Object.notifyAll()" +- uid: "java.lang.Object.equals(java.lang.Object)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" + name: "Object.equals(Object)" + nameWithType: "Object.equals(Object)" + fullName: "java.lang.Object.equals(java.lang.Object)" +- uid: "java.lang.Object.getClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" + name: "Object.getClass()" + nameWithType: "Object.getClass()" + fullName: "java.lang.Object.getClass()" +- uid: "java.lang.Object.wait(long)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" + name: "Object.wait(long)" + nameWithType: "Object.wait(long)" + fullName: "java.lang.Object.wait(long)" +- uid: "java.lang.Object.hashCode()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--" + name: "Object.hashCode()" + nameWithType: "Object.hashCode()" + fullName: "java.lang.Object.hashCode()" +- uid: "java.lang.Object.wait(long,int)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-" + name: "Object.wait(long,int)" + nameWithType: "Object.wait(long,int)" + fullName: "java.lang.Object.wait(long,int)" +- uid: "java.lang.Object.toString()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--" + name: "Object.toString()" + nameWithType: "Object.toString()" + fullName: "java.lang.Object.toString()" +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + name: "UnaryCallable" + nameWithType: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeRequest,RecognizeResponse" + nameWithType: "RecognizeRequest,RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" +- uid: "com.google.api.gax.longrunning.OperationFuture" + isExternal: true + name: "OperationFuture" + nameWithType: "OperationFuture" + fullName: "com.google.api.gax.longrunning.OperationFuture" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + nameWithType: "LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" +- uid: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + name: "OperationCallable" + nameWithType: "OperationCallable" + fullName: "com.google.api.gax.rpc.OperationCallable" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + nameWithType: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" + name: "LongRunningRecognizeRequest,Operation" + nameWithType: "LongRunningRecognizeRequest,Operation" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" +- uid: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + name: "BidiStreamingCallable" + nameWithType: "BidiStreamingCallable" + fullName: "com.google.api.gax.rpc.BidiStreamingCallable" +- uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeRequest,StreamingRecognizeResponse" + nameWithType: "StreamingRecognizeRequest,StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.yml new file mode 100644 index 00000000..7ed2588c --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.yml @@ -0,0 +1,20 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.google.v1" + id: "v1" + children: + - "com.microsoft.samples.google.v1.SpeechClient" + langs: + - "java" + name: "com.microsoft.samples.google.v1" + nameWithType: "com.microsoft.samples.google.v1" + fullName: "com.microsoft.samples.google.v1" + type: "Namespace" + syntax: + content: "package com.microsoft.samples.google.v1" + javaType: "package" +references: +- uid: "com.microsoft.samples.google.v1.SpeechClient" + name: "SpeechClient" + nameWithType: "SpeechClient" + fullName: "com.microsoft.samples.google.v1.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml index ea4eedf2..4af78bae 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml @@ -6,6 +6,7 @@ items: - "com.microsoft.samples.agreements" - "com.microsoft.samples.commentinheritance" - "com.microsoft.samples.google" + - "com.microsoft.samples.google.v1" - "com.microsoft.samples.google.v1beta" - "com.microsoft.samples.google.v1p1alpha" - "com.microsoft.samples.offers" @@ -17,6 +18,10 @@ items: type: "Namespace" javaType: "overview" references: +- uid: "com.microsoft.samples" + name: "com.microsoft.samples" + nameWithType: "com.microsoft.samples" + fullName: "com.microsoft.samples" - uid: "com.microsoft.samples.agreements" name: "com.microsoft.samples.agreements" nameWithType: "com.microsoft.samples.agreements" @@ -29,14 +34,14 @@ references: name: "com.microsoft.samples.google" nameWithType: "com.microsoft.samples.google" fullName: "com.microsoft.samples.google" +- uid: "com.microsoft.samples.google.v1" + name: "com.microsoft.samples.google.v1" + nameWithType: "com.microsoft.samples.google.v1" + fullName: "com.microsoft.samples.google.v1" - uid: "com.microsoft.samples.offers" name: "com.microsoft.samples.offers" nameWithType: "com.microsoft.samples.offers" fullName: "com.microsoft.samples.offers" -- uid: "com.microsoft.samples" - name: "com.microsoft.samples" - nameWithType: "com.microsoft.samples" - fullName: "com.microsoft.samples" - uid: "com.microsoft.samples.subpackage" name: "com.microsoft.samples.subpackage" nameWithType: "com.microsoft.samples.subpackage" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml index d2bbf837..ba7459c0 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml @@ -108,23 +108,13 @@ - heading: "Exceptions" - uid: "com.microsoft.samples.google.ValidationException" name: "ValidationException" - - uid: "com.microsoft.samples.google.v1beta" - name: "com.microsoft.samples.google.v1beta" - status: "beta" + - uid: "com.microsoft.samples.google.v1" + name: "com.microsoft.samples.google.v1" items: - - uid: "com.microsoft.samples.google.v1beta" + - uid: "com.microsoft.samples.google.v1" name: "Package summary" - heading: "Classes" - - uid: "com.microsoft.samples.google.v1beta.SpeechClient" - name: "SpeechClient" - - uid: "com.microsoft.samples.google.v1p1alpha" - name: "com.microsoft.samples.google.v1p1alpha" - status: "alpha" - items: - - uid: "com.microsoft.samples.google.v1p1alpha" - name: "Package summary" - - heading: "Classes" - - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient" + - uid: "com.microsoft.samples.google.v1.SpeechClient" name: "SpeechClient" - uid: "com.microsoft.samples.offers" name: "com.microsoft.samples.offers" @@ -155,3 +145,24 @@ - heading: "Exceptions" - uid: "com.microsoft.samples.subpackage.CustomException" name: "CustomException" + - uid: "Older and prerelease packages" + name: "Older and prerelease packages" + items: + - uid: "com.microsoft.samples.google.v1beta" + name: "com.microsoft.samples.google.v1beta" + status: "beta" + items: + - uid: "com.microsoft.samples.google.v1beta" + name: "Package summary" + - heading: "Classes" + - uid: "com.microsoft.samples.google.v1beta.SpeechClient" + name: "SpeechClient" + - uid: "com.microsoft.samples.google.v1p1alpha" + name: "com.microsoft.samples.google.v1p1alpha" + status: "alpha" + items: + - uid: "com.microsoft.samples.google.v1p1alpha" + name: "Package summary" + - heading: "Classes" + - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient" + name: "SpeechClient" From f8ff141fa8e93473e891a4264ea8b57b63d45038 Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Tue, 26 Sep 2023 09:14:06 -0400 Subject: [PATCH 100/168] feat: Left-hand Navigation: Group stub packages under parent (#199) * chore: add stub package for testing * fix: suppress xlint errors in test sample classes * chore: add stub package helpers and refactor * chore: nest stub package within parent * chore: support child stub packages * chore: ensure sorted child stub packages * chore: check for older packages before adding category * chore: formatting --- .../com/microsoft/build/YmlFilesBuilder.java | 39 +- .../com/microsoft/lookup/PackageLookup.java | 65 +- .../microsoft/doclet/DocletRunnerTest.java | 17 +- .../microsoft/lookup/PackageLookupTest.java | 55 +- .../AgreementDetailsCollectionOperations.java | 2 + .../samples/agreements/AgreementMetaData.java | 1 + .../IAgreementDetailsCollection.java | 1 + .../samples/google/ProductSearchSettings.java | 1 + .../samples/google/SpeechSettings.java | 1 + .../google/v1/stub/GrpcSpeechStub.java | 230 +++++ .../google/v1/stub/HttpJsonSpeechStub.java | 307 ++++++ .../samples/google/v1/stub/SpeechStub.java | 75 ++ .../google/v1/stub/SpeechStubSettings.java | 446 +++++++++ ....samples.google.v1.stub.GrpcSpeechStub.yml | 681 ++++++++++++++ ...ples.google.v1.stub.HttpJsonSpeechStub.yml | 731 +++++++++++++++ ...soft.samples.google.v1.stub.SpeechStub.yml | 405 ++++++++ ...gle.v1.stub.SpeechStubSettings.Builder.yml | 759 +++++++++++++++ ...ples.google.v1.stub.SpeechStubSettings.yml | 885 ++++++++++++++++++ .../com.microsoft.samples.google.v1.stub.yml | 40 + .../expected-generated-files/overview.yml | 5 + .../expected-generated-files/toc.yml | 16 + 21 files changed, 4719 insertions(+), 43 deletions(-) create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/GrpcSpeechStub.java create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/HttpJsonSpeechStub.java create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/SpeechStub.java create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/SpeechStubSettings.java create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.GrpcSpeechStub.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStub.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.yml diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index bef901ed..9f14626b 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -3,6 +3,7 @@ import static com.microsoft.build.BuilderUtil.populateUidValues; import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableListMultimap; import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; @@ -77,31 +78,40 @@ public boolean build() { @VisibleForTesting class Processor { // table of contents - final TocFile tocFile = new TocFile(outputPath, projectName, disableChangelog); + private final TocFile tocFile = new TocFile(outputPath, projectName, disableChangelog); // overview page - final MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); + private final MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); // package summary pages - final List packageMetadataFiles = new ArrayList<>(); + private final List packageMetadataFiles = new ArrayList<>(); // packages - final List packageItems = new ArrayList<>(); + private final List packageItems = new ArrayList<>(); // class/enum/interface/etc. pages - final List classMetadataFiles = new ArrayList<>(); + private final List classMetadataFiles = new ArrayList<>(); + + private final List allPackages = + elementUtil.extractPackageElements(environment.getIncludedElements()); @VisibleForTesting void process() { - ImmutableListMultimap organizedPackages = + ImmutableListMultimap organizedPackagesWithoutStubs = packageLookup.organize( - elementUtil.extractPackageElements(environment.getIncludedElements())); + allPackages.stream() + .filter(pkg -> !packageLookup.isApiVersionStubPackage(pkg)) + .collect(Collectors.toList())); - for (PackageElement element : organizedPackages.get(PackageGroup.VISIBLE)) { + for (PackageElement element : organizedPackagesWithoutStubs.get(PackageGroup.VISIBLE)) { tocFile.addTocItem(buildPackage(element)); } - TocItem older = new TocItem(OLDER_AND_PRERELEASE, OLDER_AND_PRERELEASE, null); - for (PackageElement element : organizedPackages.get(PackageGroup.OLDER_AND_PRERELEASE)) { - older.getItems().add(buildPackage(element)); + ImmutableList olderPackages = + organizedPackagesWithoutStubs.get(PackageGroup.OLDER_AND_PRERELEASE); + if (!olderPackages.isEmpty()) { + TocItem older = new TocItem(OLDER_AND_PRERELEASE, OLDER_AND_PRERELEASE, null); + for (PackageElement element : olderPackages) { + older.getItems().add(buildPackage(element)); + } + tocFile.addTocItem(older); } - tocFile.addTocItem(older); for (MetadataFile packageFile : packageMetadataFiles) { packageItems.addAll(packageFile.getItems()); @@ -138,6 +148,11 @@ private TocItem buildPackage(PackageElement element) { classBuilder.buildFilesForInnerClasses(element, typeMap, classMetadataFiles); packageTocItem.getItems().addAll(joinTocTypeItems(typeMap)); + // build stubs + packageLookup + .findStubPackages(element, allPackages) + .forEach((PackageElement stub) -> packageTocItem.getItems().add(buildPackage(stub))); + return packageTocItem; } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java index 05d1a964..3a78a656 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java @@ -13,10 +13,12 @@ import com.google.docfx.doclet.ApiVersion; import com.microsoft.lookup.model.ExtendedMetadataFileItem; import com.microsoft.model.Status; +import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import javax.lang.model.element.PackageElement; import jdk.javadoc.doclet.DocletEnvironment; @@ -67,15 +69,45 @@ public String extractJavaType(PackageElement element) { return null; } + /** + * @return true, if the package ends with 'stub' and its parent package is an API version + */ + public boolean isApiVersionStubPackage(PackageElement pkg) { + return isApiVersionStubPackageName(String.valueOf(pkg.getQualifiedName())); + } + + /** + * @return true, if the package ends with 'stub' and its parent package is an API version + */ + @VisibleForTesting + boolean isApiVersionStubPackageName(String name) { + List packagePath = Arrays.asList(name.split("\\.")); + int stubIndex = packagePath.indexOf("stub"); + if (stubIndex < 1) { + return false; + } + return ApiVersion.parse(packagePath.get(stubIndex - 1)).isPresent(); + } + + public List findStubPackages( + PackageElement pkg, Collection packages) { + String expectedStubPackageBase = pkg.getQualifiedName() + ".stub"; + return packages.stream() + .filter(p -> String.valueOf(p.getQualifiedName()).startsWith(expectedStubPackageBase)) + .sorted() + .collect(Collectors.toList()); + } + /** Compare PackageElements by their parsed ApiVersion */ private final Comparator byComparingApiVersion = Comparator.comparing(pkg -> extractApiVersion(pkg).orElse(ApiVersion.NONE)); public Optional extractApiVersion(PackageElement pkg) { - String name = String.valueOf(pkg.getQualifiedName()); - int lastPackageIndex = name.lastIndexOf('.'); - String leafPackage = name.substring(lastPackageIndex + 1); - return ApiVersion.parse(leafPackage); + return extractApiVersion(String.valueOf(pkg.getQualifiedName())); + } + + public Optional extractApiVersion(String name) { + return ApiVersion.parse(getLeafPackage(name)); } public enum PackageGroup { @@ -132,17 +164,14 @@ Multimap groupVersions(List packages) { packages, (pkg) -> { String name = String.valueOf(pkg.getQualifiedName()); - int lastPackageIndex = name.lastIndexOf('.'); - String leafPackage = name.substring(lastPackageIndex + 1); - // For package a.b.c.d, the value of leafPackage is 'd'. - boolean packageIsApiVersion = ApiVersion.parse(leafPackage).isPresent(); + // Group all API version packages into a single .v# group + boolean packageIsApiVersion = ApiVersion.parse(getLeafPackage(name)).isPresent(); if (packageIsApiVersion) { - String packageWithoutVersion = name.substring(0, lastPackageIndex); - // For package a.b.c.v1, the value of packageWithoutVersion is a.b.c - return packageWithoutVersion + ".v#"; // Use "v#" package to group all versions + return withoutLeafPackage(name) + ".v#"; // withoutLeafPackage("a.b.c.v1") --> "a.b.c" } - // Using 'name' ensures this package is placed in a group of size 1. + + // When not an API version package, use 'name' to ensure a unique group of size 1. return name; }); } @@ -174,4 +203,16 @@ PackageElement getRecommended(Collection packages) { ApiVersion recommended = ApiVersion.getRecommended(versions.keySet()); return versions.get(recommended); } + + /** withoutLeafPackage("a.b.c.d") --> "a.b.c" */ + private String withoutLeafPackage(String name) { + int lastPackageIndex = name.lastIndexOf('.'); + return name.substring(0, lastPackageIndex); + } + + /** getLeafPackage("a.b.c.d") --> "d" */ + private String getLeafPackage(String name) { + int lastPackageIndex = name.lastIndexOf('.'); + return name.substring(lastPackageIndex + 1); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java index 2b1c28f7..95ce5485 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java @@ -1,7 +1,6 @@ package com.microsoft.doclet; import static com.google.common.truth.Truth.assertThat; -import static com.google.common.truth.Truth.assertWithMessage; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; @@ -105,20 +104,6 @@ public void assertSameFileNames(List expected, List generated) { List generatedFilenames = generated.stream().map(Path::getFileName).map(Path::toString).collect(Collectors.toList()); - assertWithMessage("Expected files were not generated.") - .that( - expectedFilenames.stream() - .filter(file -> !generatedFilenames.contains(file)) - .collect(Collectors.toList())) - .isEmpty(); - - assertWithMessage("Files were generated that should not have been.") - .that( - generatedFilenames.stream() - .filter(file -> !expectedFilenames.contains(file)) - .collect(Collectors.toList())) - .isEmpty(); - - assertThat(expected.size()).isEqualTo(generated.size()); + assertThat(generatedFilenames).containsExactlyElementsIn(expectedFilenames); } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java index f175f18e..91d1d95b 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/PackageLookupTest.java @@ -178,9 +178,58 @@ public void testOrganize_WithoutReleasePackage() { .containsExactly("com.microsoft.samples.google.v1beta"); } + @Test + public void testFindStubPackage() { + ImmutableList packages = + ImmutableList.of( + elements.getPackageElement("com.microsoft.samples.google.v1"), + elements.getPackageElement("com.microsoft.samples.google.v1.stub"), + elements.getPackageElement("com.microsoft.samples.google.v1beta"), + elements.getPackageElement("com.microsoft.samples.google")); + + List foundStubPackages = + packageLookup.findStubPackages( + elements.getPackageElement("com.microsoft.samples.google.v1"), packages); + assertThat(foundStubPackages).isNotEmpty(); + assertThat(foundStubPackages).hasSize(1); + assertThat(toPackageName(foundStubPackages.get(0))) + .isEqualTo("com.microsoft.samples.google.v1.stub"); + + List notFoundStubPackageOfStubPackage = + packageLookup.findStubPackages( + elements.getPackageElement("com.microsoft.samples.google.v1.stub"), packages); + assertThat(notFoundStubPackageOfStubPackage).isEmpty(); + + List notFoundStubPackage = + packageLookup.findStubPackages( + elements.getPackageElement("com.microsoft.samples.google"), packages); + assertThat(notFoundStubPackage).isEmpty(); + } + + @Test + public void testIsApiStubPackage() { + assertThat( + packageLookup.isApiVersionStubPackage( + elements.getPackageElement("com.microsoft.samples.google.v1"))) + .isFalse(); + assertThat( + packageLookup.isApiVersionStubPackage( + elements.getPackageElement("com.microsoft.samples.google.v1.stub"))) + .isTrue(); + assertThat( + packageLookup.isApiVersionStubPackageName("com.microsoft.samples.google.v1.stub.child")) + .isTrue(); + + assertThat(packageLookup.isApiVersionStubPackageName("a")).isFalse(); + // False due to not being an API version package, even though it ends in .stub + assertThat(packageLookup.isApiVersionStubPackageName("a.stub")).isFalse(); + } + private List toPackageNames(List packages) { - return packages.stream() - .map(pkg -> String.valueOf(pkg.getQualifiedName())) - .collect(Collectors.toList()); + return packages.stream().map(this::toPackageName).collect(Collectors.toList()); + } + + private String toPackageName(PackageElement pkg) { + return String.valueOf(pkg.getQualifiedName()); } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementDetailsCollectionOperations.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementDetailsCollectionOperations.java index 740a1bdc..4f59819f 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementDetailsCollectionOperations.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementDetailsCollectionOperations.java @@ -8,6 +8,7 @@ * * @deprecated Use {@link AgreementMetaData} instead. */ +@Deprecated public class AgreementDetailsCollectionOperations extends BasePartnerComponentString implements IAgreementDetailsCollection { /** @@ -25,6 +26,7 @@ public AgreementDetailsCollectionOperations(IPartner rootPartnerOperations) { * @return A list of agreement details. * @deprecated Some text */ + @Deprecated public ResourceCollection get() { return null; } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementMetaData.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementMetaData.java index cc06cab6..dbed026e 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementMetaData.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/AgreementMetaData.java @@ -26,6 +26,7 @@ public void setTemplateId(String value) { * * @deprecated */ + @Deprecated @JsonProperty("agreementLink") private String agreementLink; diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/IAgreementDetailsCollection.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/IAgreementDetailsCollection.java index 8b80e81d..b7d1c54a 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/IAgreementDetailsCollection.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/agreements/IAgreementDetailsCollection.java @@ -5,6 +5,7 @@ * * @deprecated This one is deprecated :( */ +@Deprecated public interface IAgreementDetailsCollection { /** * Retrieves all current agreement metadata. diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ProductSearchSettings.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ProductSearchSettings.java index 50d9b44b..56b50d60 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ProductSearchSettings.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/ProductSearchSettings.java @@ -65,6 +65,7 @@ * } */ @Generated("by gapic-generator-java") +@SuppressWarnings("unchecked") public class ProductSearchSettings extends ClientSettings { /** Returns the object with the settings used for calls to createProductSet. */ diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java index fca83c3a..b3f389f7 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java @@ -64,6 +64,7 @@ */ @BetaApi @Generated("by gapic-generator-java") +@SuppressWarnings("unchecked") public class SpeechSettings extends ClientSettings { /** Returns the object with the settings used for calls to recognize. */ diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/GrpcSpeechStub.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/GrpcSpeechStub.java new file mode 100644 index 00000000..36a00671 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/GrpcSpeechStub.java @@ -0,0 +1,230 @@ +/* + * Copyright 2023 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 + * + * https://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.microsoft.samples.google.v1.stub; + +import com.google.api.core.BetaApi; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.grpc.GrpcCallSettings; +import com.google.api.gax.grpc.GrpcStubCallableFactory; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse; +import com.google.cloud.speech.v1p1beta1.RecognizeRequest; +import com.google.cloud.speech.v1p1beta1.RecognizeResponse; +import com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest; +import com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse; +import com.google.cloud.speech.v1p1beta1.stub.GrpcSpeechCallableFactory; +import com.google.longrunning.Operation; +import com.google.longrunning.stub.GrpcOperationsStub; +import io.grpc.MethodDescriptor; +import io.grpc.protobuf.ProtoUtils; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * gRPC stub implementation for the Speech service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@BetaApi +@Generated("by gapic-generator-java") +public class GrpcSpeechStub extends SpeechStub { + private static final MethodDescriptor + recognizeMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.cloud.speech.v1p1beta1.Speech/Recognize") + .setRequestMarshaller(ProtoUtils.marshaller(RecognizeRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(RecognizeResponse.getDefaultInstance())) + .build(); + + private static final MethodDescriptor + longRunningRecognizeMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.cloud.speech.v1p1beta1.Speech/LongRunningRecognize") + .setRequestMarshaller( + ProtoUtils.marshaller(LongRunningRecognizeRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .build(); + + private static final MethodDescriptor + streamingRecognizeMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.BIDI_STREAMING) + .setFullMethodName("google.cloud.speech.v1p1beta1.Speech/StreamingRecognize") + .setRequestMarshaller( + ProtoUtils.marshaller(StreamingRecognizeRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(StreamingRecognizeResponse.getDefaultInstance())) + .build(); + + private final UnaryCallable recognizeCallable; + private final UnaryCallable longRunningRecognizeCallable; + private final OperationCallable< + LongRunningRecognizeRequest, LongRunningRecognizeResponse, LongRunningRecognizeMetadata> + longRunningRecognizeOperationCallable; + private final BidiStreamingCallable + streamingRecognizeCallable; + + private final BackgroundResource backgroundResources; + private final GrpcOperationsStub operationsStub; + private final GrpcStubCallableFactory callableFactory; + + public static final GrpcSpeechStub create(SpeechStubSettings settings) throws IOException { + return new GrpcSpeechStub(settings, ClientContext.create(settings)); + } + + public static final GrpcSpeechStub create(ClientContext clientContext) throws IOException { + return new GrpcSpeechStub(SpeechStubSettings.newBuilder().build(), clientContext); + } + + public static final GrpcSpeechStub create( + ClientContext clientContext, GrpcStubCallableFactory callableFactory) throws IOException { + return new GrpcSpeechStub( + SpeechStubSettings.newBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of GrpcSpeechStub, using the given settings. This is protected so that + * it is easy to make a subclass, but otherwise, the static factory methods should be preferred. + */ + protected GrpcSpeechStub(SpeechStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new GrpcSpeechCallableFactory()); + } + + /** + * Constructs an instance of GrpcSpeechStub, using the given settings. This is protected so that + * it is easy to make a subclass, but otherwise, the static factory methods should be preferred. + */ + protected GrpcSpeechStub( + SpeechStubSettings settings, + ClientContext clientContext, + GrpcStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + this.operationsStub = GrpcOperationsStub.create(clientContext, callableFactory); + + GrpcCallSettings recognizeTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(recognizeMethodDescriptor) + .build(); + GrpcCallSettings longRunningRecognizeTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(longRunningRecognizeMethodDescriptor) + .build(); + GrpcCallSettings + streamingRecognizeTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(streamingRecognizeMethodDescriptor) + .build(); + + this.recognizeCallable = + callableFactory.createUnaryCallable( + recognizeTransportSettings, settings.recognizeSettings(), clientContext); + this.longRunningRecognizeCallable = + callableFactory.createUnaryCallable( + longRunningRecognizeTransportSettings, + settings.longRunningRecognizeSettings(), + clientContext); + this.longRunningRecognizeOperationCallable = + callableFactory.createOperationCallable( + longRunningRecognizeTransportSettings, + settings.longRunningRecognizeOperationSettings(), + clientContext, + operationsStub); + this.streamingRecognizeCallable = + callableFactory.createBidiStreamingCallable( + streamingRecognizeTransportSettings, + settings.streamingRecognizeSettings(), + clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + public GrpcOperationsStub getOperationsStub() { + return operationsStub; + } + + @Override + public UnaryCallable recognizeCallable() { + return recognizeCallable; + } + + @Override + public UnaryCallable longRunningRecognizeCallable() { + return longRunningRecognizeCallable; + } + + @Override + public OperationCallable< + LongRunningRecognizeRequest, LongRunningRecognizeResponse, LongRunningRecognizeMetadata> + longRunningRecognizeOperationCallable() { + return longRunningRecognizeOperationCallable; + } + + @Override + public BidiStreamingCallable + streamingRecognizeCallable() { + return streamingRecognizeCallable; + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/HttpJsonSpeechStub.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/HttpJsonSpeechStub.java new file mode 100644 index 00000000..15482db8 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/HttpJsonSpeechStub.java @@ -0,0 +1,307 @@ +/* + * Copyright 2023 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 + * + * https://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.microsoft.samples.google.v1.stub; + +import com.google.api.HttpRule; +import com.google.api.core.BetaApi; +import com.google.api.core.InternalApi; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.httpjson.ApiMethodDescriptor; +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshot; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; +import com.google.api.gax.httpjson.ProtoMessageResponseParser; +import com.google.api.gax.httpjson.ProtoRestSerializer; +import com.google.api.gax.httpjson.longrunning.stub.HttpJsonOperationsStub; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse; +import com.google.cloud.speech.v1p1beta1.RecognizeRequest; +import com.google.cloud.speech.v1p1beta1.RecognizeResponse; +import com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest; +import com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse; +import com.google.cloud.speech.v1p1beta1.stub.HttpJsonSpeechCallableFactory; +import com.google.common.collect.ImmutableMap; +import com.google.longrunning.Operation; +import com.google.protobuf.TypeRegistry; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST stub implementation for the Speech service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@BetaApi +@Generated("by gapic-generator-java") +@SuppressWarnings("unchecked") +public class HttpJsonSpeechStub extends SpeechStub { + private static final TypeRegistry typeRegistry = + TypeRegistry.newBuilder() + .add(LongRunningRecognizeResponse.getDescriptor()) + .add(LongRunningRecognizeMetadata.getDescriptor()) + .build(); + + private static final ApiMethodDescriptor + recognizeMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.cloud.speech.v1p1beta1.Speech/Recognize") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1p1beta1/speech:recognize", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(RecognizeResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + longRunningRecognizeMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.cloud.speech.v1p1beta1.Speech/LongRunningRecognize") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1p1beta1/speech:longrunningrecognize", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Operation.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .setOperationSnapshotFactory( + (LongRunningRecognizeRequest request, Operation response) -> + HttpJsonOperationSnapshot.create(response)) + .build(); + + private final UnaryCallable recognizeCallable; + private final UnaryCallable longRunningRecognizeCallable; + private final OperationCallable< + LongRunningRecognizeRequest, LongRunningRecognizeResponse, LongRunningRecognizeMetadata> + longRunningRecognizeOperationCallable; + + private final BackgroundResource backgroundResources; + private final HttpJsonOperationsStub httpJsonOperationsStub; + private final HttpJsonStubCallableFactory callableFactory; + + public static final HttpJsonSpeechStub create(SpeechStubSettings settings) throws IOException { + return new HttpJsonSpeechStub(settings, ClientContext.create(settings)); + } + + public static final HttpJsonSpeechStub create(ClientContext clientContext) throws IOException { + return new HttpJsonSpeechStub(SpeechStubSettings.newHttpJsonBuilder().build(), clientContext); + } + + public static final HttpJsonSpeechStub create( + ClientContext clientContext, HttpJsonStubCallableFactory callableFactory) throws IOException { + return new HttpJsonSpeechStub( + SpeechStubSettings.newHttpJsonBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of HttpJsonSpeechStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonSpeechStub(SpeechStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new HttpJsonSpeechCallableFactory()); + } + + /** + * Constructs an instance of HttpJsonSpeechStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonSpeechStub( + SpeechStubSettings settings, + ClientContext clientContext, + HttpJsonStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + this.httpJsonOperationsStub = + HttpJsonOperationsStub.create( + clientContext, + callableFactory, + typeRegistry, + ImmutableMap.builder() + .put( + "google.longrunning.Operations.GetOperation", + HttpRule.newBuilder().setGet("/v1p1beta1/operations/{name=**}").build()) + .put( + "google.longrunning.Operations.ListOperations", + HttpRule.newBuilder().setGet("/v1p1beta1/operations").build()) + .build()); + + HttpJsonCallSettings recognizeTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(recognizeMethodDescriptor) + .setTypeRegistry(typeRegistry) + .build(); + HttpJsonCallSettings + longRunningRecognizeTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(longRunningRecognizeMethodDescriptor) + .setTypeRegistry(typeRegistry) + .build(); + + this.recognizeCallable = + callableFactory.createUnaryCallable( + recognizeTransportSettings, settings.recognizeSettings(), clientContext); + this.longRunningRecognizeCallable = + callableFactory.createUnaryCallable( + longRunningRecognizeTransportSettings, + settings.longRunningRecognizeSettings(), + clientContext); + this.longRunningRecognizeOperationCallable = + callableFactory.createOperationCallable( + longRunningRecognizeTransportSettings, + settings.longRunningRecognizeOperationSettings(), + clientContext, + httpJsonOperationsStub); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + @InternalApi + public static List getMethodDescriptors() { + List methodDescriptors = new ArrayList<>(); + methodDescriptors.add(recognizeMethodDescriptor); + methodDescriptors.add(longRunningRecognizeMethodDescriptor); + return methodDescriptors; + } + + public HttpJsonOperationsStub getHttpJsonOperationsStub() { + return httpJsonOperationsStub; + } + + @Override + public UnaryCallable recognizeCallable() { + return recognizeCallable; + } + + @Override + public UnaryCallable longRunningRecognizeCallable() { + return longRunningRecognizeCallable; + } + + @Override + public OperationCallable< + LongRunningRecognizeRequest, LongRunningRecognizeResponse, LongRunningRecognizeMetadata> + longRunningRecognizeOperationCallable() { + return longRunningRecognizeOperationCallable; + } + + @Override + public BidiStreamingCallable + streamingRecognizeCallable() { + throw new UnsupportedOperationException( + "Not implemented: streamingRecognizeCallable(). REST transport is not implemented for this method yet."); + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/SpeechStub.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/SpeechStub.java new file mode 100644 index 00000000..28453ea8 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/SpeechStub.java @@ -0,0 +1,75 @@ +/* + * Copyright 2023 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 + * + * https://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.microsoft.samples.google.v1.stub; + +import com.google.api.core.BetaApi; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse; +import com.google.cloud.speech.v1p1beta1.RecognizeRequest; +import com.google.cloud.speech.v1p1beta1.RecognizeResponse; +import com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest; +import com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse; +import com.google.longrunning.Operation; +import com.google.longrunning.stub.OperationsStub; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Base stub class for the Speech service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@BetaApi +@Generated("by gapic-generator-java") +public abstract class SpeechStub implements BackgroundResource { + + public OperationsStub getOperationsStub() { + return null; + } + + public com.google.api.gax.httpjson.longrunning.stub.OperationsStub getHttpJsonOperationsStub() { + return null; + } + + public UnaryCallable recognizeCallable() { + throw new UnsupportedOperationException("Not implemented: recognizeCallable()"); + } + + public OperationCallable< + LongRunningRecognizeRequest, LongRunningRecognizeResponse, LongRunningRecognizeMetadata> + longRunningRecognizeOperationCallable() { + throw new UnsupportedOperationException( + "Not implemented: longRunningRecognizeOperationCallable()"); + } + + public UnaryCallable longRunningRecognizeCallable() { + throw new UnsupportedOperationException("Not implemented: longRunningRecognizeCallable()"); + } + + public BidiStreamingCallable + streamingRecognizeCallable() { + throw new UnsupportedOperationException("Not implemented: streamingRecognizeCallable()"); + } + + @Override + public abstract void close(); +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/SpeechStubSettings.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/SpeechStubSettings.java new file mode 100644 index 00000000..62f5db7e --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1/stub/SpeechStubSettings.java @@ -0,0 +1,446 @@ +/* + * Copyright 2023 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 + * + * https://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.microsoft.samples.google.v1.stub; + +import com.google.api.core.ApiFunction; +import com.google.api.core.BetaApi; +import com.google.api.gax.core.GaxProperties; +import com.google.api.gax.core.GoogleCredentialsProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.grpc.GaxGrpcProperties; +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.grpc.ProtoOperationTransformers; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.HttpJsonTransportChannel; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; +import com.google.api.gax.longrunning.OperationSnapshot; +import com.google.api.gax.longrunning.OperationTimedPollAlgorithm; +import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.OperationCallSettings; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.StreamingCallSettings; +import com.google.api.gax.rpc.StubSettings; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest; +import com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse; +import com.google.cloud.speech.v1p1beta1.RecognizeRequest; +import com.google.cloud.speech.v1p1beta1.RecognizeResponse; +import com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest; +import com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.longrunning.Operation; +import java.io.IOException; +import java.util.List; +import javax.annotation.Generated; +import org.threeten.bp.Duration; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Settings class to configure an instance of {@link + * com.google.cloud.speech.v1p1beta1.stub.SpeechStub}. + * + *

The default instance has everything set to sensible defaults: + * + *

    + *
  • The default service address (speech.googleapis.com) and default port (443) are used. + *
  • Credentials are acquired automatically through Application Default Credentials. + *
  • Retries are configured for idempotent methods but not for non-idempotent methods. + *
+ * + *

The builder of this class is recursive, so contained classes are themselves builders. When + * build() is called, the tree of builders is called to create the complete settings object. + * + *

For example, to set the total timeout of recognize to 30 seconds: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SpeechStubSettings.Builder speechSettingsBuilder = SpeechStubSettings.newBuilder();
+ * speechSettingsBuilder
+ *     .recognizeSettings()
+ *     .setRetrySettings(
+ *         speechSettingsBuilder
+ *             .recognizeSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * SpeechStubSettings speechSettings = speechSettingsBuilder.build();
+ * }
+ */ +@BetaApi +@Generated("by gapic-generator-java") +@SuppressWarnings("unchecked") +public class SpeechStubSettings extends StubSettings { + /** The default scopes of the service. */ + private static final ImmutableList DEFAULT_SERVICE_SCOPES = + ImmutableList.builder().add("https://www.googleapis.com/auth/cloud-platform").build(); + + private final UnaryCallSettings recognizeSettings; + private final UnaryCallSettings + longRunningRecognizeSettings; + private final OperationCallSettings< + LongRunningRecognizeRequest, LongRunningRecognizeResponse, LongRunningRecognizeMetadata> + longRunningRecognizeOperationSettings; + private final StreamingCallSettings + streamingRecognizeSettings; + + /** Returns the object with the settings used for calls to recognize. */ + public UnaryCallSettings recognizeSettings() { + return recognizeSettings; + } + + /** Returns the object with the settings used for calls to longRunningRecognize. */ + public UnaryCallSettings longRunningRecognizeSettings() { + return longRunningRecognizeSettings; + } + + /** Returns the object with the settings used for calls to longRunningRecognize. */ + public OperationCallSettings< + LongRunningRecognizeRequest, LongRunningRecognizeResponse, LongRunningRecognizeMetadata> + longRunningRecognizeOperationSettings() { + return longRunningRecognizeOperationSettings; + } + + /** Returns the object with the settings used for calls to streamingRecognize. */ + public StreamingCallSettings + streamingRecognizeSettings() { + return streamingRecognizeSettings; + } + + public SpeechStub createStub() throws IOException { + if (getTransportChannelProvider() + .getTransportName() + .equals(GrpcTransportChannel.getGrpcTransportName())) { + return GrpcSpeechStub.create(this); + } + if (getTransportChannelProvider() + .getTransportName() + .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { + return HttpJsonSpeechStub.create(this); + } + throw new UnsupportedOperationException( + String.format( + "Transport not supported: %s", getTransportChannelProvider().getTransportName())); + } + + /** Returns a builder for the default ExecutorProvider for this service. */ + public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { + return InstantiatingExecutorProvider.newBuilder(); + } + + /** Returns the default service endpoint. */ + public static String getDefaultEndpoint() { + return "speech.googleapis.com:443"; + } + + /** Returns the default mTLS service endpoint. */ + public static String getDefaultMtlsEndpoint() { + return "speech.mtls.googleapis.com:443"; + } + + /** Returns the default service scopes. */ + public static List getDefaultServiceScopes() { + return DEFAULT_SERVICE_SCOPES; + } + + /** Returns a builder for the default credentials for this service. */ + public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { + return GoogleCredentialsProvider.newBuilder() + .setScopesToApply(DEFAULT_SERVICE_SCOPES) + .setUseJwtAccessWithScope(true); + } + + /** Returns a builder for the default gRPC ChannelProvider for this service. */ + public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { + return InstantiatingGrpcChannelProvider.newBuilder() + .setMaxInboundMessageSize(Integer.MAX_VALUE); + } + + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return InstantiatingHttpJsonChannelProvider.newBuilder(); + } + + public static TransportChannelProvider defaultTransportChannelProvider() { + return defaultGrpcTransportProviderBuilder().build(); + } + + @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") + public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken("gapic", GaxProperties.getLibraryVersion(SpeechStubSettings.class)) + .setTransportToken( + GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion()); + } + + @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") + public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken("gapic", GaxProperties.getLibraryVersion(SpeechStubSettings.class)) + .setTransportToken( + GaxHttpJsonProperties.getHttpJsonTokenName(), + GaxHttpJsonProperties.getHttpJsonVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return SpeechStubSettings.defaultGrpcApiClientHeaderProviderBuilder(); + } + + /** Returns a new gRPC builder for this class. */ + public static Builder newBuilder() { + return Builder.createDefault(); + } + + /** Returns a new REST builder for this class. */ + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + + /** Returns a new builder for this class. */ + public static Builder newBuilder(ClientContext clientContext) { + return new Builder(clientContext); + } + + /** Returns a builder containing all the values of this settings class. */ + public Builder toBuilder() { + return new Builder(this); + } + + protected SpeechStubSettings(Builder settingsBuilder) throws IOException { + super(settingsBuilder); + + recognizeSettings = settingsBuilder.recognizeSettings().build(); + longRunningRecognizeSettings = settingsBuilder.longRunningRecognizeSettings().build(); + longRunningRecognizeOperationSettings = + settingsBuilder.longRunningRecognizeOperationSettings().build(); + streamingRecognizeSettings = settingsBuilder.streamingRecognizeSettings().build(); + } + + /** Builder for SpeechStubSettings. */ + public static class Builder extends StubSettings.Builder { + private final ImmutableList> unaryMethodSettingsBuilders; + private final UnaryCallSettings.Builder recognizeSettings; + private final UnaryCallSettings.Builder + longRunningRecognizeSettings; + private final OperationCallSettings.Builder< + LongRunningRecognizeRequest, LongRunningRecognizeResponse, LongRunningRecognizeMetadata> + longRunningRecognizeOperationSettings; + private final StreamingCallSettings.Builder< + StreamingRecognizeRequest, StreamingRecognizeResponse> + streamingRecognizeSettings; + private static final ImmutableMap> + RETRYABLE_CODE_DEFINITIONS; + + static { + ImmutableMap.Builder> definitions = + ImmutableMap.builder(); + definitions.put( + "retry_policy_0_codes", + ImmutableSet.copyOf( + Lists.newArrayList( + StatusCode.Code.DEADLINE_EXCEEDED, StatusCode.Code.UNAVAILABLE))); + definitions.put( + "no_retry_1_codes", ImmutableSet.copyOf(Lists.newArrayList())); + RETRYABLE_CODE_DEFINITIONS = definitions.build(); + } + + private static final ImmutableMap RETRY_PARAM_DEFINITIONS; + + static { + ImmutableMap.Builder definitions = ImmutableMap.builder(); + RetrySettings settings = null; + settings = + RetrySettings.newBuilder() + .setInitialRetryDelay(Duration.ofMillis(100L)) + .setRetryDelayMultiplier(1.3) + .setMaxRetryDelay(Duration.ofMillis(60000L)) + .setInitialRpcTimeout(Duration.ofMillis(5000000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeout(Duration.ofMillis(5000000L)) + .setTotalTimeout(Duration.ofMillis(5000000L)) + .build(); + definitions.put("retry_policy_0_params", settings); + settings = + RetrySettings.newBuilder() + .setInitialRpcTimeout(Duration.ofMillis(5000000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeout(Duration.ofMillis(5000000L)) + .setTotalTimeout(Duration.ofMillis(5000000L)) + .build(); + definitions.put("no_retry_1_params", settings); + RETRY_PARAM_DEFINITIONS = definitions.build(); + } + + protected Builder() { + this(((ClientContext) null)); + } + + protected Builder(ClientContext clientContext) { + super(clientContext); + + recognizeSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + longRunningRecognizeSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + longRunningRecognizeOperationSettings = OperationCallSettings.newBuilder(); + streamingRecognizeSettings = StreamingCallSettings.newBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of( + recognizeSettings, longRunningRecognizeSettings); + initDefaults(this); + } + + protected Builder(SpeechStubSettings settings) { + super(settings); + + recognizeSettings = settings.recognizeSettings.toBuilder(); + longRunningRecognizeSettings = settings.longRunningRecognizeSettings.toBuilder(); + longRunningRecognizeOperationSettings = + settings.longRunningRecognizeOperationSettings.toBuilder(); + streamingRecognizeSettings = settings.streamingRecognizeSettings.toBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of( + recognizeSettings, longRunningRecognizeSettings); + } + + private static Builder createDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultTransportChannelProvider()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultApiClientHeaderProviderBuilder().build()); + builder.setEndpoint(getDefaultEndpoint()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + + private static Builder createHttpJsonDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultHttpJsonTransportProviderBuilder().build()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultHttpJsonApiClientHeaderProviderBuilder().build()); + builder.setEndpoint(getDefaultEndpoint()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + + private static Builder initDefaults(Builder builder) { + builder + .recognizeSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + + builder + .longRunningRecognizeSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_1_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_1_params")); + + builder + .longRunningRecognizeOperationSettings() + .setInitialCallSettings( + UnaryCallSettings + .newUnaryCallSettingsBuilder() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_1_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_1_params")) + .build()) + .setResponseTransformer( + ProtoOperationTransformers.ResponseTransformer.create( + LongRunningRecognizeResponse.class)) + .setMetadataTransformer( + ProtoOperationTransformers.MetadataTransformer.create( + LongRunningRecognizeMetadata.class)) + .setPollingAlgorithm( + OperationTimedPollAlgorithm.create( + RetrySettings.newBuilder() + .setInitialRetryDelay(Duration.ofMillis(5000L)) + .setRetryDelayMultiplier(1.5) + .setMaxRetryDelay(Duration.ofMillis(45000L)) + .setInitialRpcTimeout(Duration.ZERO) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeout(Duration.ZERO) + .setTotalTimeout(Duration.ofMillis(300000L)) + .build())); + + return builder; + } + + /** + * Applies the given settings updater function to all of the unary API methods in this service. + * + *

Note: This method does not support applying settings to streaming methods. + */ + public Builder applyToAllUnaryMethods( + ApiFunction, Void> settingsUpdater) { + super.applyToAllUnaryMethods(unaryMethodSettingsBuilders, settingsUpdater); + return this; + } + + public ImmutableList> unaryMethodSettingsBuilders() { + return unaryMethodSettingsBuilders; + } + + /** Returns the builder for the settings used for calls to recognize. */ + public UnaryCallSettings.Builder recognizeSettings() { + return recognizeSettings; + } + + /** Returns the builder for the settings used for calls to longRunningRecognize. */ + public UnaryCallSettings.Builder + longRunningRecognizeSettings() { + return longRunningRecognizeSettings; + } + + /** Returns the builder for the settings used for calls to longRunningRecognize. */ + @BetaApi( + "The surface for use by generated code is not stable yet and may change in the future.") + public OperationCallSettings.Builder< + LongRunningRecognizeRequest, LongRunningRecognizeResponse, LongRunningRecognizeMetadata> + longRunningRecognizeOperationSettings() { + return longRunningRecognizeOperationSettings; + } + + /** Returns the builder for the settings used for calls to streamingRecognize. */ + public StreamingCallSettings.Builder + streamingRecognizeSettings() { + return streamingRecognizeSettings; + } + + @Override + public SpeechStubSettings build() throws IOException { + return new SpeechStubSettings(this); + } + } +} diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.GrpcSpeechStub.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.GrpcSpeechStub.yml new file mode 100644 index 00000000..7d7de3a2 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.GrpcSpeechStub.yml @@ -0,0 +1,681 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + id: "GrpcSpeechStub" + parent: "com.microsoft.samples.google.v1.stub" + children: + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.GrpcSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext)" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.GrpcSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext,com.google.api.gax.grpc.GrpcStubCallableFactory)" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.awaitTermination(long,java.util.concurrent.TimeUnit)" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.close()" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create(com.google.api.gax.rpc.ClientContext)" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create(com.google.api.gax.rpc.ClientContext,com.google.api.gax.grpc.GrpcStubCallableFactory)" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create(com.microsoft.samples.google.v1.stub.SpeechStubSettings)" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.getOperationsStub()" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isShutdown()" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isTerminated()" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeCallable()" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeOperationCallable()" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.recognizeCallable()" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdown()" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdownNow()" + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.streamingRecognizeCallable()" + langs: + - "java" + name: "GrpcSpeechStub" + nameWithType: "GrpcSpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + type: "Class" + package: "com.microsoft.samples.google.v1.stub" + summary: "gRPC stub implementation for the Speech service API.\n\n

This class is for advanced usage and reflects the underlying API directly." + syntax: + content: "public class GrpcSpeechStub extends SpeechStub" + inheritance: + - "java.lang.Object" + - "com.microsoft.samples.google.v1.stub.SpeechStub" + inheritedMembers: + - "com.microsoft.samples.google.v1.stub.SpeechStub.close()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable()" + - "java.lang.Object.clone()" + - "java.lang.Object.equals(java.lang.Object)" + - "java.lang.Object.finalize()" + - "java.lang.Object.getClass()" + - "java.lang.Object.hashCode()" + - "java.lang.Object.notify()" + - "java.lang.Object.notifyAll()" + - "java.lang.Object.toString()" + - "java.lang.Object.wait()" + - "java.lang.Object.wait(long)" + - "java.lang.Object.wait(long,int)" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.GrpcSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext)" + id: "GrpcSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext)" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "GrpcSpeechStub(SpeechStubSettings settings, ClientContext clientContext)" + nameWithType: "GrpcSpeechStub.GrpcSpeechStub(SpeechStubSettings settings, ClientContext clientContext)" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.GrpcSpeechStub(SpeechStubSettings settings, ClientContext clientContext)" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.GrpcSpeechStub*" + type: "Constructor" + package: "com.microsoft.samples.google.v1.stub" + summary: "Constructs an instance of GrpcSpeechStub, using the given settings. This is protected so that\n it is easy to make a subclass, but otherwise, the static factory methods should be preferred." + syntax: + content: "protected GrpcSpeechStub(SpeechStubSettings settings, ClientContext clientContext)" + parameters: + - id: "settings" + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + - id: "clientContext" + type: "com.google.api.gax.rpc.ClientContext" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.GrpcSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext,com.google.api.gax.grpc.GrpcStubCallableFactory)" + id: "GrpcSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext,com.google.api.gax.grpc.GrpcStubCallableFactory)" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "GrpcSpeechStub(SpeechStubSettings settings, ClientContext clientContext, GrpcStubCallableFactory callableFactory)" + nameWithType: "GrpcSpeechStub.GrpcSpeechStub(SpeechStubSettings settings, ClientContext clientContext, GrpcStubCallableFactory callableFactory)" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.GrpcSpeechStub(SpeechStubSettings settings, ClientContext clientContext, GrpcStubCallableFactory callableFactory)" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.GrpcSpeechStub*" + type: "Constructor" + package: "com.microsoft.samples.google.v1.stub" + summary: "Constructs an instance of GrpcSpeechStub, using the given settings. This is protected so that\n it is easy to make a subclass, but otherwise, the static factory methods should be preferred." + syntax: + content: "protected GrpcSpeechStub(SpeechStubSettings settings, ClientContext clientContext, GrpcStubCallableFactory callableFactory)" + parameters: + - id: "settings" + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + - id: "clientContext" + type: "com.google.api.gax.rpc.ClientContext" + - id: "callableFactory" + type: "com.google.api.gax.grpc.GrpcStubCallableFactory" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.awaitTermination(long,java.util.concurrent.TimeUnit)" + id: "awaitTermination(long,java.util.concurrent.TimeUnit)" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "awaitTermination(long duration, TimeUnit unit)" + nameWithType: "GrpcSpeechStub.awaitTermination(long duration, TimeUnit unit)" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.awaitTermination(long duration, TimeUnit unit)" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.awaitTermination*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public boolean awaitTermination(long duration, TimeUnit unit)" + parameters: + - id: "duration" + type: "long" + - id: "unit" + type: "java.util.concurrent.TimeUnit" + return: + type: "boolean" + exceptions: + - type: "java.lang.InterruptedException" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.close()" + id: "close()" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "close()" + nameWithType: "GrpcSpeechStub.close()" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.close()" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.close*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.close()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public final void close()" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create(com.google.api.gax.rpc.ClientContext)" + id: "create(com.google.api.gax.rpc.ClientContext)" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "create(ClientContext clientContext)" + nameWithType: "GrpcSpeechStub.create(ClientContext clientContext)" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create(ClientContext clientContext)" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public static final GrpcSpeechStub create(ClientContext clientContext)" + parameters: + - id: "clientContext" + type: "com.google.api.gax.rpc.ClientContext" + return: + type: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + exceptions: + - type: "java.io.IOException" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create(com.google.api.gax.rpc.ClientContext,com.google.api.gax.grpc.GrpcStubCallableFactory)" + id: "create(com.google.api.gax.rpc.ClientContext,com.google.api.gax.grpc.GrpcStubCallableFactory)" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "create(ClientContext clientContext, GrpcStubCallableFactory callableFactory)" + nameWithType: "GrpcSpeechStub.create(ClientContext clientContext, GrpcStubCallableFactory callableFactory)" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create(ClientContext clientContext, GrpcStubCallableFactory callableFactory)" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public static final GrpcSpeechStub create(ClientContext clientContext, GrpcStubCallableFactory callableFactory)" + parameters: + - id: "clientContext" + type: "com.google.api.gax.rpc.ClientContext" + - id: "callableFactory" + type: "com.google.api.gax.grpc.GrpcStubCallableFactory" + return: + type: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + exceptions: + - type: "java.io.IOException" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create(com.microsoft.samples.google.v1.stub.SpeechStubSettings)" + id: "create(com.microsoft.samples.google.v1.stub.SpeechStubSettings)" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "create(SpeechStubSettings settings)" + nameWithType: "GrpcSpeechStub.create(SpeechStubSettings settings)" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create(SpeechStubSettings settings)" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public static final GrpcSpeechStub create(SpeechStubSettings settings)" + parameters: + - id: "settings" + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + return: + type: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + exceptions: + - type: "java.io.IOException" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.getOperationsStub()" + id: "getOperationsStub()" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "getOperationsStub()" + nameWithType: "GrpcSpeechStub.getOperationsStub()" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.getOperationsStub()" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.getOperationsStub*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public GrpcOperationsStub getOperationsStub()" + return: + type: "com.google.longrunning.stub.GrpcOperationsStub" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isShutdown()" + id: "isShutdown()" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "isShutdown()" + nameWithType: "GrpcSpeechStub.isShutdown()" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isShutdown()" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isShutdown*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public boolean isShutdown()" + return: + type: "boolean" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isTerminated()" + id: "isTerminated()" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "isTerminated()" + nameWithType: "GrpcSpeechStub.isTerminated()" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isTerminated()" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isTerminated*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public boolean isTerminated()" + return: + type: "boolean" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeCallable()" + id: "longRunningRecognizeCallable()" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "longRunningRecognizeCallable()" + nameWithType: "GrpcSpeechStub.longRunningRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeCallable()" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeCallable*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public UnaryCallable longRunningRecognizeCallable()" + return: + type: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeOperationCallable()" + id: "longRunningRecognizeOperationCallable()" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "longRunningRecognizeOperationCallable()" + nameWithType: "GrpcSpeechStub.longRunningRecognizeOperationCallable()" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeOperationCallable()" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeOperationCallable*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public OperationCallable longRunningRecognizeOperationCallable()" + return: + type: "com.google.api.gax.rpc.OperationCallable" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.recognizeCallable()" + id: "recognizeCallable()" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "recognizeCallable()" + nameWithType: "GrpcSpeechStub.recognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.recognizeCallable()" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.recognizeCallable*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public UnaryCallable recognizeCallable()" + return: + type: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdown()" + id: "shutdown()" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "shutdown()" + nameWithType: "GrpcSpeechStub.shutdown()" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdown()" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdown*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public void shutdown()" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdownNow()" + id: "shutdownNow()" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "shutdownNow()" + nameWithType: "GrpcSpeechStub.shutdownNow()" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdownNow()" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdownNow*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public void shutdownNow()" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.streamingRecognizeCallable()" + id: "streamingRecognizeCallable()" + parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + langs: + - "java" + name: "streamingRecognizeCallable()" + nameWithType: "GrpcSpeechStub.streamingRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.streamingRecognizeCallable()" + overload: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.streamingRecognizeCallable*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public BidiStreamingCallable streamingRecognizeCallable()" + return: + type: "com.google.api.gax.rpc.BidiStreamingCallable" +references: +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + name: "SpeechStubSettings" + nameWithType: "SpeechStubSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" +- uid: "com.google.api.gax.rpc.ClientContext" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.ClientContext" + name: "ClientContext" + fullName: "com.google.api.gax.rpc.ClientContext" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.GrpcSpeechStub*" + name: "GrpcSpeechStub" + nameWithType: "GrpcSpeechStub.GrpcSpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.GrpcSpeechStub" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.grpc.GrpcStubCallableFactory" + isExternal: true + spec.java: + - uid: "com.google.api.gax.grpc.GrpcStubCallableFactory" + name: "GrpcStubCallableFactory" + fullName: "com.google.api.gax.grpc.GrpcStubCallableFactory" + isExternal: true +- uid: "java.io.IOException" + href: "https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html" + spec.java: + - uid: "java.io.IOException" + name: "IOException" + fullName: "java.io.IOException" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create*" + name: "create" + nameWithType: "GrpcSpeechStub.create" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.create" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.longrunning.stub.GrpcOperationsStub" + isExternal: true + spec.java: + - uid: "com.google.longrunning.stub.GrpcOperationsStub" + name: "GrpcOperationsStub" + fullName: "com.google.longrunning.stub.GrpcOperationsStub" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.getOperationsStub*" + name: "getOperationsStub" + nameWithType: "GrpcSpeechStub.getOperationsStub" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.getOperationsStub" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallable" + name: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + name: "RecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.recognizeCallable*" + name: "recognizeCallable" + nameWithType: "GrpcSpeechStub.recognizeCallable" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.recognizeCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallable" + name: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.longrunning.Operation" + name: "Operation" + fullName: "com.google.longrunning.Operation" + isExternal: true + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeCallable*" + name: "longRunningRecognizeCallable" + nameWithType: "GrpcSpeechStub.longRunningRecognizeCallable" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.OperationCallable" + name: "OperationCallable" + fullName: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + name: "LongRunningRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeOperationCallable*" + name: "longRunningRecognizeOperationCallable" + nameWithType: "GrpcSpeechStub.longRunningRecognizeOperationCallable" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.longRunningRecognizeOperationCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.BidiStreamingCallable" + name: "BidiStreamingCallable" + fullName: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + name: "StreamingRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.streamingRecognizeCallable*" + name: "streamingRecognizeCallable" + nameWithType: "GrpcSpeechStub.streamingRecognizeCallable" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.streamingRecognizeCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.close*" + name: "close" + nameWithType: "GrpcSpeechStub.close" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.close" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdown*" + name: "shutdown" + nameWithType: "GrpcSpeechStub.shutdown" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdown" + package: "com.microsoft.samples.google.v1.stub" +- uid: "boolean" + href: "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html" + spec.java: + - uid: "boolean" + name: "boolean" + fullName: "boolean" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isShutdown*" + name: "isShutdown" + nameWithType: "GrpcSpeechStub.isShutdown" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isShutdown" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isTerminated*" + name: "isTerminated" + nameWithType: "GrpcSpeechStub.isTerminated" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.isTerminated" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdownNow*" + name: "shutdownNow" + nameWithType: "GrpcSpeechStub.shutdownNow" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.shutdownNow" + package: "com.microsoft.samples.google.v1.stub" +- uid: "java.lang.InterruptedException" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html" + spec.java: + - uid: "java.lang.InterruptedException" + name: "InterruptedException" + fullName: "java.lang.InterruptedException" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html" +- uid: "long" + href: "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html" + spec.java: + - uid: "long" + name: "long" + fullName: "long" + isExternal: false +- uid: "java.util.concurrent.TimeUnit" + href: "https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html" + spec.java: + - uid: "java.util.concurrent.TimeUnit" + name: "TimeUnit" + fullName: "java.util.concurrent.TimeUnit" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html" +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.awaitTermination*" + name: "awaitTermination" + nameWithType: "GrpcSpeechStub.awaitTermination" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.awaitTermination" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub" + name: "SpeechStub" + nameWithType: "SpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub" +- uid: "java.lang.Object.notify()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" + name: "Object.notify()" + nameWithType: "Object.notify()" + fullName: "java.lang.Object.notify()" +- uid: "java.lang.Object.wait()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" + name: "Object.wait()" + nameWithType: "Object.wait()" + fullName: "java.lang.Object.wait()" +- uid: "java.lang.Object.finalize()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--" + name: "Object.finalize()" + nameWithType: "Object.finalize()" + fullName: "java.lang.Object.finalize()" +- uid: "java.lang.Object.notifyAll()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" + name: "Object.notifyAll()" + nameWithType: "Object.notifyAll()" + fullName: "java.lang.Object.notifyAll()" +- uid: "java.lang.Object.clone()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--" + name: "Object.clone()" + nameWithType: "Object.clone()" + fullName: "java.lang.Object.clone()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub()" + name: "SpeechStub.getOperationsStub()" + nameWithType: "SpeechStub.getOperationsStub()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub()" +- uid: "java.lang.Object.equals(java.lang.Object)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" + name: "Object.equals(Object)" + nameWithType: "Object.equals(Object)" + fullName: "java.lang.Object.equals(java.lang.Object)" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.close()" + name: "SpeechStub.close()" + nameWithType: "SpeechStub.close()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.close()" +- uid: "java.lang.Object.toString()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--" + name: "Object.toString()" + nameWithType: "Object.toString()" + fullName: "java.lang.Object.toString()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable()" + name: "SpeechStub.streamingRecognizeCallable()" + nameWithType: "SpeechStub.streamingRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable()" + name: "SpeechStub.longRunningRecognizeOperationCallable()" + nameWithType: "SpeechStub.longRunningRecognizeOperationCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable()" +- uid: "java.lang.Object.getClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" + name: "Object.getClass()" + nameWithType: "Object.getClass()" + fullName: "java.lang.Object.getClass()" +- uid: "java.lang.Object.wait(long)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" + name: "Object.wait(long)" + nameWithType: "Object.wait(long)" + fullName: "java.lang.Object.wait(long)" +- uid: "java.lang.Object.hashCode()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--" + name: "Object.hashCode()" + nameWithType: "Object.hashCode()" + fullName: "java.lang.Object.hashCode()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub()" + name: "SpeechStub.getHttpJsonOperationsStub()" + nameWithType: "SpeechStub.getHttpJsonOperationsStub()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub()" +- uid: "java.lang.Object.wait(long,int)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-" + name: "Object.wait(long,int)" + nameWithType: "Object.wait(long,int)" + fullName: "java.lang.Object.wait(long,int)" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable()" + name: "SpeechStub.recognizeCallable()" + nameWithType: "SpeechStub.recognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable()" + name: "SpeechStub.longRunningRecognizeCallable()" + nameWithType: "SpeechStub.longRunningRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable()" +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + name: "UnaryCallable" + nameWithType: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeRequest,RecognizeResponse" + nameWithType: "RecognizeRequest,RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" + name: "LongRunningRecognizeRequest,Operation" + nameWithType: "LongRunningRecognizeRequest,Operation" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" +- uid: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + name: "OperationCallable" + nameWithType: "OperationCallable" + fullName: "com.google.api.gax.rpc.OperationCallable" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + nameWithType: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" +- uid: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + name: "BidiStreamingCallable" + nameWithType: "BidiStreamingCallable" + fullName: "com.google.api.gax.rpc.BidiStreamingCallable" +- uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeRequest,StreamingRecognizeResponse" + nameWithType: "StreamingRecognizeRequest,StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.yml new file mode 100644 index 00000000..20c0c19e --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.yml @@ -0,0 +1,731 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + id: "HttpJsonSpeechStub" + parent: "com.microsoft.samples.google.v1.stub" + children: + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.HttpJsonSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext)" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.HttpJsonSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext,com.google.api.gax.httpjson.HttpJsonStubCallableFactory)" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.awaitTermination(long,java.util.concurrent.TimeUnit)" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.close()" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create(com.google.api.gax.rpc.ClientContext)" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create(com.google.api.gax.rpc.ClientContext,com.google.api.gax.httpjson.HttpJsonStubCallableFactory)" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create(com.microsoft.samples.google.v1.stub.SpeechStubSettings)" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getHttpJsonOperationsStub()" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getMethodDescriptors()" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isShutdown()" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isTerminated()" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeCallable()" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeOperationCallable()" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.recognizeCallable()" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdown()" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdownNow()" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.streamingRecognizeCallable()" + langs: + - "java" + name: "HttpJsonSpeechStub" + nameWithType: "HttpJsonSpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + type: "Class" + package: "com.microsoft.samples.google.v1.stub" + summary: "REST stub implementation for the Speech service API.\n\n

This class is for advanced usage and reflects the underlying API directly." + syntax: + content: "public class HttpJsonSpeechStub extends SpeechStub" + inheritance: + - "java.lang.Object" + - "com.microsoft.samples.google.v1.stub.SpeechStub" + inheritedMembers: + - "com.microsoft.samples.google.v1.stub.SpeechStub.close()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable()" + - "java.lang.Object.clone()" + - "java.lang.Object.equals(java.lang.Object)" + - "java.lang.Object.finalize()" + - "java.lang.Object.getClass()" + - "java.lang.Object.hashCode()" + - "java.lang.Object.notify()" + - "java.lang.Object.notifyAll()" + - "java.lang.Object.toString()" + - "java.lang.Object.wait()" + - "java.lang.Object.wait(long)" + - "java.lang.Object.wait(long,int)" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.HttpJsonSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext)" + id: "HttpJsonSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext)" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "HttpJsonSpeechStub(SpeechStubSettings settings, ClientContext clientContext)" + nameWithType: "HttpJsonSpeechStub.HttpJsonSpeechStub(SpeechStubSettings settings, ClientContext clientContext)" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.HttpJsonSpeechStub(SpeechStubSettings settings, ClientContext clientContext)" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.HttpJsonSpeechStub*" + type: "Constructor" + package: "com.microsoft.samples.google.v1.stub" + summary: "Constructs an instance of HttpJsonSpeechStub, using the given settings. This is protected so\n that it is easy to make a subclass, but otherwise, the static factory methods should be\n preferred." + syntax: + content: "protected HttpJsonSpeechStub(SpeechStubSettings settings, ClientContext clientContext)" + parameters: + - id: "settings" + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + - id: "clientContext" + type: "com.google.api.gax.rpc.ClientContext" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.HttpJsonSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext,com.google.api.gax.httpjson.HttpJsonStubCallableFactory)" + id: "HttpJsonSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext,com.google.api.gax.httpjson.HttpJsonStubCallableFactory)" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "HttpJsonSpeechStub(SpeechStubSettings settings, ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)" + nameWithType: "HttpJsonSpeechStub.HttpJsonSpeechStub(SpeechStubSettings settings, ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.HttpJsonSpeechStub(SpeechStubSettings settings, ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.HttpJsonSpeechStub*" + type: "Constructor" + package: "com.microsoft.samples.google.v1.stub" + summary: "Constructs an instance of HttpJsonSpeechStub, using the given settings. This is protected so\n that it is easy to make a subclass, but otherwise, the static factory methods should be\n preferred." + syntax: + content: "protected HttpJsonSpeechStub(SpeechStubSettings settings, ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)" + parameters: + - id: "settings" + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + - id: "clientContext" + type: "com.google.api.gax.rpc.ClientContext" + - id: "callableFactory" + type: "com.google.api.gax.httpjson.HttpJsonStubCallableFactory" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.awaitTermination(long,java.util.concurrent.TimeUnit)" + id: "awaitTermination(long,java.util.concurrent.TimeUnit)" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "awaitTermination(long duration, TimeUnit unit)" + nameWithType: "HttpJsonSpeechStub.awaitTermination(long duration, TimeUnit unit)" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.awaitTermination(long duration, TimeUnit unit)" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.awaitTermination*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public boolean awaitTermination(long duration, TimeUnit unit)" + parameters: + - id: "duration" + type: "long" + - id: "unit" + type: "java.util.concurrent.TimeUnit" + return: + type: "boolean" + exceptions: + - type: "java.lang.InterruptedException" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.close()" + id: "close()" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "close()" + nameWithType: "HttpJsonSpeechStub.close()" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.close()" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.close*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.close()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public final void close()" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create(com.google.api.gax.rpc.ClientContext)" + id: "create(com.google.api.gax.rpc.ClientContext)" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "create(ClientContext clientContext)" + nameWithType: "HttpJsonSpeechStub.create(ClientContext clientContext)" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create(ClientContext clientContext)" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public static final HttpJsonSpeechStub create(ClientContext clientContext)" + parameters: + - id: "clientContext" + type: "com.google.api.gax.rpc.ClientContext" + return: + type: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + exceptions: + - type: "java.io.IOException" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create(com.google.api.gax.rpc.ClientContext,com.google.api.gax.httpjson.HttpJsonStubCallableFactory)" + id: "create(com.google.api.gax.rpc.ClientContext,com.google.api.gax.httpjson.HttpJsonStubCallableFactory)" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "create(ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)" + nameWithType: "HttpJsonSpeechStub.create(ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create(ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public static final HttpJsonSpeechStub create(ClientContext clientContext, HttpJsonStubCallableFactory callableFactory)" + parameters: + - id: "clientContext" + type: "com.google.api.gax.rpc.ClientContext" + - id: "callableFactory" + type: "com.google.api.gax.httpjson.HttpJsonStubCallableFactory" + return: + type: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + exceptions: + - type: "java.io.IOException" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create(com.microsoft.samples.google.v1.stub.SpeechStubSettings)" + id: "create(com.microsoft.samples.google.v1.stub.SpeechStubSettings)" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "create(SpeechStubSettings settings)" + nameWithType: "HttpJsonSpeechStub.create(SpeechStubSettings settings)" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create(SpeechStubSettings settings)" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public static final HttpJsonSpeechStub create(SpeechStubSettings settings)" + parameters: + - id: "settings" + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + return: + type: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + exceptions: + - type: "java.io.IOException" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getHttpJsonOperationsStub()" + id: "getHttpJsonOperationsStub()" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "getHttpJsonOperationsStub()" + nameWithType: "HttpJsonSpeechStub.getHttpJsonOperationsStub()" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getHttpJsonOperationsStub()" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getHttpJsonOperationsStub*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public HttpJsonOperationsStub getHttpJsonOperationsStub()" + return: + type: "com.google.api.gax.httpjson.longrunning.stub.HttpJsonOperationsStub" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getMethodDescriptors()" + id: "getMethodDescriptors()" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "getMethodDescriptors()" + nameWithType: "HttpJsonSpeechStub.getMethodDescriptors()" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getMethodDescriptors()" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getMethodDescriptors*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public static List getMethodDescriptors()" + return: + type: "java.util.List" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isShutdown()" + id: "isShutdown()" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "isShutdown()" + nameWithType: "HttpJsonSpeechStub.isShutdown()" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isShutdown()" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isShutdown*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public boolean isShutdown()" + return: + type: "boolean" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isTerminated()" + id: "isTerminated()" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "isTerminated()" + nameWithType: "HttpJsonSpeechStub.isTerminated()" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isTerminated()" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isTerminated*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public boolean isTerminated()" + return: + type: "boolean" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeCallable()" + id: "longRunningRecognizeCallable()" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "longRunningRecognizeCallable()" + nameWithType: "HttpJsonSpeechStub.longRunningRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeCallable()" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeCallable*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public UnaryCallable longRunningRecognizeCallable()" + return: + type: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeOperationCallable()" + id: "longRunningRecognizeOperationCallable()" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "longRunningRecognizeOperationCallable()" + nameWithType: "HttpJsonSpeechStub.longRunningRecognizeOperationCallable()" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeOperationCallable()" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeOperationCallable*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public OperationCallable longRunningRecognizeOperationCallable()" + return: + type: "com.google.api.gax.rpc.OperationCallable" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.recognizeCallable()" + id: "recognizeCallable()" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "recognizeCallable()" + nameWithType: "HttpJsonSpeechStub.recognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.recognizeCallable()" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.recognizeCallable*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public UnaryCallable recognizeCallable()" + return: + type: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdown()" + id: "shutdown()" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "shutdown()" + nameWithType: "HttpJsonSpeechStub.shutdown()" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdown()" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdown*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public void shutdown()" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdownNow()" + id: "shutdownNow()" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "shutdownNow()" + nameWithType: "HttpJsonSpeechStub.shutdownNow()" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdownNow()" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdownNow*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public void shutdownNow()" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.streamingRecognizeCallable()" + id: "streamingRecognizeCallable()" + parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + langs: + - "java" + name: "streamingRecognizeCallable()" + nameWithType: "HttpJsonSpeechStub.streamingRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.streamingRecognizeCallable()" + overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.streamingRecognizeCallable*" + overridden: "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public BidiStreamingCallable streamingRecognizeCallable()" + return: + type: "com.google.api.gax.rpc.BidiStreamingCallable" +references: +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + name: "SpeechStubSettings" + nameWithType: "SpeechStubSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" +- uid: "com.google.api.gax.rpc.ClientContext" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.ClientContext" + name: "ClientContext" + fullName: "com.google.api.gax.rpc.ClientContext" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.HttpJsonSpeechStub*" + name: "HttpJsonSpeechStub" + nameWithType: "HttpJsonSpeechStub.HttpJsonSpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.HttpJsonSpeechStub" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.httpjson.HttpJsonStubCallableFactory" + isExternal: true + spec.java: + - uid: "com.google.api.gax.httpjson.HttpJsonStubCallableFactory" + name: "HttpJsonStubCallableFactory" + fullName: "com.google.api.gax.httpjson.HttpJsonStubCallableFactory" + isExternal: true +- uid: "java.io.IOException" + href: "https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html" + spec.java: + - uid: "java.io.IOException" + name: "IOException" + fullName: "java.io.IOException" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create*" + name: "create" + nameWithType: "HttpJsonSpeechStub.create" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.create" + package: "com.microsoft.samples.google.v1.stub" +- uid: "java.util.List" + href: "https://docs.oracle.com/javase/8/docs/api/java/util/List.html" + spec.java: + - uid: "java.util.List" + name: "List" + fullName: "java.util.List" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/util/List.html" + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.api.gax.httpjson.ApiMethodDescriptor" + name: "ApiMethodDescriptor" + fullName: "com.google.api.gax.httpjson.ApiMethodDescriptor" + isExternal: true + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getMethodDescriptors*" + name: "getMethodDescriptors" + nameWithType: "HttpJsonSpeechStub.getMethodDescriptors" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getMethodDescriptors" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.httpjson.longrunning.stub.HttpJsonOperationsStub" + isExternal: true + spec.java: + - uid: "com.google.api.gax.httpjson.longrunning.stub.HttpJsonOperationsStub" + name: "HttpJsonOperationsStub" + fullName: "com.google.api.gax.httpjson.longrunning.stub.HttpJsonOperationsStub" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getHttpJsonOperationsStub*" + name: "getHttpJsonOperationsStub" + nameWithType: "HttpJsonSpeechStub.getHttpJsonOperationsStub" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getHttpJsonOperationsStub" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallable" + name: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + name: "RecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.recognizeCallable*" + name: "recognizeCallable" + nameWithType: "HttpJsonSpeechStub.recognizeCallable" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.recognizeCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallable" + name: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.longrunning.Operation" + name: "Operation" + fullName: "com.google.longrunning.Operation" + isExternal: true + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeCallable*" + name: "longRunningRecognizeCallable" + nameWithType: "HttpJsonSpeechStub.longRunningRecognizeCallable" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.OperationCallable" + name: "OperationCallable" + fullName: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + name: "LongRunningRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeOperationCallable*" + name: "longRunningRecognizeOperationCallable" + nameWithType: "HttpJsonSpeechStub.longRunningRecognizeOperationCallable" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.longRunningRecognizeOperationCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.BidiStreamingCallable" + name: "BidiStreamingCallable" + fullName: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + name: "StreamingRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.streamingRecognizeCallable*" + name: "streamingRecognizeCallable" + nameWithType: "HttpJsonSpeechStub.streamingRecognizeCallable" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.streamingRecognizeCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.close*" + name: "close" + nameWithType: "HttpJsonSpeechStub.close" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.close" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdown*" + name: "shutdown" + nameWithType: "HttpJsonSpeechStub.shutdown" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdown" + package: "com.microsoft.samples.google.v1.stub" +- uid: "boolean" + href: "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html" + spec.java: + - uid: "boolean" + name: "boolean" + fullName: "boolean" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isShutdown*" + name: "isShutdown" + nameWithType: "HttpJsonSpeechStub.isShutdown" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isShutdown" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isTerminated*" + name: "isTerminated" + nameWithType: "HttpJsonSpeechStub.isTerminated" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.isTerminated" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdownNow*" + name: "shutdownNow" + nameWithType: "HttpJsonSpeechStub.shutdownNow" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.shutdownNow" + package: "com.microsoft.samples.google.v1.stub" +- uid: "java.lang.InterruptedException" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html" + spec.java: + - uid: "java.lang.InterruptedException" + name: "InterruptedException" + fullName: "java.lang.InterruptedException" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html" +- uid: "long" + href: "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html" + spec.java: + - uid: "long" + name: "long" + fullName: "long" + isExternal: false +- uid: "java.util.concurrent.TimeUnit" + href: "https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html" + spec.java: + - uid: "java.util.concurrent.TimeUnit" + name: "TimeUnit" + fullName: "java.util.concurrent.TimeUnit" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.awaitTermination*" + name: "awaitTermination" + nameWithType: "HttpJsonSpeechStub.awaitTermination" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.awaitTermination" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub" + name: "SpeechStub" + nameWithType: "SpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub" +- uid: "java.lang.Object.notify()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" + name: "Object.notify()" + nameWithType: "Object.notify()" + fullName: "java.lang.Object.notify()" +- uid: "java.lang.Object.wait()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" + name: "Object.wait()" + nameWithType: "Object.wait()" + fullName: "java.lang.Object.wait()" +- uid: "java.lang.Object.finalize()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--" + name: "Object.finalize()" + nameWithType: "Object.finalize()" + fullName: "java.lang.Object.finalize()" +- uid: "java.lang.Object.notifyAll()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" + name: "Object.notifyAll()" + nameWithType: "Object.notifyAll()" + fullName: "java.lang.Object.notifyAll()" +- uid: "java.lang.Object.clone()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--" + name: "Object.clone()" + nameWithType: "Object.clone()" + fullName: "java.lang.Object.clone()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub()" + name: "SpeechStub.getOperationsStub()" + nameWithType: "SpeechStub.getOperationsStub()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub()" +- uid: "java.lang.Object.equals(java.lang.Object)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" + name: "Object.equals(Object)" + nameWithType: "Object.equals(Object)" + fullName: "java.lang.Object.equals(java.lang.Object)" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.close()" + name: "SpeechStub.close()" + nameWithType: "SpeechStub.close()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.close()" +- uid: "java.lang.Object.toString()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--" + name: "Object.toString()" + nameWithType: "Object.toString()" + fullName: "java.lang.Object.toString()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable()" + name: "SpeechStub.streamingRecognizeCallable()" + nameWithType: "SpeechStub.streamingRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable()" + name: "SpeechStub.longRunningRecognizeOperationCallable()" + nameWithType: "SpeechStub.longRunningRecognizeOperationCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable()" +- uid: "java.lang.Object.getClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" + name: "Object.getClass()" + nameWithType: "Object.getClass()" + fullName: "java.lang.Object.getClass()" +- uid: "java.lang.Object.wait(long)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" + name: "Object.wait(long)" + nameWithType: "Object.wait(long)" + fullName: "java.lang.Object.wait(long)" +- uid: "java.lang.Object.hashCode()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--" + name: "Object.hashCode()" + nameWithType: "Object.hashCode()" + fullName: "java.lang.Object.hashCode()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub()" + name: "SpeechStub.getHttpJsonOperationsStub()" + nameWithType: "SpeechStub.getHttpJsonOperationsStub()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub()" +- uid: "java.lang.Object.wait(long,int)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-" + name: "Object.wait(long,int)" + nameWithType: "Object.wait(long,int)" + fullName: "java.lang.Object.wait(long,int)" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable()" + name: "SpeechStub.recognizeCallable()" + nameWithType: "SpeechStub.recognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable()" + name: "SpeechStub.longRunningRecognizeCallable()" + nameWithType: "SpeechStub.longRunningRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable()" +- uid: "java.util.List" + href: "https://docs.oracle.com/javase/8/docs/api/java/util/List.html" + name: "List" + nameWithType: "List" + fullName: "java.util.List" +- uid: "com.google.api.gax.httpjson.ApiMethodDescriptor" + isExternal: true + name: "ApiMethodDescriptor" + nameWithType: "ApiMethodDescriptor" + fullName: "com.google.api.gax.httpjson.ApiMethodDescriptor" +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + name: "UnaryCallable" + nameWithType: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeRequest,RecognizeResponse" + nameWithType: "RecognizeRequest,RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" + name: "LongRunningRecognizeRequest,Operation" + nameWithType: "LongRunningRecognizeRequest,Operation" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" +- uid: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + name: "OperationCallable" + nameWithType: "OperationCallable" + fullName: "com.google.api.gax.rpc.OperationCallable" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + nameWithType: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" +- uid: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + name: "BidiStreamingCallable" + nameWithType: "BidiStreamingCallable" + fullName: "com.google.api.gax.rpc.BidiStreamingCallable" +- uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeRequest,StreamingRecognizeResponse" + nameWithType: "StreamingRecognizeRequest,StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStub.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStub.yml new file mode 100644 index 00000000..149929f1 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStub.yml @@ -0,0 +1,405 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub" + id: "SpeechStub" + parent: "com.microsoft.samples.google.v1.stub" + children: + - "com.microsoft.samples.google.v1.stub.SpeechStub.SpeechStub()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.close()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable()" + - "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable()" + langs: + - "java" + name: "SpeechStub" + nameWithType: "SpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub" + type: "Class" + package: "com.microsoft.samples.google.v1.stub" + summary: "Base stub class for the Speech service API.\n\n

This class is for advanced usage and reflects the underlying API directly." + syntax: + content: "public abstract class SpeechStub implements BackgroundResource" + inheritance: + - "java.lang.Object" + implements: + - "com.google.api.gax.core.BackgroundResource" + inheritedMembers: + - "java.lang.Object.clone()" + - "java.lang.Object.equals(java.lang.Object)" + - "java.lang.Object.finalize()" + - "java.lang.Object.getClass()" + - "java.lang.Object.hashCode()" + - "java.lang.Object.notify()" + - "java.lang.Object.notifyAll()" + - "java.lang.Object.toString()" + - "java.lang.Object.wait()" + - "java.lang.Object.wait(long)" + - "java.lang.Object.wait(long,int)" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.SpeechStub()" + id: "SpeechStub()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStub" + langs: + - "java" + name: "SpeechStub()" + nameWithType: "SpeechStub.SpeechStub()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.SpeechStub()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStub.SpeechStub*" + type: "Constructor" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public SpeechStub()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.close()" + id: "close()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStub" + langs: + - "java" + name: "close()" + nameWithType: "SpeechStub.close()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.close()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStub.close*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public abstract void close()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub()" + id: "getHttpJsonOperationsStub()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStub" + langs: + - "java" + name: "getHttpJsonOperationsStub()" + nameWithType: "SpeechStub.getHttpJsonOperationsStub()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public OperationsStub getHttpJsonOperationsStub()" + return: + type: "com.google.api.gax.httpjson.longrunning.stub.OperationsStub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub()" + id: "getOperationsStub()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStub" + langs: + - "java" + name: "getOperationsStub()" + nameWithType: "SpeechStub.getOperationsStub()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public OperationsStub getOperationsStub()" + return: + type: "com.google.longrunning.stub.OperationsStub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable()" + id: "longRunningRecognizeCallable()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStub" + langs: + - "java" + name: "longRunningRecognizeCallable()" + nameWithType: "SpeechStub.longRunningRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public UnaryCallable longRunningRecognizeCallable()" + return: + type: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable()" + id: "longRunningRecognizeOperationCallable()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStub" + langs: + - "java" + name: "longRunningRecognizeOperationCallable()" + nameWithType: "SpeechStub.longRunningRecognizeOperationCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public OperationCallable longRunningRecognizeOperationCallable()" + return: + type: "com.google.api.gax.rpc.OperationCallable" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable()" + id: "recognizeCallable()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStub" + langs: + - "java" + name: "recognizeCallable()" + nameWithType: "SpeechStub.recognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public UnaryCallable recognizeCallable()" + return: + type: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable()" + id: "streamingRecognizeCallable()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStub" + langs: + - "java" + name: "streamingRecognizeCallable()" + nameWithType: "SpeechStub.streamingRecognizeCallable()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public BidiStreamingCallable streamingRecognizeCallable()" + return: + type: "com.google.api.gax.rpc.BidiStreamingCallable" +references: +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.SpeechStub*" + name: "SpeechStub" + nameWithType: "SpeechStub.SpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.SpeechStub" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.longrunning.stub.OperationsStub" + isExternal: true + spec.java: + - uid: "com.google.longrunning.stub.OperationsStub" + name: "OperationsStub" + fullName: "com.google.longrunning.stub.OperationsStub" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub*" + name: "getOperationsStub" + nameWithType: "SpeechStub.getOperationsStub" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.getOperationsStub" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.httpjson.longrunning.stub.OperationsStub" + isExternal: true + spec.java: + - uid: "com.google.api.gax.httpjson.longrunning.stub.OperationsStub" + name: "OperationsStub" + fullName: "com.google.api.gax.httpjson.longrunning.stub.OperationsStub" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub*" + name: "getHttpJsonOperationsStub" + nameWithType: "SpeechStub.getHttpJsonOperationsStub" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.getHttpJsonOperationsStub" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallable" + name: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + name: "RecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable*" + name: "recognizeCallable" + nameWithType: "SpeechStub.recognizeCallable" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.recognizeCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.OperationCallable" + name: "OperationCallable" + fullName: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + name: "LongRunningRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable*" + name: "longRunningRecognizeOperationCallable" + nameWithType: "SpeechStub.longRunningRecognizeOperationCallable" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeOperationCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallable" + name: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.longrunning.Operation" + name: "Operation" + fullName: "com.google.longrunning.Operation" + isExternal: true + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable*" + name: "longRunningRecognizeCallable" + nameWithType: "SpeechStub.longRunningRecognizeCallable" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.longRunningRecognizeCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.BidiStreamingCallable" + name: "BidiStreamingCallable" + fullName: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + name: "StreamingRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable*" + name: "streamingRecognizeCallable" + nameWithType: "SpeechStub.streamingRecognizeCallable" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.streamingRecognizeCallable" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub.close*" + name: "close" + nameWithType: "SpeechStub.close" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub.close" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.core.BackgroundResource" + isExternal: true + name: "BackgroundResource" + nameWithType: "BackgroundResource" + fullName: "com.google.api.gax.core.BackgroundResource" +- uid: "java.lang.Object.notify()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" + name: "Object.notify()" + nameWithType: "Object.notify()" + fullName: "java.lang.Object.notify()" +- uid: "java.lang.Object.wait()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" + name: "Object.wait()" + nameWithType: "Object.wait()" + fullName: "java.lang.Object.wait()" +- uid: "java.lang.Object.finalize()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--" + name: "Object.finalize()" + nameWithType: "Object.finalize()" + fullName: "java.lang.Object.finalize()" +- uid: "java.lang.Object.clone()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--" + name: "Object.clone()" + nameWithType: "Object.clone()" + fullName: "java.lang.Object.clone()" +- uid: "java.lang.Object.notifyAll()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" + name: "Object.notifyAll()" + nameWithType: "Object.notifyAll()" + fullName: "java.lang.Object.notifyAll()" +- uid: "java.lang.Object.equals(java.lang.Object)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" + name: "Object.equals(Object)" + nameWithType: "Object.equals(Object)" + fullName: "java.lang.Object.equals(java.lang.Object)" +- uid: "java.lang.Object.getClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" + name: "Object.getClass()" + nameWithType: "Object.getClass()" + fullName: "java.lang.Object.getClass()" +- uid: "java.lang.Object.wait(long)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" + name: "Object.wait(long)" + nameWithType: "Object.wait(long)" + fullName: "java.lang.Object.wait(long)" +- uid: "java.lang.Object.hashCode()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--" + name: "Object.hashCode()" + nameWithType: "Object.hashCode()" + fullName: "java.lang.Object.hashCode()" +- uid: "java.lang.Object.wait(long,int)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-" + name: "Object.wait(long,int)" + nameWithType: "Object.wait(long,int)" + fullName: "java.lang.Object.wait(long,int)" +- uid: "java.lang.Object.toString()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--" + name: "Object.toString()" + nameWithType: "Object.toString()" + fullName: "java.lang.Object.toString()" +- uid: "com.google.api.gax.rpc.UnaryCallable" + isExternal: true + name: "UnaryCallable" + nameWithType: "UnaryCallable" + fullName: "com.google.api.gax.rpc.UnaryCallable" +- uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeRequest,RecognizeResponse" + nameWithType: "RecognizeRequest,RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" +- uid: "com.google.api.gax.rpc.OperationCallable" + isExternal: true + name: "OperationCallable" + nameWithType: "OperationCallable" + fullName: "com.google.api.gax.rpc.OperationCallable" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + nameWithType: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" + name: "LongRunningRecognizeRequest,Operation" + nameWithType: "LongRunningRecognizeRequest,Operation" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" +- uid: "com.google.api.gax.rpc.BidiStreamingCallable" + isExternal: true + name: "BidiStreamingCallable" + nameWithType: "BidiStreamingCallable" + fullName: "com.google.api.gax.rpc.BidiStreamingCallable" +- uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeRequest,StreamingRecognizeResponse" + nameWithType: "StreamingRecognizeRequest,StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml new file mode 100644 index 00000000..a2e61693 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml @@ -0,0 +1,759 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + id: "Builder" + parent: "com.microsoft.samples.google.v1.stub" + children: + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder(com.google.api.gax.rpc.ClientContext)" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder(com.microsoft.samples.google.v1.stub.SpeechStubSettings)" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.applyToAllUnaryMethods(com.google.api.core.ApiFunction,java.lang.Void>)" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.build()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeOperationSettings()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeSettings()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.recognizeSettings()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.streamingRecognizeSettings()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.unaryMethodSettingsBuilders()" + langs: + - "java" + name: "SpeechStubSettings.Builder" + nameWithType: "SpeechStubSettings.Builder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + type: "Class" + package: "com.microsoft.samples.google.v1.stub" + summary: "Builder for SpeechStubSettings." + syntax: + content: "public static class SpeechStubSettings.Builder extends StubSettings.Builder" + inheritance: + - "java.lang.Object" + - "com.google.api.gax.rpc.StubSettings.Builder" + inheritedMembers: + - "com.google.api.gax.rpc.StubSettings.Builder.build()" + - "com.google.api.gax.rpc.StubSettings.Builder.applyToAllUnaryMethods(java.lang.Iterable>,com.google.api.core.ApiFunction,java.lang.Void>)" + - "com.google.api.gax.rpc.StubSettings.Builder.getBackgroundExecutorProvider()" + - "com.google.api.gax.rpc.StubSettings.Builder.getClock()" + - "com.google.api.gax.rpc.StubSettings.Builder.getCredentialsProvider()" + - "com.google.api.gax.rpc.StubSettings.Builder.getEndpoint()" + - "com.google.api.gax.rpc.StubSettings.Builder.getExecutorProvider()" + - "com.google.api.gax.rpc.StubSettings.Builder.getHeaderProvider()" + - "com.google.api.gax.rpc.StubSettings.Builder.getInternalHeaderProvider()" + - "com.google.api.gax.rpc.StubSettings.Builder.getMtlsEndpoint()" + - "com.google.api.gax.rpc.StubSettings.Builder.getQuotaProjectId()" + - "com.google.api.gax.rpc.StubSettings.Builder.getStreamWatchdogCheckInterval()" + - "com.google.api.gax.rpc.StubSettings.Builder.getStreamWatchdogProvider()" + - "com.google.api.gax.rpc.StubSettings.Builder.getTracerFactory()" + - "com.google.api.gax.rpc.StubSettings.Builder.getTransportChannelProvider()" + - "com.google.api.gax.rpc.StubSettings.Builder.self()" + - "com.google.api.gax.rpc.StubSettings.Builder.setBackgroundExecutorProvider(com.google.api.gax.core.ExecutorProvider)" + - "com.google.api.gax.rpc.StubSettings.Builder.setClock(com.google.api.core.ApiClock)" + - "com.google.api.gax.rpc.StubSettings.Builder.setCredentialsProvider(com.google.api.gax.core.CredentialsProvider)" + - "com.google.api.gax.rpc.StubSettings.Builder.setEndpoint(java.lang.String)" + - "com.google.api.gax.rpc.StubSettings.Builder.setExecutorProvider(com.google.api.gax.core.ExecutorProvider)" + - "com.google.api.gax.rpc.StubSettings.Builder.setHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" + - "com.google.api.gax.rpc.StubSettings.Builder.setInternalHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" + - "com.google.api.gax.rpc.StubSettings.Builder.setMtlsEndpoint(java.lang.String)" + - "com.google.api.gax.rpc.StubSettings.Builder.setQuotaProjectId(java.lang.String)" + - "com.google.api.gax.rpc.StubSettings.Builder.setStreamWatchdogCheckInterval(org.threeten.bp.Duration)" + - "com.google.api.gax.rpc.StubSettings.Builder.setStreamWatchdogProvider(com.google.api.gax.rpc.WatchdogProvider)" + - "com.google.api.gax.rpc.StubSettings.Builder.setSwitchToMtlsEndpointAllowed(boolean)" + - "com.google.api.gax.rpc.StubSettings.Builder.setTracerFactory(com.google.api.gax.tracing.ApiTracerFactory)" + - "com.google.api.gax.rpc.StubSettings.Builder.setTransportChannelProvider(com.google.api.gax.rpc.TransportChannelProvider)" + - "com.google.api.gax.rpc.StubSettings.Builder.toString()" + - "java.lang.Object.clone()" + - "java.lang.Object.equals(java.lang.Object)" + - "java.lang.Object.finalize()" + - "java.lang.Object.getClass()" + - "java.lang.Object.hashCode()" + - "java.lang.Object.notify()" + - "java.lang.Object.notifyAll()" + - "java.lang.Object.wait()" + - "java.lang.Object.wait(long)" + - "java.lang.Object.wait(long,int)" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder()" + id: "Builder()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + langs: + - "java" + name: "Builder()" + nameWithType: "SpeechStubSettings.Builder.Builder()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder*" + type: "Constructor" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "protected Builder()" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder(com.google.api.gax.rpc.ClientContext)" + id: "Builder(com.google.api.gax.rpc.ClientContext)" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + langs: + - "java" + name: "Builder(ClientContext clientContext)" + nameWithType: "SpeechStubSettings.Builder.Builder(ClientContext clientContext)" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder(ClientContext clientContext)" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder*" + type: "Constructor" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "protected Builder(ClientContext clientContext)" + parameters: + - id: "clientContext" + type: "com.google.api.gax.rpc.ClientContext" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder(com.microsoft.samples.google.v1.stub.SpeechStubSettings)" + id: "Builder(com.microsoft.samples.google.v1.stub.SpeechStubSettings)" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + langs: + - "java" + name: "Builder(SpeechStubSettings settings)" + nameWithType: "SpeechStubSettings.Builder.Builder(SpeechStubSettings settings)" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder(SpeechStubSettings settings)" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder*" + type: "Constructor" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "protected Builder(SpeechStubSettings settings)" + parameters: + - id: "settings" + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.applyToAllUnaryMethods(com.google.api.core.ApiFunction,java.lang.Void>)" + id: "applyToAllUnaryMethods(com.google.api.core.ApiFunction,java.lang.Void>)" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + langs: + - "java" + name: "applyToAllUnaryMethods(ApiFunction,Void> settingsUpdater)" + nameWithType: "SpeechStubSettings.Builder.applyToAllUnaryMethods(ApiFunction,Void> settingsUpdater)" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.applyToAllUnaryMethods(ApiFunction,Void> settingsUpdater)" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.applyToAllUnaryMethods*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Applies the given settings updater function to all of the unary API methods in this service.\n\n

Note: This method does not support applying settings to streaming methods." + syntax: + content: "public SpeechStubSettings.Builder applyToAllUnaryMethods(ApiFunction,Void> settingsUpdater)" + parameters: + - id: "settingsUpdater" + type: "com.google.api.core.ApiFunction,java.lang.Void>" + return: + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.build()" + id: "build()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + langs: + - "java" + name: "build()" + nameWithType: "SpeechStubSettings.Builder.build()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.build()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.build*" + overridden: "com.google.api.gax.rpc.StubSettings.Builder.build()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public SpeechStubSettings build()" + return: + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + exceptions: + - type: "java.io.IOException" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeOperationSettings()" + id: "longRunningRecognizeOperationSettings()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + langs: + - "java" + name: "longRunningRecognizeOperationSettings()" + nameWithType: "SpeechStubSettings.Builder.longRunningRecognizeOperationSettings()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeOperationSettings()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeOperationSettings*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns the builder for the settings used for calls to longRunningRecognize." + syntax: + content: "public OperationCallSettings.Builder longRunningRecognizeOperationSettings()" + return: + type: "com.google.api.gax.rpc.OperationCallSettings.Builder" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeSettings()" + id: "longRunningRecognizeSettings()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + langs: + - "java" + name: "longRunningRecognizeSettings()" + nameWithType: "SpeechStubSettings.Builder.longRunningRecognizeSettings()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeSettings()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeSettings*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns the builder for the settings used for calls to longRunningRecognize." + syntax: + content: "public UnaryCallSettings.Builder longRunningRecognizeSettings()" + return: + type: "com.google.api.gax.rpc.UnaryCallSettings.Builder" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.recognizeSettings()" + id: "recognizeSettings()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + langs: + - "java" + name: "recognizeSettings()" + nameWithType: "SpeechStubSettings.Builder.recognizeSettings()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.recognizeSettings()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.recognizeSettings*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns the builder for the settings used for calls to recognize." + syntax: + content: "public UnaryCallSettings.Builder recognizeSettings()" + return: + type: "com.google.api.gax.rpc.UnaryCallSettings.Builder" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.streamingRecognizeSettings()" + id: "streamingRecognizeSettings()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + langs: + - "java" + name: "streamingRecognizeSettings()" + nameWithType: "SpeechStubSettings.Builder.streamingRecognizeSettings()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.streamingRecognizeSettings()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.streamingRecognizeSettings*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns the builder for the settings used for calls to streamingRecognize." + syntax: + content: "public StreamingCallSettings.Builder streamingRecognizeSettings()" + return: + type: "com.google.api.gax.rpc.StreamingCallSettings.Builder" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.unaryMethodSettingsBuilders()" + id: "unaryMethodSettingsBuilders()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + langs: + - "java" + name: "unaryMethodSettingsBuilders()" + nameWithType: "SpeechStubSettings.Builder.unaryMethodSettingsBuilders()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.unaryMethodSettingsBuilders()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.unaryMethodSettingsBuilders*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public ImmutableList> unaryMethodSettingsBuilders()" + return: + type: "com.google.common.collect.ImmutableList>" +references: +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder*" + name: "Builder" + nameWithType: "SpeechStubSettings.Builder.Builder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.Builder" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.ClientContext" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.ClientContext" + name: "ClientContext" + fullName: "com.google.api.gax.rpc.ClientContext" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + name: "SpeechStubSettings" + nameWithType: "SpeechStubSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" +- uid: "com.google.api.core.ApiFunction,java.lang.Void>" + isExternal: true + spec.java: + - uid: "com.google.api.core.ApiFunction" + name: "ApiFunction" + fullName: "com.google.api.core.ApiFunction" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.api.gax.rpc.UnaryCallSettings.Builder" + name: "Builder" + fullName: "com.google.api.gax.rpc.UnaryCallSettings.Builder" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "?" + name: "?" + fullName: "?" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "?" + name: "?" + fullName: "?" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "java.lang.Void" + name: "Void" + fullName: "java.lang.Void" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html" + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.applyToAllUnaryMethods*" + name: "applyToAllUnaryMethods" + nameWithType: "SpeechStubSettings.Builder.applyToAllUnaryMethods" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.applyToAllUnaryMethods" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.common.collect.ImmutableList>" + spec.java: + - uid: "com.google.common.collect.ImmutableList" + name: "ImmutableList" + fullName: "com.google.common.collect.ImmutableList" + isExternal: false + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.api.gax.rpc.UnaryCallSettings.Builder" + name: "Builder" + fullName: "com.google.api.gax.rpc.UnaryCallSettings.Builder" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "?" + name: "?" + fullName: "?" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "?" + name: "?" + fullName: "?" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.unaryMethodSettingsBuilders*" + name: "unaryMethodSettingsBuilders" + nameWithType: "SpeechStubSettings.Builder.unaryMethodSettingsBuilders" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.unaryMethodSettingsBuilders" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.UnaryCallSettings.Builder" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallSettings.Builder" + name: "Builder" + fullName: "com.google.api.gax.rpc.UnaryCallSettings.Builder" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + name: "RecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.recognizeSettings*" + name: "recognizeSettings" + nameWithType: "SpeechStubSettings.Builder.recognizeSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.recognizeSettings" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.UnaryCallSettings.Builder" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallSettings.Builder" + name: "Builder" + fullName: "com.google.api.gax.rpc.UnaryCallSettings.Builder" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.longrunning.Operation" + name: "Operation" + fullName: "com.google.longrunning.Operation" + isExternal: true + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeSettings*" + name: "longRunningRecognizeSettings" + nameWithType: "SpeechStubSettings.Builder.longRunningRecognizeSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeSettings" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.OperationCallSettings.Builder" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.OperationCallSettings.Builder" + name: "Builder" + fullName: "com.google.api.gax.rpc.OperationCallSettings.Builder" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + name: "LongRunningRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeOperationSettings*" + name: "longRunningRecognizeOperationSettings" + nameWithType: "SpeechStubSettings.Builder.longRunningRecognizeOperationSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeOperationSettings" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.StreamingCallSettings.Builder" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.StreamingCallSettings.Builder" + name: "Builder" + fullName: "com.google.api.gax.rpc.StreamingCallSettings.Builder" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + name: "StreamingRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.streamingRecognizeSettings*" + name: "streamingRecognizeSettings" + nameWithType: "SpeechStubSettings.Builder.streamingRecognizeSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.streamingRecognizeSettings" + package: "com.microsoft.samples.google.v1.stub" +- uid: "java.io.IOException" + href: "https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html" + spec.java: + - uid: "java.io.IOException" + name: "IOException" + fullName: "java.io.IOException" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.build*" + name: "build" + nameWithType: "SpeechStubSettings.Builder.build" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.build" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.StubSettings.Builder" + isExternal: true + name: "StubSettings.Builder" + nameWithType: "StubSettings.Builder" + fullName: "com.google.api.gax.rpc.StubSettings.Builder" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getCredentialsProvider()" + isExternal: true + name: "StubSettings.Builder.getCredentialsProvider()" + nameWithType: "StubSettings.Builder.getCredentialsProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getCredentialsProvider()" +- uid: "java.lang.Object.wait()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" + name: "Object.wait()" + nameWithType: "Object.wait()" + fullName: "java.lang.Object.wait()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setEndpoint(java.lang.String)" + isExternal: true + name: "StubSettings.Builder.setEndpoint(String)" + nameWithType: "StubSettings.Builder.setEndpoint(String)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setEndpoint(java.lang.String)" +- uid: "java.lang.Object.finalize()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--" + name: "Object.finalize()" + nameWithType: "Object.finalize()" + fullName: "java.lang.Object.finalize()" +- uid: "java.lang.Object.clone()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--" + name: "Object.clone()" + nameWithType: "Object.clone()" + fullName: "java.lang.Object.clone()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getClock()" + isExternal: true + name: "StubSettings.Builder.getClock()" + nameWithType: "StubSettings.Builder.getClock()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getClock()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getBackgroundExecutorProvider()" + isExternal: true + name: "StubSettings.Builder.getBackgroundExecutorProvider()" + nameWithType: "StubSettings.Builder.getBackgroundExecutorProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getBackgroundExecutorProvider()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setClock(com.google.api.core.ApiClock)" + isExternal: true + name: "StubSettings.Builder.setClock(ApiClock)" + nameWithType: "StubSettings.Builder.setClock(ApiClock)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setClock(com.google.api.core.ApiClock)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setTransportChannelProvider(com.google.api.gax.rpc.TransportChannelProvider)" + isExternal: true + name: "StubSettings.Builder.setTransportChannelProvider(TransportChannelProvider)" + nameWithType: "StubSettings.Builder.setTransportChannelProvider(TransportChannelProvider)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setTransportChannelProvider(com.google.api.gax.rpc.TransportChannelProvider)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setStreamWatchdogCheckInterval(org.threeten.bp.Duration)" + isExternal: true + name: "StubSettings.Builder.setStreamWatchdogCheckInterval(Duration)" + nameWithType: "StubSettings.Builder.setStreamWatchdogCheckInterval(Duration)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setStreamWatchdogCheckInterval(org.threeten.bp.Duration)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setTracerFactory(com.google.api.gax.tracing.ApiTracerFactory)" + isExternal: true + name: "StubSettings.Builder.setTracerFactory(ApiTracerFactory)" + nameWithType: "StubSettings.Builder.setTracerFactory(ApiTracerFactory)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setTracerFactory(com.google.api.gax.tracing.ApiTracerFactory)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setSwitchToMtlsEndpointAllowed(boolean)" + isExternal: true + name: "StubSettings.Builder.setSwitchToMtlsEndpointAllowed(boolean)" + nameWithType: "StubSettings.Builder.setSwitchToMtlsEndpointAllowed(boolean)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setSwitchToMtlsEndpointAllowed(boolean)" +- uid: "java.lang.Object.wait(long)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" + name: "Object.wait(long)" + nameWithType: "Object.wait(long)" + fullName: "java.lang.Object.wait(long)" +- uid: "java.lang.Object.getClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" + name: "Object.getClass()" + nameWithType: "Object.getClass()" + fullName: "java.lang.Object.getClass()" +- uid: "java.lang.Object.hashCode()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--" + name: "Object.hashCode()" + nameWithType: "Object.hashCode()" + fullName: "java.lang.Object.hashCode()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.toString()" + isExternal: true + name: "StubSettings.Builder.toString()" + nameWithType: "StubSettings.Builder.toString()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.toString()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.self()" + isExternal: true + name: "StubSettings.Builder.self()" + nameWithType: "StubSettings.Builder.self()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.self()" +- uid: "java.lang.Object.wait(long,int)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-" + name: "Object.wait(long,int)" + nameWithType: "Object.wait(long,int)" + fullName: "java.lang.Object.wait(long,int)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setInternalHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" + isExternal: true + name: "StubSettings.Builder.setInternalHeaderProvider(HeaderProvider)" + nameWithType: "StubSettings.Builder.setInternalHeaderProvider(HeaderProvider)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setInternalHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" +- uid: "java.lang.Object.notify()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" + name: "Object.notify()" + nameWithType: "Object.notify()" + fullName: "java.lang.Object.notify()" +- uid: "java.lang.Object.notifyAll()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" + name: "Object.notifyAll()" + nameWithType: "Object.notifyAll()" + fullName: "java.lang.Object.notifyAll()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setBackgroundExecutorProvider(com.google.api.gax.core.ExecutorProvider)" + isExternal: true + name: "StubSettings.Builder.setBackgroundExecutorProvider(ExecutorProvider)" + nameWithType: "StubSettings.Builder.setBackgroundExecutorProvider(ExecutorProvider)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setBackgroundExecutorProvider(com.google.api.gax.core.ExecutorProvider)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" + isExternal: true + name: "StubSettings.Builder.setHeaderProvider(HeaderProvider)" + nameWithType: "StubSettings.Builder.setHeaderProvider(HeaderProvider)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" +- uid: "java.lang.Object.equals(java.lang.Object)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" + name: "Object.equals(Object)" + nameWithType: "Object.equals(Object)" + fullName: "java.lang.Object.equals(java.lang.Object)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getStreamWatchdogProvider()" + isExternal: true + name: "StubSettings.Builder.getStreamWatchdogProvider()" + nameWithType: "StubSettings.Builder.getStreamWatchdogProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getStreamWatchdogProvider()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getStreamWatchdogCheckInterval()" + isExternal: true + name: "StubSettings.Builder.getStreamWatchdogCheckInterval()" + nameWithType: "StubSettings.Builder.getStreamWatchdogCheckInterval()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getStreamWatchdogCheckInterval()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setMtlsEndpoint(java.lang.String)" + isExternal: true + name: "StubSettings.Builder.setMtlsEndpoint(String)" + nameWithType: "StubSettings.Builder.setMtlsEndpoint(String)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setMtlsEndpoint(java.lang.String)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setStreamWatchdogProvider(com.google.api.gax.rpc.WatchdogProvider)" + isExternal: true + name: "StubSettings.Builder.setStreamWatchdogProvider(WatchdogProvider)" + nameWithType: "StubSettings.Builder.setStreamWatchdogProvider(WatchdogProvider)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setStreamWatchdogProvider(com.google.api.gax.rpc.WatchdogProvider)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getHeaderProvider()" + isExternal: true + name: "StubSettings.Builder.getHeaderProvider()" + nameWithType: "StubSettings.Builder.getHeaderProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getHeaderProvider()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setQuotaProjectId(java.lang.String)" + isExternal: true + name: "StubSettings.Builder.setQuotaProjectId(String)" + nameWithType: "StubSettings.Builder.setQuotaProjectId(String)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setQuotaProjectId(java.lang.String)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getTracerFactory()" + isExternal: true + name: "StubSettings.Builder.getTracerFactory()" + nameWithType: "StubSettings.Builder.getTracerFactory()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getTracerFactory()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setExecutorProvider(com.google.api.gax.core.ExecutorProvider)" + isExternal: true + name: "StubSettings.Builder.setExecutorProvider(ExecutorProvider)" + nameWithType: "StubSettings.Builder.setExecutorProvider(ExecutorProvider)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setExecutorProvider(com.google.api.gax.core.ExecutorProvider)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.applyToAllUnaryMethods(java.lang.Iterable>,com.google.api.core.ApiFunction,java.lang.Void>)" + isExternal: true + name: "StubSettings.Builder.applyToAllUnaryMethods(Iterable>,ApiFunction,Void>)" + nameWithType: "StubSettings.Builder.applyToAllUnaryMethods(Iterable>,ApiFunction,Void>)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.applyToAllUnaryMethods(java.lang.Iterable>,com.google.api.core.ApiFunction,java.lang.Void>)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getEndpoint()" + isExternal: true + name: "StubSettings.Builder.getEndpoint()" + nameWithType: "StubSettings.Builder.getEndpoint()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getEndpoint()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getExecutorProvider()" + isExternal: true + name: "StubSettings.Builder.getExecutorProvider()" + nameWithType: "StubSettings.Builder.getExecutorProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getExecutorProvider()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setCredentialsProvider(com.google.api.gax.core.CredentialsProvider)" + isExternal: true + name: "StubSettings.Builder.setCredentialsProvider(CredentialsProvider)" + nameWithType: "StubSettings.Builder.setCredentialsProvider(CredentialsProvider)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setCredentialsProvider(com.google.api.gax.core.CredentialsProvider)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getMtlsEndpoint()" + isExternal: true + name: "StubSettings.Builder.getMtlsEndpoint()" + nameWithType: "StubSettings.Builder.getMtlsEndpoint()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getMtlsEndpoint()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getTransportChannelProvider()" + isExternal: true + name: "StubSettings.Builder.getTransportChannelProvider()" + nameWithType: "StubSettings.Builder.getTransportChannelProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getTransportChannelProvider()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.build()" + isExternal: true + name: "StubSettings.Builder.build()" + nameWithType: "StubSettings.Builder.build()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.build()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getQuotaProjectId()" + isExternal: true + name: "StubSettings.Builder.getQuotaProjectId()" + nameWithType: "StubSettings.Builder.getQuotaProjectId()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getQuotaProjectId()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getInternalHeaderProvider()" + isExternal: true + name: "StubSettings.Builder.getInternalHeaderProvider()" + nameWithType: "StubSettings.Builder.getInternalHeaderProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getInternalHeaderProvider()" +- uid: "com.google.api.gax.rpc.UnaryCallSettings.Builder" + isExternal: true + name: "UnaryCallSettings.Builder" + nameWithType: "UnaryCallSettings.Builder" + fullName: "com.google.api.gax.rpc.UnaryCallSettings.Builder" +- uid: "?,?>,java.lang.Void" + name: "?,?>,Void" + nameWithType: "?,?>,Void" + fullName: "?,?>,java.lang.Void" +- uid: "com.google.api.core.ApiFunction" + isExternal: true + name: "ApiFunction" + nameWithType: "ApiFunction" + fullName: "com.google.api.core.ApiFunction" +- uid: "?,?" + name: "?,?" + nameWithType: "?,?" + fullName: "?,?" +- uid: "com.google.common.collect.ImmutableList" + name: "ImmutableList" + nameWithType: "ImmutableList" + fullName: "com.google.common.collect.ImmutableList" +- uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeRequest,RecognizeResponse" + nameWithType: "RecognizeRequest,RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" + name: "LongRunningRecognizeRequest,Operation" + nameWithType: "LongRunningRecognizeRequest,Operation" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" +- uid: "com.google.api.gax.rpc.OperationCallSettings.Builder" + isExternal: true + name: "OperationCallSettings.Builder" + nameWithType: "OperationCallSettings.Builder" + fullName: "com.google.api.gax.rpc.OperationCallSettings.Builder" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + nameWithType: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" +- uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeRequest,StreamingRecognizeResponse" + nameWithType: "StreamingRecognizeRequest,StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" +- uid: "com.google.api.gax.rpc.StreamingCallSettings.Builder" + isExternal: true + name: "StreamingCallSettings.Builder" + nameWithType: "StreamingCallSettings.Builder" + fullName: "com.google.api.gax.rpc.StreamingCallSettings.Builder" +- uid: "com.google.api.gax.rpc.StubSettings.Builder" + isExternal: true + name: "StubSettings.Builder" + nameWithType: "StubSettings.Builder" + fullName: "com.google.api.gax.rpc.StubSettings.Builder" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + name: "SpeechStubSettings,SpeechStubSettings.Builder" + nameWithType: "SpeechStubSettings,SpeechStubSettings.Builder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.applyToAllUnaryMethods(java.lang.Iterable" + isExternal: true + name: "StubSettings.Builder.applyToAllUnaryMethods(Iterable" + nameWithType: "StubSettings.Builder.applyToAllUnaryMethods(Iterable" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.applyToAllUnaryMethods(java.lang.Iterable" +- uid: "?,?>>,com.google.api.core.ApiFunction" + name: "?,?>>,ApiFunction" + nameWithType: "?,?>>,ApiFunction" + fullName: "?,?>>,com.google.api.core.ApiFunction" +- uid: "?,?>,java.lang.Void>)" + name: "?,?>,Void>)" + nameWithType: "?,?>,Void>)" + fullName: "?,?>,java.lang.Void>)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder." + isExternal: true + name: "StubSettings.Builder." + nameWithType: "StubSettings.Builder." + fullName: "com.google.api.gax.rpc.StubSettings.Builder." +- uid: "B>build()" + name: "B>build()" + nameWithType: "B>build()" + fullName: "B>build()" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml new file mode 100644 index 00000000..3755cff4 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml @@ -0,0 +1,885 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + id: "SpeechStubSettings" + parent: "com.microsoft.samples.google.v1.stub" + children: + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.SpeechStubSettings(com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder)" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.createStub()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultApiClientHeaderProviderBuilder()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultCredentialsProviderBuilder()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultExecutorProviderBuilder()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcApiClientHeaderProviderBuilder()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcTransportProviderBuilder()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonApiClientHeaderProviderBuilder()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonTransportProviderBuilder()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultTransportChannelProvider()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultEndpoint()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultMtlsEndpoint()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultServiceScopes()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeOperationSettings()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeSettings()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newBuilder()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newBuilder(com.google.api.gax.rpc.ClientContext)" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newHttpJsonBuilder()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.recognizeSettings()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.streamingRecognizeSettings()" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.toBuilder()" + langs: + - "java" + name: "SpeechStubSettings" + nameWithType: "SpeechStubSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + type: "Class" + package: "com.microsoft.samples.google.v1.stub" + summary: "Settings class to configure an instance of com.google.cloud.speech.v1p1beta1.stub.SpeechStub.\n\n

The default instance has everything set to sensible defaults:\n\n

    \n
  • The default service address (speech.googleapis.com) and default port (443) are used.\n
  • Credentials are acquired automatically through Application Default Credentials.\n
  • Retries are configured for idempotent methods but not for non-idempotent methods.\n
\n\n

The builder of this class is recursive, so contained classes are themselves builders. When\n build() is called, the tree of builders is called to create the complete settings object.\n\n

For example, to set the total timeout of recognize to 30 seconds:\n\n

\n // This snippet has been automatically generated and should be regarded as a code template only.\n // It will require modifications to work:\n // - It may require correct/in-range values for request initialization.\n // - It may require specifying regional endpoints when creating the service client as shown in\n // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library\n SpeechStubSettings.Builder speechSettingsBuilder = SpeechStubSettings.newBuilder();\n speechSettingsBuilder\n     .recognizeSettings()\n     .setRetrySettings(\n         speechSettingsBuilder\n             .recognizeSettings()\n             .getRetrySettings()\n             .toBuilder()\n             .setTotalTimeout(Duration.ofSeconds(30))\n             .build());\n SpeechStubSettings speechSettings = speechSettingsBuilder.build();\n 
" + syntax: + content: "public class SpeechStubSettings extends StubSettings" + inheritance: + - "java.lang.Object" + - "com.google.api.gax.rpc.StubSettings" + inheritedMembers: + - "com.google.api.gax.rpc.StubSettings.getBackgroundExecutorProvider()" + - "com.google.api.gax.rpc.StubSettings.getClock()" + - "com.google.api.gax.rpc.StubSettings.getCredentialsProvider()" + - "com.google.api.gax.rpc.StubSettings.getEndpoint()" + - "com.google.api.gax.rpc.StubSettings.getExecutorProvider()" + - "com.google.api.gax.rpc.StubSettings.getHeaderProvider()" + - "com.google.api.gax.rpc.StubSettings.getInternalHeaderProvider()" + - "com.google.api.gax.rpc.StubSettings.getMtlsEndpoint()" + - "com.google.api.gax.rpc.StubSettings.getQuotaProjectId()" + - "com.google.api.gax.rpc.StubSettings.getStreamWatchdogCheckInterval()" + - "com.google.api.gax.rpc.StubSettings.getStreamWatchdogProvider()" + - "com.google.api.gax.rpc.StubSettings.getTracerFactory()" + - "com.google.api.gax.rpc.StubSettings.getTransportChannelProvider()" + - "com.google.api.gax.rpc.StubSettings.toBuilder()" + - "com.google.api.gax.rpc.StubSettings.toString()" + - "java.lang.Object.clone()" + - "java.lang.Object.equals(java.lang.Object)" + - "java.lang.Object.finalize()" + - "java.lang.Object.getClass()" + - "java.lang.Object.hashCode()" + - "java.lang.Object.notify()" + - "java.lang.Object.notifyAll()" + - "java.lang.Object.wait()" + - "java.lang.Object.wait(long)" + - "java.lang.Object.wait(long,int)" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.SpeechStubSettings(com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder)" + id: "SpeechStubSettings(com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder)" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "SpeechStubSettings(SpeechStubSettings.Builder settingsBuilder)" + nameWithType: "SpeechStubSettings.SpeechStubSettings(SpeechStubSettings.Builder settingsBuilder)" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.SpeechStubSettings(SpeechStubSettings.Builder settingsBuilder)" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.SpeechStubSettings*" + type: "Constructor" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "protected SpeechStubSettings(SpeechStubSettings.Builder settingsBuilder)" + parameters: + - id: "settingsBuilder" + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.createStub()" + id: "createStub()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "createStub()" + nameWithType: "SpeechStubSettings.createStub()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.createStub()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.createStub*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public SpeechStub createStub()" + return: + type: "com.microsoft.samples.google.v1.stub.SpeechStub" + exceptions: + - type: "java.io.IOException" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultApiClientHeaderProviderBuilder()" + id: "defaultApiClientHeaderProviderBuilder()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "defaultApiClientHeaderProviderBuilder()" + nameWithType: "SpeechStubSettings.defaultApiClientHeaderProviderBuilder()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultApiClientHeaderProviderBuilder()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultApiClientHeaderProviderBuilder*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder()" + return: + type: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultCredentialsProviderBuilder()" + id: "defaultCredentialsProviderBuilder()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "defaultCredentialsProviderBuilder()" + nameWithType: "SpeechStubSettings.defaultCredentialsProviderBuilder()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultCredentialsProviderBuilder()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultCredentialsProviderBuilder*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns a builder for the default credentials for this service." + syntax: + content: "public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder()" + return: + type: "com.google.api.gax.core.GoogleCredentialsProvider.Builder" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultExecutorProviderBuilder()" + id: "defaultExecutorProviderBuilder()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "defaultExecutorProviderBuilder()" + nameWithType: "SpeechStubSettings.defaultExecutorProviderBuilder()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultExecutorProviderBuilder()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultExecutorProviderBuilder*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns a builder for the default ExecutorProvider for this service." + syntax: + content: "public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder()" + return: + type: "com.google.api.gax.core.InstantiatingExecutorProvider.Builder" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcApiClientHeaderProviderBuilder()" + id: "defaultGrpcApiClientHeaderProviderBuilder()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "defaultGrpcApiClientHeaderProviderBuilder()" + nameWithType: "SpeechStubSettings.defaultGrpcApiClientHeaderProviderBuilder()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcApiClientHeaderProviderBuilder()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcApiClientHeaderProviderBuilder*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder()" + return: + type: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcTransportProviderBuilder()" + id: "defaultGrpcTransportProviderBuilder()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "defaultGrpcTransportProviderBuilder()" + nameWithType: "SpeechStubSettings.defaultGrpcTransportProviderBuilder()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcTransportProviderBuilder()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcTransportProviderBuilder*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns a builder for the default gRPC ChannelProvider for this service." + syntax: + content: "public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder()" + return: + type: "com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.Builder" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonApiClientHeaderProviderBuilder()" + id: "defaultHttpJsonApiClientHeaderProviderBuilder()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "defaultHttpJsonApiClientHeaderProviderBuilder()" + nameWithType: "SpeechStubSettings.defaultHttpJsonApiClientHeaderProviderBuilder()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonApiClientHeaderProviderBuilder()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonApiClientHeaderProviderBuilder*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder()" + return: + type: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonTransportProviderBuilder()" + id: "defaultHttpJsonTransportProviderBuilder()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "defaultHttpJsonTransportProviderBuilder()" + nameWithType: "SpeechStubSettings.defaultHttpJsonTransportProviderBuilder()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonTransportProviderBuilder()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonTransportProviderBuilder*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns a builder for the default REST ChannelProvider for this service." + syntax: + content: "public static InstantiatingHttpJsonChannelProvider.Builder defaultHttpJsonTransportProviderBuilder()" + return: + type: "com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider.Builder" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultTransportChannelProvider()" + id: "defaultTransportChannelProvider()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "defaultTransportChannelProvider()" + nameWithType: "SpeechStubSettings.defaultTransportChannelProvider()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultTransportChannelProvider()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultTransportChannelProvider*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + syntax: + content: "public static TransportChannelProvider defaultTransportChannelProvider()" + return: + type: "com.google.api.gax.rpc.TransportChannelProvider" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultEndpoint()" + id: "getDefaultEndpoint()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "getDefaultEndpoint()" + nameWithType: "SpeechStubSettings.getDefaultEndpoint()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultEndpoint()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultEndpoint*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns the default service endpoint." + syntax: + content: "public static String getDefaultEndpoint()" + return: + type: "java.lang.String" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultMtlsEndpoint()" + id: "getDefaultMtlsEndpoint()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "getDefaultMtlsEndpoint()" + nameWithType: "SpeechStubSettings.getDefaultMtlsEndpoint()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultMtlsEndpoint()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultMtlsEndpoint*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns the default mTLS service endpoint." + syntax: + content: "public static String getDefaultMtlsEndpoint()" + return: + type: "java.lang.String" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultServiceScopes()" + id: "getDefaultServiceScopes()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "getDefaultServiceScopes()" + nameWithType: "SpeechStubSettings.getDefaultServiceScopes()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultServiceScopes()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultServiceScopes*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns the default service scopes." + syntax: + content: "public static List getDefaultServiceScopes()" + return: + type: "java.util.List" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeOperationSettings()" + id: "longRunningRecognizeOperationSettings()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "longRunningRecognizeOperationSettings()" + nameWithType: "SpeechStubSettings.longRunningRecognizeOperationSettings()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeOperationSettings()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeOperationSettings*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns the object with the settings used for calls to longRunningRecognize." + syntax: + content: "public OperationCallSettings longRunningRecognizeOperationSettings()" + return: + type: "com.google.api.gax.rpc.OperationCallSettings" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeSettings()" + id: "longRunningRecognizeSettings()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "longRunningRecognizeSettings()" + nameWithType: "SpeechStubSettings.longRunningRecognizeSettings()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeSettings()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeSettings*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns the object with the settings used for calls to longRunningRecognize." + syntax: + content: "public UnaryCallSettings longRunningRecognizeSettings()" + return: + type: "com.google.api.gax.rpc.UnaryCallSettings" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newBuilder()" + id: "newBuilder()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "newBuilder()" + nameWithType: "SpeechStubSettings.newBuilder()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newBuilder()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newBuilder*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns a new gRPC builder for this class." + syntax: + content: "public static SpeechStubSettings.Builder newBuilder()" + return: + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newBuilder(com.google.api.gax.rpc.ClientContext)" + id: "newBuilder(com.google.api.gax.rpc.ClientContext)" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "newBuilder(ClientContext clientContext)" + nameWithType: "SpeechStubSettings.newBuilder(ClientContext clientContext)" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newBuilder(ClientContext clientContext)" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newBuilder*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns a new builder for this class." + syntax: + content: "public static SpeechStubSettings.Builder newBuilder(ClientContext clientContext)" + parameters: + - id: "clientContext" + type: "com.google.api.gax.rpc.ClientContext" + return: + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newHttpJsonBuilder()" + id: "newHttpJsonBuilder()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "newHttpJsonBuilder()" + nameWithType: "SpeechStubSettings.newHttpJsonBuilder()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newHttpJsonBuilder()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newHttpJsonBuilder*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns a new REST builder for this class." + syntax: + content: "public static SpeechStubSettings.Builder newHttpJsonBuilder()" + return: + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + javaType: "static method" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.recognizeSettings()" + id: "recognizeSettings()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "recognizeSettings()" + nameWithType: "SpeechStubSettings.recognizeSettings()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.recognizeSettings()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.recognizeSettings*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns the object with the settings used for calls to recognize." + syntax: + content: "public UnaryCallSettings recognizeSettings()" + return: + type: "com.google.api.gax.rpc.UnaryCallSettings" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.streamingRecognizeSettings()" + id: "streamingRecognizeSettings()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "streamingRecognizeSettings()" + nameWithType: "SpeechStubSettings.streamingRecognizeSettings()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.streamingRecognizeSettings()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.streamingRecognizeSettings*" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns the object with the settings used for calls to streamingRecognize." + syntax: + content: "public StreamingCallSettings streamingRecognizeSettings()" + return: + type: "com.google.api.gax.rpc.StreamingCallSettings" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.toBuilder()" + id: "toBuilder()" + parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + langs: + - "java" + name: "toBuilder()" + nameWithType: "SpeechStubSettings.toBuilder()" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.toBuilder()" + overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.toBuilder*" + overridden: "com.google.api.gax.rpc.StubSettings.toBuilder()" + type: "Method" + package: "com.microsoft.samples.google.v1.stub" + summary: "Returns a builder containing all the values of this settings class." + syntax: + content: "public SpeechStubSettings.Builder toBuilder()" + return: + type: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" +references: +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + name: "SpeechStubSettings.Builder" + nameWithType: "SpeechStubSettings.Builder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.SpeechStubSettings*" + name: "SpeechStubSettings" + nameWithType: "SpeechStubSettings.SpeechStubSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.SpeechStubSettings" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.UnaryCallSettings" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallSettings" + name: "UnaryCallSettings" + fullName: "com.google.api.gax.rpc.UnaryCallSettings" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + name: "RecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.recognizeSettings*" + name: "recognizeSettings" + nameWithType: "SpeechStubSettings.recognizeSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.recognizeSettings" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.UnaryCallSettings" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.UnaryCallSettings" + name: "UnaryCallSettings" + fullName: "com.google.api.gax.rpc.UnaryCallSettings" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.longrunning.Operation" + name: "Operation" + fullName: "com.google.longrunning.Operation" + isExternal: true + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeSettings*" + name: "longRunningRecognizeSettings" + nameWithType: "SpeechStubSettings.longRunningRecognizeSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeSettings" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.OperationCallSettings" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.OperationCallSettings" + name: "OperationCallSettings" + fullName: "com.google.api.gax.rpc.OperationCallSettings" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + name: "LongRunningRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + name: "LongRunningRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeOperationSettings*" + name: "longRunningRecognizeOperationSettings" + nameWithType: "SpeechStubSettings.longRunningRecognizeOperationSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.longRunningRecognizeOperationSettings" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.StreamingCallSettings" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.StreamingCallSettings" + name: "StreamingCallSettings" + fullName: "com.google.api.gax.rpc.StreamingCallSettings" + isExternal: true + - name: "<" + fullName: "<" + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + name: "StreamingRecognizeRequest" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest" + isExternal: false + - name: "," + fullName: "," + isExternal: false + - uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + isExternal: false + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.streamingRecognizeSettings*" + name: "streamingRecognizeSettings" + nameWithType: "SpeechStubSettings.streamingRecognizeSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.streamingRecognizeSettings" + package: "com.microsoft.samples.google.v1.stub" +- uid: "java.io.IOException" + href: "https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html" + spec.java: + - uid: "java.io.IOException" + name: "IOException" + fullName: "java.io.IOException" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub" + name: "SpeechStub" + nameWithType: "SpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.createStub*" + name: "createStub" + nameWithType: "SpeechStubSettings.createStub" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.createStub" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.core.InstantiatingExecutorProvider.Builder" + isExternal: true + spec.java: + - uid: "com.google.api.gax.core.InstantiatingExecutorProvider.Builder" + name: "Builder" + fullName: "com.google.api.gax.core.InstantiatingExecutorProvider.Builder" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultExecutorProviderBuilder*" + name: "defaultExecutorProviderBuilder" + nameWithType: "SpeechStubSettings.defaultExecutorProviderBuilder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultExecutorProviderBuilder" + package: "com.microsoft.samples.google.v1.stub" +- uid: "java.lang.String" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/String.html" + spec.java: + - uid: "java.lang.String" + name: "String" + fullName: "java.lang.String" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/String.html" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultEndpoint*" + name: "getDefaultEndpoint" + nameWithType: "SpeechStubSettings.getDefaultEndpoint" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultEndpoint" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultMtlsEndpoint*" + name: "getDefaultMtlsEndpoint" + nameWithType: "SpeechStubSettings.getDefaultMtlsEndpoint" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultMtlsEndpoint" + package: "com.microsoft.samples.google.v1.stub" +- uid: "java.util.List" + href: "https://docs.oracle.com/javase/8/docs/api/java/util/List.html" + spec.java: + - uid: "java.util.List" + name: "List" + fullName: "java.util.List" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/util/List.html" + - name: "<" + fullName: "<" + isExternal: false + - uid: "java.lang.String" + name: "String" + fullName: "java.lang.String" + isExternal: false + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/String.html" + - name: ">" + fullName: ">" + isExternal: false +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultServiceScopes*" + name: "getDefaultServiceScopes" + nameWithType: "SpeechStubSettings.getDefaultServiceScopes" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.getDefaultServiceScopes" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.core.GoogleCredentialsProvider.Builder" + isExternal: true + spec.java: + - uid: "com.google.api.gax.core.GoogleCredentialsProvider.Builder" + name: "Builder" + fullName: "com.google.api.gax.core.GoogleCredentialsProvider.Builder" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultCredentialsProviderBuilder*" + name: "defaultCredentialsProviderBuilder" + nameWithType: "SpeechStubSettings.defaultCredentialsProviderBuilder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultCredentialsProviderBuilder" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.Builder" + isExternal: true + spec.java: + - uid: "com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.Builder" + name: "Builder" + fullName: "com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.Builder" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcTransportProviderBuilder*" + name: "defaultGrpcTransportProviderBuilder" + nameWithType: "SpeechStubSettings.defaultGrpcTransportProviderBuilder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcTransportProviderBuilder" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider.Builder" + isExternal: true + spec.java: + - uid: "com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider.Builder" + name: "Builder" + fullName: "com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider.Builder" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonTransportProviderBuilder*" + name: "defaultHttpJsonTransportProviderBuilder" + nameWithType: "SpeechStubSettings.defaultHttpJsonTransportProviderBuilder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonTransportProviderBuilder" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.TransportChannelProvider" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.TransportChannelProvider" + name: "TransportChannelProvider" + fullName: "com.google.api.gax.rpc.TransportChannelProvider" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultTransportChannelProvider*" + name: "defaultTransportChannelProvider" + nameWithType: "SpeechStubSettings.defaultTransportChannelProvider" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultTransportChannelProvider" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + name: "Builder" + fullName: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcApiClientHeaderProviderBuilder*" + name: "defaultGrpcApiClientHeaderProviderBuilder" + nameWithType: "SpeechStubSettings.defaultGrpcApiClientHeaderProviderBuilder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcApiClientHeaderProviderBuilder" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonApiClientHeaderProviderBuilder*" + name: "defaultHttpJsonApiClientHeaderProviderBuilder" + nameWithType: "SpeechStubSettings.defaultHttpJsonApiClientHeaderProviderBuilder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonApiClientHeaderProviderBuilder" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultApiClientHeaderProviderBuilder*" + name: "defaultApiClientHeaderProviderBuilder" + nameWithType: "SpeechStubSettings.defaultApiClientHeaderProviderBuilder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultApiClientHeaderProviderBuilder" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newBuilder*" + name: "newBuilder" + nameWithType: "SpeechStubSettings.newBuilder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newBuilder" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newHttpJsonBuilder*" + name: "newHttpJsonBuilder" + nameWithType: "SpeechStubSettings.newHttpJsonBuilder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.newHttpJsonBuilder" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.ClientContext" + isExternal: true + spec.java: + - uid: "com.google.api.gax.rpc.ClientContext" + name: "ClientContext" + fullName: "com.google.api.gax.rpc.ClientContext" + isExternal: true +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.toBuilder*" + name: "toBuilder" + nameWithType: "SpeechStubSettings.toBuilder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.toBuilder" + package: "com.microsoft.samples.google.v1.stub" +- uid: "com.google.api.gax.rpc.StubSettings" + isExternal: true + name: "StubSettings" + nameWithType: "StubSettings" + fullName: "com.google.api.gax.rpc.StubSettings" +- uid: "com.google.api.gax.rpc.StubSettings.toString()" + isExternal: true + name: "StubSettings.toString()" + nameWithType: "StubSettings.toString()" + fullName: "com.google.api.gax.rpc.StubSettings.toString()" +- uid: "java.lang.Object.wait()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" + name: "Object.wait()" + nameWithType: "Object.wait()" + fullName: "java.lang.Object.wait()" +- uid: "com.google.api.gax.rpc.StubSettings.getEndpoint()" + isExternal: true + name: "StubSettings.getEndpoint()" + nameWithType: "StubSettings.getEndpoint()" + fullName: "com.google.api.gax.rpc.StubSettings.getEndpoint()" +- uid: "java.lang.Object.finalize()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--" + name: "Object.finalize()" + nameWithType: "Object.finalize()" + fullName: "java.lang.Object.finalize()" +- uid: "com.google.api.gax.rpc.StubSettings.getTransportChannelProvider()" + isExternal: true + name: "StubSettings.getTransportChannelProvider()" + nameWithType: "StubSettings.getTransportChannelProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.getTransportChannelProvider()" +- uid: "java.lang.Object.clone()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--" + name: "Object.clone()" + nameWithType: "Object.clone()" + fullName: "java.lang.Object.clone()" +- uid: "com.google.api.gax.rpc.StubSettings.getStreamWatchdogCheckInterval()" + isExternal: true + name: "StubSettings.getStreamWatchdogCheckInterval()" + nameWithType: "StubSettings.getStreamWatchdogCheckInterval()" + fullName: "com.google.api.gax.rpc.StubSettings.getStreamWatchdogCheckInterval()" +- uid: "com.google.api.gax.rpc.StubSettings.getInternalHeaderProvider()" + isExternal: true + name: "StubSettings.getInternalHeaderProvider()" + nameWithType: "StubSettings.getInternalHeaderProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.getInternalHeaderProvider()" +- uid: "com.google.api.gax.rpc.StubSettings.getHeaderProvider()" + isExternal: true + name: "StubSettings.getHeaderProvider()" + nameWithType: "StubSettings.getHeaderProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.getHeaderProvider()" +- uid: "java.lang.Object.wait(long)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" + name: "Object.wait(long)" + nameWithType: "Object.wait(long)" + fullName: "java.lang.Object.wait(long)" +- uid: "java.lang.Object.getClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" + name: "Object.getClass()" + nameWithType: "Object.getClass()" + fullName: "java.lang.Object.getClass()" +- uid: "java.lang.Object.hashCode()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--" + name: "Object.hashCode()" + nameWithType: "Object.hashCode()" + fullName: "java.lang.Object.hashCode()" +- uid: "com.google.api.gax.rpc.StubSettings.getTracerFactory()" + isExternal: true + name: "StubSettings.getTracerFactory()" + nameWithType: "StubSettings.getTracerFactory()" + fullName: "com.google.api.gax.rpc.StubSettings.getTracerFactory()" +- uid: "java.lang.Object.wait(long,int)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-" + name: "Object.wait(long,int)" + nameWithType: "Object.wait(long,int)" + fullName: "java.lang.Object.wait(long,int)" +- uid: "com.google.api.gax.rpc.StubSettings.getQuotaProjectId()" + isExternal: true + name: "StubSettings.getQuotaProjectId()" + nameWithType: "StubSettings.getQuotaProjectId()" + fullName: "com.google.api.gax.rpc.StubSettings.getQuotaProjectId()" +- uid: "java.lang.Object.notify()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" + name: "Object.notify()" + nameWithType: "Object.notify()" + fullName: "java.lang.Object.notify()" +- uid: "com.google.api.gax.rpc.StubSettings.toBuilder()" + isExternal: true + name: "StubSettings.toBuilder()" + nameWithType: "StubSettings.toBuilder()" + fullName: "com.google.api.gax.rpc.StubSettings.toBuilder()" +- uid: "java.lang.Object.notifyAll()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" + name: "Object.notifyAll()" + nameWithType: "Object.notifyAll()" + fullName: "java.lang.Object.notifyAll()" +- uid: "java.lang.Object.equals(java.lang.Object)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" + name: "Object.equals(Object)" + nameWithType: "Object.equals(Object)" + fullName: "java.lang.Object.equals(java.lang.Object)" +- uid: "com.google.api.gax.rpc.StubSettings.getStreamWatchdogProvider()" + isExternal: true + name: "StubSettings.getStreamWatchdogProvider()" + nameWithType: "StubSettings.getStreamWatchdogProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.getStreamWatchdogProvider()" +- uid: "com.google.api.gax.rpc.StubSettings.getBackgroundExecutorProvider()" + isExternal: true + name: "StubSettings.getBackgroundExecutorProvider()" + nameWithType: "StubSettings.getBackgroundExecutorProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.getBackgroundExecutorProvider()" +- uid: "com.google.api.gax.rpc.StubSettings.getExecutorProvider()" + isExternal: true + name: "StubSettings.getExecutorProvider()" + nameWithType: "StubSettings.getExecutorProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.getExecutorProvider()" +- uid: "com.google.api.gax.rpc.StubSettings.getClock()" + isExternal: true + name: "StubSettings.getClock()" + nameWithType: "StubSettings.getClock()" + fullName: "com.google.api.gax.rpc.StubSettings.getClock()" +- uid: "com.google.api.gax.rpc.StubSettings.getMtlsEndpoint()" + isExternal: true + name: "StubSettings.getMtlsEndpoint()" + nameWithType: "StubSettings.getMtlsEndpoint()" + fullName: "com.google.api.gax.rpc.StubSettings.getMtlsEndpoint()" +- uid: "com.google.api.gax.rpc.StubSettings.getCredentialsProvider()" + isExternal: true + name: "StubSettings.getCredentialsProvider()" + nameWithType: "StubSettings.getCredentialsProvider()" + fullName: "com.google.api.gax.rpc.StubSettings.getCredentialsProvider()" +- uid: "com.google.api.gax.rpc.UnaryCallSettings" + isExternal: true + name: "UnaryCallSettings" + nameWithType: "UnaryCallSettings" + fullName: "com.google.api.gax.rpc.UnaryCallSettings" +- uid: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" + name: "RecognizeRequest,RecognizeResponse" + nameWithType: "RecognizeRequest,RecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.RecognizeRequest,com.google.cloud.speech.v1p1beta1.RecognizeResponse" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" + name: "LongRunningRecognizeRequest,Operation" + nameWithType: "LongRunningRecognizeRequest,Operation" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.longrunning.Operation" +- uid: "com.google.api.gax.rpc.OperationCallSettings" + isExternal: true + name: "OperationCallSettings" + nameWithType: "OperationCallSettings" + fullName: "com.google.api.gax.rpc.OperationCallSettings" +- uid: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" + name: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + nameWithType: "LongRunningRecognizeRequest,LongRunningRecognizeResponse,LongRunningRecognizeMetadata" + fullName: "com.google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse,com.google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata" +- uid: "com.google.api.gax.rpc.StreamingCallSettings" + isExternal: true + name: "StreamingCallSettings" + nameWithType: "StreamingCallSettings" + fullName: "com.google.api.gax.rpc.StreamingCallSettings" +- uid: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" + name: "StreamingRecognizeRequest,StreamingRecognizeResponse" + nameWithType: "StreamingRecognizeRequest,StreamingRecognizeResponse" + fullName: "com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest,com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse" +- uid: "java.util.List" + href: "https://docs.oracle.com/javase/8/docs/api/java/util/List.html" + name: "List" + nameWithType: "List" + fullName: "java.util.List" +- uid: "com.google.api.gax.rpc.StubSettings" + isExternal: true + name: "StubSettings" + nameWithType: "StubSettings" + fullName: "com.google.api.gax.rpc.StubSettings" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.yml new file mode 100644 index 00000000..00a19720 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.yml @@ -0,0 +1,40 @@ +### YamlMime:ManagedReference +items: +- uid: "com.microsoft.samples.google.v1.stub" + id: "stub" + children: + - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + - "com.microsoft.samples.google.v1.stub.SpeechStub" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + langs: + - "java" + name: "com.microsoft.samples.google.v1.stub" + nameWithType: "com.microsoft.samples.google.v1.stub" + fullName: "com.microsoft.samples.google.v1.stub" + type: "Namespace" + syntax: + content: "package com.microsoft.samples.google.v1.stub" + javaType: "package" +references: +- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + name: "GrpcSpeechStub" + nameWithType: "GrpcSpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" +- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + name: "HttpJsonSpeechStub" + nameWithType: "HttpJsonSpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStub" + name: "SpeechStub" + nameWithType: "SpeechStub" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStub" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + name: "SpeechStubSettings" + nameWithType: "SpeechStubSettings" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" +- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + name: "SpeechStubSettings.Builder" + nameWithType: "SpeechStubSettings.Builder" + fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml index 4af78bae..bd37a3b9 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml @@ -7,6 +7,7 @@ items: - "com.microsoft.samples.commentinheritance" - "com.microsoft.samples.google" - "com.microsoft.samples.google.v1" + - "com.microsoft.samples.google.v1.stub" - "com.microsoft.samples.google.v1beta" - "com.microsoft.samples.google.v1p1alpha" - "com.microsoft.samples.offers" @@ -38,6 +39,10 @@ references: name: "com.microsoft.samples.google.v1" nameWithType: "com.microsoft.samples.google.v1" fullName: "com.microsoft.samples.google.v1" +- uid: "com.microsoft.samples.google.v1.stub" + name: "com.microsoft.samples.google.v1.stub" + nameWithType: "com.microsoft.samples.google.v1.stub" + fullName: "com.microsoft.samples.google.v1.stub" - uid: "com.microsoft.samples.offers" name: "com.microsoft.samples.offers" nameWithType: "com.microsoft.samples.offers" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml index ba7459c0..bcfc04f5 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml @@ -116,6 +116,22 @@ - heading: "Classes" - uid: "com.microsoft.samples.google.v1.SpeechClient" name: "SpeechClient" + - uid: "com.microsoft.samples.google.v1.stub" + name: "com.microsoft.samples.google.v1.stub" + items: + - uid: "com.microsoft.samples.google.v1.stub" + name: "Package summary" + - heading: "Classes" + - uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + name: "GrpcSpeechStub" + - uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + name: "HttpJsonSpeechStub" + - uid: "com.microsoft.samples.google.v1.stub.SpeechStub" + name: "SpeechStub" + - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + name: "SpeechStubSettings" + - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + name: "SpeechStubSettings.Builder" - uid: "com.microsoft.samples.offers" name: "com.microsoft.samples.offers" items: From 251c5e51e55ccd972416e65771b974851f2f46d9 Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Tue, 26 Sep 2023 14:51:21 -0400 Subject: [PATCH 101/168] fix: ApiVersion.toString uses the input format (#200) * fix: ApiVersion.toString uses the input format * chore: ApiVersion.toString test --- .../java/com/google/docfx/doclet/ApiVersion.java | 15 ++++++--------- .../java/com/microsoft/util/ApiVersionTest.java | 6 ++++++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java index 51867f09..3772c461 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/ApiVersion.java @@ -1,6 +1,5 @@ package com.google.docfx.doclet; -import com.google.common.base.MoreObjects; import java.util.Collection; import java.util.Comparator; import java.util.Objects; @@ -10,7 +9,7 @@ import javax.annotation.Nullable; public class ApiVersion implements Comparable { - public static ApiVersion NONE = new ApiVersion(0, 0, null, 0); + public static ApiVersion NONE = new ApiVersion("", 0, 0, null, 0); private static final Pattern VALID_VERSION_REGEX = Pattern.compile("^v(\\d+)p?(\\d+)?(alpha|beta)?(\\d+)?"); @@ -38,6 +37,7 @@ public static Optional parse(@Nullable String input) { if (matcher.matches()) { return Optional.of( new ApiVersion( + input, safeParseInt(matcher.group(1)), safeParseInt(matcher.group(2)), matcher.group(3), @@ -69,12 +69,14 @@ public static ApiVersion getRecommended(Collection versions) { .orElseThrow(() -> new IllegalArgumentException("Versions must not be empty."))); } + private final String original; private final int major; private final int minor; private final String stability; private final int prerelease; - private ApiVersion(int major, int minor, String stability, int prerelease) { + private ApiVersion(String original, int major, int minor, String stability, int prerelease) { + this.original = original; this.major = major; this.minor = minor; this.stability = stability; @@ -127,11 +129,6 @@ public int hashCode() { @Override public String toString() { - return MoreObjects.toStringHelper(ApiVersion.class) - .add("major", major) - .add("minor", minor) - .add("stability", stability) - .add("prerelease", prerelease) - .toString(); + return original; } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java index 2be79e0d..f70fe3dd 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/ApiVersionTest.java @@ -106,4 +106,10 @@ public void testRecommendation_doesNotAllowEmptyInput() { assertThrows( IllegalArgumentException.class, () -> ApiVersion.getRecommended(Collections.emptyList())); } + + @Test + public void testToString() { + assertThat(parse("v1").toString()).isEqualTo("v1"); + assertThat(parse("v1p0").toString()).isEqualTo("v1p0"); + } } From 89a08c4a266ac9ab44eeebc2deb831fa9b6cac52 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Tue, 26 Sep 2023 16:19:20 -0400 Subject: [PATCH 102/168] feat: add new library overview page (#198) * feat: add new library overview page * fix linting issues * remove extra file * get versions and file as environment variables * fix linting errors * update repoMetadatFilePath * fix lint * add tests, refactor RepoMetadata * fix lint * add in dynamic recommendedApiVersion * update exception --- third_party/docfx-doclet-143274/pom.xml | 11 + .../com/google/docfx/doclet/RepoMetadata.java | 149 ++++++++++++ .../com/microsoft/build/YmlFilesBuilder.java | 59 ++++- .../com/microsoft/doclet/DocFxDoclet.java | 29 ++- .../microsoft/model/LibraryOverviewFile.java | 229 ++++++++++++++++++ .../java/com/microsoft/model/TocContents.java | 21 +- .../java/com/microsoft/model/TocFile.java | 12 +- .../java/com/microsoft/util/FileUtil.java | 5 + .../microsoft/build/YmlFilesBuilderTest.java | 6 +- .../microsoft/doclet/DocletRunnerTest.java | 25 +- .../com/microsoft/model/TocContentsTest.java | 38 ++- .../java/com/microsoft/model/TocFileTest.java | 2 +- .../com/microsoft/samples/.repo-metadata.json | 16 ++ .../com/microsoft/util/.repo-metadata.json | 17 ++ .../com/microsoft/util/RepoMetadataTest.java | 36 +++ .../expected-generated-files/overview.md | 106 ++++++++ .../expected-generated-files/overview.yml | 61 ----- .../expected-generated-files/toc.yml | 2 +- 18 files changed, 736 insertions(+), 88 deletions(-) create mode 100644 third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java create mode 100644 third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/.repo-metadata.json create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/.repo-metadata.json create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/RepoMetadataTest.java create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md delete mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index d32571af..2ce03b5f 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -154,6 +154,11 @@ guava 32.1.2-jre
+ + com.google.code.gson + gson + 2.10.1 + @@ -186,6 +191,12 @@ 4.18.0 test + + com.github.stefanbirkner + system-rules + 1.19.0 + test + diff --git a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java new file mode 100644 index 00000000..9ddbdee1 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java @@ -0,0 +1,149 @@ +package com.google.docfx.doclet; + +// This parses .repo-metadata.json files to create a new library overview + +import com.google.gson.Gson; +import com.google.gson.annotations.SerializedName; +import java.io.FileReader; +import java.io.IOException; +import java.util.Objects; + +public class RepoMetadata { + + @SerializedName("api_shortname") + private String apiShortName; + + @SerializedName("name_pretty") + private String namePretty; + + @SerializedName("product_documentation") + private String productDocumentationUri; + + @SerializedName("api_description") + private String apiDescription; + + @SerializedName("client_documentation") + private String clientDocumentationUri; + + @SerializedName("repo") + private String repo; + + @SerializedName("repo_short") + private String repoShort; + + @SerializedName("distribution_name") + private String distributionName; + + @SerializedName("api_id") + private String apiId; + + private String artifactId; + + public String getNamePretty() { + return this.namePretty; + } + + public void setNamePretty(String namePretty) { + this.namePretty = namePretty; + } + + public String getApiShortName() { + return this.apiShortName; + } + + public void setApiShortName(String apiShortName) { + this.apiShortName = apiShortName; + } + + public String getProductDocumentationUri() { + return this.productDocumentationUri; + } + + public void setProductDocumentationUri(String productDocumentationUri) { + this.productDocumentationUri = productDocumentationUri; + } + + public String getApiDescription() { + return this.apiDescription; + } + + public void setApiDescription(String apiDescription) { + this.apiDescription = apiDescription; + } + + public String getClientDocumentationUri() { + return this.clientDocumentationUri; + } + + public void setClientDocumentationUri(String clientDocumentationUri) { + this.clientDocumentationUri = clientDocumentationUri; + } + + public String getRepo() { + return this.repo; + } + + public void setRepo(String repo) { + this.repo = repo; + } + + public String getRepoShort() { + return this.repoShort; + } + + public void setRepoShort(String repoShort) { + this.repoShort = repoShort; + } + + public String getDistributionName() { + return this.distributionName; + } + + public void setDistributionName(String distributionName) { + this.distributionName = distributionName; + } + + public String getApiId() { + return this.apiId; + } + + public void setApiId(String apiId) { + this.apiId = apiId; + } + + // artifactId is parsed from distributionName + public String getArtifactId() { + String substrings[] = this.distributionName.split(":"); + return substrings[substrings.length - 1]; + } + + // GithubLink is created from repo and repoShort + public String getGithubLink() { + String githubRootUri = "https://github.com/"; + String githubLink = githubRootUri + repo; + if (Objects.equals(this.repo, "googleapis/google-cloud-java") + || Objects.equals(this.repo, "googleapis/sdk-platform-java")) { + githubLink = githubLink + "/tree/main/" + this.repoShort; + } + return githubLink; + } + + // MavenLink is created from distributionName + public String getMavenLink() { + String mavenRootUri = "https://central.sonatype.com/artifact/"; + String substrings[] = this.distributionName.split(":"); + String groupName = substrings[0]; + String artifactId = substrings[substrings.length - 1]; + String mavenLink = mavenRootUri + groupName + "/" + artifactId; + return mavenLink; + } + + public RepoMetadata parseRepoMetadata(String fileName) { + Gson gson = new Gson(); + try (FileReader reader = new FileReader(fileName)) { + return gson.fromJson(reader, RepoMetadata.class); + } catch (IOException e) { + throw new RuntimeException(".repo-metadata.json is not found", e); + } + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 9f14626b..fc87377f 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -5,10 +5,12 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableListMultimap; +import com.google.docfx.doclet.ApiVersion; import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; import com.microsoft.lookup.PackageLookup; import com.microsoft.lookup.PackageLookup.PackageGroup; +import com.microsoft.model.LibraryOverviewFile; import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; import com.microsoft.model.TocFile; @@ -17,6 +19,7 @@ import com.microsoft.util.ElementUtil; import com.microsoft.util.FileUtil; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.stream.Collectors; import javax.lang.model.element.PackageElement; @@ -31,6 +34,14 @@ public class YmlFilesBuilder { private final PackageLookup packageLookup; private final String projectName; private final boolean disableChangelog; + + private final boolean disableLibraryOverview; + + private final String artifactVersion; + + private final String librariesBomVersion; + + private final String repoMetadataFilePath; private final ProjectBuilder projectBuilder; private final PackageBuilder packageBuilder; private final ClassBuilder classBuilder; @@ -42,13 +53,21 @@ public YmlFilesBuilder( String[] excludePackages, String[] excludeClasses, String projectName, - boolean disableChangelog) { + boolean disableChangelog, + boolean disableLibraryOverview, + String artifactVersion, + String librariesBomVersion, + String repoMetadataFilePath) { this.environment = environment; this.outputPath = outputPath; + this.artifactVersion = artifactVersion; + this.librariesBomVersion = librariesBomVersion; + this.repoMetadataFilePath = repoMetadataFilePath; this.elementUtil = new ElementUtil(excludePackages, excludeClasses); this.packageLookup = new PackageLookup(environment); this.projectName = projectName; this.disableChangelog = disableChangelog; + this.disableLibraryOverview = disableLibraryOverview; this.projectBuilder = new ProjectBuilder(projectName); ClassLookup classLookup = new ClassLookup(environment, elementUtil); this.referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); @@ -67,20 +86,35 @@ public boolean build() { processor.process(); // write to yaml files - FileUtil.dumpToFile(processor.projectMetadataFile); + if (disableLibraryOverview) { + FileUtil.dumpToFile(processor.projectMetadataFile); + } processor.packageMetadataFiles.forEach(FileUtil::dumpToFile); processor.classMetadataFiles.forEach(FileUtil::dumpToFile); FileUtil.dumpToFile(processor.tocFile); + // Generate new library overview page + if (!disableLibraryOverview) { + LibraryOverviewFile libraryOverviewFile = + new LibraryOverviewFile( + outputPath, + "overview.md", + artifactVersion, + librariesBomVersion, + repoMetadataFilePath, + processor.recommendedApiVersion); + FileUtil.dumpToFile(libraryOverviewFile); + } return true; } @VisibleForTesting class Processor { // table of contents - private final TocFile tocFile = new TocFile(outputPath, projectName, disableChangelog); - // overview page - private final MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); + final TocFile tocFile = + new TocFile(outputPath, projectName, disableChangelog, disableLibraryOverview); + // overview page if not using new libraryOverview + final MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); // package summary pages private final List packageMetadataFiles = new ArrayList<>(); // packages @@ -91,6 +125,8 @@ class Processor { private final List allPackages = elementUtil.extractPackageElements(environment.getIncludedElements()); + private String recommendedApiVersion = ""; + @VisibleForTesting void process() { ImmutableListMultimap organizedPackagesWithoutStubs = @@ -99,6 +135,13 @@ void process() { .filter(pkg -> !packageLookup.isApiVersionStubPackage(pkg)) .collect(Collectors.toList())); + // Get recommended ApiVersion for new Library Overview + HashSet versions = new HashSet<>(); + for (PackageElement pkg : allPackages) { + packageLookup.extractApiVersion(pkg).ifPresent(versions::add); + } + recommendedApiVersion = ApiVersion.getRecommended(versions).toString(); + for (PackageElement element : organizedPackagesWithoutStubs.get(PackageGroup.VISIBLE)) { tocFile.addTocItem(buildPackage(element)); } @@ -125,8 +168,10 @@ void process() { } } } - // build project summary page - projectBuilder.buildProjectMetadataFile(packageItems, projectMetadataFile); + // build project summary page if disableLibraryOverview=true + if (disableLibraryOverview) { + projectBuilder.buildProjectMetadataFile(packageItems, projectMetadataFile); + } // post-processing populateUidValues(packageMetadataFiles, classMetadataFiles); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java index 7d9c5f15..a648496b 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java @@ -21,11 +21,18 @@ public void init(Locale locale, Reporter reporter) { @Override public boolean run(DocletEnvironment environment) { + String artifactVersion = System.getenv("artifactVersion"); + String librariesBomVersion = System.getenv("librariesBomVersion"); + String repoMetadataFilePath = System.getenv("repoMetadataFilePath"); + reporter.print(Kind.NOTE, "Environment variable artifactVersion: " + artifactVersion); + reporter.print(Kind.NOTE, "Environment variable librariesBomVersion: " + librariesBomVersion); + reporter.print(Kind.NOTE, "Environment variable repoMetadataFilePath: " + repoMetadataFilePath); reporter.print(Kind.NOTE, "Output path: " + outputPath); reporter.print(Kind.NOTE, "Excluded packages: " + Arrays.toString(excludePackages)); reporter.print(Kind.NOTE, "Excluded classes: " + Arrays.toString(excludeClasses)); reporter.print(Kind.NOTE, "Project name: " + projectName); reporter.print(Kind.NOTE, "Disable changelog: " + disableChangelog); + reporter.print(Kind.NOTE, "Disable libraryOverview: " + disableLibraryOverview); return (new YmlFilesBuilder( environment, @@ -33,7 +40,11 @@ public boolean run(DocletEnvironment environment) { excludePackages, excludeClasses, projectName, - disableChangelog)) + disableChangelog, + disableLibraryOverview, + artifactVersion, + librariesBomVersion, + repoMetadataFilePath)) .build(); } @@ -47,6 +58,7 @@ public String getName() { private String[] excludeClasses = {}; private String projectName; private boolean disableChangelog; + private boolean disableLibraryOverview; @Override public Set getSupportedOptions() { @@ -102,6 +114,21 @@ public boolean process(String option, List arguments) { return true; } }, + new CustomOption( + "Disable libraryOverview", + Arrays.asList("-disable-libraryOverview", "--disable-libraryOverview"), + "disablelibraryOverview") { + @Override + public boolean process(String option, List arguments) { + if (arguments.get(0).equalsIgnoreCase("false")) { + disableLibraryOverview = false; + } else { + disableLibraryOverview = true; + } + return true; + } + }, + // Support next properties for compatibility with Gradle javadoc task. // According to javadoc spec - these properties used by StandardDoclet and used only when // 'doclet' parameter not populated. But Gradle javadoc not align with this rule and diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java new file mode 100644 index 00000000..7480e28a --- /dev/null +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java @@ -0,0 +1,229 @@ +package com.microsoft.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.google.docfx.doclet.RepoMetadata; +import java.io.File; +import java.util.Arrays; + +public class LibraryOverviewFile { + // This is passed in as an environment variable + private String repoMetadataFilePath; + + private final String outputPath; + private String fileName; + + // This is passed in as an environment variable + private String artifactVersion; + // This is passed in as an environment variable + private String librariesBomVersion; + + // This is parsed from the packages + private String recommendedApiVersion; + + private String LIBRARY_OVERVIEW_FILE_HEADER; + + private String LIBRARY_OVERVIEW_KEY_REFERENCE_HEADER; + + private String LIBRARY_OVERVIEW_KEY_REFERENCE_TABLE; + + private String LIBRARY_OVERVIEW_GETTING_STARTED_SECTION; + + private String LIBRARY_OVERVIEW_CLIENT_INSTALLATION_SECTION; + + private String LIBRARY_OVERVIEW_CLIENT_INSTALLATION_HEADER; + + private String LIBRARY_OVERVIEW_PACKAGE_SELECTION_SECTION; + + public LibraryOverviewFile( + String outputPath, + String fileName, + String artifactVersion, + String librariesBomVersion, + String repoMetadataFilePath, + String recommendedApiVersion) { + this.outputPath = outputPath; + this.fileName = fileName; + this.artifactVersion = artifactVersion; + this.librariesBomVersion = librariesBomVersion; + this.repoMetadataFilePath = repoMetadataFilePath; + this.recommendedApiVersion = recommendedApiVersion; + + RepoMetadata repoMetadata = new RepoMetadata(); + repoMetadata = repoMetadata.parseRepoMetadata(this.repoMetadataFilePath); + + this.LIBRARY_OVERVIEW_FILE_HEADER = + "# " + repoMetadata.getArtifactId() + " overview (" + artifactVersion + ")\n\n"; + + this.LIBRARY_OVERVIEW_KEY_REFERENCE_HEADER = + "## Key Reference Links\n" + repoMetadata.getApiDescription() + "\n\n"; + + this.LIBRARY_OVERVIEW_KEY_REFERENCE_TABLE = + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
" + + repoMetadata.getNamePretty() + + " product referenceGithub repository (includes samples)Maven artifact
" + + "\n\n"; + + // For non-service libraries, these steps are not necessary + String[] runtimeLibraries = {"gax", "api-common", "common-protos", "google-cloud-core"}; + + if (Arrays.asList(runtimeLibraries).contains(repoMetadata.getApiShortName())) { + this.LIBRARY_OVERVIEW_GETTING_STARTED_SECTION = + "## Getting Started\n" + + "In order to use this library, you first need to go through the following steps:" + + "\n\n" + + "- [Install a JDK (Java Development Kit)](https://cloud.google.com/java/docs/setup#install_a_jdk_java_development_kit)\n\n"; + } else { + this.LIBRARY_OVERVIEW_GETTING_STARTED_SECTION = + "## Getting Started\n" + + "In order to use this library, you first need to go through the following steps:" + + "\n\n" + + "- [Install a JDK (Java Development Kit)](https://cloud.google.com/java/docs/setup#install_a_jdk_java_development_kit)\n" + + "- [Select or create a Cloud Platform project](https://console.cloud.google.com/project)\n" + + "- [Enable billing for your project](\"https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project)\n" + + "- [Enable the API](https://console.cloud.google.com/apis/library/" + + repoMetadata.getApiShortName() + + ".googleapis.com)\n" + + "- [Set up authentication](https://cloud.google.com/docs/authentication/client-libraries)\n\n"; + } + + this.LIBRARY_OVERVIEW_CLIENT_INSTALLATION_HEADER = + "## Use the " + + repoMetadata.getNamePretty() + + " for Java\n" + + "To ensure that your project uses compatible versions of the libraries\n" + + "and their component artifacts, import `com.google.cloud:libraries-bom` and use\n" + + "the BOM to specify dependency versions. Be sure to remove any versions that you\n" + + "set previously. For more information about\n" + + "BOMs, see [Google Cloud Platform Libraries BOM](https://cloud.google.com/java/docs/bom).\n\n"; + + this.LIBRARY_OVERVIEW_CLIENT_INSTALLATION_SECTION = + "
\n" + + "\n" + + "
\n" + + "

Maven

\n" + + "

Import the BOM in the dependencyManagement section of your pom.xml file.\n" + + "Include specific artifacts you depend on in the dependencies section, but don't\n" + + "specify the artifacts' versions in the dependencies section.

\n" + + "\n" + + "

The example below demonstrates how you would import the BOM and include the google-cloud-apikeys\n" + + "artifact.

\n" + + "
\n"
+            + "<dependencyManagement>\n"
+            + " <dependencies>\n"
+            + "   <dependency>\n"
+            + "      <groupId>com.google.cloud</groupId>\n"
+            + "      <artifactId>libraries-bom</artifactId>\n"
+            + "      <version>"
+            + this.librariesBomVersion
+            + "</version>\n"
+            + "      <type>pom</type>\n"
+            + "      <scope>import</scope>\n"
+            + "   </dependency>\n"
+            + " </dependencies>\n"
+            + "</dependencyManagement>\n\n"
+            + "<dependencies>\n"
+            + " <dependency>\n"
+            + "   <groupId>com.google.cloud</groupId>\n"
+            + "   <artifactId>"
+            + repoMetadata.getArtifactId()
+            + "</artifactId>\n"
+            + " </dependency>\n"
+            + "</dependencies>\n"
+            + "
\n" + + "
\n" + + "
\n" + + "

Gradle

\n" + + "

BOMs are supported by default in Gradle 5.x or later. Add a platform\n" + + "dependency on com.google.cloud:libraries-bom and remove the version from the\n" + + "dependency declarations in the artifact's build.gradle file.

\n" + + "\n" + + "

The example below demonstrates how you would import the BOM and include the google-cloud-apikeys\n" + + "artifact.

\n" + + "
\n"
+            + "implementation platform('com.google.cloud:libraries-bom:"
+            + librariesBomVersion
+            + "')\n"
+            + "implementation '"
+            + repoMetadata.getDistributionName()
+            + "'\n"
+            + "
\n" + + "

The platform and enforcedPlatform keywords supply dependency versions\n" + + "declared in a BOM. The enforcedPlatform keyword enforces the dependency\n" + + "versions declared in the BOM and thus overrides what you specified.

\n" + + "\n" + + "

For more details of the platform and enforcedPlatform keywords Gradle 5.x or higher, see\n" + + "Gradle: Importing Maven BOMs.

\n" + + "\n" + + "

If you're using Gradle 4.6 or later, add\n" + + "enableFeaturePreview('IMPROVED_POM_SUPPORT') to your settings.gradle file. For details, see\n" + + "Gradle 4.6 Release Notes: BOM import.\n" + + "Versions of Gradle earlier than 4.6 don't support BOMs.

\n" + + "
\n" + + "
\n" + + "

SBT

\n" + + "

SBT doesn't support BOMs. You can find\n" + + "recommended versions of libraries from a particular BOM version on the\n" + + "dashboard\n" + + "and set the versions manually.

\n" + + "

To use the latest version of this library, add this to your dependencies:

\n" + + "
\n"
+            + "libraryDependencies += "com.google.cloud" % ""
+            + repoMetadata.getArtifactId()
+            + "" % ""
+            + artifactVersion
+            + ""\n"
+            + "
\n" + + "
\n" + + "
\n" + + "
\n\n"; + + this.LIBRARY_OVERVIEW_PACKAGE_SELECTION_SECTION = + "## Which version should I use?\n" + + "For this library, we recommend using API version " + // TODO: @alicejli determine best way to pull in the link to the package for this + + this.recommendedApiVersion + + " for new applications.\n" + + "\n" + + "Each Cloud Java client library may contain multiple packages. Each package corresponds to a published version of the service.\n" + + "We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix.\n" + + "For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`.\n" + + "If you use an unstable release, breaking changes may be introduced when upgrading.\n\n"; + } + + @JsonIgnore + public String getFileContent() { + return LIBRARY_OVERVIEW_FILE_HEADER + + LIBRARY_OVERVIEW_KEY_REFERENCE_HEADER + + LIBRARY_OVERVIEW_KEY_REFERENCE_TABLE + + LIBRARY_OVERVIEW_GETTING_STARTED_SECTION + + LIBRARY_OVERVIEW_CLIENT_INSTALLATION_HEADER + + LIBRARY_OVERVIEW_CLIENT_INSTALLATION_SECTION + + LIBRARY_OVERVIEW_PACKAGE_SELECTION_SECTION; + } + + @JsonIgnore + public String getFileNameWithPath() { + return outputPath + File.separator + fileName; + } + + @JsonIgnore + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java index eaeb01fa..42ce1e0d 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java @@ -23,22 +23,35 @@ public class TocContents { private final String projectName; private final List contents = new ArrayList<>(); - public TocContents(String projectName, boolean disableChangelog, List items) { + public TocContents( + String projectName, + boolean disableChangelog, + boolean disableLibraryOverview, + List items) { this.projectName = projectName; if (projectName == null || projectName.equals("")) { contents.addAll(items); } else { // only include product hierarchy and guides if projectName included - createTocContents(projectName, disableChangelog, items); + createTocContents(projectName, disableChangelog, disableLibraryOverview, items); } } private void createTocContents( - String projectName, boolean disableChangelog, List items) { + String projectName, + boolean disableChangelog, + boolean disableLibraryOverview, + List items) { List tocItems = new ArrayList<>(); // combine guides and tocItems - tocItems.add(new Guide("Overview", "overview.html")); + // If disableLibraryOverview is enabled, then generate old overview. Otherwise generate the new + // library overview. + if (!disableLibraryOverview) { + tocItems.add(new Guide("Overview", "overview.md")); + } else { + tocItems.add(new Guide("Overview", "overview.html")); + } if (!disableChangelog) { tocItems.add(new Guide("Version history", "history.md")); } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java index c8a51810..7919c2ca 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java @@ -14,10 +14,17 @@ public class TocFile extends ArrayList implements YmlFile { private final String projectName; private final boolean disableChangelog; - public TocFile(String outputPath, String projectName, boolean disableChangelog) { + private final boolean disableLibraryOverview; + + public TocFile( + String outputPath, + String projectName, + boolean disableChangelog, + boolean disableLibraryOverview) { this.outputPath = outputPath; this.projectName = projectName; this.disableChangelog = disableChangelog; + this.disableLibraryOverview = disableLibraryOverview; } public void addTocItem(TocItem packageTocItem) { @@ -31,7 +38,8 @@ protected void sortByUid() { @Override public String getFileContent() { sortByUid(); - List tocContents = new TocContents(projectName, disableChangelog, this).getContents(); + List tocContents = + new TocContents(projectName, disableChangelog, disableLibraryOverview, this).getContents(); return TOC_FILE_HEADER + YamlUtil.objectToYamlString(tocContents); } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java index 9f416219..fb6f4455 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java @@ -1,5 +1,6 @@ package com.microsoft.util; +import com.microsoft.model.LibraryOverviewFile; import com.microsoft.model.YmlFile; import java.io.IOException; import java.nio.file.Files; @@ -23,4 +24,8 @@ public static void dumpToFile(String content, String fileName) { public static void dumpToFile(YmlFile ymlFile) { dumpToFile(ymlFile.getFileContent(), ymlFile.getFileNameWithPath()); } + + public static void dumpToFile(LibraryOverviewFile libraryOverviewFile) { + dumpToFile(libraryOverviewFile.getFileContent(), libraryOverviewFile.getFileNameWithPath()); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java index bbfbf423..1845417f 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java @@ -29,7 +29,11 @@ public void setup() { new String[] {}, new String[] {}, "google-cloud-product", - false); + false, + false, + "0.18.0", + "26.19.0", + "./src/test/java/com/microsoft/samples/.repo-metadata.json"); } @Test diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java index 95ce5485..f3d20cd6 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java @@ -2,6 +2,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import com.microsoft.util.FileUtilTest; @@ -14,7 +15,9 @@ import java.util.stream.Collectors; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.contrib.java.lang.system.EnvironmentVariables; public class DocletRunnerTest { @@ -64,8 +67,20 @@ public void testFilesGenerationWhenTargetFileDoesNotExist() { } } + @Rule public final EnvironmentVariables environmentVariables = new EnvironmentVariables(); + @Test public void testFilesGeneration() throws IOException { + environmentVariables.set("artifactVersion", "0.18.0"); + environmentVariables.set("librariesBomVersion", "26.19.0"); + environmentVariables.set( + "repoMetadataFilePath", "./src/test/java/com/microsoft/samples/.repo-metadata.json"); + assertEquals("0.18.0", System.getenv("artifactVersion")); + assertEquals("26.19.0", System.getenv("librariesBomVersion")); + assertEquals( + "./src/test/java/com/microsoft/samples/.repo-metadata.json", + System.getenv("repoMetadataFilePath")); + DocletRunner.main(new String[] {PARAMS_DIR}); List expectedFilePaths = @@ -92,10 +107,16 @@ public void testFilesGeneration() throws IOException { for (int i = 0; i < generatedFileLines.length; i++) { assertEquals( "Wrong file content for file " + generatedFilePath, - generatedFileLines[i], - expectedFileLines[i]); + expectedFileLines[i], + generatedFileLines[i]); } } + environmentVariables.clear("artifactVersion"); + environmentVariables.clear("librariesBomVersion"); + environmentVariables.clear("repoMetadataFilePath"); + assertNull(System.getenv("artifactVersion")); + assertNull(System.getenv("librariesBomVersion")); + assertNull(System.getenv("repoMetadataFilePath")); } public void assertSameFileNames(List expected, List generated) { diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java index 31833830..c3b7d04c 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java @@ -17,7 +17,6 @@ package com.microsoft.model; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; import java.util.ArrayList; import java.util.List; @@ -33,6 +32,8 @@ public class TocContentsTest { private String projectName = "google-cloud-project"; private boolean disableChangelog = false; + private boolean disableLibraryOverview = false; + @Before public void setup() { tocItemA = new TocItem("A.uid.package.class", "nameA"); @@ -49,7 +50,8 @@ public void setup() { public void getContentsWithProjectName() { // should include ProjectContents and Guides List tocContents = - new TocContents(projectName, disableChangelog, tocItems).getContents(); + new TocContents(projectName, disableChangelog, disableLibraryOverview, tocItems) + .getContents(); assertEquals("Should only include 1 item", tocContents.size(), 1); assertEquals( @@ -59,7 +61,7 @@ public void getContentsWithProjectName() { assertEquals(contents.getName(), "google-cloud-project"); List items = contents.getItems(); - assertEquals("Should be 5 items", items.size(), 5); + assertEquals("Should be 5 items", 5, items.size()); assertEquals("Guide should be first", items.get(0).getClass(), Guide.class); Guide overview = (Guide) items.get(0); @@ -76,7 +78,8 @@ public void getContentsWithProjectName() { @Test public void getContentsNoProjectName() { - List tocContents = new TocContents("", disableChangelog, tocItems).getContents(); + List tocContents = + new TocContents("", disableChangelog, disableLibraryOverview, tocItems).getContents(); // should not include ProjectContents or Guides assertEquals("Should be 3 items", tocContents.size(), 3); @@ -89,18 +92,37 @@ public void getContentsNoProjectName() { public void getContentsWithDisabledChangelog() { disableChangelog = true; List tocContents = - new TocContents(projectName, disableChangelog, tocItems).getContents(); + new TocContents(projectName, disableChangelog, disableLibraryOverview, tocItems) + .getContents(); ProjectContents contents = (ProjectContents) tocContents.get(0); List items = contents.getItems(); - assertEquals("Should be 4 items", items.size(), 4); + assertEquals("Should be 4 items", 4, items.size()); Guide overview = (Guide) items.get(0); assertEquals("First guide should be Overview", overview.getName(), "Overview"); - assertNotEquals( - "Second item should not be Version History guide", items.get(1).getClass(), Guide.class); assertEquals("Item A should be second", items.get(1), tocItemA); assertEquals("Item B should be third", items.get(2), tocItemB); assertEquals("Item C should be fourth", items.get(3), tocItemC); } + + @Test + public void getContentsWithDisabledLibraryOverview() { + disableLibraryOverview = true; + List tocContents = + new TocContents(projectName, disableChangelog, disableLibraryOverview, tocItems) + .getContents(); + + ProjectContents contents = (ProjectContents) tocContents.get(0); + List items = contents.getItems(); + assertEquals("Should be 5 items", items.size(), 5); + + Guide overview = (Guide) items.get(0); + assertEquals("First guide should be Overview", overview.getName(), "Overview"); + Guide history = (Guide) items.get(1); + assertEquals("Second guide should be Version History", history.getName(), "Version history"); + assertEquals("Item A should be third", items.get(2), tocItemA); + assertEquals("Item B should be fourth", items.get(3), tocItemB); + assertEquals("Item C should be fifth", items.get(4), tocItemC); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java index cd0281ed..bd6dd523 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java @@ -24,7 +24,7 @@ public class TocFileTest { @Test public void sortsByUid() { - TocFile tocFile = new TocFile("outputPath", "google-cloud-project", false); + TocFile tocFile = new TocFile("outputPath", "google-cloud-project", false, false); TocItem tocItemA = new TocItem("a.uid.package.class", "name"); TocItem tocItemB = new TocItem("B.uid.package.class", "name"); TocItem tocItemC = new TocItem("c.uid.package.class", "name"); diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/.repo-metadata.json b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/.repo-metadata.json new file mode 100644 index 00000000..91ff37f0 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/.repo-metadata.json @@ -0,0 +1,16 @@ +{ + "api_shortname": "apikeys", + "name_pretty": "API Keys API", + "product_documentation": "https://cloud.google.com/api-keys/", + "api_description": "API Keys lets you create and manage your API keys for your projects.", + "client_documentation": "https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/overview", + "release_level": "preview", + "transport": "grpc", + "language": "java", + "repo": "googleapis/google-cloud-java", + "repo_short": "java-apikeys", + "distribution_name": "com.google.cloud:google-cloud-apikeys", + "api_id": "apikeys.googleapis.com", + "library_type": "GAPIC_AUTO", + "requires_billing": true +} \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/.repo-metadata.json b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/.repo-metadata.json new file mode 100644 index 00000000..d50f03f8 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/.repo-metadata.json @@ -0,0 +1,17 @@ +{ + "api_shortname": "translate", + "name_pretty": "Cloud Translation", + "product_documentation": "https://cloud.google.com/translate/docs/", + "client_documentation": "https://cloud.google.com/java/docs/reference/google-cloud-translate/latest/overview", + "issue_tracker": "https://issuetracker.google.com/savedsearches/559749", + "release_level": "stable", + "language": "java", + "repo": "googleapis/google-cloud-java", + "repo_short": "java-translate", + "distribution_name": "com.google.cloud:google-cloud-translate", + "api_id": "translation.googleapis.com", + "transport": "both", + "requires_billing": true, + "library_type": "GAPIC_COMBO", + "api_description": "can dynamically translate text between thousands of language pairs. Translation lets websites and programs programmatically integrate with the translation service." +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/RepoMetadataTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/RepoMetadataTest.java new file mode 100644 index 00000000..7af01acb --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/RepoMetadataTest.java @@ -0,0 +1,36 @@ +package com.microsoft.util; + +import static junit.framework.TestCase.assertEquals; + +import com.google.docfx.doclet.RepoMetadata; +import org.junit.Test; + +public class RepoMetadataTest { + @Test + public void testParseRepoMetadata() { + RepoMetadata testRepoMetadata = new RepoMetadata(); + String testRepoMetadataFilePath = "./src/test/java/com/microsoft/util/.repo-metadata.json"; + testRepoMetadata = testRepoMetadata.parseRepoMetadata(testRepoMetadataFilePath); + assertEquals("translate", testRepoMetadata.getApiShortName()); + assertEquals("Cloud Translation", testRepoMetadata.getNamePretty()); + assertEquals( + "https://cloud.google.com/translate/docs/", testRepoMetadata.getProductDocumentationUri()); + assertEquals( + "can dynamically translate text between thousands of language pairs. Translation lets websites and programs programmatically integrate with the translation service.", + testRepoMetadata.getApiDescription()); + assertEquals( + "https://cloud.google.com/java/docs/reference/google-cloud-translate/latest/overview", + testRepoMetadata.getClientDocumentationUri()); + assertEquals("googleapis/google-cloud-java", testRepoMetadata.getRepo()); + assertEquals("java-translate", testRepoMetadata.getRepoShort()); + assertEquals("com.google.cloud:google-cloud-translate", testRepoMetadata.getDistributionName()); + assertEquals("translation.googleapis.com", testRepoMetadata.getApiId()); + assertEquals("google-cloud-translate", testRepoMetadata.getArtifactId()); + assertEquals( + "https://github.com/googleapis/google-cloud-java/tree/main/java-translate", + testRepoMetadata.getGithubLink()); + assertEquals( + "https://central.sonatype.com/artifact/com.google.cloud/google-cloud-translate", + testRepoMetadata.getMavenLink()); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md new file mode 100644 index 00000000..31d4b808 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md @@ -0,0 +1,106 @@ +# google-cloud-apikeys overview (0.18.0) + +## Key Reference Links +API Keys lets you create and manage your API keys for your projects. + + + + + + + +
API Keys API product referenceGithub repository (includes samples)Maven artifact
+ +## Getting Started +In order to use this library, you first need to go through the following steps: + +- [Install a JDK (Java Development Kit)](https://cloud.google.com/java/docs/setup#install_a_jdk_java_development_kit) +- [Select or create a Cloud Platform project](https://console.cloud.google.com/project) +- [Enable billing for your project]("https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project) +- [Enable the API](https://console.cloud.google.com/apis/library/apikeys.googleapis.com) +- [Set up authentication](https://cloud.google.com/docs/authentication/client-libraries) + +## Use the API Keys API for Java +To ensure that your project uses compatible versions of the libraries +and their component artifacts, import `com.google.cloud:libraries-bom` and use +the BOM to specify dependency versions. Be sure to remove any versions that you +set previously. For more information about +BOMs, see [Google Cloud Platform Libraries BOM](https://cloud.google.com/java/docs/bom). + +
+ +
+

Maven

+

Import the BOM in the dependencyManagement section of your pom.xml file. +Include specific artifacts you depend on in the dependencies section, but don't +specify the artifacts' versions in the dependencies section.

+ +

The example below demonstrates how you would import the BOM and include the google-cloud-apikeys +artifact.

+
+<dependencyManagement>
+ <dependencies>
+   <dependency>
+      <groupId>com.google.cloud</groupId>
+      <artifactId>libraries-bom</artifactId>
+      <version>26.19.0</version>
+      <type>pom</type>
+      <scope>import</scope>
+   </dependency>
+ </dependencies>
+</dependencyManagement>
+
+<dependencies>
+ <dependency>
+   <groupId>com.google.cloud</groupId>
+   <artifactId>google-cloud-apikeys</artifactId>
+ </dependency>
+</dependencies>
+
+
+
+

Gradle

+

BOMs are supported by default in Gradle 5.x or later. Add a platform +dependency on com.google.cloud:libraries-bom and remove the version from the +dependency declarations in the artifact's build.gradle file.

+ +

The example below demonstrates how you would import the BOM and include the google-cloud-apikeys +artifact.

+
+implementation platform('com.google.cloud:libraries-bom:26.19.0')
+implementation 'com.google.cloud:google-cloud-apikeys'
+
+

The platform and enforcedPlatform keywords supply dependency versions +declared in a BOM. The enforcedPlatform keyword enforces the dependency +versions declared in the BOM and thus overrides what you specified.

+ +

For more details of the platform and enforcedPlatform keywords Gradle 5.x or higher, see +Gradle: Importing Maven BOMs.

+ +

If you're using Gradle 4.6 or later, add +enableFeaturePreview('IMPROVED_POM_SUPPORT') to your settings.gradle file. For details, see +Gradle 4.6 Release Notes: BOM import. +Versions of Gradle earlier than 4.6 don't support BOMs.

+
+
+

SBT

+

SBT doesn't support BOMs. You can find +recommended versions of libraries from a particular BOM version on the +dashboard +and set the versions manually.

+

To use the latest version of this library, add this to your dependencies:

+
+libraryDependencies += "com.google.cloud" % "google-cloud-apikeys" % "0.18.0"
+
+
+
+
+ +## Which version should I use? +For this library, we recommend using API version v1 for new applications. + +Each Cloud Java client library may contain multiple packages. Each package corresponds to a published version of the service. +We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix. +For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`. +If you use an unstable release, breaking changes may be introduced when upgrading. + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml deleted file mode 100644 index bd37a3b9..00000000 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.yml +++ /dev/null @@ -1,61 +0,0 @@ -### YamlMime:ManagedReference -items: -- uid: "google-cloud-project" - children: - - "com.microsoft.samples" - - "com.microsoft.samples.agreements" - - "com.microsoft.samples.commentinheritance" - - "com.microsoft.samples.google" - - "com.microsoft.samples.google.v1" - - "com.microsoft.samples.google.v1.stub" - - "com.microsoft.samples.google.v1beta" - - "com.microsoft.samples.google.v1p1alpha" - - "com.microsoft.samples.offers" - - "com.microsoft.samples.subpackage" - langs: - - "java" - nameWithType: "google-cloud-project" - fullName: "google-cloud-project" - type: "Namespace" - javaType: "overview" -references: -- uid: "com.microsoft.samples" - name: "com.microsoft.samples" - nameWithType: "com.microsoft.samples" - fullName: "com.microsoft.samples" -- uid: "com.microsoft.samples.agreements" - name: "com.microsoft.samples.agreements" - nameWithType: "com.microsoft.samples.agreements" - fullName: "com.microsoft.samples.agreements" -- uid: "com.microsoft.samples.commentinheritance" - name: "com.microsoft.samples.commentinheritance" - nameWithType: "com.microsoft.samples.commentinheritance" - fullName: "com.microsoft.samples.commentinheritance" -- uid: "com.microsoft.samples.google" - name: "com.microsoft.samples.google" - nameWithType: "com.microsoft.samples.google" - fullName: "com.microsoft.samples.google" -- uid: "com.microsoft.samples.google.v1" - name: "com.microsoft.samples.google.v1" - nameWithType: "com.microsoft.samples.google.v1" - fullName: "com.microsoft.samples.google.v1" -- uid: "com.microsoft.samples.google.v1.stub" - name: "com.microsoft.samples.google.v1.stub" - nameWithType: "com.microsoft.samples.google.v1.stub" - fullName: "com.microsoft.samples.google.v1.stub" -- uid: "com.microsoft.samples.offers" - name: "com.microsoft.samples.offers" - nameWithType: "com.microsoft.samples.offers" - fullName: "com.microsoft.samples.offers" -- uid: "com.microsoft.samples.subpackage" - name: "com.microsoft.samples.subpackage" - nameWithType: "com.microsoft.samples.subpackage" - fullName: "com.microsoft.samples.subpackage" -- uid: "com.microsoft.samples.google.v1beta" - name: "com.microsoft.samples.google.v1beta" - nameWithType: "com.microsoft.samples.google.v1beta" - fullName: "com.microsoft.samples.google.v1beta" -- uid: "com.microsoft.samples.google.v1p1alpha" - name: "com.microsoft.samples.google.v1p1alpha" - nameWithType: "com.microsoft.samples.google.v1p1alpha" - fullName: "com.microsoft.samples.google.v1p1alpha" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml index bcfc04f5..6aa271c4 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml @@ -2,7 +2,7 @@ - name: "google-cloud-project" items: - name: "Overview" - href: "overview.html" + href: "overview.md" - name: "Version history" href: "history.md" - uid: "com.microsoft.samples" From 3920ec9ca48a27797cf3ea95819364f8940916e8 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 2 Oct 2023 15:24:09 +0200 Subject: [PATCH 103/168] chore(deps): update actions/checkout action to v4 (#193) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index db7370f3..7195a82a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-java@v3 with: java-version: 11 @@ -25,7 +25,7 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-java@v3 with: java-version: 11 @@ -35,7 +35,7 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-java@v3 with: java-version: 11 From 9d01489315506d5a57c906e2f6cfc3a37aa611cb Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 2 Oct 2023 15:25:45 +0200 Subject: [PATCH 104/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v4.19.0 (#195) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> Co-authored-by: Burke Davison <40617934+burkedavison@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 2ce03b5f..cf39febb 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -188,7 +188,7 @@ com.google.cloud google-cloud-speech - 4.18.0 + 4.19.0 test From cda7f0cc6c0c32685d093544e9d0e97fd90e7916 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 2 Oct 2023 15:27:03 +0200 Subject: [PATCH 105/168] fix(deps): update dependency commons-io:commons-io to v2.14.0 (#201) Co-authored-by: Burke Davison <40617934+burkedavison@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index cf39febb..5b1461a8 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -16,7 +16,7 @@ 2.15.2 3.13.0 4.4 - 2.13.0 + 2.14.0 1.10.0 1.1.0 From e81e9ba1fb4c20c5cb80dbcea68aaf03887fc1b7 Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Mon, 2 Oct 2023 11:55:12 -0400 Subject: [PATCH 106/168] fix: package comparison by name (#204) --- .../src/main/java/com/microsoft/lookup/PackageLookup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java index 3a78a656..0d18dce0 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java @@ -94,7 +94,7 @@ public List findStubPackages( String expectedStubPackageBase = pkg.getQualifiedName() + ".stub"; return packages.stream() .filter(p -> String.valueOf(p.getQualifiedName()).startsWith(expectedStubPackageBase)) - .sorted() + .sorted(Comparator.comparing(p -> String.valueOf(p.getQualifiedName()))) .collect(Collectors.toList()); } From f85610f5238496bff3b02e91bf1765eee23ff4c3 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Mon, 2 Oct 2023 12:18:40 -0400 Subject: [PATCH 107/168] fix: empty ApiVersion (#205) * fix: empty ApiVersion * fix lint --- .../com/microsoft/build/YmlFilesBuilder.java | 5 +++- .../microsoft/model/LibraryOverviewFile.java | 28 +++++++++++-------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index fc87377f..773a8383 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -140,7 +140,10 @@ void process() { for (PackageElement pkg : allPackages) { packageLookup.extractApiVersion(pkg).ifPresent(versions::add); } - recommendedApiVersion = ApiVersion.getRecommended(versions).toString(); + + if (!versions.isEmpty()) { + recommendedApiVersion = ApiVersion.getRecommended(versions).toString(); + } for (PackageElement element : organizedPackagesWithoutStubs.get(PackageGroup.VISIBLE)) { tocFile.addTocItem(buildPackage(element)); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java index 7480e28a..2bff8f45 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java @@ -189,17 +189,23 @@ public LibraryOverviewFile( + "\n" + "\n\n"; - this.LIBRARY_OVERVIEW_PACKAGE_SELECTION_SECTION = - "## Which version should I use?\n" - + "For this library, we recommend using API version " - // TODO: @alicejli determine best way to pull in the link to the package for this - + this.recommendedApiVersion - + " for new applications.\n" - + "\n" - + "Each Cloud Java client library may contain multiple packages. Each package corresponds to a published version of the service.\n" - + "We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix.\n" - + "For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`.\n" - + "If you use an unstable release, breaking changes may be introduced when upgrading.\n\n"; + // Some client libraries do not have an underlying API service (e.g. + // google-cloud-logging-logback, google-cloud-storage-nio, google-cloud-spanner-jdbc), hence + // there is no recommended API version. + if (this.recommendedApiVersion.isEmpty()) { + this.LIBRARY_OVERVIEW_PACKAGE_SELECTION_SECTION = ""; + } else { + this.LIBRARY_OVERVIEW_PACKAGE_SELECTION_SECTION = + "## Which version should I use?\n" + + "For this library, we recommend using API version " + + this.recommendedApiVersion + + " for new applications.\n" + + "\n" + + "Each Cloud Java client library may contain multiple packages. Each package corresponds to a published version of the service.\n" + + "We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix.\n" + + "For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`.\n" + + "If you use an unstable release, breaking changes may be introduced when upgrading.\n\n"; + } } @JsonIgnore From 64f398e1ec91a752e92a936214ef6449888c3038 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Mon, 2 Oct 2023 17:01:58 -0400 Subject: [PATCH 108/168] chore: remove sandbox for security violation (#206) --- .../docfx-doclet-143274/sandbox/docfx.json | 24 ---------------- .../sandbox/generate-yml-files.bat | 26 ------------------ .../sandbox/libs/hamcrest-core-1.3.jar | Bin 45024 -> 0 bytes .../sandbox/libs/junit-4.12-sources.jar | Bin 200355 -> 0 bytes .../sandbox/serve-docs.bat | 15 ---------- .../docfx-doclet-143274/sandbox/toc.yml | 2 -- 6 files changed, 67 deletions(-) delete mode 100644 third_party/docfx-doclet-143274/sandbox/docfx.json delete mode 100644 third_party/docfx-doclet-143274/sandbox/generate-yml-files.bat delete mode 100644 third_party/docfx-doclet-143274/sandbox/libs/hamcrest-core-1.3.jar delete mode 100644 third_party/docfx-doclet-143274/sandbox/libs/junit-4.12-sources.jar delete mode 100644 third_party/docfx-doclet-143274/sandbox/serve-docs.bat delete mode 100644 third_party/docfx-doclet-143274/sandbox/toc.yml diff --git a/third_party/docfx-doclet-143274/sandbox/docfx.json b/third_party/docfx-doclet-143274/sandbox/docfx.json deleted file mode 100644 index bd1640aa..00000000 --- a/third_party/docfx-doclet-143274/sandbox/docfx.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "build": { - "content": [ - { - "files": [ - "generated-yml-files/**.yml", - "toc.yml" - ] - } - ], - "dest": "_site", - "globalMetadataFiles": [], - "fileMetadataFiles": [], - "template": [ - "default" - ], - "postProcessors": [], - "markdownEngineName": "markdig", - "noLangKeyword": false, - "keepFileLink": false, - "cleanupCacheHistory": false, - "disableGitFeatures": true - } -} \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/sandbox/generate-yml-files.bat b/third_party/docfx-doclet-143274/sandbox/generate-yml-files.bat deleted file mode 100644 index 6e8b216b..00000000 --- a/third_party/docfx-doclet-143274/sandbox/generate-yml-files.bat +++ /dev/null @@ -1,26 +0,0 @@ - -set SOURCES_FOLDER="../target/sandbox/unpacked-sources" -set GENERATED_FOLDER="../target/sandbox/generated-yml-files" - -echo "Remove folders" -rmdir /S /Q %SOURCES_FOLDER% -rmdir /S /Q %GENERATED_FOLDER% - -echo "Create directory to extract sources" -mkdir %SOURCES_FOLDER% - -echo "Extract sources from jar file" -pushd %SOURCES_FOLDER% -jar xf ../../../sandbox/libs/junit-4.12-sources.jar -popd - -echo "Before this action make sure that doclet jar presents in target folder. So build it preliminary when needed" -echo "Generate yml files" -javadoc ^ --encoding UTF-8 ^ --docletpath ../target/docfx-doclet-1.0-SNAPSHOT-jar-with-dependencies.jar ^ --doclet com.microsoft.doclet.DocFxDoclet ^ --cp ./libs/hamcrest-core-1.3.jar ^ --sourcepath %SOURCES_FOLDER% ^ --outputpath %GENERATED_FOLDER% ^ --subpackages org:junit diff --git a/third_party/docfx-doclet-143274/sandbox/libs/hamcrest-core-1.3.jar b/third_party/docfx-doclet-143274/sandbox/libs/hamcrest-core-1.3.jar deleted file mode 100644 index 9d5fe16e3dd37ebe79a36f61f5d0e1a69a653a8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45024 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 UgpPtD2z>DYYp}SJr5?)v0beu;=l}o! diff --git a/third_party/docfx-doclet-143274/sandbox/libs/junit-4.12-sources.jar b/third_party/docfx-doclet-143274/sandbox/libs/junit-4.12-sources.jar deleted file mode 100644 index 884f92f595c982dbcfb78b69336c411c573c9a11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200355 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%0DE9U{u^$X@lt^>mpiZDuECYyc8= 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

DLFZO-2>f8n%eH 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�&9DVJ>X+g#32NU?$m{JE5op> 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 Q>Kh4%UE$Ab5Znm=1D5$g>Hq)$ diff --git a/third_party/docfx-doclet-143274/sandbox/serve-docs.bat b/third_party/docfx-doclet-143274/sandbox/serve-docs.bat deleted file mode 100644 index acfdabda..00000000 --- a/third_party/docfx-doclet-143274/sandbox/serve-docs.bat +++ /dev/null @@ -1,15 +0,0 @@ - -set SANDBOX_FOLDER="../target/sandbox" - -echo "Copy files" -copy docfx.json %SANDBOX_FOLDER% -copy toc.yml %SANDBOX_FOLDER% - -echo "Remove folders" -pushd %SANDBOX_FOLDER% -rmdir /S /Q _site -rmdir /S /Q obj - -echo "Serve documentation" -docfx docfx.json --serve -popd diff --git a/third_party/docfx-doclet-143274/sandbox/toc.yml b/third_party/docfx-doclet-143274/sandbox/toc.yml deleted file mode 100644 index b109c22b..00000000 --- a/third_party/docfx-doclet-143274/sandbox/toc.yml +++ /dev/null @@ -1,2 +0,0 @@ -- name: Generated YAML files - href: generated-yml-files/ From 011bf12cf3eb9bf5db79b1b005eadbc77c88158b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 6 Oct 2023 15:32:14 +0200 Subject: [PATCH 109/168] chore(deps): update dependency com.google.googlejavaformat:google-java-format to v1.18.1 (#207) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 5b1461a8..06fb2b4d 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -106,7 +106,7 @@ com.google.googlejavaformat google-java-format - 1.17.0 + 1.18.1 From d2b487c3014ceeb88b5ceddcbf035efe08ab3618 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 6 Oct 2023 15:34:04 +0200 Subject: [PATCH 110/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v4.22.0 (#208) Co-authored-by: Burke Davison <40617934+burkedavison@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 06fb2b4d..f2daefcd 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -188,7 +188,7 @@ com.google.cloud google-cloud-speech - 4.19.0 + 4.22.0 test From 7f9c42f5441684072249b749ad706377b38b5f55 Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Fri, 6 Oct 2023 15:45:04 -0400 Subject: [PATCH 111/168] feat: Left-hand navigation API-versioned package organization (#203) * chore: refactor to encapsulate package organization * feat: organize package contents into collapsed categories * fix: sort by package qualified name * fix: use path to find repo-metadata file, or fail with improved message * fix: improve repo-metadata error messages * chore: add additional categories * chore: do not organize packages without a client * fix: sentence casing for category titles * chore: refactor ApiVersionPackageToc for better testing * chore: formatting * feat: organize stub packages into single group * feat: organize stub package contents * fix: update expected toc.yml * chore: place 'Settings' after 'Clients' * fix: update tests for new category order --- .../com/google/docfx/doclet/RepoMetadata.java | 8 +- .../com/microsoft/build/ClassBuilder.java | 131 ++++++++++++++++-- .../com/microsoft/build/YmlFilesBuilder.java | 25 ++-- .../com/microsoft/doclet/DocFxDoclet.java | 2 + .../com/microsoft/lookup/PackageLookup.java | 4 + .../microsoft/model/ApiVersionPackageToc.java | 116 ++++++++++++++++ .../com/microsoft/model/StubPackageToc.java | 59 ++++++++ .../java/com/microsoft/model/TocTypeMap.java | 12 ++ .../com/microsoft/build/ClassBuilderTest.java | 3 + ...esBuilderTest.java => TocTypeMapTest.java} | 29 +--- .../microsoft/doclet/DocletRunnerTest.java | 4 +- .../model/ApiVersionPackageTocTest.java | 71 ++++++++++ .../expected-generated-files/toc.yml | 60 +++++--- 13 files changed, 446 insertions(+), 78 deletions(-) create mode 100644 third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ApiVersionPackageToc.java create mode 100644 third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/StubPackageToc.java rename third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/{YmlFilesBuilderTest.java => TocTypeMapTest.java} (66%) create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/ApiVersionPackageTocTest.java diff --git a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java index 9ddbdee1..a4ed13e0 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java @@ -6,6 +6,8 @@ import com.google.gson.annotations.SerializedName; import java.io.FileReader; import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Objects; public class RepoMetadata { @@ -140,10 +142,12 @@ public String getMavenLink() { public RepoMetadata parseRepoMetadata(String fileName) { Gson gson = new Gson(); - try (FileReader reader = new FileReader(fileName)) { + Path path = Paths.get(fileName); + try (FileReader reader = new FileReader(path.toFile())) { return gson.fromJson(reader, RepoMetadata.class); } catch (IOException e) { - throw new RuntimeException(".repo-metadata.json is not found", e); + throw new RuntimeException( + ".repo-metadata.json is not found @ " + path.toAbsolutePath().normalize(), e); } } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java index 84e3d3eb..615ee5ca 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java @@ -20,8 +20,11 @@ import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; +import com.microsoft.lookup.PackageLookup; +import com.microsoft.model.ApiVersionPackageToc; import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; +import com.microsoft.model.StubPackageToc; import com.microsoft.model.TocItem; import com.microsoft.model.TocTypeMap; import com.microsoft.util.ElementUtil; @@ -32,31 +35,141 @@ import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.PackageElement; import javax.lang.model.element.TypeElement; import javax.lang.model.util.ElementFilter; class ClassBuilder { - private ElementUtil elementUtil; - private ClassLookup classLookup; - private ClassItemsLookup classItemsLookup; - private String outputPath; - private ReferenceBuilder referenceBuilder; + + private final ElementUtil elementUtil; + private final ClassLookup classLookup; + private final ClassItemsLookup classItemsLookup; + private final String outputPath; + private final PackageLookup packageLookup; + private final ReferenceBuilder referenceBuilder; ClassBuilder( ElementUtil elementUtil, ClassLookup classLookup, ClassItemsLookup classItemsLookup, String outputPath, + PackageLookup packageLookup, ReferenceBuilder referenceBuilder) { this.elementUtil = elementUtil; this.classLookup = classLookup; this.classItemsLookup = classItemsLookup; this.outputPath = outputPath; + this.packageLookup = packageLookup; this.referenceBuilder = referenceBuilder; } - void buildFilesForInnerClasses( - Element element, TocTypeMap tocTypeMap, List container) { + List buildFilesForPackage(PackageElement pkg, List classMetadataFiles) { + if (packageLookup.isApiVersionPackage(pkg) && containsAtLeastOneClient(pkg)) { + // API Version package organization is a nested list organized by GAPIC concepts + ApiVersionPackageToc apiVersionPackageToc = new ApiVersionPackageToc(); + buildFilesForApiVersionPackage(pkg, apiVersionPackageToc, classMetadataFiles); + return apiVersionPackageToc.toList(); + + } else if (packageLookup.isApiVersionStubPackage(pkg)) { + StubPackageToc stubPackageToc = new StubPackageToc(); + buildFilesForStubPackage(pkg, stubPackageToc, classMetadataFiles); + return stubPackageToc.toList(); + + } else { + // Standard package organization is a flat list organized by Java type + TocTypeMap typeMap = new TocTypeMap(); + buildFilesForStandardPackage(pkg, typeMap, classMetadataFiles); + return typeMap.toList(); + } + } + + private void buildFilesForApiVersionPackage( + Element element, + ApiVersionPackageToc apiVersionPackageToc, + List classMetadataFiles) { + for (TypeElement classElement : elementUtil.extractSortedElements(element)) { + String uid = classLookup.extractUid(classElement); + String name = classLookup.extractTocName(classElement); + String status = classLookup.extractStatus(classElement); + TocItem tocItem = new TocItem(uid, name, status); + + // The order of these checks matter! + // Ex: a paging response class would change its category if "isPagingClass" is checked first. + if (classElement.getKind() == ElementKind.INTERFACE) { + apiVersionPackageToc.addInterface(tocItem); + } else if (isClient(classElement)) { + apiVersionPackageToc.addClient(tocItem); + } else if (name.endsWith("Response") || name.endsWith("Request")) { + apiVersionPackageToc.addRequestOrResponse(tocItem); + } else if (name.endsWith("Settings")) { + apiVersionPackageToc.addSettings(tocItem); + } else if (name.endsWith("Builder")) { + apiVersionPackageToc.addBuilder(tocItem); + } else if (classElement.getKind() == ElementKind.ENUM) { + apiVersionPackageToc.addEnum(tocItem); + } else if (name.endsWith("Exception")) { + apiVersionPackageToc.addException(tocItem); + } else if (isGeneratedMessage(classElement)) { + apiVersionPackageToc.addMessage(tocItem); + } else if (isPagingClass(classElement)) { + apiVersionPackageToc.addPaging(tocItem); + } else if (isResourceName(classElement)) { + apiVersionPackageToc.addResourceName(tocItem); + } else { + apiVersionPackageToc.addUncategorized(tocItem); + } + + classMetadataFiles.add(buildClassYmlFile(classElement)); + buildFilesForApiVersionPackage(classElement, apiVersionPackageToc, classMetadataFiles); + } + } + + private void buildFilesForStubPackage( + Element element, StubPackageToc packageToc, List classMetadataFiles) { + for (TypeElement classElement : elementUtil.extractSortedElements(element)) { + String uid = classLookup.extractUid(classElement); + String name = classLookup.extractTocName(classElement); + String status = classLookup.extractStatus(classElement); + TocItem tocItem = new TocItem(uid, name, status); + + if (name.endsWith("Stub")) { + packageToc.addStub(tocItem); + } else if (name.contains("Settings")) { + packageToc.addSettings(tocItem); + } else if (name.endsWith("CallableFactory")) { + packageToc.addCallableFactory(tocItem); + } else { + packageToc.addUncategorized(tocItem); + } + + classMetadataFiles.add(buildClassYmlFile(classElement)); + buildFilesForStubPackage(classElement, packageToc, classMetadataFiles); + } + } + + boolean containsAtLeastOneClient(PackageElement pkg) { + return elementUtil.extractSortedElements(pkg).stream().anyMatch(this::isClient); + } + + boolean isClient(TypeElement classElement) { + return classLookup.extractTocName(classElement).endsWith("Client"); + } + + boolean isResourceName(TypeElement classElement) { + return classElement.getInterfaces().stream() + .anyMatch(i -> String.valueOf(i).contains("ResourceName")); + } + + boolean isGeneratedMessage(TypeElement classElement) { + return String.valueOf(classElement.getSuperclass()).contains("GeneratedMessage"); + } + + boolean isPagingClass(TypeElement classElement) { + return String.valueOf(classElement.getSuperclass()).contains(".paging."); + } + + void buildFilesForStandardPackage( + Element element, TocTypeMap tocTypeMap, List classMetadataFiles) { for (TypeElement classElement : elementUtil.extractSortedElements(element)) { String uid = classLookup.extractUid(classElement); String name = classLookup.extractTocName(classElement); @@ -73,8 +186,8 @@ void buildFilesForInnerClasses( tocTypeMap.get(ElementKind.CLASS.name()).add(new TocItem(uid, name, status)); } - container.add(buildClassYmlFile(classElement)); - buildFilesForInnerClasses(classElement, tocTypeMap, container); + classMetadataFiles.add(buildClassYmlFile(classElement)); + buildFilesForStandardPackage(classElement, tocTypeMap, classMetadataFiles); } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 773a8383..3d83005f 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -15,7 +15,6 @@ import com.microsoft.model.MetadataFileItem; import com.microsoft.model.TocFile; import com.microsoft.model.TocItem; -import com.microsoft.model.TocTypeMap; import com.microsoft.util.ElementUtil; import com.microsoft.util.FileUtil; import java.util.ArrayList; @@ -78,6 +77,7 @@ public YmlFilesBuilder( classLookup, new ClassItemsLookup(environment, elementUtil), outputPath, + packageLookup, referenceBuilder); } @@ -192,27 +192,20 @@ private TocItem buildPackage(PackageElement element) { packageMetadataFiles.add(packageBuilder.buildPackageMetadataFile(element)); // build classes/interfaces/enums/exceptions/annotations - TocTypeMap typeMap = new TocTypeMap(); - classBuilder.buildFilesForInnerClasses(element, typeMap, classMetadataFiles); - packageTocItem.getItems().addAll(joinTocTypeItems(typeMap)); + packageTocItem + .getItems() + .addAll(classBuilder.buildFilesForPackage(element, classMetadataFiles)); // build stubs + TocItem stubPackagesItem = new TocItem("Stub packages", "Stub packages", ""); packageLookup .findStubPackages(element, allPackages) - .forEach((PackageElement stub) -> packageTocItem.getItems().add(buildPackage(stub))); + .forEach((PackageElement stub) -> stubPackagesItem.getItems().add(buildPackage(stub))); + if (!stubPackagesItem.getItems().isEmpty()) { + packageTocItem.getItems().add(stubPackagesItem); + } return packageTocItem; } } - - List joinTocTypeItems(TocTypeMap tocTypeMap) { - return tocTypeMap.getTitleList().stream() - .filter(kindTitle -> tocTypeMap.get(kindTitle.getElementKind()).size() > 0) - .flatMap( - kindTitle -> { - tocTypeMap.get(kindTitle.getElementKind()).add(0, new TocItem(kindTitle.getTitle())); - return tocTypeMap.get(kindTitle.getElementKind()).stream(); - }) - .collect(Collectors.toList()); - } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java index a648496b..e4c3051e 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java @@ -24,6 +24,8 @@ public boolean run(DocletEnvironment environment) { String artifactVersion = System.getenv("artifactVersion"); String librariesBomVersion = System.getenv("librariesBomVersion"); String repoMetadataFilePath = System.getenv("repoMetadataFilePath"); + Objects.requireNonNull( + repoMetadataFilePath, "Environment variable 'repoMetadataFilePath' must not be null."); reporter.print(Kind.NOTE, "Environment variable artifactVersion: " + artifactVersion); reporter.print(Kind.NOTE, "Environment variable librariesBomVersion: " + librariesBomVersion); reporter.print(Kind.NOTE, "Environment variable repoMetadataFilePath: " + repoMetadataFilePath); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java index 0d18dce0..d9394854 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java @@ -110,6 +110,10 @@ public Optional extractApiVersion(String name) { return ApiVersion.parse(getLeafPackage(name)); } + public boolean isApiVersionPackage(PackageElement pkg) { + return extractApiVersion(pkg).isPresent(); + } + public enum PackageGroup { VISIBLE, OLDER_AND_PRERELEASE diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ApiVersionPackageToc.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ApiVersionPackageToc.java new file mode 100644 index 00000000..2e5e7cbf --- /dev/null +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/ApiVersionPackageToc.java @@ -0,0 +1,116 @@ +package com.microsoft.model; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; + +public class ApiVersionPackageToc { + static final String CLIENTS = "Clients"; + static final String REQUESTS_AND_RESPONSES = "Requests and responses"; + static final String SETTINGS = "Settings"; + static final String ALL_OTHERS = "All other classes and interfaces"; + static final String BUILDERS = "Builders"; + static final String ENUMS = "Enums"; + static final String INTERFACES = "Interfaces"; + static final String MESSAGES = "Messages"; + static final String EXCEPTIONS = "Exceptions"; + static final String PAGING = "Paging"; + static final String RESOURCE_NAMES = "Resource names"; + static final String UNCATEGORIZED = "Other"; + + private final LinkedHashMap> visibleCategories = new LinkedHashMap<>(); + private final LinkedHashMap> hiddenCategories = new LinkedHashMap<>(); + + public ApiVersionPackageToc() { + // Order here determines final organization order. + visibleCategories.put(CLIENTS, new ArrayList<>()); + visibleCategories.put(SETTINGS, new ArrayList<>()); + visibleCategories.put(REQUESTS_AND_RESPONSES, new ArrayList<>()); + + hiddenCategories.put(BUILDERS, new ArrayList<>()); + hiddenCategories.put(ENUMS, new ArrayList<>()); + hiddenCategories.put(EXCEPTIONS, new ArrayList<>()); + hiddenCategories.put(MESSAGES, new ArrayList<>()); + hiddenCategories.put(PAGING, new ArrayList<>()); + hiddenCategories.put(RESOURCE_NAMES, new ArrayList<>()); + hiddenCategories.put(INTERFACES, new ArrayList<>()); + hiddenCategories.put(UNCATEGORIZED, new ArrayList<>()); + } + + public void addClient(TocItem tocItem) { + visibleCategories.get(CLIENTS).add(tocItem); + } + + public void addRequestOrResponse(TocItem tocItem) { + visibleCategories.get(REQUESTS_AND_RESPONSES).add(tocItem); + } + + public void addSettings(TocItem tocItem) { + visibleCategories.get(SETTINGS).add(tocItem); + } + + public void addBuilder(TocItem tocItem) { + hiddenCategories.get(BUILDERS).add(tocItem); + } + + public void addEnum(TocItem tocItem) { + hiddenCategories.get(ENUMS).add(tocItem); + } + + public void addException(TocItem tocItem) { + hiddenCategories.get(EXCEPTIONS).add(tocItem); + } + + public void addInterface(TocItem tocItem) { + hiddenCategories.get(INTERFACES).add(tocItem); + } + + public void addMessage(TocItem tocItem) { + hiddenCategories.get(MESSAGES).add(tocItem); + } + + public void addUncategorized(TocItem tocItem) { + hiddenCategories.get(UNCATEGORIZED).add(tocItem); + } + + public void addPaging(TocItem tocItem) { + hiddenCategories.get(PAGING).add(tocItem); + } + + public void addResourceName(TocItem tocItem) { + hiddenCategories.get(RESOURCE_NAMES).add(tocItem); + } + + /** Build a list of TocItems for inclusion in the library's table of contents */ + public List toList() { + List toc = new ArrayList<>(); + + visibleCategories.forEach( + (name, category) -> { + if (!category.isEmpty()) { + toc.add(createCategory(name, category)); + } + }); + + TocItem allOthers = new TocItem(ALL_OTHERS, ALL_OTHERS, null); + hiddenCategories.forEach( + (name, category) -> { + if (!category.isEmpty()) { + allOthers.getItems().add(createCategory(name, category)); + } + }); + if (allOthers.getItems().size() > 0) { + toc.add(allOthers); + } + + return toc; + } + + private TocItem createCategory(String name, List items) { + TocItem category = new TocItem(name, name, null); + items.sort(Comparator.comparing(TocItem::getName)); + category.getItems().addAll(items); + return category; + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/StubPackageToc.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/StubPackageToc.java new file mode 100644 index 00000000..9d1e4986 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/StubPackageToc.java @@ -0,0 +1,59 @@ +package com.microsoft.model; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; + +public class StubPackageToc { + static final String STUBS = "Stubs"; + static final String SETTINGS = "Settings"; + static final String CALLABLE_FACTORIES = "Callable factories"; + static final String UNCATEGORIZED = "Other"; + + private final LinkedHashMap> visibleCategories = new LinkedHashMap<>(); + + public StubPackageToc() { + // Order here determines final organization order. + visibleCategories.put(STUBS, new ArrayList<>()); + visibleCategories.put(SETTINGS, new ArrayList<>()); + visibleCategories.put(CALLABLE_FACTORIES, new ArrayList<>()); + } + + public void addStub(TocItem tocItem) { + visibleCategories.get(STUBS).add(tocItem); + } + + public void addSettings(TocItem tocItem) { + visibleCategories.get(SETTINGS).add(tocItem); + } + + public void addCallableFactory(TocItem tocItem) { + visibleCategories.get(CALLABLE_FACTORIES).add(tocItem); + } + + public void addUncategorized(TocItem tocItem) { + visibleCategories.get(UNCATEGORIZED).add(tocItem); + } + + /** Build a list of TocItems for inclusion in the library's table of contents */ + public List toList() { + List toc = new ArrayList<>(); + + visibleCategories.forEach( + (name, category) -> { + if (!category.isEmpty()) { + toc.add(createCategory(name, category)); + } + }); + + return toc; + } + + private TocItem createCategory(String name, List items) { + TocItem category = new TocItem(name, name, null); + items.sort(Comparator.comparing(TocItem::getName)); + category.getItems().addAll(items); + return category; + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocTypeMap.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocTypeMap.java index 7e8b9869..55cacb17 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocTypeMap.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocTypeMap.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.stream.Collectors; import javax.lang.model.element.ElementKind; public class TocTypeMap extends HashMap> { @@ -38,4 +39,15 @@ public List getTitleList() { new KindTitle(ElementKind.ANNOTATION_TYPE.name(), "Annotation Types"), new KindTitle("EXCEPTION", "Exceptions")); } + + public List toList() { + return getTitleList().stream() + .filter(kindTitle -> get(kindTitle.getElementKind()).size() > 0) + .flatMap( + kindTitle -> { + get(kindTitle.getElementKind()).add(0, new TocItem(kindTitle.getTitle())); + return get(kindTitle.getElementKind()).stream(); + }) + .collect(Collectors.toList()); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java index 9b8cbe97..d3945f64 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java @@ -21,6 +21,7 @@ import com.google.testing.compile.CompilationRule; import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; +import com.microsoft.lookup.PackageLookup; import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; import com.microsoft.util.ElementUtil; @@ -49,12 +50,14 @@ public void setup() { docTrees = Mockito.mock(DocTrees.class); ElementUtil elementUtil = new ElementUtil(new String[0], new String[0]); ClassLookup classLookup = new ClassLookup(environment, elementUtil); + PackageLookup packageLookup = new PackageLookup(environment); classBuilder = new ClassBuilder( elementUtil, classLookup, new ClassItemsLookup(environment, elementUtil), "./target", + packageLookup, new ReferenceBuilder(environment, classLookup, elementUtil)); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/TocTypeMapTest.java similarity index 66% rename from third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java rename to third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/TocTypeMapTest.java index 1845417f..0f58ae07 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/TocTypeMapTest.java @@ -6,38 +6,15 @@ import com.microsoft.model.TocTypeMap; import java.util.List; import javax.lang.model.element.ElementKind; -import jdk.javadoc.doclet.DocletEnvironment; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) -public class YmlFilesBuilderTest { - - private YmlFilesBuilder ymlFilesBuilder; - private DocletEnvironment environment; - - @Before - public void setup() { - environment = Mockito.mock(DocletEnvironment.class); - ymlFilesBuilder = - new YmlFilesBuilder( - environment, - "./target", - new String[] {}, - new String[] {}, - "google-cloud-product", - false, - false, - "0.18.0", - "26.19.0", - "./src/test/java/com/microsoft/samples/.repo-metadata.json"); - } +public class TocTypeMapTest { @Test - public void joinTocTypeItems() { + public void testToList() { TocTypeMap typeMap = new TocTypeMap(); TocItem classToc = new TocItem("uid1", "name1"); TocItem interfaceToc = new TocItem("uid2", "name2"); @@ -51,7 +28,7 @@ public void joinTocTypeItems() { typeMap.get(ElementKind.ANNOTATION_TYPE.name()).add(annotationToc); typeMap.get("EXCEPTION").add(exceptionToc); - List tocItems = ymlFilesBuilder.joinTocTypeItems(typeMap); + List tocItems = typeMap.toList(); assertEquals("Interfaces", tocItems.get(0).getHeading()); assertEquals(interfaceToc, tocItems.get(1)); diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java index f3d20cd6..9bc72d5c 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java @@ -30,6 +30,8 @@ public class DocletRunnerTest { private final PrintStream originalOut = System.out; private final PrintStream originalErr = System.err; + @Rule public final EnvironmentVariables environmentVariables = new EnvironmentVariables(); + @Before public void cleanup() throws IOException { FileUtilTest.deleteDirectory(OUTPUT_DIR); @@ -67,8 +69,6 @@ public void testFilesGenerationWhenTargetFileDoesNotExist() { } } - @Rule public final EnvironmentVariables environmentVariables = new EnvironmentVariables(); - @Test public void testFilesGeneration() throws IOException { environmentVariables.set("artifactVersion", "0.18.0"); diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/ApiVersionPackageTocTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/ApiVersionPackageTocTest.java new file mode 100644 index 00000000..693bc87b --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/ApiVersionPackageTocTest.java @@ -0,0 +1,71 @@ +package com.microsoft.model; + +import static com.google.common.truth.Truth.assertThat; + +import java.util.List; +import org.junit.Test; + +public class ApiVersionPackageTocTest { + private static final TocItem TOC_ITEM = new TocItem("a", "b", ""); + + private final ApiVersionPackageToc toc = new ApiVersionPackageToc(); + + @Test + public void testUncategorized() { + toc.addUncategorized(TOC_ITEM); + List tocItems = toc.toList(); + + assertThat(tocItems).hasSize(1); + + TocItem allOthers = tocItems.get(0); + assertThat(allOthers.getName()).isEqualTo(ApiVersionPackageToc.ALL_OTHERS); + assertThat(allOthers.getItems()).hasSize(1); + + TocItem uncategorized = allOthers.getItems().get(0); + assertThat(uncategorized.getName()).isEqualTo(ApiVersionPackageToc.UNCATEGORIZED); + assertThat(uncategorized.getItems()).hasSize(1); + assertThat(uncategorized.getItems().get(0)).isEqualTo(TOC_ITEM); + } + + @Test + public void testClients() { + toc.addClient(TOC_ITEM); + List tocItems = toc.toList(); + + assertThat(tocItems).hasSize(1); + + TocItem clients = tocItems.get(0); + assertThat(clients.getName()).isEqualTo(ApiVersionPackageToc.CLIENTS); + assertThat(clients.getItems()).hasSize(1); + assertThat(clients.getItems().get(0)).isEqualTo(TOC_ITEM); + } + + @Test + public void testVisibleAndHidden() { + toc.addRequestOrResponse(TOC_ITEM); + toc.addSettings(new TocItem("TestSettings", "TestSettings", "")); + toc.addInterface(new TocItem("iTest", "iTest", "")); + + List tocItems = toc.toList(); + + assertThat(tocItems).hasSize(3); + + TocItem settings = tocItems.get(0); + assertThat(settings.getName()).isEqualTo(ApiVersionPackageToc.SETTINGS); + assertThat(settings.getItems()).hasSize(1); + assertThat(settings.getItems().get(0).getName()).isEqualTo("TestSettings"); + + TocItem reqsAndResponses = tocItems.get(1); + assertThat(reqsAndResponses.getName()).isEqualTo(ApiVersionPackageToc.REQUESTS_AND_RESPONSES); + assertThat(reqsAndResponses.getItems()).hasSize(1); + assertThat(reqsAndResponses.getItems().get(0)).isEqualTo(TOC_ITEM); + + TocItem allOthers = tocItems.get(2); + assertThat(allOthers.getName()).isEqualTo(ApiVersionPackageToc.ALL_OTHERS); + assertThat(allOthers.getItems()).hasSize(1); + TocItem uncategorized = allOthers.getItems().get(0); + assertThat(uncategorized.getName()).isEqualTo(ApiVersionPackageToc.INTERFACES); + assertThat(uncategorized.getItems()).hasSize(1); + assertThat(uncategorized.getItems().get(0).getName()).isEqualTo("iTest"); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml index 6aa271c4..90dec1d0 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml @@ -113,25 +113,35 @@ items: - uid: "com.microsoft.samples.google.v1" name: "Package summary" - - heading: "Classes" - - uid: "com.microsoft.samples.google.v1.SpeechClient" - name: "SpeechClient" - - uid: "com.microsoft.samples.google.v1.stub" - name: "com.microsoft.samples.google.v1.stub" + - uid: "Clients" + name: "Clients" + items: + - uid: "com.microsoft.samples.google.v1.SpeechClient" + name: "SpeechClient" + - uid: "Stub packages" + name: "Stub packages" items: - uid: "com.microsoft.samples.google.v1.stub" - name: "Package summary" - - heading: "Classes" - - uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" - name: "GrpcSpeechStub" - - uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" - name: "HttpJsonSpeechStub" - - uid: "com.microsoft.samples.google.v1.stub.SpeechStub" - name: "SpeechStub" - - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" - name: "SpeechStubSettings" - - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" - name: "SpeechStubSettings.Builder" + name: "com.microsoft.samples.google.v1.stub" + items: + - uid: "com.microsoft.samples.google.v1.stub" + name: "Package summary" + - uid: "Stubs" + name: "Stubs" + items: + - uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" + name: "GrpcSpeechStub" + - uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" + name: "HttpJsonSpeechStub" + - uid: "com.microsoft.samples.google.v1.stub.SpeechStub" + name: "SpeechStub" + - uid: "Settings" + name: "Settings" + items: + - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" + name: "SpeechStubSettings" + - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" + name: "SpeechStubSettings.Builder" - uid: "com.microsoft.samples.offers" name: "com.microsoft.samples.offers" items: @@ -170,15 +180,19 @@ items: - uid: "com.microsoft.samples.google.v1beta" name: "Package summary" - - heading: "Classes" - - uid: "com.microsoft.samples.google.v1beta.SpeechClient" - name: "SpeechClient" + - uid: "Clients" + name: "Clients" + items: + - uid: "com.microsoft.samples.google.v1beta.SpeechClient" + name: "SpeechClient" - uid: "com.microsoft.samples.google.v1p1alpha" name: "com.microsoft.samples.google.v1p1alpha" status: "alpha" items: - uid: "com.microsoft.samples.google.v1p1alpha" name: "Package summary" - - heading: "Classes" - - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient" - name: "SpeechClient" + - uid: "Clients" + name: "Clients" + items: + - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient" + name: "SpeechClient" From 270775cfb159b282163d4fdab0625aba932b2ceb Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Mon, 9 Oct 2023 10:48:58 -0400 Subject: [PATCH 112/168] feat: generate new package overviews (#209) * feat: generate new package overviews * fix lint * update to package summary and use optional for repoMetadata * update repometadata test * update method to get filepath * move extractPackageBaseURIBeforeVersion to package overview * refactor packagechildrensummary method, update prerelease implication, add new tables --- .../com/google/docfx/doclet/RepoMetadata.java | 15 + .../main/java/com/microsoft/build/Lookup.java | 2 + .../com/microsoft/build/PackageBuilder.java | 36 +- .../microsoft/build/PackageOverviewFile.java | 423 ++++++++++++++++++ .../com/microsoft/build/ReferenceBuilder.java | 45 +- .../com/microsoft/build/YmlFilesBuilder.java | 17 +- .../microsoft/model/LibraryOverviewFile.java | 7 +- .../com/microsoft/model/MetadataFileItem.java | 14 + .../java/com/microsoft/model/TocItem.java | 16 + .../java/com/microsoft/util/FileUtil.java | 5 + .../build/PackageOverviewFileTest.java | 48 ++ .../java/com/microsoft/model/TocFileTest.java | 27 ++ .../com/microsoft/samples/.repo-metadata.json | 2 + .../com/microsoft/util/.repo-metadata.json | 2 + .../com/microsoft/util/RepoMetadataTest.java | 6 + ...l => com.microsoft.samples.Subpackage.yml} | 0 .../com.microsoft.samples.agreements.md | 55 +++ .../com.microsoft.samples.agreements.yml | 35 -- ...om.microsoft.samples.commentinheritance.md | 72 +++ ...m.microsoft.samples.commentinheritance.yml | 60 --- .../com.microsoft.samples.google.md | 126 ++++++ .../com.microsoft.samples.google.v1.md | 28 ++ .../com.microsoft.samples.google.v1.stub.md | 75 ++++ .../com.microsoft.samples.google.v1.stub.yml | 40 -- .../com.microsoft.samples.google.v1.yml | 20 - .../com.microsoft.samples.google.v1beta.md | 41 ++ .../com.microsoft.samples.google.v1beta.yml | 21 - .../com.microsoft.samples.google.v1p1alpha.md | 41 ++ ...com.microsoft.samples.google.v1p1alpha.yml | 21 - .../com.microsoft.samples.google.yml | 65 --- .../com.microsoft.samples.md | 94 ++++ .../com.microsoft.samples.offers.md | 23 + .../com.microsoft.samples.offers.yml | 20 - ....microsoft.samples.subpackage(package).yml | 46 -- .../com.microsoft.samples.subpackage.md | 71 +++ .../com.microsoft.samples.yml | 71 --- .../expected-generated-files/overview.md | 5 +- .../expected-generated-files/toc.yml | 10 + 38 files changed, 1276 insertions(+), 429 deletions(-) create mode 100644 third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/PackageOverviewFileTest.java rename third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/{com.microsoft.samples.Subpackage(class).yml => com.microsoft.samples.Subpackage.yml} (100%) create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md delete mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md delete mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md delete mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.yml delete mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md delete mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md delete mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml delete mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md delete mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.yml delete mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage(package).yml create mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md delete mode 100644 third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml diff --git a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java index a4ed13e0..a2c378b9 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java @@ -9,6 +9,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.Objects; +import java.util.Optional; public class RepoMetadata { @@ -27,6 +28,12 @@ public class RepoMetadata { @SerializedName("client_documentation") private String clientDocumentationUri; + @SerializedName("rest_documentation") + private String restDocumentationUri; + + @SerializedName("rpc_documentation") + private String rpcDocumentationUri; + @SerializedName("repo") private String repo; @@ -61,6 +68,14 @@ public String getProductDocumentationUri() { return this.productDocumentationUri; } + public Optional getRestDocumentationUri() { + return Optional.ofNullable(this.restDocumentationUri); + } + + public Optional getRpcDocumentationUri() { + return Optional.ofNullable(this.rpcDocumentationUri); + } + public void setProductDocumentationUri(String productDocumentationUri) { this.productDocumentationUri = productDocumentationUri; } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java index 1ffc7dd0..bec31504 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java @@ -75,11 +75,13 @@ private void consume(List metadataFiles) { .forEach( item -> { String uid = item.getUid(); + String href = item.getHref(); String nameWithType = item.getNameWithType(); String nameWithTypeWithoutGenerics = removeAll(nameWithType, "<.*?>"); map.put(nameWithTypeWithoutGenerics, uid); // This item should go first map.put(uid, uid); + map.put(href, href); map.put(removeAll(uid, PARAM_PACKAGE_NAME_REGEXP), uid); map.put(removeAll(uid, UID_PACKAGE_NAME_REGEXP), uid); map.put(removeAll(nameWithTypeWithoutGenerics, METHOD_PARAMS_REGEXP), uid); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java index 435de9e6..bba0e5b6 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java @@ -15,12 +15,8 @@ */ package com.microsoft.build; -import static com.microsoft.build.BuilderUtil.LANGS; -import static com.microsoft.build.BuilderUtil.populateItemFields; - +import com.google.docfx.doclet.RepoMetadata; import com.microsoft.lookup.PackageLookup; -import com.microsoft.model.MetadataFile; -import com.microsoft.model.MetadataFileItem; import javax.lang.model.element.PackageElement; class PackageBuilder { @@ -35,16 +31,24 @@ class PackageBuilder { this.referenceBuilder = referenceBuilder; } - MetadataFile buildPackageMetadataFile(PackageElement packageElement) { - String fileName = packageLookup.extractHref(packageElement); - MetadataFile packageMetadataFile = new MetadataFile(outputPath, fileName); - MetadataFileItem packageItem = - new MetadataFileItem(LANGS, packageLookup.extractUid(packageElement)); - packageItem.setId(packageLookup.extractId(packageElement)); - referenceBuilder.addChildrenReferences( - packageElement, packageItem.getChildren(), packageMetadataFile.getReferences()); - populateItemFields(packageItem, packageLookup, packageElement); - packageMetadataFile.getItems().add(packageItem); - return packageMetadataFile; + PackageOverviewFile buildPackageOverviewFile( + PackageElement packageElement, + RepoMetadata repoMetadata, + String artifactVersion, + String recommendedApiVersion) { + String status = packageLookup.extractStatus(packageElement); + String fileName = packageElement.getQualifiedName() + ".md"; + PackageOverviewFile packageOverviewFile = + new PackageOverviewFile( + outputPath, + fileName, + repoMetadata, + packageElement, + status, + packageLookup, + referenceBuilder, + artifactVersion, + recommendedApiVersion); + return packageOverviewFile; } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java new file mode 100644 index 00000000..59ff6164 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java @@ -0,0 +1,423 @@ +package com.microsoft.build; + +import static com.microsoft.build.BuilderUtil.LANGS; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.google.common.collect.ImmutableList; +import com.google.docfx.doclet.RepoMetadata; +import com.microsoft.lookup.PackageLookup; +import com.microsoft.model.MetadataFileItem; +import java.io.File; +import java.util.Comparator; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.lang.model.element.PackageElement; + +public class PackageOverviewFile { + private String CLIENT_TABLE_HEADER = ""; + private String SETTINGS_TABLE_HEADER = ""; + private String CLASSES_TABLE_HEADER = ""; + private String INTERFACES_TABLE_HEADER = ""; + + private String STUB_TABLE_HEADER = ""; + private String CALLABLE_FACTORY_TABLE_HEADER = ""; + + private String ENUM_TABLE_HEADER = ""; + private String EXCEPTION_TABLE_HEADER = ""; + + private String CLIENT_TABLE_BLURB = ""; + + private String SETTINGS_TABLE_BLURB = ""; + private String CLASSES_TABLE_BLURB = ""; + private String INTERFACES_TABLE_BLURB = ""; + + private String STUB_TABLE_BLURB = ""; + private String CALLABLE_FACTORY_TABLE_BLURB = ""; + + private String ENUM_TABLE_BLURB = ""; + private String EXCEPTION_TABLE_BLURB = ""; + private String CLIENT_TABLE = ""; + + private String SETTINGS_TABLE = ""; + + private String CLASSES_TABLE = ""; + + private String STUB_TABLE = ""; + private String CALLABLE_FACTORY_TABLE = ""; + + private String INTERFACES_TABLE = ""; + + private String ENUM_TABLE = ""; + + private String EXCEPTION_TABLE = ""; + + // This is only set if the package is not a GA package + private String PRERELEASE_IMPLICATIONS = ""; + + private String recommendedApiVersion; + + // This is only set if the package is not the latest GA package + private String RECOMMENDED_VERSION = ""; + + // This is only set if the package is a stub package + private String STUB_IMPLICATIONS = ""; + + private String GITHUB_SOURCE_TABLE; + + private String PACKAGE_HEADER; + + private final String outputPath; + private String fileName; + + private final PackageElement packageElement; + + public PackageOverviewFile( + String outputPath, + String fileName, + RepoMetadata repoMetadata, + PackageElement packageElement, + String status, + PackageLookup packageLookup, + ReferenceBuilder referenceBuilder, + String artifactVersion, + String recommendedApiVersion) { + this.outputPath = outputPath; + this.fileName = fileName; + this.packageElement = packageElement; + this.recommendedApiVersion = recommendedApiVersion; + + String packageURIPath = fileName.replace(".md", ""); + + this.PACKAGE_HEADER = "# Package " + packageURIPath + " (" + artifactVersion + ")\n"; + + // This will always link to the latest version of the package classes + String cloudRADChildElementLinkPrefix = + "https://cloud.google.com/java/docs/reference/" + repoMetadata.getArtifactId() + "/latest/"; + + String packageURIPathGithub = packageURIPath.replace('.', '/'); + String githubSourcePackageLink = + repoMetadata.getGithubLink() + + "/" + + repoMetadata.getArtifactId() + + "/src/main/java/" + + packageURIPathGithub; + + // If the package status is not a GA version, then add a disclaimer around prerelease + // implications + if (status != null) { + this.PRERELEASE_IMPLICATIONS = + "## Prerelease Implications\n\n" + + "This package is a prerelease version! Use with caution.\n" + + "Prerelease versions are considered unstable as they may be shut down. You can read more about [Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning).\n" + + "Each Cloud Java client library may contain multiple packages. Each package containing a version number in its name corresponds to a published version of the service.\n" + + "We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix.\n" + + "For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`.\n" + + "If you use an unstable release, breaking changes may be introduced when upgrading.\n\n"; + } + + // This regex captures the package path before the version (if it exists) and the version + Pattern pattern = Pattern.compile("(.*?)(v\\d+.*?)(?:\\.|$)"); + ImmutableList packageVersionURIInfo = + extractPackageBaseURIBeforeVersion(packageURIPath, pattern); + String basePackageURI = packageVersionURIInfo.get(0).toString(); + String packageVersion = packageVersionURIInfo.get(1).toString(); + // Build link to the Cloud RAD link for the recommended package + String recommendedPackageVersionLink = + cloudRADChildElementLinkPrefix + basePackageURI + recommendedApiVersion; + + // A package is not the latest GA version if it is a prerelease version, or if it is a GA + // version that is not the same as the recommended Api version + if (basePackageURI != "N/A") { + if (status != null || (!packageVersion.equals(this.recommendedApiVersion))) { + this.RECOMMENDED_VERSION = + "## This package is not the latest GA version! \n\n" + + " For this library, we recommend using the [package](" + + recommendedPackageVersionLink + + ")" + + " associated with API version " + + this.recommendedApiVersion + + " for new applications.\n" + + "\n"; + } + } + + // If recommended version package URI exists, link to it for the Stub class as well + if (basePackageURI != "N/A" + && String.valueOf(this.packageElement.getQualifiedName()).contains("stub")) { + this.STUB_IMPLICATIONS = + "## Stub Package Implications\n\n" + + "This package is a a base stub class. It is for advanced usage and reflects the underlying API directly.\n" + + "We generally recommend using non-stub, latest GA package, such as [" + + basePackageURI + + recommendedApiVersion + + "](" + + recommendedPackageVersionLink + + ")" + + ". Use with caution.\n"; + } else if (String.valueOf(this.packageElement.getQualifiedName()).contains("stub")) { + this.STUB_IMPLICATIONS = + "## Stub Package Implications\n\n" + + "This package is a a base stub class. It is for advanced usage and reflects the underlying API directly.\n" + + "We generally recommend using non-stub classes. Use with caution.\n"; + } + + StringBuilder githubSourceTableBuilder = new StringBuilder(); + + // Start of the reference link table + githubSourceTableBuilder + .append("\n") + .append(" \n") + .append(" \n"); + + // If RPC documentation URI exists, add to the package overview table + if (repoMetadata.getRpcDocumentationUri().isPresent()) { + githubSourceTableBuilder + .append(" \n"); + } + // If REST documentation URI exists, add to the package overview table + if (repoMetadata.getRestDocumentationUri().isPresent()) { + githubSourceTableBuilder + .append(" \n"); + } + githubSourceTableBuilder.append(" \n").append("
Github repositoryRPC DocumentationREST Documentation
").append("\n\n"); + + this.GITHUB_SOURCE_TABLE = githubSourceTableBuilder.toString(); + + // Prepare to build tables of different types of package children elements + MetadataFileItem packageItem = + new MetadataFileItem(LANGS, packageLookup.extractUid(packageElement)); + referenceBuilder.addPackageChildrenSummaries( + packageElement, packageItem.getPackageChildrenSummaries()); + List listOfPackageChildrenSummaries = + packageItem.getPackageChildrenSummaries(); + listOfPackageChildrenSummaries.sort( + Comparator.comparing(PackageChildSummary::getType) + .thenComparing(PackageChildSummary::getUid)); + + // If Clients exist in this package, create a table of them + boolean containsClientSettingsClasses = + listOfPackageChildrenSummaries.stream() + .anyMatch(packageChildSummary -> "Client".equals(packageChildSummary.getType())); + if (containsClientSettingsClasses) { + this.CLIENT_TABLE_HEADER = "## Client Classes\n"; + this.CLIENT_TABLE_BLURB = + "Client classes are the main entry point to using a package.\nThey contain several variations of Java methods for each of the API's methods.\n"; + this.CLIENT_TABLE = + createHtmlTable("Client", cloudRADChildElementLinkPrefix, listOfPackageChildrenSummaries); + } + + // If Settings exist in this package, create a table of them + boolean containsSettingsClasses = + listOfPackageChildrenSummaries.stream() + .anyMatch(packageChildSummary -> "Settings".equals(packageChildSummary.getType())); + if (containsSettingsClasses) { + this.SETTINGS_TABLE_HEADER = "## Settings Classes\n"; + this.SETTINGS_TABLE_BLURB = + "Settings classes can be used to configure credentials, endpoints, and retry settings for a Client.\n"; + this.SETTINGS_TABLE = + createHtmlTable( + "Settings", cloudRADChildElementLinkPrefix, listOfPackageChildrenSummaries); + } + + // If Stubs exist in this package, create a table of them + boolean containsStubClasses = + listOfPackageChildrenSummaries.stream() + .anyMatch(packageChildSummary -> "Stub".equals(packageChildSummary.getType())); + if (containsStubClasses) { + this.STUB_TABLE_HEADER = "## Stub Classes\n"; + this.STUB_TABLE_BLURB = ""; + this.STUB_TABLE = + createHtmlTable("Stub", cloudRADChildElementLinkPrefix, listOfPackageChildrenSummaries); + } + + // If Callable Factory classes exist in this package, create a table of them + boolean containsCallableFactoryClasses = + listOfPackageChildrenSummaries.stream() + .anyMatch( + packageChildSummary -> "CallableFactory".equals(packageChildSummary.getType())); + if (containsCallableFactoryClasses) { + this.CALLABLE_FACTORY_TABLE_HEADER = "## Callable Factory Classes\n"; + this.CALLABLE_FACTORY_TABLE_BLURB = ""; + this.CALLABLE_FACTORY_TABLE = + createHtmlTable( + "CallableFactory", cloudRADChildElementLinkPrefix, listOfPackageChildrenSummaries); + } + + // If Classes exist in this package, create a table of them + boolean containsClasses = + listOfPackageChildrenSummaries.stream() + .anyMatch(packageChildSummary -> "Class".equals(packageChildSummary.getType())); + if (containsClasses) { + this.CLASSES_TABLE_HEADER = "## Classes\n"; + this.CLASSES_TABLE = + createHtmlTable("Class", cloudRADChildElementLinkPrefix, listOfPackageChildrenSummaries); + } + + // If Interfaces exist in this package, create a table of them + boolean containsInterfaces = + listOfPackageChildrenSummaries.stream() + .anyMatch(packageChildSummary -> "Interface".equals(packageChildSummary.getType())); + if (containsInterfaces) { + this.INTERFACES_TABLE_HEADER = "## Interfaces\n"; + this.INTERFACES_TABLE = + createHtmlTable( + "Interface", cloudRADChildElementLinkPrefix, listOfPackageChildrenSummaries); + } + + // If Enums exist in this package, create a table of them + boolean containsEnums = + listOfPackageChildrenSummaries.stream() + .anyMatch(packageChildSummary -> "Enum".equals(packageChildSummary.getType())); + if (containsEnums) { + this.ENUM_TABLE_HEADER = "## Enums\n"; + this.ENUM_TABLE = + createHtmlTable("Enum", cloudRADChildElementLinkPrefix, listOfPackageChildrenSummaries); + } + + // If Exceptions exist in this package, create a table of them + boolean containsExceptions = + listOfPackageChildrenSummaries.stream() + .anyMatch(packageChildSummary -> "Exception".equals(packageChildSummary.getType())); + if (containsExceptions) { + this.EXCEPTION_TABLE_HEADER = "## Exceptions\n"; + this.EXCEPTION_TABLE = + createHtmlTable( + "Exception", cloudRADChildElementLinkPrefix, listOfPackageChildrenSummaries); + } + } + + @JsonIgnore + public String getFileContent() { + return PACKAGE_HEADER + + GITHUB_SOURCE_TABLE + + RECOMMENDED_VERSION + + PRERELEASE_IMPLICATIONS + + STUB_IMPLICATIONS + + CLIENT_TABLE_HEADER + + CLIENT_TABLE_BLURB + + CLIENT_TABLE + + STUB_TABLE_HEADER + + STUB_TABLE_BLURB + + STUB_TABLE + + SETTINGS_TABLE_HEADER + + SETTINGS_TABLE_BLURB + + SETTINGS_TABLE + + CALLABLE_FACTORY_TABLE_HEADER + + CALLABLE_FACTORY_TABLE_BLURB + + CALLABLE_FACTORY_TABLE + + CLASSES_TABLE_HEADER + + CLASSES_TABLE_BLURB + + CLASSES_TABLE + + INTERFACES_TABLE_HEADER + + INTERFACES_TABLE_BLURB + + INTERFACES_TABLE + + ENUM_TABLE_HEADER + + ENUM_TABLE_BLURB + + ENUM_TABLE + + EXCEPTION_TABLE_HEADER + + EXCEPTION_TABLE_BLURB + + EXCEPTION_TABLE; + } + + /** + * Class that contains the information about an element of a class used to populate the tables in + * the Package Overview file + */ + public static class PackageChildSummary { + String uid; + String type; + String summary; + + public PackageChildSummary(String uid, String type, String summary) { + this.uid = uid; + this.type = type; + this.summary = summary; + } + + private String getSummary() { + return summary; + } + + private String getType() { + return type; + } + + private String getUid() { + return uid; + } + } + + /** Use to get the recommended package URL for Package Overview */ + private static String createHtmlTable( + String type, String linkPrefix, List listOfPackageChildrenSummaries) { + String tableHeader = type; + if (type == "Client/Settings") { + tableHeader = "Clients or Settings Class"; + } + StringBuilder tableBuilder = new StringBuilder(); + tableBuilder + .append("\n") + .append(" \n") + .append(" \n") + .append(" \n"); + + for (PackageChildSummary packageChildSummary : listOfPackageChildrenSummaries) { + if (packageChildSummary.type == type) { + tableBuilder + .append("\n") + .append("\n") + .append("\n") + .append(" \n"); + } + } + tableBuilder.append("
\n") + .append(tableHeader) + .append("\n") + .append("Description") + .append("
") + .append(packageChildSummary.uid) + .append("\n") + .append(packageChildSummary.summary != null ? packageChildSummary.summary : "") + .append("
\n\n"); + return tableBuilder.toString(); + } + + /** Use to get the recommended package URL for Package Overview */ + public static ImmutableList extractPackageBaseURIBeforeVersion( + String input, Pattern pattern) { + Matcher matcher = pattern.matcher(input); + boolean isVersioned = matcher.find(); + if (isVersioned) { + ImmutableList packageBaseURIVersion = + new ImmutableList.Builder<>().add(matcher.group(1)).add(matcher.group(2)).build(); + return packageBaseURIVersion; + } else { + ImmutableList packageBaseURIVersion = + new ImmutableList.Builder<>().add("N/A").add("N/A").build(); + return packageBaseURIVersion; + } + } + + @JsonIgnore + public String getFileNameWithPath() { + return outputPath + File.separator + fileName; + } + + @JsonIgnore + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } +} diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java index f0a5658e..42502b3b 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java @@ -20,6 +20,7 @@ import static com.microsoft.build.BuilderUtil.replaceUidAndSplit; import static com.microsoft.build.BuilderUtil.splitUidWithGenericsIntoClassNames; +import com.microsoft.build.PackageOverviewFile.PackageChildSummary; import com.microsoft.lookup.ClassLookup; import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; @@ -81,13 +82,45 @@ void addReferencesInfo(TypeElement classElement, MetadataFile classMetadataFile) addInnerClassesReferences(classElement, classMetadataFile); } - void addChildrenReferences( - Element element, List packageChildren, Set referencesCollector) { + void addPackageChildrenSummaries( + Element element, List packageChildrenSummaries) { for (TypeElement classElement : elementUtil.extractSortedElements(element)) { - referencesCollector.add(buildClassReference(classElement)); - - packageChildren.add(classLookup.extractUid(classElement)); - addChildrenReferences(classElement, packageChildren, referencesCollector); + String summary = classLookup.extractSummary(classElement); + String type = classLookup.extractType(classElement); + String uid = classLookup.extractUid(classElement); + // Only take the first 4 lines as the summary to keep the table tidy + if (summary != null) { + String[] summaryStrings = summary.split("\n"); + if (summaryStrings.length > 4) { + summary = + summaryStrings[0] + + "\n" + + summaryStrings[1] + + "\n" + + summaryStrings[2] + + "\n" + + summaryStrings[3]; + } + } + // If a Class is a Client, call it out separately in the Package Overview + if (uid.endsWith("Client")) { + type = "Client"; + } + // If a Class is a Settings class, call it out separately in the Package Overview + if (uid.endsWith("Settings")) { + type = "Settings"; + } + // If a Class is a Stub class, call it out separately in the Package Overview + if (uid.endsWith("Stub")) { + type = "Stub"; + } + // If a Class is a CallableFactory class (in Stub Packages only), call it out separately in + // the Package Overview + if (uid.endsWith("CallableFactory")) { + type = "CallableFactory"; + } + packageChildrenSummaries.add(new PackageChildSummary(uid, type, summary)); + addPackageChildrenSummaries(classElement, packageChildrenSummaries); } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 3d83005f..028c64b9 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -6,6 +6,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableListMultimap; import com.google.docfx.doclet.ApiVersion; +import com.google.docfx.doclet.RepoMetadata; import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; import com.microsoft.lookup.PackageLookup; @@ -83,6 +84,7 @@ public YmlFilesBuilder( public boolean build() { Processor processor = new Processor(); + processor.repoMetadata = processor.repoMetadata.parseRepoMetadata(this.repoMetadataFilePath); processor.process(); // write to yaml files @@ -91,6 +93,7 @@ public boolean build() { } processor.packageMetadataFiles.forEach(FileUtil::dumpToFile); processor.classMetadataFiles.forEach(FileUtil::dumpToFile); + processor.packageOverviewFiles.forEach(FileUtil::dumpToFile); FileUtil.dumpToFile(processor.tocFile); // Generate new library overview page @@ -114,9 +117,12 @@ class Processor { final TocFile tocFile = new TocFile(outputPath, projectName, disableChangelog, disableLibraryOverview); // overview page if not using new libraryOverview + final MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); // package summary pages private final List packageMetadataFiles = new ArrayList<>(); + + private final List packageOverviewFiles = new ArrayList<>(); // packages private final List packageItems = new ArrayList<>(); // class/enum/interface/etc. pages @@ -127,6 +133,8 @@ class Processor { private String recommendedApiVersion = ""; + private RepoMetadata repoMetadata = new RepoMetadata(); + @VisibleForTesting void process() { ImmutableListMultimap organizedPackagesWithoutStubs = @@ -186,10 +194,13 @@ private TocItem buildPackage(PackageElement element) { String packageStatus = packageLookup.extractStatus(element); TocItem packageTocItem = new TocItem(packageUid, packageUid, packageStatus); - packageTocItem.getItems().add(new TocItem(packageUid, "Package summary")); - // build package summary - packageMetadataFiles.add(packageBuilder.buildPackageMetadataFile(element)); + // New package overview + TocItem packageSummary = new TocItem(packageUid, "Package summary", packageUid + ".md", true); + packageTocItem.getItems().add(packageSummary); + packageOverviewFiles.add( + packageBuilder.buildPackageOverviewFile( + element, repoMetadata, artifactVersion, recommendedApiVersion)); // build classes/interfaces/enums/exceptions/annotations packageTocItem diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java index 2bff8f45..81f7a968 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java @@ -61,7 +61,7 @@ public LibraryOverviewFile( "\n" + " \n" + " \n" @@ -201,10 +201,11 @@ public LibraryOverviewFile( + this.recommendedApiVersion + " for new applications.\n" + "\n" - + "Each Cloud Java client library may contain multiple packages. Each package corresponds to a published version of the service.\n" + + "Each Cloud Java client library may contain multiple packages. Each package containing a version number in its name corresponds to a published version of the service.\n" + "We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix.\n" + "For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`.\n" - + "If you use an unstable release, breaking changes may be introduced when upgrading.\n\n"; + + "If you use an unstable release, breaking changes may be introduced when upgrading.\n" + + "You can read more about [Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning).\n\n"; } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java index 90192004..450c17d2 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java @@ -2,8 +2,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.microsoft.build.PackageOverviewFile.PackageChildSummary; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import org.apache.commons.lang3.RegExUtils; @@ -38,6 +40,10 @@ public class MetadataFileItem implements Comparable { private String id; private String parent; private List children = new ArrayList<>(); + + private HashMap childrenSummaries = new HashMap<>(); + + private List packageChildrenSummaries = new ArrayList<>(); private String href; private String[] langs; private String name; @@ -121,6 +127,14 @@ public List getChildren() { return children; } + public HashMap getChildrenSummaries() { + return childrenSummaries; + } + + public List getPackageChildrenSummaries() { + return packageChildrenSummaries; + } + public String getHref() { return href; } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java index 1dde6e6e..5b36c704 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocItem.java @@ -8,7 +8,12 @@ public class TocItem { private String uid; private String name; + private String status; + + private String href; + + private Boolean packageOverview = false; private String heading; private List items = new ArrayList<>(); @@ -17,6 +22,13 @@ public TocItem(String uid, String name) { this.name = name; } + public TocItem(String uid, String name, String href, boolean packageOverview) { + this.uid = uid; + this.name = name; + this.href = href; + this.packageOverview = packageOverview; + } + public TocItem(String uid, String name, String status) { this.uid = uid; this.name = name; @@ -27,6 +39,10 @@ public TocItem(String heading) { this.heading = heading; } + public String getHref() { + return href; + } + public String getUid() { return uid; } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java index fb6f4455..1d00bc67 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/FileUtil.java @@ -1,5 +1,6 @@ package com.microsoft.util; +import com.microsoft.build.PackageOverviewFile; import com.microsoft.model.LibraryOverviewFile; import com.microsoft.model.YmlFile; import java.io.IOException; @@ -28,4 +29,8 @@ public static void dumpToFile(YmlFile ymlFile) { public static void dumpToFile(LibraryOverviewFile libraryOverviewFile) { dumpToFile(libraryOverviewFile.getFileContent(), libraryOverviewFile.getFileNameWithPath()); } + + public static void dumpToFile(PackageOverviewFile packageOverviewFile) { + dumpToFile(packageOverviewFile.getFileContent(), packageOverviewFile.getFileNameWithPath()); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/PackageOverviewFileTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/PackageOverviewFileTest.java new file mode 100644 index 00000000..baf6f8fa --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/PackageOverviewFileTest.java @@ -0,0 +1,48 @@ +package com.microsoft.build; + +import static com.microsoft.build.PackageOverviewFile.extractPackageBaseURIBeforeVersion; +import static org.junit.Assert.assertEquals; + +import com.google.common.collect.ImmutableList; +import com.google.testing.compile.CompilationRule; +import java.util.regex.Pattern; +import javax.lang.model.element.PackageElement; +import javax.lang.model.util.Elements; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +public class PackageOverviewFileTest { + @Rule public CompilationRule rule = new CompilationRule(); + private Elements elements; + + @Before + public void setup() { + elements = rule.getElements(); + PackageElement element = elements.getPackageElement("com.microsoft.samples"); + } + + @Test + public void testExtractPackageBaseURIBeforeVersion() { + Pattern pattern = Pattern.compile("(.*?)(v\\d+.*?)(?:\\.|$)"); + String packageName = "com.google.cloud.speech.v1"; + ImmutableList packageInfo_1 = extractPackageBaseURIBeforeVersion(packageName, pattern); + assertEquals("com.google.cloud.speech.", packageInfo_1.get(0)); + assertEquals("v1", packageInfo_1.get(1)); + + packageName = "com.google.cloud.speech.v1p5"; + ImmutableList packageInfo_2 = extractPackageBaseURIBeforeVersion(packageName, pattern); + assertEquals("com.google.cloud.speech.", packageInfo_2.get(0)); + assertEquals("v1p5", packageInfo_2.get(1)); + + packageName = "com.google.cloud.speech.v2.stub"; + ImmutableList packageInfo_3 = extractPackageBaseURIBeforeVersion(packageName, pattern); + assertEquals("com.google.cloud.speech.", packageInfo_3.get(0)); + assertEquals("v2", packageInfo_3.get(1)); + + packageName = "com.google.cloud.speech.velocity"; + ImmutableList packageInfo_4 = extractPackageBaseURIBeforeVersion(packageName, pattern); + assertEquals("N/A", packageInfo_4.get(0)); + assertEquals("N/A", packageInfo_4.get(1)); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java index bd6dd523..6debe229 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java @@ -41,4 +41,31 @@ public void sortsByUid() { assertThat(tocFile).containsExactly(tocItemA, tocItemB, tocItemC, olderItem).inOrder(); } + + @Test + public void addsPackageOverviews() { + TocFile tocFile = new TocFile("outputPath", "google-cloud-project", false, false); + TocItem tocItemA = new TocItem("a.uid.package.class", "name"); + TocItem tocItemB = new TocItem("B.uid.package.class", "name"); + TocItem tocItemC = new TocItem("c.uid.package.class", "name"); + TocItem olderItem = new TocItem("Older and prerelease packages", "name"); + TocItem packageOverview = + new TocItem("1.uid.package.class", "Package summary", "a.uid.package.class.md", true); + + tocFile.addTocItem(tocItemC); + tocFile.addTocItem(tocItemA); + tocFile.addTocItem(olderItem); + tocFile.addTocItem(tocItemB); + tocFile.addTocItem(packageOverview); + + assertThat(tocFile) + .containsExactly(tocItemC, tocItemA, olderItem, tocItemB, packageOverview) + .inOrder(); + + tocFile.sortByUid(); + + assertThat(tocFile) + .containsExactly(packageOverview, tocItemA, tocItemB, tocItemC, olderItem) + .inOrder(); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/.repo-metadata.json b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/.repo-metadata.json index 91ff37f0..3d812a7e 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/.repo-metadata.json +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/.repo-metadata.json @@ -4,6 +4,8 @@ "product_documentation": "https://cloud.google.com/api-keys/", "api_description": "API Keys lets you create and manage your API keys for your projects.", "client_documentation": "https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/overview", + "rest_documentation": "https://cloud.google.com/api-keys/docs/reference/rest", + "rpc_documentation": "https://cloud.google.com/api-keys/docs/reference/rpc", "release_level": "preview", "transport": "grpc", "language": "java", diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/.repo-metadata.json b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/.repo-metadata.json index d50f03f8..bf2ae0bd 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/.repo-metadata.json +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/.repo-metadata.json @@ -3,6 +3,8 @@ "name_pretty": "Cloud Translation", "product_documentation": "https://cloud.google.com/translate/docs/", "client_documentation": "https://cloud.google.com/java/docs/reference/google-cloud-translate/latest/overview", + "rest_documentation": "https://cloud.google.com/translate/docs/reference/rest", + "rpc_documentation": "https://cloud.google.com/translate/docs/reference/rpc", "issue_tracker": "https://issuetracker.google.com/savedsearches/559749", "release_level": "stable", "language": "java", diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/RepoMetadataTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/RepoMetadataTest.java index 7af01acb..f193a6a0 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/RepoMetadataTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/util/RepoMetadataTest.java @@ -15,6 +15,12 @@ public void testParseRepoMetadata() { assertEquals("Cloud Translation", testRepoMetadata.getNamePretty()); assertEquals( "https://cloud.google.com/translate/docs/", testRepoMetadata.getProductDocumentationUri()); + assertEquals( + "https://cloud.google.com/translate/docs/reference/rest", + testRepoMetadata.getRestDocumentationUri().get()); + assertEquals( + "https://cloud.google.com/translate/docs/reference/rpc", + testRepoMetadata.getRpcDocumentationUri().get()); assertEquals( "can dynamically translate text between thousands of language pairs. Translation lets websites and programs programmatically integrate with the translation service.", testRepoMetadata.getApiDescription()); diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.Subpackage(class).yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.Subpackage.yml similarity index 100% rename from third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.Subpackage(class).yml rename to third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.Subpackage.yml diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md new file mode 100644 index 00000000..5f06bbc6 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md @@ -0,0 +1,55 @@ +# Package com.microsoft.samples.agreements (0.18.0) +
" + repoMetadata.getNamePretty() + " product reference
+ + + + + +
Github repositoryRPC DocumentationREST Documentation
+ +## Classes + + + + + + + + + + + + + + + + +
+Class +Description
com.microsoft.samples.agreements.AgreementDetailsCollectionOperations + +Deprecated. Use AgreementMetaData instead. + +Agreement details collection operations implementation class.
com.microsoft.samples.agreements.AgreementMetaData +The AgreementMetaData provides metadata about the agreement type that partner can provide + confirmation of customer acceptance.
com.microsoft.samples.agreements.ResourceCollection +Contains a collection of resources with JSON properties to represent the output Type of objects + in collection
+ +## Interfaces + + + + + + + + +
+Interface +Description
com.microsoft.samples.agreements.IAgreementDetailsCollection + +Deprecated. This one is deprecated :( + +Encapsulates the operations on the agreement metadata collection.
+ diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.yml deleted file mode 100644 index aa019f1d..00000000 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.yml +++ /dev/null @@ -1,35 +0,0 @@ -### YamlMime:ManagedReference -items: -- uid: "com.microsoft.samples.agreements" - id: "agreements" - children: - - "com.microsoft.samples.agreements.AgreementDetailsCollectionOperations" - - "com.microsoft.samples.agreements.AgreementMetaData" - - "com.microsoft.samples.agreements.IAgreementDetailsCollection" - - "com.microsoft.samples.agreements.ResourceCollection" - langs: - - "java" - name: "com.microsoft.samples.agreements" - nameWithType: "com.microsoft.samples.agreements" - fullName: "com.microsoft.samples.agreements" - type: "Namespace" - syntax: - content: "package com.microsoft.samples.agreements" - javaType: "package" -references: -- uid: "com.microsoft.samples.agreements.AgreementDetailsCollectionOperations" - name: "AgreementDetailsCollectionOperations" - nameWithType: "AgreementDetailsCollectionOperations" - fullName: "com.microsoft.samples.agreements.AgreementDetailsCollectionOperations" -- uid: "com.microsoft.samples.agreements.AgreementMetaData" - name: "AgreementMetaData" - nameWithType: "AgreementMetaData" - fullName: "com.microsoft.samples.agreements.AgreementMetaData" -- uid: "com.microsoft.samples.agreements.IAgreementDetailsCollection" - name: "IAgreementDetailsCollection" - nameWithType: "IAgreementDetailsCollection" - fullName: "com.microsoft.samples.agreements.IAgreementDetailsCollection" -- uid: "com.microsoft.samples.agreements.ResourceCollection" - name: "ResourceCollection" - nameWithType: "ResourceCollection" - fullName: "com.microsoft.samples.agreements.ResourceCollection" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md new file mode 100644 index 00000000..6c879baa --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md @@ -0,0 +1,72 @@ +# Package com.microsoft.samples.commentinheritance (0.18.0) + + + + + + +
Github repositoryRPC DocumentationREST Documentation
+ +## Classes + + + + + + + + + + + + + + + + + + + + +
+Class +Description
com.microsoft.samples.commentinheritance.Animal +Animal.
com.microsoft.samples.commentinheritance.Dog +Canine and man's best friend.
com.microsoft.samples.commentinheritance.Herbivorous.Plant +
com.microsoft.samples.commentinheritance.Mammal +Mammal.
+ +## Interfaces + + + + + + + + + + + + + + + + + + + + + + + + +
+Interface +Description
com.microsoft.samples.commentinheritance.Carnivorous +Marks an Animal that eats other animals.
com.microsoft.samples.commentinheritance.Herbivorous +Marks animals that eat plants.
com.microsoft.samples.commentinheritance.Omnivorous +Eats plants and animals.
com.microsoft.samples.commentinheritance.Organism +
com.microsoft.samples.commentinheritance.Viviparous +Mammals that give birth to young that develop within the mother's body.
+ diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.yml deleted file mode 100644 index eb3f4e84..00000000 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.yml +++ /dev/null @@ -1,60 +0,0 @@ -### YamlMime:ManagedReference -items: -- uid: "com.microsoft.samples.commentinheritance" - id: "commentinheritance" - children: - - "com.microsoft.samples.commentinheritance.Animal" - - "com.microsoft.samples.commentinheritance.Carnivorous" - - "com.microsoft.samples.commentinheritance.Dog" - - "com.microsoft.samples.commentinheritance.Herbivorous" - - "com.microsoft.samples.commentinheritance.Herbivorous.Plant" - - "com.microsoft.samples.commentinheritance.Mammal" - - "com.microsoft.samples.commentinheritance.Omnivorous" - - "com.microsoft.samples.commentinheritance.Organism" - - "com.microsoft.samples.commentinheritance.Viviparous" - langs: - - "java" - name: "com.microsoft.samples.commentinheritance" - nameWithType: "com.microsoft.samples.commentinheritance" - fullName: "com.microsoft.samples.commentinheritance" - type: "Namespace" - syntax: - content: "package com.microsoft.samples.commentinheritance" - javaType: "package" -references: -- uid: "com.microsoft.samples.commentinheritance.Animal" - name: "Animal" - nameWithType: "Animal" - fullName: "com.microsoft.samples.commentinheritance.Animal" -- uid: "com.microsoft.samples.commentinheritance.Carnivorous" - name: "Carnivorous" - nameWithType: "Carnivorous" - fullName: "com.microsoft.samples.commentinheritance.Carnivorous" -- uid: "com.microsoft.samples.commentinheritance.Dog" - name: "Dog" - nameWithType: "Dog" - fullName: "com.microsoft.samples.commentinheritance.Dog" -- uid: "com.microsoft.samples.commentinheritance.Herbivorous" - name: "Herbivorous" - nameWithType: "Herbivorous" - fullName: "com.microsoft.samples.commentinheritance.Herbivorous" -- uid: "com.microsoft.samples.commentinheritance.Herbivorous.Plant" - name: "Herbivorous.Plant" - nameWithType: "Herbivorous.Plant" - fullName: "com.microsoft.samples.commentinheritance.Herbivorous.Plant" -- uid: "com.microsoft.samples.commentinheritance.Mammal" - name: "Mammal" - nameWithType: "Mammal" - fullName: "com.microsoft.samples.commentinheritance.Mammal" -- uid: "com.microsoft.samples.commentinheritance.Omnivorous" - name: "Omnivorous" - nameWithType: "Omnivorous" - fullName: "com.microsoft.samples.commentinheritance.Omnivorous" -- uid: "com.microsoft.samples.commentinheritance.Organism" - name: "Organism" - nameWithType: "Organism" - fullName: "com.microsoft.samples.commentinheritance.Organism" -- uid: "com.microsoft.samples.commentinheritance.Viviparous" - name: "Viviparous" - nameWithType: "Viviparous" - fullName: "com.microsoft.samples.commentinheritance.Viviparous" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md new file mode 100644 index 00000000..63834f41 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md @@ -0,0 +1,126 @@ +# Package com.microsoft.samples.google (0.18.0) + + + + + + +
Github repositoryRPC DocumentationREST Documentation
+ +## Client Classes +Client classes are the main entry point to using a package. +They contain several variations of Java methods for each of the API's methods. + + + + + + + + +
+Client +Description
com.microsoft.samples.google.SpeechClient +Service Description: Service that implements Google Cloud Speech API. + +

This class provides the ability to make remote calls to the backing service through method + calls that map to API methods. Sample code to get started:

+ +## Settings Classes +Settings classes can be used to configure credentials, endpoints, and retry settings for a Client. + + + + + + + + + + + + +
+Settings +Description
com.microsoft.samples.google.ProductSearchSettings +Settings class to configure an instance of ProductSearchClient. + +

The default instance has everything set to sensible defaults: +

com.microsoft.samples.google.SpeechSettings +Settings class to configure an instance of SpeechClient. + +

The default instance has everything set to sensible defaults: +

+ +## Classes + + + + + + + + + + + + + + + + + + + + +
+Class +Description
com.microsoft.samples.google.ProductSearchSettings.Builder +Builder for ProductSearchSettings.
com.microsoft.samples.google.RecognitionAudio + + Contains audio data in the encoding specified in the RecognitionConfig. + Either content or uri must be supplied. Supplying both or neither + returns google.rpc.Code.INVALID_ARGUMENT. See
com.microsoft.samples.google.SpeechSettings.Builder +Builder for SpeechSettings.
com.microsoft.samples.google.ValidationException +Exception thrown if there is a validation problem with a path template, http config, or related + framework methods. Comes as an illegal argument exception subclass. Allows to globally set a + thread-local validation context description which each exception inherits. +See Also: Google Cloud Storage error codes +
+ +## Interfaces + + + + + + + + + + + + +
+Interface +Description
com.microsoft.samples.google.BetaApi +Indicates a public API that can change at any time, and has no guarantee of API stability and + backward-compatibility. + +

Usage guidelines:

com.microsoft.samples.google.ValidationException.Supplier +
+ +## Enums + + + + + + + + +
+Enum +Description
com.microsoft.samples.google.RecognitionAudio.AudioSourceCase +
+ diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md new file mode 100644 index 00000000..07094989 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md @@ -0,0 +1,28 @@ +# Package com.microsoft.samples.google.v1 (0.18.0) + + + + + + +
Github repositoryRPC DocumentationREST Documentation
+ +## Client Classes +Client classes are the main entry point to using a package. +They contain several variations of Java methods for each of the API's methods. + + + + + + + + +
+Client +Description
com.microsoft.samples.google.v1.SpeechClient +Service Description: Service that implements Google Cloud Speech API. + +

This class provides the ability to make remote calls to the backing service through method + calls that map to API methods. Sample code to get started:

+ diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md new file mode 100644 index 00000000..1af1ca17 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md @@ -0,0 +1,75 @@ +# Package com.microsoft.samples.google.v1.stub (0.18.0) + + + + + + +
Github repositoryRPC DocumentationREST Documentation
+ +## Stub Package Implications + +This package is a a base stub class. It is for advanced usage and reflects the underlying API directly. +We generally recommend using non-stub, latest GA package, such as [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1). Use with caution. +## Stub Classes + + + + + + + + + + + + + + + + +
+Stub +Description
com.microsoft.samples.google.v1.stub.GrpcSpeechStub +gRPC stub implementation for the Speech service API. + +

This class is for advanced usage and reflects the underlying API directly.

com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub +REST stub implementation for the Speech service API. + +

This class is for advanced usage and reflects the underlying API directly.

com.microsoft.samples.google.v1.stub.SpeechStub +Base stub class for the Speech service API. + +

This class is for advanced usage and reflects the underlying API directly.

+ +## Settings Classes +Settings classes can be used to configure credentials, endpoints, and retry settings for a Client. + + + + + + + + +
+Settings +Description
com.microsoft.samples.google.v1.stub.SpeechStubSettings +Settings class to configure an instance of com.google.cloud.speech.v1p1beta1.stub.SpeechStub. + +

The default instance has everything set to sensible defaults: +

+ +## Classes + + + + + + + + +
+Class +Description
com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder +Builder for SpeechStubSettings.
+ diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.yml deleted file mode 100644 index 00a19720..00000000 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.yml +++ /dev/null @@ -1,40 +0,0 @@ -### YamlMime:ManagedReference -items: -- uid: "com.microsoft.samples.google.v1.stub" - id: "stub" - children: - - "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" - - "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" - - "com.microsoft.samples.google.v1.stub.SpeechStub" - - "com.microsoft.samples.google.v1.stub.SpeechStubSettings" - - "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" - langs: - - "java" - name: "com.microsoft.samples.google.v1.stub" - nameWithType: "com.microsoft.samples.google.v1.stub" - fullName: "com.microsoft.samples.google.v1.stub" - type: "Namespace" - syntax: - content: "package com.microsoft.samples.google.v1.stub" - javaType: "package" -references: -- uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" - name: "GrpcSpeechStub" - nameWithType: "GrpcSpeechStub" - fullName: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" -- uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" - name: "HttpJsonSpeechStub" - nameWithType: "HttpJsonSpeechStub" - fullName: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" -- uid: "com.microsoft.samples.google.v1.stub.SpeechStub" - name: "SpeechStub" - nameWithType: "SpeechStub" - fullName: "com.microsoft.samples.google.v1.stub.SpeechStub" -- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" - name: "SpeechStubSettings" - nameWithType: "SpeechStubSettings" - fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" -- uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" - name: "SpeechStubSettings.Builder" - nameWithType: "SpeechStubSettings.Builder" - fullName: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.yml deleted file mode 100644 index 7ed2588c..00000000 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.yml +++ /dev/null @@ -1,20 +0,0 @@ -### YamlMime:ManagedReference -items: -- uid: "com.microsoft.samples.google.v1" - id: "v1" - children: - - "com.microsoft.samples.google.v1.SpeechClient" - langs: - - "java" - name: "com.microsoft.samples.google.v1" - nameWithType: "com.microsoft.samples.google.v1" - fullName: "com.microsoft.samples.google.v1" - type: "Namespace" - syntax: - content: "package com.microsoft.samples.google.v1" - javaType: "package" -references: -- uid: "com.microsoft.samples.google.v1.SpeechClient" - name: "SpeechClient" - nameWithType: "SpeechClient" - fullName: "com.microsoft.samples.google.v1.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md new file mode 100644 index 00000000..4b6b6fbf --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md @@ -0,0 +1,41 @@ +# Package com.microsoft.samples.google.v1beta (0.18.0) + + + + + + +
Github repositoryRPC DocumentationREST Documentation
+ +## This package is not the latest GA version! + + For this library, we recommend using the [package](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) associated with API version v1 for new applications. + +## Prerelease Implications + +This package is a prerelease version! Use with caution. +Prerelease versions are considered unstable as they may be shut down. You can read more about [Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning). +Each Cloud Java client library may contain multiple packages. Each package containing a version number in its name corresponds to a published version of the service. +We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix. +For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`. +If you use an unstable release, breaking changes may be introduced when upgrading. + +## Client Classes +Client classes are the main entry point to using a package. +They contain several variations of Java methods for each of the API's methods. + + + + + + + + +
+Client +Description
com.microsoft.samples.google.v1beta.SpeechClient +Service Description: Service that implements Google Cloud Speech API. + +

This class provides the ability to make remote calls to the backing service through method + calls that map to API methods. Sample code to get started:

+ diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml deleted file mode 100644 index 0e86ea88..00000000 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.yml +++ /dev/null @@ -1,21 +0,0 @@ -### YamlMime:ManagedReference -items: -- uid: "com.microsoft.samples.google.v1beta" - id: "v1beta" - children: - - "com.microsoft.samples.google.v1beta.SpeechClient" - langs: - - "java" - name: "com.microsoft.samples.google.v1beta" - nameWithType: "com.microsoft.samples.google.v1beta" - fullName: "com.microsoft.samples.google.v1beta" - type: "Namespace" - syntax: - content: "package com.microsoft.samples.google.v1beta" - status: "beta" - javaType: "package" -references: -- uid: "com.microsoft.samples.google.v1beta.SpeechClient" - name: "SpeechClient" - nameWithType: "SpeechClient" - fullName: "com.microsoft.samples.google.v1beta.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md new file mode 100644 index 00000000..413ca11d --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md @@ -0,0 +1,41 @@ +# Package com.microsoft.samples.google.v1p1alpha (0.18.0) + + + + + + +
Github repositoryRPC DocumentationREST Documentation
+ +## This package is not the latest GA version! + + For this library, we recommend using the [package](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) associated with API version v1 for new applications. + +## Prerelease Implications + +This package is a prerelease version! Use with caution. +Prerelease versions are considered unstable as they may be shut down. You can read more about [Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning). +Each Cloud Java client library may contain multiple packages. Each package containing a version number in its name corresponds to a published version of the service. +We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix. +For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`. +If you use an unstable release, breaking changes may be introduced when upgrading. + +## Client Classes +Client classes are the main entry point to using a package. +They contain several variations of Java methods for each of the API's methods. + + + + + + + + +
+Client +Description
com.microsoft.samples.google.v1p1alpha.SpeechClient +Service Description: Service that implements Google Cloud Speech API. + +

This class provides the ability to make remote calls to the backing service through method + calls that map to API methods. Sample code to get started:

+ diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml deleted file mode 100644 index 314148de..00000000 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.yml +++ /dev/null @@ -1,21 +0,0 @@ -### YamlMime:ManagedReference -items: -- uid: "com.microsoft.samples.google.v1p1alpha" - id: "v1p1alpha" - children: - - "com.microsoft.samples.google.v1p1alpha.SpeechClient" - langs: - - "java" - name: "com.microsoft.samples.google.v1p1alpha" - nameWithType: "com.microsoft.samples.google.v1p1alpha" - fullName: "com.microsoft.samples.google.v1p1alpha" - type: "Namespace" - syntax: - content: "package com.microsoft.samples.google.v1p1alpha" - status: "alpha" - javaType: "package" -references: -- uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient" - name: "SpeechClient" - nameWithType: "SpeechClient" - fullName: "com.microsoft.samples.google.v1p1alpha.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.yml deleted file mode 100644 index 390f1b73..00000000 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.yml +++ /dev/null @@ -1,65 +0,0 @@ -### YamlMime:ManagedReference -items: -- uid: "com.microsoft.samples.google" - id: "google" - children: - - "com.microsoft.samples.google.BetaApi" - - "com.microsoft.samples.google.ProductSearchSettings" - - "com.microsoft.samples.google.ProductSearchSettings.Builder" - - "com.microsoft.samples.google.RecognitionAudio" - - "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" - - "com.microsoft.samples.google.SpeechClient" - - "com.microsoft.samples.google.SpeechSettings" - - "com.microsoft.samples.google.SpeechSettings.Builder" - - "com.microsoft.samples.google.ValidationException" - - "com.microsoft.samples.google.ValidationException.Supplier" - langs: - - "java" - name: "com.microsoft.samples.google" - nameWithType: "com.microsoft.samples.google" - fullName: "com.microsoft.samples.google" - type: "Namespace" - syntax: - content: "package com.microsoft.samples.google" - javaType: "package" -references: -- uid: "com.microsoft.samples.google.BetaApi" - name: "BetaApi" - nameWithType: "BetaApi" - fullName: "com.microsoft.samples.google.BetaApi" -- uid: "com.microsoft.samples.google.ProductSearchSettings" - name: "ProductSearchSettings" - nameWithType: "ProductSearchSettings" - fullName: "com.microsoft.samples.google.ProductSearchSettings" -- uid: "com.microsoft.samples.google.ProductSearchSettings.Builder" - name: "ProductSearchSettings.Builder" - nameWithType: "ProductSearchSettings.Builder" - fullName: "com.microsoft.samples.google.ProductSearchSettings.Builder" -- uid: "com.microsoft.samples.google.RecognitionAudio" - name: "RecognitionAudio" - nameWithType: "RecognitionAudio" - fullName: "com.microsoft.samples.google.RecognitionAudio" -- uid: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" - name: "RecognitionAudio.AudioSourceCase" - nameWithType: "RecognitionAudio.AudioSourceCase" - fullName: "com.microsoft.samples.google.RecognitionAudio.AudioSourceCase" -- uid: "com.microsoft.samples.google.SpeechClient" - name: "SpeechClient" - nameWithType: "SpeechClient" - fullName: "com.microsoft.samples.google.SpeechClient" -- uid: "com.microsoft.samples.google.SpeechSettings" - name: "SpeechSettings" - nameWithType: "SpeechSettings" - fullName: "com.microsoft.samples.google.SpeechSettings" -- uid: "com.microsoft.samples.google.SpeechSettings.Builder" - name: "SpeechSettings.Builder" - nameWithType: "SpeechSettings.Builder" - fullName: "com.microsoft.samples.google.SpeechSettings.Builder" -- uid: "com.microsoft.samples.google.ValidationException" - name: "ValidationException" - nameWithType: "ValidationException" - fullName: "com.microsoft.samples.google.ValidationException" -- uid: "com.microsoft.samples.google.ValidationException.Supplier" - name: "ValidationException.Supplier" - nameWithType: "ValidationException.Supplier" - fullName: "com.microsoft.samples.google.ValidationException.Supplier" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md new file mode 100644 index 00000000..089f0012 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md @@ -0,0 +1,94 @@ +# Package com.microsoft.samples (0.18.0) + + + + + + +
Github repositoryRPC DocumentationREST Documentation
+ +## Classes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class +Description
com.microsoft.samples.BasePartnerComponent +Holds common partner component properties and behavior. All components should inherit from this + class. The context object type.
com.microsoft.samples.BasePartnerComponentString +Holds common partner component properties and behavior. The context is string type by default.
com.microsoft.samples.ExceptionHandler +Exception retry algorithm implementation used by RetryHelper.
com.microsoft.samples.ExceptionHandler.Builder +ExceptionHandler builder.
com.microsoft.samples.KeyValuePair +
com.microsoft.samples.Link +
com.microsoft.samples.Subpackage +
com.microsoft.samples.SuperHero +Hero is the main entity we will be using to something
+ +## Interfaces + + + + + + + + + + + + +
+Interface +Description
com.microsoft.samples.ExceptionHandler.Interceptor +
com.microsoft.samples.IPartner +The main entry point into using the partner SDK functionality. Represents a partner and + encapsulates all the behavior attached to partners. Use this interface to get to the partner's + customers, profiles, and customer orders, profiles and subscriptions and more.
+ +## Enums + + + + + + + + +
+Enum +Description
com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult +
+ diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md new file mode 100644 index 00000000..22076d9f --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md @@ -0,0 +1,23 @@ +# Package com.microsoft.samples.offers (0.18.0) + + + + + + +
Github repositoryRPC DocumentationREST Documentation
+ +## Classes + + + + + + + + +
+Class +Description
com.microsoft.samples.offers.Offer +Represents a form of product availability to customer
+ diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.yml deleted file mode 100644 index 6afdce97..00000000 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.yml +++ /dev/null @@ -1,20 +0,0 @@ -### YamlMime:ManagedReference -items: -- uid: "com.microsoft.samples.offers" - id: "offers" - children: - - "com.microsoft.samples.offers.Offer" - langs: - - "java" - name: "com.microsoft.samples.offers" - nameWithType: "com.microsoft.samples.offers" - fullName: "com.microsoft.samples.offers" - type: "Namespace" - syntax: - content: "package com.microsoft.samples.offers" - javaType: "package" -references: -- uid: "com.microsoft.samples.offers.Offer" - name: "Offer" - nameWithType: "Offer" - fullName: "com.microsoft.samples.offers.Offer" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage(package).yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage(package).yml deleted file mode 100644 index 19b835a1..00000000 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage(package).yml +++ /dev/null @@ -1,46 +0,0 @@ -### YamlMime:ManagedReference -items: -- uid: "com.microsoft.samples.subpackage" - id: "subpackage" - children: - - "com.microsoft.samples.subpackage.CustomException" - - "com.microsoft.samples.subpackage.Display" - - "com.microsoft.samples.subpackage.Person" - - "com.microsoft.samples.subpackage.Person.IdentificationInfo" - - "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender" - - "com.microsoft.samples.subpackage.Tuple" - langs: - - "java" - name: "com.microsoft.samples.subpackage" - nameWithType: "com.microsoft.samples.subpackage" - fullName: "com.microsoft.samples.subpackage" - type: "Namespace" - summary: "This subpackage contains the sample set of classes for testing DocFx doclet." - syntax: - content: "package com.microsoft.samples.subpackage" - javaType: "package" -references: -- uid: "com.microsoft.samples.subpackage.CustomException" - name: "CustomException" - nameWithType: "CustomException" - fullName: "com.microsoft.samples.subpackage.CustomException" -- uid: "com.microsoft.samples.subpackage.Display" - name: "Display" - nameWithType: "Display" - fullName: "com.microsoft.samples.subpackage.Display" -- uid: "com.microsoft.samples.subpackage.Person" - name: "Person" - nameWithType: "Person" - fullName: "com.microsoft.samples.subpackage.Person" -- uid: "com.microsoft.samples.subpackage.Person.IdentificationInfo" - name: "Person.IdentificationInfo" - nameWithType: "Person.IdentificationInfo" - fullName: "com.microsoft.samples.subpackage.Person.IdentificationInfo" -- uid: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender" - name: "Person.IdentificationInfo.Gender" - nameWithType: "Person.IdentificationInfo.Gender" - fullName: "com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender" -- uid: "com.microsoft.samples.subpackage.Tuple" - name: "Tuple" - nameWithType: "Tuple" - fullName: "com.microsoft.samples.subpackage.Tuple" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md new file mode 100644 index 00000000..d382cfa0 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md @@ -0,0 +1,71 @@ +# Package com.microsoft.samples.subpackage (0.18.0) + + + + + + +
Github repositoryRPC DocumentationREST Documentation
+ +## Classes + + + + + + + + + + + + + + + + + + + + +
+Class +Description
com.microsoft.samples.subpackage.CustomException +
com.microsoft.samples.subpackage.Person +Class that describes some person + +

This comment has links to: +

com.microsoft.samples.subpackage.Person.IdentificationInfo +Class that describes person's identification
com.microsoft.samples.subpackage.Tuple +
+ +## Interfaces + + + + + + + + +
+Interface +Description
com.microsoft.samples.subpackage.Display +Do you see some First code block? + +

Or this Second code block?

+ +## Enums + + + + + + + + +
+Enum +Description
com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender +Enum describes person's gender
+ diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml deleted file mode 100644 index 5e519216..00000000 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.yml +++ /dev/null @@ -1,71 +0,0 @@ -### YamlMime:ManagedReference -items: -- uid: "com.microsoft.samples" - id: "samples" - children: - - "com.microsoft.samples.BasePartnerComponent" - - "com.microsoft.samples.BasePartnerComponentString" - - "com.microsoft.samples.ExceptionHandler" - - "com.microsoft.samples.ExceptionHandler.Builder" - - "com.microsoft.samples.ExceptionHandler.Interceptor" - - "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" - - "com.microsoft.samples.IPartner" - - "com.microsoft.samples.KeyValuePair" - - "com.microsoft.samples.Link" - - "com.microsoft.samples.Subpackage" - - "com.microsoft.samples.SuperHero" - langs: - - "java" - name: "com.microsoft.samples" - nameWithType: "com.microsoft.samples" - fullName: "com.microsoft.samples" - type: "Namespace" - summary: "The interfaces provided are listed below, along with usage samples.\n\n

SpeechClient

\n\n

Service Description: Service that implements Google Cloud Speech API.\n\n

Sample for SpeechClient:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

AdaptationClient

\n\n

Service Description: Service that implements Google Cloud Speech Adaptation API.\n\n

Sample for AdaptationClient:\n\n

\n try (AdaptationClient adaptationClient = AdaptationClient.create()) {\n   LocationName parent = LocationName.of(\"[PROJECT]\", \"[LOCATION]\");\n   PhraseSet phraseSet = PhraseSet.newBuilder().build();\n   String phraseSetId = \"phraseSetId959902180\";\n   PhraseSet response = adaptationClient.createPhraseSet(parent, phraseSet, phraseSetId);\n }\n 
" - syntax: - content: "package com.microsoft.samples" - javaType: "package" -references: -- uid: "com.microsoft.samples.BasePartnerComponent" - name: "BasePartnerComponent" - nameWithType: "BasePartnerComponent" - fullName: "com.microsoft.samples.BasePartnerComponent" -- uid: "com.microsoft.samples.BasePartnerComponentString" - name: "BasePartnerComponentString" - nameWithType: "BasePartnerComponentString" - fullName: "com.microsoft.samples.BasePartnerComponentString" -- uid: "com.microsoft.samples.ExceptionHandler" - name: "ExceptionHandler" - nameWithType: "ExceptionHandler" - fullName: "com.microsoft.samples.ExceptionHandler" -- uid: "com.microsoft.samples.ExceptionHandler.Builder" - name: "ExceptionHandler.Builder" - nameWithType: "ExceptionHandler.Builder" - fullName: "com.microsoft.samples.ExceptionHandler.Builder" -- uid: "com.microsoft.samples.ExceptionHandler.Interceptor" - name: "ExceptionHandler.Interceptor" - nameWithType: "ExceptionHandler.Interceptor" - fullName: "com.microsoft.samples.ExceptionHandler.Interceptor" -- uid: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" - name: "ExceptionHandler.Interceptor.RetryResult" - nameWithType: "ExceptionHandler.Interceptor.RetryResult" - fullName: "com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult" -- uid: "com.microsoft.samples.IPartner" - name: "IPartner" - nameWithType: "IPartner" - fullName: "com.microsoft.samples.IPartner" -- uid: "com.microsoft.samples.KeyValuePair" - name: "KeyValuePair" - nameWithType: "KeyValuePair" - fullName: "com.microsoft.samples.KeyValuePair" -- uid: "com.microsoft.samples.Link" - name: "Link" - nameWithType: "Link" - fullName: "com.microsoft.samples.Link" -- uid: "com.microsoft.samples.Subpackage" - name: "Subpackage" - nameWithType: "Subpackage" - fullName: "com.microsoft.samples.Subpackage" -- uid: "com.microsoft.samples.SuperHero" - name: "SuperHero" - nameWithType: "SuperHero" - fullName: "com.microsoft.samples.SuperHero" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md index 31d4b808..44b7bc36 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md @@ -5,7 +5,7 @@ API Keys lets you create and manage your API keys for your projects. - + @@ -99,8 +99,9 @@ libraryDependencies += "com.google.cloud" % "google-cloud-apikeys ## Which version should I use? For this library, we recommend using API version v1 for new applications. -Each Cloud Java client library may contain multiple packages. Each package corresponds to a published version of the service. +Each Cloud Java client library may contain multiple packages. Each package containing a version number in its name corresponds to a published version of the service. We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix. For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`. If you use an unstable release, breaking changes may be introduced when upgrading. +You can read more about [Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning). diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml index 90dec1d0..b740f0cc 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml @@ -10,6 +10,7 @@ items: - uid: "com.microsoft.samples" name: "Package summary" + href: "com.microsoft.samples.md" - heading: "Interfaces" - uid: "com.microsoft.samples.ExceptionHandler.Interceptor" name: "ExceptionHandler.Interceptor" @@ -41,6 +42,7 @@ items: - uid: "com.microsoft.samples.agreements" name: "Package summary" + href: "com.microsoft.samples.agreements.md" - heading: "Interfaces" - uid: "com.microsoft.samples.agreements.IAgreementDetailsCollection" name: "IAgreementDetailsCollection" @@ -58,6 +60,7 @@ items: - uid: "com.microsoft.samples.commentinheritance" name: "Package summary" + href: "com.microsoft.samples.commentinheritance.md" - heading: "Interfaces" - uid: "com.microsoft.samples.commentinheritance.Carnivorous" name: "Carnivorous" @@ -83,6 +86,7 @@ items: - uid: "com.microsoft.samples.google" name: "Package summary" + href: "com.microsoft.samples.google.md" - heading: "Interfaces" - uid: "com.microsoft.samples.google.ValidationException.Supplier" name: "ValidationException.Supplier" @@ -113,6 +117,7 @@ items: - uid: "com.microsoft.samples.google.v1" name: "Package summary" + href: "com.microsoft.samples.google.v1.md" - uid: "Clients" name: "Clients" items: @@ -126,6 +131,7 @@ items: - uid: "com.microsoft.samples.google.v1.stub" name: "Package summary" + href: "com.microsoft.samples.google.v1.stub.md" - uid: "Stubs" name: "Stubs" items: @@ -147,6 +153,7 @@ items: - uid: "com.microsoft.samples.offers" name: "Package summary" + href: "com.microsoft.samples.offers.md" - heading: "Classes" - uid: "com.microsoft.samples.offers.Offer" name: "Offer" @@ -155,6 +162,7 @@ items: - uid: "com.microsoft.samples.subpackage" name: "Package summary" + href: "com.microsoft.samples.subpackage.md" - heading: "Interfaces" - uid: "com.microsoft.samples.subpackage.Display" name: "Display" @@ -180,6 +188,7 @@ items: - uid: "com.microsoft.samples.google.v1beta" name: "Package summary" + href: "com.microsoft.samples.google.v1beta.md" - uid: "Clients" name: "Clients" items: @@ -191,6 +200,7 @@ items: - uid: "com.microsoft.samples.google.v1p1alpha" name: "Package summary" + href: "com.microsoft.samples.google.v1p1alpha.md" - uid: "Clients" name: "Clients" items: From 6145bbe196538b34d9df1552fa67a1c69628ff05 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Tue, 10 Oct 2023 09:58:56 -0400 Subject: [PATCH 113/168] feat: add table of links to Client Overviews (#210) * feat: add table of links to Client Overviews * use ifPresent * fix lint --- .../java/com/microsoft/build/BuilderUtil.java | 13 +++ .../com/microsoft/build/ClassBuilder.java | 92 ++++++++++++++++++- .../microsoft/build/PackageOverviewFile.java | 22 +++-- .../com/microsoft/build/YmlFilesBuilder.java | 2 +- .../microsoft/model/LibraryOverviewFile.java | 4 +- .../com.microsoft.samples.agreements.md | 2 +- ...om.microsoft.samples.commentinheritance.md | 2 +- .../com.microsoft.samples.google.md | 2 +- ...crosoft.samples.google.v1.SpeechClient.yml | 19 +--- .../com.microsoft.samples.google.v1.md | 2 +- .../com.microsoft.samples.google.v1.stub.md | 4 +- ...oft.samples.google.v1beta.SpeechClient.yml | 19 +--- .../com.microsoft.samples.google.v1beta.md | 2 +- ....samples.google.v1p1alpha.SpeechClient.yml | 19 +--- .../com.microsoft.samples.google.v1p1alpha.md | 2 +- .../com.microsoft.samples.md | 2 +- .../com.microsoft.samples.offers.md | 2 +- .../com.microsoft.samples.subpackage.md | 2 +- .../expected-generated-files/overview.md | 4 +- 19 files changed, 137 insertions(+), 79 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java index 4869b4ec..c7471707 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/BuilderUtil.java @@ -197,4 +197,17 @@ static void populateItemFields( item.setStatus(lookup.extractStatus(element)); item.setContent(lookup.extractContent(element)); } + + /** Does not include syntax contents for Client classes as they are not useful */ + static void populateItemFieldsForClients( + MetadataFileItem item, BaseLookup lookup, T element) { + String name = lookup.extractName(element); + item.setName(name); + item.setNameWithType(lookup.extractNameWithType(element)); + item.setFullName(lookup.extractFullName(element)); + item.setType(lookup.extractType(element)); + item.setJavaType(lookup.extractJavaType(element)); + item.setSummary(lookup.extractSummary(element)); + item.setStatus(lookup.extractStatus(element)); + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java index 615ee5ca..e1e93209 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java @@ -17,7 +17,9 @@ import static com.microsoft.build.BuilderUtil.LANGS; import static com.microsoft.build.BuilderUtil.populateItemFields; +import static com.microsoft.build.BuilderUtil.populateItemFieldsForClients; +import com.google.docfx.doclet.RepoMetadata; import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; import com.microsoft.lookup.PackageLookup; @@ -63,11 +65,12 @@ class ClassBuilder { this.referenceBuilder = referenceBuilder; } - List buildFilesForPackage(PackageElement pkg, List classMetadataFiles) { + List buildFilesForPackage( + PackageElement pkg, List classMetadataFiles, RepoMetadata repoMetadata) { if (packageLookup.isApiVersionPackage(pkg) && containsAtLeastOneClient(pkg)) { // API Version package organization is a nested list organized by GAPIC concepts ApiVersionPackageToc apiVersionPackageToc = new ApiVersionPackageToc(); - buildFilesForApiVersionPackage(pkg, apiVersionPackageToc, classMetadataFiles); + buildFilesForApiVersionPackage(pkg, apiVersionPackageToc, classMetadataFiles, repoMetadata); return apiVersionPackageToc.toList(); } else if (packageLookup.isApiVersionStubPackage(pkg)) { @@ -86,7 +89,8 @@ List buildFilesForPackage(PackageElement pkg, List classM private void buildFilesForApiVersionPackage( Element element, ApiVersionPackageToc apiVersionPackageToc, - List classMetadataFiles) { + List classMetadataFiles, + RepoMetadata repoMetadata) { for (TypeElement classElement : elementUtil.extractSortedElements(element)) { String uid = classLookup.extractUid(classElement); String name = classLookup.extractTocName(classElement); @@ -119,8 +123,14 @@ private void buildFilesForApiVersionPackage( apiVersionPackageToc.addUncategorized(tocItem); } - classMetadataFiles.add(buildClassYmlFile(classElement)); - buildFilesForApiVersionPackage(classElement, apiVersionPackageToc, classMetadataFiles); + // Client classes have custom overview + if (isClient(classElement)) { + classMetadataFiles.add(buildClientClassYmlFile(classElement, repoMetadata)); + } else { + classMetadataFiles.add(buildClassYmlFile(classElement)); + } + buildFilesForApiVersionPackage( + classElement, apiVersionPackageToc, classMetadataFiles, repoMetadata); } } @@ -191,6 +201,19 @@ void buildFilesForStandardPackage( } } + private MetadataFile buildClientClassYmlFile( + TypeElement classElement, RepoMetadata repoMetadata) { + String fileName = classLookup.extractHref(classElement); + MetadataFile classMetadataFile = new MetadataFile(outputPath, fileName); + addClientClassInfo(classElement, classMetadataFile, repoMetadata); + addConstructorsInfo(classElement, classMetadataFile); + addMethodsInfo(classElement, classMetadataFile); + addFieldsInfo(classElement, classMetadataFile); + referenceBuilder.addReferencesInfo(classElement, classMetadataFile); + applyPostProcessing(classMetadataFile); + return classMetadataFile; + } + private MetadataFile buildClassYmlFile(TypeElement classElement) { String fileName = classLookup.extractHref(classElement); MetadataFile classMetadataFile = new MetadataFile(outputPath, fileName); @@ -203,6 +226,65 @@ private MetadataFile buildClassYmlFile(TypeElement classElement) { return classMetadataFile; } + // Does not set Inherited Methods or Inheritance as that information for Client classes is + // superfluous + // Sets updated Client summary with table of links + private void addClientClassInfo( + TypeElement classElement, MetadataFile classMetadataFile, RepoMetadata repoMetadata) { + MetadataFileItem classItem = new MetadataFileItem(LANGS, classLookup.extractUid(classElement)); + classItem.setId(classLookup.extractId(classElement)); + classItem.setParent(classLookup.extractParent(classElement)); + addChildren(classElement, classItem.getChildren()); + populateItemFieldsForClients(classItem, classLookup, classElement); + classItem.setPackageName(classLookup.extractPackageName(classElement)); + classItem.setTypeParameters(classLookup.extractTypeParameters(classElement)); + classItem.setInheritance(classLookup.extractSuperclass(classElement)); + String summary = classLookup.extractSummary(classElement); + String summaryTable = createClientOverviewTable(classElement, repoMetadata); + classItem.setSummary(summaryTable + summary); + classItem.setStatus(classLookup.extractStatus(classElement)); + classMetadataFile.getItems().add(classItem); + } + + private String createClientOverviewTable(TypeElement classElement, RepoMetadata repoMetadata) { + String clientURI = classLookup.extractUid(classElement).replaceAll("\\.", "/"); + String githubSourceLink = + repoMetadata.getGithubLink() + + "/" + + repoMetadata.getArtifactId() + + "/src/main/java/" + + clientURI + + ".java"; + StringBuilder tableBuilder = new StringBuilder(); + tableBuilder + .append("
API Keys API product referenceAPI Keys API product reference Github repository (includes samples) Maven artifact
") + .append("") + .append("") + .append(""); + repoMetadata + .getRestDocumentationUri() + .ifPresent( + restDocumentationURI -> + tableBuilder + .append("")); + repoMetadata + .getRpcDocumentationUri() + .ifPresent( + rpcDocumentationURI -> + tableBuilder + .append("")); + tableBuilder.append("
GitHub RepositoryProduct ReferenceREST DocumentationRPC Documentation
\n\n"); + return tableBuilder.toString(); + } + private void addClassInfo(TypeElement classElement, MetadataFile classMetadataFile) { MetadataFileItem classItem = new MetadataFileItem(LANGS, classLookup.extractUid(classElement)); classItem.setId(classLookup.extractId(classElement)); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java index 59ff6164..19758662 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java @@ -170,7 +170,7 @@ public PackageOverviewFile( .append(" \n") .append(" Github repository\n"); + .append("\">GitHub Repository\n"); // If RPC documentation URI exists, add to the package overview table if (repoMetadata.getRpcDocumentationUri().isPresent()) { @@ -219,30 +219,38 @@ public PackageOverviewFile( .anyMatch(packageChildSummary -> "Settings".equals(packageChildSummary.getType())); if (containsSettingsClasses) { this.SETTINGS_TABLE_HEADER = "## Settings Classes\n"; - this.SETTINGS_TABLE_BLURB = - "Settings classes can be used to configure credentials, endpoints, and retry settings for a Client.\n"; + if (packageLookup.isApiVersionStubPackage(this.packageElement)) { + this.SETTINGS_TABLE_BLURB = + "Settings classes can be used to configure credentials, endpoints, and retry settings for a Stub.\n"; + } else { + this.SETTINGS_TABLE_BLURB = + "Settings classes can be used to configure credentials, endpoints, and retry settings for a Client.\n"; + } + this.SETTINGS_TABLE = createHtmlTable( "Settings", cloudRADChildElementLinkPrefix, listOfPackageChildrenSummaries); } - // If Stubs exist in this package, create a table of them + // If package is a Stub package, create a table of Stub classes boolean containsStubClasses = listOfPackageChildrenSummaries.stream() .anyMatch(packageChildSummary -> "Stub".equals(packageChildSummary.getType())); - if (containsStubClasses) { + if (containsStubClasses && (packageLookup.isApiVersionStubPackage(this.packageElement))) { this.STUB_TABLE_HEADER = "## Stub Classes\n"; this.STUB_TABLE_BLURB = ""; this.STUB_TABLE = createHtmlTable("Stub", cloudRADChildElementLinkPrefix, listOfPackageChildrenSummaries); } - // If Callable Factory classes exist in this package, create a table of them + // If package is a Stub package and Callable Factory classes exist in this package, create a + // table of them boolean containsCallableFactoryClasses = listOfPackageChildrenSummaries.stream() .anyMatch( packageChildSummary -> "CallableFactory".equals(packageChildSummary.getType())); - if (containsCallableFactoryClasses) { + if (containsCallableFactoryClasses + && (packageLookup.isApiVersionStubPackage(this.packageElement))) { this.CALLABLE_FACTORY_TABLE_HEADER = "## Callable Factory Classes\n"; this.CALLABLE_FACTORY_TABLE_BLURB = ""; this.CALLABLE_FACTORY_TABLE = diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 028c64b9..4a06a9c7 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -205,7 +205,7 @@ private TocItem buildPackage(PackageElement element) { // build classes/interfaces/enums/exceptions/annotations packageTocItem .getItems() - .addAll(classBuilder.buildFilesForPackage(element, classMetadataFiles)); + .addAll(classBuilder.buildFilesForPackage(element, classMetadataFiles, repoMetadata)); // build stubs TocItem stubPackagesItem = new TocItem("Stub packages", "Stub packages", ""); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java index 81f7a968..dcf1e557 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java @@ -64,10 +64,10 @@ public LibraryOverviewFile( + repoMetadata.getProductDocumentationUri() + "\">" + repoMetadata.getNamePretty() - + " product reference\n" + + " Product Reference\n" + " Github repository (includes samples)\n" + + "\">GitHub Repository (includes samples)\n" + " Maven artifact\n" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md index 5f06bbc6..37ee1cb2 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md @@ -1,7 +1,7 @@ # Package com.microsoft.samples.agreements (0.18.0) - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md index 6c879baa..31a00725 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md @@ -1,7 +1,7 @@ # Package com.microsoft.samples.commentinheritance (0.18.0)
Github repositoryGitHub Repository RPC Documentation REST Documentation
- + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md index 63834f41..401e51af 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md @@ -1,7 +1,7 @@ # Package com.microsoft.samples.google (0.18.0)
Github repositoryGitHub Repository RPC Documentation REST Documentation
- + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml index 1bbac731..50642cb9 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml @@ -33,25 +33,10 @@ items: fullName: "com.microsoft.samples.google.v1.SpeechClient" type: "Class" package: "com.microsoft.samples.google.v1" - summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." - syntax: - content: "public class SpeechClient implements BackgroundResource" + summary: "

Github repositoryGitHub Repository RPC Documentation REST Documentation
GitHub RepositoryProduct ReferenceREST DocumentationRPC Documentation
\n\nService Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." + syntax: {} inheritance: - "java.lang.Object" - implements: - - "com.google.api.gax.core.BackgroundResource" - inheritedMembers: - - "java.lang.Object.clone()" - - "java.lang.Object.equals(java.lang.Object)" - - "java.lang.Object.finalize()" - - "java.lang.Object.getClass()" - - "java.lang.Object.hashCode()" - - "java.lang.Object.notify()" - - "java.lang.Object.notifyAll()" - - "java.lang.Object.toString()" - - "java.lang.Object.wait()" - - "java.lang.Object.wait(long)" - - "java.lang.Object.wait(long,int)" - uid: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" id: "SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" parent: "com.microsoft.samples.google.v1.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md index 07094989..7ad4133c 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md @@ -1,7 +1,7 @@ # Package com.microsoft.samples.google.v1 (0.18.0) - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md index 1af1ca17..b6943d51 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md @@ -1,7 +1,7 @@ # Package com.microsoft.samples.google.v1.stub (0.18.0)
Github repositoryGitHub Repository RPC Documentation REST Documentation
- + @@ -42,7 +42,7 @@ Base stub class for the Speech service API.
Github repositoryGitHub Repository RPC Documentation REST Documentation
## Settings Classes -Settings classes can be used to configure credentials, endpoints, and retry settings for a Client. +Settings classes can be used to configure credentials, endpoints, and retry settings for a Stub. - - - -
diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml index 65a6b994..8a1f5d94 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml @@ -33,25 +33,10 @@ items: fullName: "com.microsoft.samples.google.v1beta.SpeechClient" type: "Class" package: "com.microsoft.samples.google.v1beta" - summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." - syntax: - content: "public class SpeechClient implements BackgroundResource" + summary: "
GitHub RepositoryProduct ReferenceREST DocumentationRPC Documentation
\n\nService Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." + syntax: {} inheritance: - "java.lang.Object" - implements: - - "com.google.api.gax.core.BackgroundResource" - inheritedMembers: - - "java.lang.Object.clone()" - - "java.lang.Object.equals(java.lang.Object)" - - "java.lang.Object.finalize()" - - "java.lang.Object.getClass()" - - "java.lang.Object.hashCode()" - - "java.lang.Object.notify()" - - "java.lang.Object.notifyAll()" - - "java.lang.Object.toString()" - - "java.lang.Object.wait()" - - "java.lang.Object.wait(long)" - - "java.lang.Object.wait(long,int)" - uid: "com.microsoft.samples.google.v1beta.SpeechClient.SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" id: "SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" parent: "com.microsoft.samples.google.v1beta.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md index 4b6b6fbf..0219eb2b 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md @@ -1,7 +1,7 @@ # Package com.microsoft.samples.google.v1beta (0.18.0) - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml index 5b6934f3..cd9154e2 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml @@ -33,25 +33,10 @@ items: fullName: "com.microsoft.samples.google.v1p1alpha.SpeechClient" type: "Class" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Service Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." - syntax: - content: "public class SpeechClient implements BackgroundResource" + summary: "

Github repositoryGitHub Repository RPC Documentation REST Documentation
GitHub RepositoryProduct ReferenceREST DocumentationRPC Documentation
\n\nService Description: Service that implements Google Cloud Speech API.\n\n

This class provides the ability to make remote calls to the backing service through method\n calls that map to API methods. Sample code to get started:\n\n

\n try (SpeechClient speechClient = SpeechClient.create()) {\n   RecognitionConfig config = RecognitionConfig.newBuilder().build();\n   RecognitionAudio audio = RecognitionAudio.newBuilder().build();\n   RecognizeResponse response = speechClient.recognize(config, audio);\n }\n 
\n\n

Note: close() needs to be called on the SpeechClient object to clean up resources such as\n threads. In the example above, try-with-resources is used, which automatically calls close().\n\n

The surface of this class includes several types of Java methods for each of the API's\n methods:\n\n

    \n
  1. A \"flattened\" method. With this type of method, the fields of the request type have been\n converted into function parameters. It may be the case that not all fields are available as\n parameters, and not every API method will have a flattened method entry point.\n
  2. A \"request object\" method. This type of method only takes one parameter, a request object,\n which must be constructed before the call. Not every API method will have a request object\n method.\n
  3. A \"callable\" method. This type of method takes no parameters and returns an immutable API\n callable object, which can be used to initiate calls to the service.\n
\n\n

See the individual methods for example code.\n\n

Many parameters require resource names to be formatted in a particular way. To assist with\n these names, this class includes a format method for each type of name, and additionally a parse\n method to extract the individual identifiers contained within names that are returned.\n\n

This class can be customized by passing in a custom instance of SpeechSettings to create().\n For example:\n\n

To customize credentials:\n\n

\n SpeechSettings speechSettings =\n     SpeechSettings.newBuilder()\n         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n         .build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

To customize the endpoint:\n\n

\n SpeechSettings speechSettings = SpeechSettings.newBuilder().setEndpoint(myEndpoint).build();\n SpeechClient speechClient = SpeechClient.create(speechSettings);\n 
\n\n

Please refer to the GitHub repository's samples for more quickstart code snippets." + syntax: {} inheritance: - "java.lang.Object" - implements: - - "com.google.api.gax.core.BackgroundResource" - inheritedMembers: - - "java.lang.Object.clone()" - - "java.lang.Object.equals(java.lang.Object)" - - "java.lang.Object.finalize()" - - "java.lang.Object.getClass()" - - "java.lang.Object.hashCode()" - - "java.lang.Object.notify()" - - "java.lang.Object.notifyAll()" - - "java.lang.Object.toString()" - - "java.lang.Object.wait()" - - "java.lang.Object.wait(long)" - - "java.lang.Object.wait(long,int)" - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient.SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" id: "SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" parent: "com.microsoft.samples.google.v1p1alpha.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md index 413ca11d..d019536d 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md @@ -1,7 +1,7 @@ # Package com.microsoft.samples.google.v1p1alpha (0.18.0) - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md index 089f0012..f3e3e013 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md @@ -1,7 +1,7 @@ # Package com.microsoft.samples (0.18.0)
Github repositoryGitHub Repository RPC Documentation REST Documentation
- + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md index 22076d9f..a0183f03 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md @@ -1,7 +1,7 @@ # Package com.microsoft.samples.offers (0.18.0)
Github repositoryGitHub Repository RPC Documentation REST Documentation
- + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md index d382cfa0..25686025 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md @@ -1,7 +1,7 @@ # Package com.microsoft.samples.subpackage (0.18.0)
Github repositoryGitHub Repository RPC Documentation REST Documentation
- + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md index 44b7bc36..f990fdbe 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md @@ -5,8 +5,8 @@ API Keys lets you create and manage your API keys for your projects.
Github repositoryGitHub Repository RPC Documentation REST Documentation
- - + +
API Keys API product referenceGithub repository (includes samples)API Keys API Product ReferenceGitHub Repository (includes samples) Maven artifact
From 92788e3831d65245ab7a4b71d49901d7634fa853 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 13 Oct 2023 15:33:34 +0200 Subject: [PATCH 114/168] fix(deps): update jackson.version to v2.15.3 (#213) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index f2daefcd..3b1e4126 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -13,7 +13,7 @@ 11 ${java.version} ${java.version} - 2.15.2 + 2.15.3 3.13.0 4.4 2.14.0 From eb773d9decbaae91b74c7131da674c76a4e9d6bc Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 13 Oct 2023 15:34:56 +0200 Subject: [PATCH 115/168] fix(deps): update dependency com.google.guava:guava to v32.1.3-jre (#211) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 3b1e4126..063bf9d0 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -152,7 +152,7 @@ com.google.guava guava - 32.1.2-jre + 32.1.3-jre com.google.code.gson From ae8c6d647dadac41d3ad0065bc4a887e065a8f39 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 13 Oct 2023 15:42:14 +0200 Subject: [PATCH 116/168] chore(deps): update dependency com.google.cloud:google-cloud-speech to v4.23.0 (#212) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 063bf9d0..713fb428 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -188,7 +188,7 @@ com.google.cloud google-cloud-speech - 4.22.0 + 4.23.0 test From 11dfa93614e93819173c459d882d6ff26e96abd7 Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Fri, 13 Oct 2023 11:50:12 -0400 Subject: [PATCH 117/168] chore: support injectable env vars for testing (#215) --- third_party/docfx-doclet-143274/pom.xml | 6 --- .../com/microsoft/doclet/DocFxDoclet.java | 46 +++++++++++++++---- .../com/microsoft/doclet/DocletRunner.java | 38 ++++++++++++++- .../microsoft/doclet/DocletRunnerTest.java | 30 ++++-------- 4 files changed, 83 insertions(+), 37 deletions(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 713fb428..fba593b1 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -191,12 +191,6 @@ 4.23.0 test - - com.github.stefanbirkner - system-rules - 1.19.0 - test - diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java index e4c3051e..2d51aef6 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java @@ -21,14 +21,11 @@ public void init(Locale locale, Reporter reporter) { @Override public boolean run(DocletEnvironment environment) { - String artifactVersion = System.getenv("artifactVersion"); - String librariesBomVersion = System.getenv("librariesBomVersion"); - String repoMetadataFilePath = System.getenv("repoMetadataFilePath"); - Objects.requireNonNull( - repoMetadataFilePath, "Environment variable 'repoMetadataFilePath' must not be null."); - reporter.print(Kind.NOTE, "Environment variable artifactVersion: " + artifactVersion); - reporter.print(Kind.NOTE, "Environment variable librariesBomVersion: " + librariesBomVersion); - reporter.print(Kind.NOTE, "Environment variable repoMetadataFilePath: " + repoMetadataFilePath); + Objects.requireNonNull(repoMetadataFilePath, "repoMetadataFilePath must not be null."); + + reporter.print(Kind.NOTE, "artifactVersion: " + artifactVersion); + reporter.print(Kind.NOTE, "librariesBomVersion: " + librariesBomVersion); + reporter.print(Kind.NOTE, "repoMetadataFilePath: " + repoMetadataFilePath); reporter.print(Kind.NOTE, "Output path: " + outputPath); reporter.print(Kind.NOTE, "Excluded packages: " + Arrays.toString(excludePackages)); reporter.print(Kind.NOTE, "Excluded classes: " + Arrays.toString(excludeClasses)); @@ -61,6 +58,9 @@ public String getName() { private String projectName; private boolean disableChangelog; private boolean disableLibraryOverview; + private String artifactVersion; + private String librariesBomVersion; + private String repoMetadataFilePath; @Override public Set getSupportedOptions() { @@ -130,6 +130,36 @@ public boolean process(String option, List arguments) { return true; } }, + new CustomOption( + "Artifact Version", + Arrays.asList("-artifactVersion", "--artifactVersion"), + "artifactVersion") { + @Override + public boolean process(String option, List arguments) { + artifactVersion = arguments.get(0); + return true; + } + }, + new CustomOption( + "libraries-bom Version", + Arrays.asList("-librariesBomVersion", "--librariesBomVersion"), + "librariesBomVersion") { + @Override + public boolean process(String option, List arguments) { + librariesBomVersion = arguments.get(0); + return true; + } + }, + new CustomOption( + "repo-metadata.json File Path", + Arrays.asList("-repoMetadataFilePath", "--repoMetadataFilePath"), + "repoMetadataFilePath") { + @Override + public boolean process(String option, List arguments) { + repoMetadataFilePath = arguments.get(0); + return true; + } + }, // Support next properties for compatibility with Gradle javadoc task. // According to javadoc spec - these properties used by StandardDoclet and used only when diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java index f7153bb8..e2a4af8f 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocletRunner.java @@ -1,5 +1,7 @@ package com.microsoft.doclet; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableList; import com.microsoft.util.OptionsFileUtil; import java.util.ArrayList; import java.util.List; @@ -20,7 +22,18 @@ public static void main(final String[] args) { return; } - List combined = new ArrayList<>(); + run( + args, + new EnvironmentToArgumentsBuilder() + .addIfExists("artifactVersion") + .addIfExists("librariesBomVersion") + .addIfExists("repoMetadataFilePath") + .build()); + } + + @VisibleForTesting + static void run(final String[] args, List env) { + List combined = new ArrayList<>(env); for (String arg : args) { if (!(new java.io.File(arg)).isFile()) { System.err.println(String.format("File '%s' does not exist", args[0])); @@ -30,4 +43,27 @@ public static void main(final String[] args) { ToolProvider.getSystemDocumentationTool() .run(null, null, null, combined.toArray(new String[0])); } + + @VisibleForTesting + static class EnvironmentToArgumentsBuilder { + private final ImmutableList.Builder env = new ImmutableList.Builder<>(); + + public EnvironmentToArgumentsBuilder addIfExists(String name) { + String value = System.getenv(name); + if (value != null) { + return add(name, value); + } + return this; + } + + @VisibleForTesting + EnvironmentToArgumentsBuilder add(String name, String value) { + env.add("-" + name, value); + return this; + } + + public ImmutableList build() { + return env.build(); + } + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java index 9bc72d5c..cfd29039 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java @@ -2,7 +2,6 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import com.microsoft.util.FileUtilTest; @@ -15,9 +14,7 @@ import java.util.stream.Collectors; import org.junit.After; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; -import org.junit.contrib.java.lang.system.EnvironmentVariables; public class DocletRunnerTest { @@ -30,8 +27,6 @@ public class DocletRunnerTest { private final PrintStream originalOut = System.out; private final PrintStream originalErr = System.err; - @Rule public final EnvironmentVariables environmentVariables = new EnvironmentVariables(); - @Before public void cleanup() throws IOException { FileUtilTest.deleteDirectory(OUTPUT_DIR); @@ -71,17 +66,14 @@ public void testFilesGenerationWhenTargetFileDoesNotExist() { @Test public void testFilesGeneration() throws IOException { - environmentVariables.set("artifactVersion", "0.18.0"); - environmentVariables.set("librariesBomVersion", "26.19.0"); - environmentVariables.set( - "repoMetadataFilePath", "./src/test/java/com/microsoft/samples/.repo-metadata.json"); - assertEquals("0.18.0", System.getenv("artifactVersion")); - assertEquals("26.19.0", System.getenv("librariesBomVersion")); - assertEquals( - "./src/test/java/com/microsoft/samples/.repo-metadata.json", - System.getenv("repoMetadataFilePath")); - - DocletRunner.main(new String[] {PARAMS_DIR}); + DocletRunner.run( + new String[] {PARAMS_DIR}, + new DocletRunner.EnvironmentToArgumentsBuilder() + .add("artifactVersion", "0.18.0") + .add("librariesBomVersion", "26.19.0") + .add( + "repoMetadataFilePath", "./src/test/java/com/microsoft/samples/.repo-metadata.json") + .build()); List expectedFilePaths = Files.list(Path.of(EXPECTED_GENERATED_FILES_DIR)).sorted().collect(Collectors.toList()); @@ -111,12 +103,6 @@ public void testFilesGeneration() throws IOException { generatedFileLines[i]); } } - environmentVariables.clear("artifactVersion"); - environmentVariables.clear("librariesBomVersion"); - environmentVariables.clear("repoMetadataFilePath"); - assertNull(System.getenv("artifactVersion")); - assertNull(System.getenv("librariesBomVersion")); - assertNull(System.getenv("repoMetadataFilePath")); } public void assertSameFileNames(List expected, List generated) { From 4d386df5e29d1d850f29b030e2b65ac8c863c7bb Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Fri, 13 Oct 2023 13:24:12 -0400 Subject: [PATCH 118/168] chore: update doclet version in pom.xml (#214) * chore: update doclet version in pom.xml * update README with release instructions --------- Co-authored-by: Burke Davison <40617934+burkedavison@users.noreply.github.com> --- third_party/docfx-doclet-143274/README.md | 12 ++++++++++++ third_party/docfx-doclet-143274/pom.xml | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/README.md b/third_party/docfx-doclet-143274/README.md index 774581b2..4d88be6a 100644 --- a/third_party/docfx-doclet-143274/README.md +++ b/third_party/docfx-doclet-143274/README.md @@ -27,6 +27,18 @@ To run the linter: ```bash mvn fmt:format ``` +## Release Guide + +To cut a new release of the doclet for updated Cloud RAD content, do the following steps: + +1) Manually update the [version of the doclet in the pom.xml](https://github.com/googleapis/java-docfx-doclet/blob/main/third_party/docfx-doclet-143274/pom.xml#L9) to the next minor or patch version. +2) Commit that version update to the `main` branch, and then add a git tag to that version (minus the `-SNAPSHOT`). You can use the below commands as a template: + +` git tag -a v1.. -m ""` + +`git push origin v1..` + +3) Update the `publish_javadoc11.sh` script within g3 to use the latest version of the doclet. ## Usage diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index fba593b1..f01b6837 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -6,7 +6,7 @@ com.microsoft docfx-doclet - 1.0-SNAPSHOT + 1.11.1-SNAPSHOT UTF-8 From 765e4c3535df7c6a30017598a1a1262197fa8e9e Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 17 Oct 2023 18:16:52 +0200 Subject: [PATCH 119/168] chore(deps): update dependency org.jacoco:jacoco-maven-plugin to v0.8.11 (#216) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index f01b6837..47b822a4 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -77,7 +77,7 @@ org.jacoco jacoco-maven-plugin - 0.8.10 + 0.8.11 From de568fb1de78332b1c51f3aadfe504ed355771e3 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:12:55 -0500 Subject: [PATCH 120/168] fix: fix broken link and update package summary to include exception table (#222) --- .../com/microsoft/build/ReferenceBuilder.java | 5 ++++ .../microsoft/model/LibraryOverviewFile.java | 2 +- .../com.microsoft.samples.google.md | 26 ++++++++++++------- .../com.microsoft.samples.subpackage.md | 19 ++++++++++---- .../expected-generated-files/overview.md | 2 +- 5 files changed, 38 insertions(+), 16 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java index 42502b3b..3dce8767 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java @@ -119,6 +119,11 @@ void addPackageChildrenSummaries( if (uid.endsWith("CallableFactory")) { type = "CallableFactory"; } + // If a Class is an Exception, call it out separately in + // the Package Overview + if (uid.endsWith("Exception")) { + type = "Exception"; + } packageChildrenSummaries.add(new PackageChildSummary(uid, type, summary)); addPackageChildrenSummaries(classElement, packageChildrenSummaries); } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java index dcf1e557..ced58cc9 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java @@ -91,7 +91,7 @@ public LibraryOverviewFile( + "\n\n" + "- [Install a JDK (Java Development Kit)](https://cloud.google.com/java/docs/setup#install_a_jdk_java_development_kit)\n" + "- [Select or create a Cloud Platform project](https://console.cloud.google.com/project)\n" - + "- [Enable billing for your project](\"https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project)\n" + + "- [Enable billing for your project](https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project)\n" + "- [Enable the API](https://console.cloud.google.com/apis/library/" + repoMetadata.getApiShortName() + ".googleapis.com)\n" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md index 401e51af..ba2a4ebf 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md @@ -77,15 +77,6 @@ Builder for ProductSearchSettings.

Builder for SpeechSettings.
com.microsoft.samples.google.ValidationException -Exception thrown if there is a validation problem with a path template, http config, or related - framework methods. Comes as an illegal argument exception subclass. Allows to globally set a - thread-local validation context description which each exception inherits. -See Also: Google Cloud Storage error codes -
## Interfaces @@ -124,3 +115,20 @@ Description +## Exceptions + + + + + + + + +
+Exception +Description
com.microsoft.samples.google.ValidationException +Exception thrown if there is a validation problem with a path template, http config, or related + framework methods. Comes as an illegal argument exception subclass. Allows to globally set a + thread-local validation context description which each exception inherits. +See Also: Google Cloud Storage error codes +
\ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md index 25686025..376e932a 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md @@ -15,11 +15,6 @@ Class Description -com.microsoft.samples.subpackage.CustomException - - - - com.microsoft.samples.subpackage.Person Class that describes some person @@ -69,3 +64,17 @@ Enum describes person's gender +## Exceptions + + + + + + + + +
+Exception +Description
com.microsoft.samples.subpackage.CustomException +
+ diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md index f990fdbe..d0a56d41 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md @@ -16,7 +16,7 @@ In order to use this library, you first need to go through the following steps: - [Install a JDK (Java Development Kit)](https://cloud.google.com/java/docs/setup#install_a_jdk_java_development_kit) - [Select or create a Cloud Platform project](https://console.cloud.google.com/project) -- [Enable billing for your project]("https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project) +- [Enable billing for your project](https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project) - [Enable the API](https://console.cloud.google.com/apis/library/apikeys.googleapis.com) - [Set up authentication](https://cloud.google.com/docs/authentication/client-libraries) From e3e8c35131c1cf60578ee35b12fd0e409d01d334 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Wed, 15 Nov 2023 15:58:21 -0500 Subject: [PATCH 121/168] fix: env var setting (#223) --- .../main/java/com/microsoft/doclet/DocFxDoclet.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java index 2d51aef6..d7e6895f 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java @@ -21,6 +21,16 @@ public void init(Locale locale, Reporter reporter) { @Override public boolean run(DocletEnvironment environment) { + if (repoMetadataFilePath == null) { + repoMetadataFilePath = System.getenv("repoMetadataFilePath"); + } + if (artifactVersion == null) { + artifactVersion = System.getenv("artifactVersion"); + } + if (librariesBomVersion == null) { + librariesBomVersion = System.getenv("librariesBomVersion"); + } + Objects.requireNonNull(repoMetadataFilePath, "repoMetadataFilePath must not be null."); reporter.print(Kind.NOTE, "artifactVersion: " + artifactVersion); From 489aca9f9a041df20088472830c53fb1e9711659 Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Mon, 20 Nov 2023 10:40:32 -0500 Subject: [PATCH 122/168] feat: display Beta, Obsolete, and Internal status and descriptions (#217) * deps: use libraries-bom for dependency management * feat: add annotation descriptions in doc comments * feat: use devsite notices * chore: format * deps: update libraries-bom 26.27.0 * fix: remove unused status values * fix: goldens * fix: ClassLookupTest * fix: formatting --- third_party/docfx-doclet-143274/pom.xml | 14 +- .../java/com/microsoft/lookup/BaseLookup.java | 165 +++++++++++++++--- .../microsoft/lookup/ClassItemsLookup.java | 4 +- .../com/microsoft/lookup/ClassLookup.java | 6 + .../com/microsoft/lookup/ClassLookupTest.java | 44 ++--- .../samples/google/SpeechSettings.java | 2 + .../samples/google/v1beta/SpeechClient.java | 2 + ...com.microsoft.samples.ExceptionHandler.yml | 1 + .../com.microsoft.samples.google.BetaApi.yml | 1 + ...s.google.ProductSearchSettings.Builder.yml | 12 ++ ...t.samples.google.ProductSearchSettings.yml | 118 +++++++------ ...rosoft.samples.google.RecognitionAudio.yml | 40 +++++ ....microsoft.samples.google.SpeechClient.yml | 8 +- ....samples.google.SpeechSettings.Builder.yml | 12 ++ ...icrosoft.samples.google.SpeechSettings.yml | 119 +++++++------ .../com.microsoft.samples.google.md | 3 +- ...crosoft.samples.google.v1.SpeechClient.yml | 8 +- ....samples.google.v1.stub.GrpcSpeechStub.yml | 1 + ...ples.google.v1.stub.HttpJsonSpeechStub.yml | 2 + ...soft.samples.google.v1.stub.SpeechStub.yml | 1 + ...gle.v1.stub.SpeechStubSettings.Builder.yml | 15 +- ...ples.google.v1.stub.SpeechStubSettings.yml | 14 +- ...oft.samples.google.v1beta.SpeechClient.yml | 8 +- ....samples.google.v1p1alpha.SpeechClient.yml | 8 +- .../expected-generated-files/toc.yml | 11 ++ 25 files changed, 446 insertions(+), 173 deletions(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 47b822a4..c7af9ac3 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -113,6 +113,18 @@ + + + + com.google.cloud + libraries-bom + 26.27.0 + pom + import + + + + org.apache.commons @@ -182,13 +194,11 @@ com.google.cloud google-cloud-vision - 2.0.13 test com.google.cloud google-cloud-speech - 4.23.0 test diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java index df5eb075..627d58f2 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java @@ -13,6 +13,7 @@ import com.sun.source.doctree.LinkTree; import com.sun.source.doctree.LiteralTree; import com.sun.source.doctree.SeeTree; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -22,6 +23,8 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; +import javax.annotation.Nullable; +import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import jdk.javadoc.doclet.DocletEnvironment; @@ -170,19 +173,17 @@ public String extractOverridden(T key) { return resolve(key).getOverridden(); } - public String extractStatus(T element) { - Optional docCommentTree = getDocCommentTree(element); - if (docCommentTree.isPresent()) { - boolean isDeprecated = - docCommentTree.get().getBlockTags().stream() - .filter(docTree -> docTree.getKind().equals(DocTree.Kind.DEPRECATED)) - .findFirst() - .isPresent(); - if (isDeprecated) { - return DocTree.Kind.DEPRECATED.name().toLowerCase(); - } - } - return null; + protected Optional getDocCommentTree(T element) { + return Optional.ofNullable(environment.getDocTrees().getDocCommentTree(element)); + } + + private boolean hasDeprecatedJavadocTag(T element) { + List javadocTags = + getDocCommentTree(element) + .map(DocCommentTree::getBlockTags) + .orElse(Collections.emptyList()); + + return javadocTags.stream().map(DocTree::getKind).anyMatch(DocTree.Kind.DEPRECATED::equals); } protected String determineType(T element) { @@ -194,16 +195,33 @@ protected String determinePackageName(T element) { } protected String determineComment(T element) { - Optional docCommentTree = getDocCommentTree(element); - if (docCommentTree.isPresent()) { - String comment = - docCommentTree - .map(DocCommentTree::getFullBody) - .map(this::replaceLinksAndCodes) - .orElse(null); - return replaceBlockTags(docCommentTree.get(), comment); + String statusComment = getStatusComment(element); + String javadocComment = getJavadocComment(element); + return joinNullable(statusComment, javadocComment); + } + + private String getJavadocComment(T element) { + return getDocCommentTree(element) + .map( + tree -> { + String commentWithBlockTags = replaceLinksAndCodes(tree.getFullBody()); + return replaceBlockTags(tree, commentWithBlockTags); + }) + .orElse(null); + } + + /** Safely combine two nullable strings with a newline delimiter */ + String joinNullable(@Nullable String top, @Nullable String bottom) { + String a = top == null || top.isEmpty() ? null : top; + String b = bottom == null || bottom.isEmpty() ? null : bottom; + + if (a != null && b != null) { + return a + "\n\n" + b; + } else if (a != null) { + return a; + } else { + return b; } - return null; } /** Provides support for deprecated and see tags */ @@ -277,10 +295,6 @@ String expandLiteralBody(LiteralTree bodyItem) { return String.valueOf(StringEscapeUtils.unescapeJava(bodyItem.getBody().toString())); } - protected Optional getDocCommentTree(T element) { - return Optional.ofNullable(environment.getDocTrees().getDocCommentTree(element)); - } - /** * We make type shortening in assumption that package name doesn't contain uppercase characters */ @@ -313,4 +327,103 @@ private String getSeeTagRef(SeeTree seeTree) { return String.format( "%1$s", ref); } + + public String extractStatus(T element) { + List annotationNames = + element.getAnnotationMirrors().stream() + .map(mirror -> mirror.getAnnotationType().asElement().getSimpleName().toString()) + .collect(Collectors.toList()); + + if (annotationNames.stream().anyMatch("Deprecated"::equals) + || hasDeprecatedJavadocTag(element)) { + return "deprecated"; + } + if (annotationNames.stream().anyMatch("BetaApi"::equals)) { + return "beta"; + } + return null; + } + + public String getStatusComment(T element) { + Map> annotationComments = getAnnotationComments(element); + + // Deprecated comments are determined by the Javadoc @deprecated block tag. + // See this#replaceBlockTags + + List comments = new ArrayList<>(); + if (annotationComments.containsKey("InternalApi")) { + comments.add(createInternalOnlyNotice(annotationComments.get("InternalApi"))); + } + if (annotationComments.containsKey("InternalExtensionOnly")) { + comments.add( + createInternalExtensionOnlyNotice(annotationComments.get("InternalExtensionOnly"))); + } + if (annotationComments.containsKey("ObsoleteApi")) { + comments.add(createObsoleteNotice(annotationComments.get("ObsoleteApi"))); + } + if (annotationComments.containsKey("BetaApi")) { + comments.add(createBetaNotice(annotationComments.get("BetaApi"))); + } + + if (comments.isEmpty()) { + return null; + } + return String.join("\n\n", comments); + } + + private String createBetaNotice(Optional customComment) { + return "

\n"; + } + + private String createObsoleteNotice(Optional customComment) { + return "\n"; + } + + private String createInternalExtensionOnlyNotice(Optional customComment) { + return "\n"; + } + + private String createInternalOnlyNotice(Optional customComment) { + return "\n"; + } + + /** + * @return all annotations on the element and their associated comment, if it exists + */ + public Map> getAnnotationComments(T element) { + Map> annotationComments = new HashMap<>(); + + for (AnnotationMirror annotation : element.getAnnotationMirrors()) { + String name = annotation.getAnnotationType().asElement().getSimpleName().toString(); + Optional value = + annotation.getElementValues().entrySet().stream() + .filter(entry -> entry.getKey().getSimpleName().toString().equals("value")) + .map(Map.Entry::getValue) + .map(annotationValue -> annotationValue.getValue().toString()) + .findFirst(); + + annotationComments.put(name, value); + } + + return annotationComments; + } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java index ecb5ca2e..6f60ae2c 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java @@ -193,9 +193,9 @@ private String determineComment(ExecutableElement methodElement) { String inheritedInlineComment = getInheritedInlineCommentString(methodElement); Optional docCommentTree = getDocCommentTree(methodElement); if (docCommentTree.isPresent()) { - return replaceBlockTags(docCommentTree.get(), inheritedInlineComment); + inheritedInlineComment = replaceBlockTags(docCommentTree.get(), inheritedInlineComment); } - return inheritedInlineComment; + return joinNullable(getStatusComment(methodElement), inheritedInlineComment); } /** diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java index 5d3889f3..ef6a70e0 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java @@ -221,6 +221,12 @@ List determineInheritedMembers(List inheritedM return new ArrayList<>(); } + @Override + public String getStatusComment(TypeElement element) { + // Don't provide status comments for classes. + return null; + } + public String extractJavaType(TypeElement element) { String superClass = determineSuperclass(element); if (superClass != null && superClass.contains("Exception")) { diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java index 92f90c9b..f70fda8e 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java @@ -1,9 +1,9 @@ package com.microsoft.lookup; +import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import com.google.testing.compile.CompilationRule; @@ -16,7 +16,6 @@ import com.sun.source.doctree.DocTree; import com.sun.source.doctree.TextTree; import com.sun.source.util.DocTrees; -import java.util.Arrays; import java.util.List; import javax.lang.model.element.TypeElement; import javax.lang.model.type.TypeMirror; @@ -42,6 +41,7 @@ public class ClassLookupTest { private DeprecatedTree deprecatedTree; private TextTree textTree; private TypeMirror typeMirror; + private ClassItemsLookup classItemsLookup; @Before public void setup() { @@ -54,6 +54,9 @@ public void setup() { deprecatedTree = Mockito.mock(DeprecatedTree.class); textTree = Mockito.mock(TextTree.class); typeMirror = Mockito.mock(TypeMirror.class); + classItemsLookup = new ClassItemsLookup(environment, Mockito.mock(ElementUtil.class)); + + when(environment.getDocTrees()).thenReturn(docTrees); } @Test @@ -189,41 +192,24 @@ public void determineTypeForClass() { } @Test - public void extractStatusDeprecated() { + public void extractStatus_deprecated() { TypeElement element = elements.getTypeElement( "com.microsoft.samples.agreements.AgreementDetailsCollectionOperations"); - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(element)).thenReturn(docCommentTree); - doReturn(Arrays.asList(deprecatedTree)).when(docCommentTree).getBlockTags(); - when(deprecatedTree.getKind()).thenReturn(DocTree.Kind.DEPRECATED); - String result = classLookup.extractStatus(element); - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(element); - verify(docCommentTree).getBlockTags(); - verify(deprecatedTree).getKind(); assertEquals("Wrong description", result, Status.DEPRECATED.toString()); } @Test - public void extractStatusNotDeprecated() { + public void extractStatus_notDeprecated() { TypeElement element = - elements.getTypeElement( - "com.microsoft.samples.agreements.AgreementDetailsCollectionOperations"); - - when(environment.getDocTrees()).thenReturn(docTrees); - when(docTrees.getDocCommentTree(element)).thenReturn(docCommentTree); - doReturn(Arrays.asList()).when(docCommentTree).getBlockTags(); + elements.getTypeElement("com.microsoft.samples.agreements.AgreementMetaData"); String result = classLookup.extractStatus(element); - verify(environment).getDocTrees(); - verify(docTrees).getDocCommentTree(element); - verify(docCommentTree).getBlockTags(); - assertEquals("Wrong description", result, null); + assertNull("Wrong description", result); } @Test @@ -233,12 +219,18 @@ public void testExtractJavaType() { assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), "exception"); typeElement = elements.getTypeElement("com.microsoft.samples.google.RecognitionAudio"); - assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), null); + assertNull("Wrong javaType", classLookup.extractJavaType(typeElement)); typeElement = elements.getTypeElement("com.microsoft.samples.google.BetaApi"); assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), "annotationtype"); typeElement = elements.getTypeElement("com.microsoft.samples.IPartner"); - assertEquals("Wrong javaType", classLookup.extractJavaType(typeElement), null); + assertNull("Wrong javaType", classLookup.extractJavaType(typeElement)); + } + + @Test + public void testExtractStatus_class_beta() { + TypeElement betaApi = elements.getTypeElement("com.microsoft.samples.google.BetaApi"); + assertThat(classLookup.extractStatus(betaApi)).isEqualTo("beta"); } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java index b3f389f7..0c975518 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/SpeechSettings.java @@ -18,6 +18,7 @@ import com.google.api.core.ApiFunction; import com.google.api.core.BetaApi; +import com.google.api.core.InternalExtensionOnly; import com.google.api.gax.core.GoogleCredentialsProvider; import com.google.api.gax.core.InstantiatingExecutorProvider; import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; @@ -63,6 +64,7 @@ * } */ @BetaApi +@InternalExtensionOnly @Generated("by gapic-generator-java") @SuppressWarnings("unchecked") public class SpeechSettings extends ClientSettings { diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1beta/SpeechClient.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1beta/SpeechClient.java index 37fd187d..a25ee18e 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1beta/SpeechClient.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/samples/google/v1beta/SpeechClient.java @@ -17,6 +17,7 @@ package com.microsoft.samples.google.v1beta; import com.google.api.core.BetaApi; +import com.google.api.core.ObsoleteApi; import com.google.api.gax.core.BackgroundResource; import com.google.api.gax.longrunning.OperationFuture; import com.google.api.gax.rpc.BidiStreamingCallable; @@ -93,6 +94,7 @@ *

Please refer to the GitHub repository's samples for more quickstart code snippets. */ @BetaApi +@ObsoleteApi("Example obsolete annotation. Use a different version because...") @Generated("by gapic-generator-java") public class SpeechClient implements BackgroundResource { private final com.microsoft.samples.google.SpeechSettings settings; diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml index bb3dbec5..3216fbfd 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.yml @@ -39,6 +39,7 @@ items: - "java.lang.Object.wait()" - "java.lang.Object.wait(long)" - "java.lang.Object.wait(long,int)" + status: "beta" - uid: "com.microsoft.samples.ExceptionHandler.ExceptionHandler(com.microsoft.samples.ExceptionHandler.Builder)" id: "ExceptionHandler(com.microsoft.samples.ExceptionHandler.Builder)" parent: "com.microsoft.samples.ExceptionHandler" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml index 3094daf5..b282baea 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.BetaApi.yml @@ -17,6 +17,7 @@ items: content: "public interface BetaApi implements Annotation" implements: - "java.lang.annotation.Annotation" + status: "beta" javaType: "annotationtype" - uid: "com.microsoft.samples.google.BetaApi.value()" id: "value()" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml index 1f691bf3..6afb0cb7 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml @@ -53,6 +53,7 @@ items: - "com.google.api.gax.rpc.ClientSettings.Builder.getCredentialsProvider()" - "com.google.api.gax.rpc.ClientSettings.Builder.getEndpoint()" - "com.google.api.gax.rpc.ClientSettings.Builder.getExecutorProvider()" + - "com.google.api.gax.rpc.ClientSettings.Builder.getGdchApiAudience()" - "com.google.api.gax.rpc.ClientSettings.Builder.getHeaderProvider()" - "com.google.api.gax.rpc.ClientSettings.Builder.getInternalHeaderProvider()" - "com.google.api.gax.rpc.ClientSettings.Builder.getQuotaProjectId()" @@ -66,6 +67,7 @@ items: - "com.google.api.gax.rpc.ClientSettings.Builder.setCredentialsProvider(com.google.api.gax.core.CredentialsProvider)" - "com.google.api.gax.rpc.ClientSettings.Builder.setEndpoint(java.lang.String)" - "com.google.api.gax.rpc.ClientSettings.Builder.setExecutorProvider(com.google.api.gax.core.ExecutorProvider)" + - "com.google.api.gax.rpc.ClientSettings.Builder.setGdchApiAudience(java.lang.String)" - "com.google.api.gax.rpc.ClientSettings.Builder.setHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" - "com.google.api.gax.rpc.ClientSettings.Builder.setInternalHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" - "com.google.api.gax.rpc.ClientSettings.Builder.setQuotaProjectId(java.lang.String)" @@ -1331,6 +1333,11 @@ references: name: "Object.wait(long,int)" nameWithType: "Object.wait(long,int)" fullName: "java.lang.Object.wait(long,int)" +- uid: "com.google.api.gax.rpc.ClientSettings.Builder.setGdchApiAudience(java.lang.String)" + isExternal: true + name: "ClientSettings.Builder.setGdchApiAudience(String)" + nameWithType: "ClientSettings.Builder.setGdchApiAudience(String)" + fullName: "com.google.api.gax.rpc.ClientSettings.Builder.setGdchApiAudience(java.lang.String)" - uid: "com.google.api.gax.rpc.ClientSettings.Builder.toString()" isExternal: true name: "ClientSettings.Builder.toString()" @@ -1431,6 +1438,11 @@ references: name: "ClientSettings.Builder.getTransportChannelProvider()" nameWithType: "ClientSettings.Builder.getTransportChannelProvider()" fullName: "com.google.api.gax.rpc.ClientSettings.Builder.getTransportChannelProvider()" +- uid: "com.google.api.gax.rpc.ClientSettings.Builder.getGdchApiAudience()" + isExternal: true + name: "ClientSettings.Builder.getGdchApiAudience()" + nameWithType: "ClientSettings.Builder.getGdchApiAudience()" + fullName: "com.google.api.gax.rpc.ClientSettings.Builder.getGdchApiAudience()" - uid: "com.google.api.gax.rpc.ClientSettings.Builder.getEndpoint()" isExternal: true name: "ClientSettings.Builder.getEndpoint()" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml index aa11ba23..85f63d92 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml @@ -58,6 +58,7 @@ items: - "com.google.api.gax.rpc.ClientSettings.getCredentialsProvider()" - "com.google.api.gax.rpc.ClientSettings.getEndpoint()" - "com.google.api.gax.rpc.ClientSettings.getExecutorProvider()" + - "com.google.api.gax.rpc.ClientSettings.getGdchApiAudience()" - "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" - "com.google.api.gax.rpc.ClientSettings.getInternalHeaderProvider()" - "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" @@ -188,10 +189,12 @@ items: overload: "com.microsoft.samples.google.ProductSearchSettings.defaultApiClientHeaderProviderBuilder*" type: "Method" package: "com.microsoft.samples.google" + summary: "

\n" syntax: content: "public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder()" return: type: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + status: "beta" javaType: "static method" - uid: "com.microsoft.samples.google.ProductSearchSettings.defaultCredentialsProviderBuilder()" id: "defaultCredentialsProviderBuilder()" @@ -1419,21 +1422,6 @@ references: name: "ClientSettings" nameWithType: "ClientSettings" fullName: "com.google.api.gax.rpc.ClientSettings" -- uid: "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" - isExternal: true - name: "ClientSettings.getHeaderProvider()" - nameWithType: "ClientSettings.getHeaderProvider()" - fullName: "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" -- uid: "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" - isExternal: true - name: "ClientSettings.getQuotaProjectId()" - nameWithType: "ClientSettings.getQuotaProjectId()" - fullName: "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" -- uid: "java.lang.Object.notify()" - href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" - name: "Object.notify()" - nameWithType: "Object.notify()" - fullName: "java.lang.Object.notify()" - uid: "java.lang.Object.wait()" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" name: "Object.wait()" @@ -1449,56 +1437,26 @@ references: name: "ClientSettings.getWatchdogProvider()" nameWithType: "ClientSettings.getWatchdogProvider()" fullName: "com.google.api.gax.rpc.ClientSettings.getWatchdogProvider()" -- uid: "java.lang.Object.notifyAll()" - href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" - name: "Object.notifyAll()" - nameWithType: "Object.notifyAll()" - fullName: "java.lang.Object.notifyAll()" - uid: "java.lang.Object.clone()" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--" name: "Object.clone()" nameWithType: "Object.clone()" fullName: "java.lang.Object.clone()" -- uid: "com.google.api.gax.rpc.ClientSettings.getCredentialsProvider()" - isExternal: true - name: "ClientSettings.getCredentialsProvider()" - nameWithType: "ClientSettings.getCredentialsProvider()" - fullName: "com.google.api.gax.rpc.ClientSettings.getCredentialsProvider()" - uid: "com.google.api.gax.rpc.ClientSettings.getStubSettings()" isExternal: true name: "ClientSettings.getStubSettings()" nameWithType: "ClientSettings.getStubSettings()" fullName: "com.google.api.gax.rpc.ClientSettings.getStubSettings()" -- uid: "com.google.api.gax.rpc.ClientSettings.toBuilder()" - isExternal: true - name: "ClientSettings.toBuilder()" - nameWithType: "ClientSettings.toBuilder()" - fullName: "com.google.api.gax.rpc.ClientSettings.toBuilder()" -- uid: "java.lang.Object.equals(java.lang.Object)" - href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" - name: "Object.equals(Object)" - nameWithType: "Object.equals(Object)" - fullName: "java.lang.Object.equals(java.lang.Object)" - uid: "com.google.api.gax.rpc.ClientSettings.toString()" isExternal: true name: "ClientSettings.toString()" nameWithType: "ClientSettings.toString()" fullName: "com.google.api.gax.rpc.ClientSettings.toString()" -- uid: "com.google.api.gax.rpc.ClientSettings.getInternalHeaderProvider()" - isExternal: true - name: "ClientSettings.getInternalHeaderProvider()" - nameWithType: "ClientSettings.getInternalHeaderProvider()" - fullName: "com.google.api.gax.rpc.ClientSettings.getInternalHeaderProvider()" - uid: "com.google.api.gax.rpc.ClientSettings.getWatchdogCheckInterval()" isExternal: true name: "ClientSettings.getWatchdogCheckInterval()" nameWithType: "ClientSettings.getWatchdogCheckInterval()" fullName: "com.google.api.gax.rpc.ClientSettings.getWatchdogCheckInterval()" -- uid: "com.google.api.gax.rpc.ClientSettings.getTransportChannelProvider()" - isExternal: true - name: "ClientSettings.getTransportChannelProvider()" - nameWithType: "ClientSettings.getTransportChannelProvider()" - fullName: "com.google.api.gax.rpc.ClientSettings.getTransportChannelProvider()" - uid: "com.google.api.gax.rpc.ClientSettings.getBackgroundExecutorProvider()" isExternal: true name: "ClientSettings.getBackgroundExecutorProvider()" @@ -1509,21 +1467,16 @@ references: name: "ClientSettings.getEndpoint()" nameWithType: "ClientSettings.getEndpoint()" fullName: "com.google.api.gax.rpc.ClientSettings.getEndpoint()" -- uid: "java.lang.Object.getClass()" - href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" - name: "Object.getClass()" - nameWithType: "Object.getClass()" - fullName: "java.lang.Object.getClass()" -- uid: "com.google.api.gax.rpc.ClientSettings.getClock()" - isExternal: true - name: "ClientSettings.getClock()" - nameWithType: "ClientSettings.getClock()" - fullName: "com.google.api.gax.rpc.ClientSettings.getClock()" - uid: "java.lang.Object.wait(long)" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" name: "Object.wait(long)" nameWithType: "Object.wait(long)" fullName: "java.lang.Object.wait(long)" +- uid: "java.lang.Object.getClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" + name: "Object.getClass()" + nameWithType: "Object.getClass()" + fullName: "java.lang.Object.getClass()" - uid: "java.lang.Object.hashCode()" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--" name: "Object.hashCode()" @@ -1539,6 +1492,61 @@ references: name: "Object.wait(long,int)" nameWithType: "Object.wait(long,int)" fullName: "java.lang.Object.wait(long,int)" +- uid: "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" + isExternal: true + name: "ClientSettings.getHeaderProvider()" + nameWithType: "ClientSettings.getHeaderProvider()" + fullName: "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" +- uid: "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" + isExternal: true + name: "ClientSettings.getQuotaProjectId()" + nameWithType: "ClientSettings.getQuotaProjectId()" + fullName: "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" +- uid: "java.lang.Object.notify()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" + name: "Object.notify()" + nameWithType: "Object.notify()" + fullName: "java.lang.Object.notify()" +- uid: "com.google.api.gax.rpc.ClientSettings.getGdchApiAudience()" + isExternal: true + name: "ClientSettings.getGdchApiAudience()" + nameWithType: "ClientSettings.getGdchApiAudience()" + fullName: "com.google.api.gax.rpc.ClientSettings.getGdchApiAudience()" +- uid: "java.lang.Object.notifyAll()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" + name: "Object.notifyAll()" + nameWithType: "Object.notifyAll()" + fullName: "java.lang.Object.notifyAll()" +- uid: "com.google.api.gax.rpc.ClientSettings.getCredentialsProvider()" + isExternal: true + name: "ClientSettings.getCredentialsProvider()" + nameWithType: "ClientSettings.getCredentialsProvider()" + fullName: "com.google.api.gax.rpc.ClientSettings.getCredentialsProvider()" +- uid: "com.google.api.gax.rpc.ClientSettings.toBuilder()" + isExternal: true + name: "ClientSettings.toBuilder()" + nameWithType: "ClientSettings.toBuilder()" + fullName: "com.google.api.gax.rpc.ClientSettings.toBuilder()" +- uid: "java.lang.Object.equals(java.lang.Object)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" + name: "Object.equals(Object)" + nameWithType: "Object.equals(Object)" + fullName: "java.lang.Object.equals(java.lang.Object)" +- uid: "com.google.api.gax.rpc.ClientSettings.getInternalHeaderProvider()" + isExternal: true + name: "ClientSettings.getInternalHeaderProvider()" + nameWithType: "ClientSettings.getInternalHeaderProvider()" + fullName: "com.google.api.gax.rpc.ClientSettings.getInternalHeaderProvider()" +- uid: "com.google.api.gax.rpc.ClientSettings.getTransportChannelProvider()" + isExternal: true + name: "ClientSettings.getTransportChannelProvider()" + nameWithType: "ClientSettings.getTransportChannelProvider()" + fullName: "com.google.api.gax.rpc.ClientSettings.getTransportChannelProvider()" +- uid: "com.google.api.gax.rpc.ClientSettings.getClock()" + isExternal: true + name: "ClientSettings.getClock()" + nameWithType: "ClientSettings.getClock()" + fullName: "com.google.api.gax.rpc.ClientSettings.getClock()" - uid: "com.google.cloud.vision.v1.CreateProductSetRequest,com.google.cloud.vision.v1.ProductSet" name: "CreateProductSetRequest,ProductSet" nameWithType: "CreateProductSetRequest,ProductSet" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml index 147c3183..291b652e 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml @@ -58,12 +58,15 @@ items: - "com.google.protobuf.AbstractMessageLite.toByteString()" - "com.google.protobuf.AbstractMessageLite.writeDelimitedTo(java.io.OutputStream)" - "com.google.protobuf.AbstractMessageLite.writeTo(java.io.OutputStream)" + - "com.google.protobuf.GeneratedMessageV3.makeMutableCopy(ListT)" + - "com.google.protobuf.GeneratedMessageV3.makeMutableCopy(ListT,int)" - "com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(com.google.protobuf.Parser,java.io.InputStream)" - "com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(com.google.protobuf.Parser,java.io.InputStream,com.google.protobuf.ExtensionRegistryLite)" - "com.google.protobuf.GeneratedMessageV3.parseWithIOException(com.google.protobuf.Parser,com.google.protobuf.CodedInputStream)" - "com.google.protobuf.GeneratedMessageV3.parseWithIOException(com.google.protobuf.Parser,com.google.protobuf.CodedInputStream,com.google.protobuf.ExtensionRegistryLite)" - "com.google.protobuf.GeneratedMessageV3.parseWithIOException(com.google.protobuf.Parser,java.io.InputStream)" - "com.google.protobuf.GeneratedMessageV3.parseWithIOException(com.google.protobuf.Parser,java.io.InputStream,com.google.protobuf.ExtensionRegistryLite)" + - "com.google.protobuf.GeneratedMessageV3.emptyList(java.lang.Class)" - "com.google.protobuf.GeneratedMessageV3.serializeBooleanMapTo(com.google.protobuf.CodedOutputStream,com.google.protobuf.MapField,com.google.protobuf.MapEntry,int)" - "com.google.protobuf.GeneratedMessageV3.serializeIntegerMapTo(com.google.protobuf.CodedOutputStream,com.google.protobuf.MapField,com.google.protobuf.MapEntry,int)" - "com.google.protobuf.GeneratedMessageV3.serializeLongMapTo(com.google.protobuf.CodedOutputStream,com.google.protobuf.MapField,com.google.protobuf.MapEntry,int)" @@ -90,6 +93,7 @@ items: - "com.google.protobuf.GeneratedMessageV3.internalGetFieldAccessorTable()" - "com.google.protobuf.GeneratedMessageV3.internalGetMapField(int)" - "com.google.protobuf.GeneratedMessageV3.isInitialized()" + - "com.google.protobuf.GeneratedMessageV3.isStringEmpty(java.lang.Object)" - "com.google.protobuf.GeneratedMessageV3.makeExtensionsImmutable()" - "com.google.protobuf.GeneratedMessageV3.mergeFromAndMakeImmutableInternal(com.google.protobuf.CodedInputStream,com.google.protobuf.ExtensionRegistryLite)" - "com.google.protobuf.GeneratedMessageV3.mutableCopy(com.google.protobuf.Internal.BooleanList)" @@ -848,6 +852,16 @@ references: name: "GeneratedMessageV3.canUseUnsafe()" nameWithType: "GeneratedMessageV3.canUseUnsafe()" fullName: "com.google.protobuf.GeneratedMessageV3.canUseUnsafe()" +- uid: "com.google.protobuf.GeneratedMessageV3.isStringEmpty(java.lang.Object)" + isExternal: true + name: "GeneratedMessageV3.isStringEmpty(Object)" + nameWithType: "GeneratedMessageV3.isStringEmpty(Object)" + fullName: "com.google.protobuf.GeneratedMessageV3.isStringEmpty(java.lang.Object)" +- uid: "com.google.protobuf.GeneratedMessageV3.makeMutableCopy(ListT)" + isExternal: true + name: "GeneratedMessageV3.makeMutableCopy(ListT)" + nameWithType: "GeneratedMessageV3.makeMutableCopy(ListT)" + fullName: "com.google.protobuf.GeneratedMessageV3.makeMutableCopy(ListT)" - uid: "com.google.protobuf.GeneratedMessageV3.newFloatList()" isExternal: true name: "GeneratedMessageV3.newFloatList()" @@ -923,6 +937,11 @@ references: name: "AbstractMessage.hashEnumList(List)" nameWithType: "AbstractMessage.hashEnumList(List)" fullName: "com.google.protobuf.AbstractMessage.hashEnumList(java.util.List)" +- uid: "com.google.protobuf.GeneratedMessageV3.emptyList(java.lang.Class)" + isExternal: true + name: "GeneratedMessageV3.emptyList(Class)" + nameWithType: "GeneratedMessageV3.emptyList(Class)" + fullName: "com.google.protobuf.GeneratedMessageV3.emptyList(java.lang.Class)" - uid: "com.google.protobuf.AbstractMessageLite.addAll(java.lang.Iterable,java.util.List)" isExternal: true name: "AbstractMessageLite.addAll(Iterable,List)" @@ -1038,6 +1057,11 @@ references: name: "GeneratedMessageV3.computeStringSizeNoTag(Object)" nameWithType: "GeneratedMessageV3.computeStringSizeNoTag(Object)" fullName: "com.google.protobuf.GeneratedMessageV3.computeStringSizeNoTag(java.lang.Object)" +- uid: "com.google.protobuf.GeneratedMessageV3.makeMutableCopy(ListT,int)" + isExternal: true + name: "GeneratedMessageV3.makeMutableCopy(ListT,int)" + nameWithType: "GeneratedMessageV3.makeMutableCopy(ListT,int)" + fullName: "com.google.protobuf.GeneratedMessageV3.makeMutableCopy(ListT,int)" - uid: "com.google.protobuf.GeneratedMessageV3.isInitialized()" isExternal: true name: "GeneratedMessageV3.isInitialized()" @@ -1131,6 +1155,10 @@ references: name: "M>,InputStream)" nameWithType: "M>,InputStream)" fullName: "M>,java.io.InputStream)" +- uid: "ListT>makeMutableCopy(ListT)" + name: "ListT>makeMutableCopy(ListT)" + nameWithType: "ListT>makeMutableCopy(ListT)" + fullName: "ListT>makeMutableCopy(ListT)" - uid: "V>serializeStringMapTo(com.google.protobuf.CodedOutputStream,com.google.protobuf.MapField" name: "V>serializeStringMapTo(CodedOutputStream,MapField" nameWithType: "V>serializeStringMapTo(CodedOutputStream,MapField" @@ -1176,6 +1204,14 @@ references: name: "AbstractMessage.hashEnumList(List" nameWithType: "AbstractMessage.hashEnumList(List" fullName: "com.google.protobuf.AbstractMessage.hashEnumList(java.util.List" +- uid: "T>emptyList(java.lang.Class" + name: "T>emptyList(Class" + nameWithType: "T>emptyList(Class" + fullName: "T>emptyList(java.lang.Class" +- uid: "T>)" + name: "T>)" + nameWithType: "T>)" + fullName: "T>)" - uid: "T>,java.util.List" name: "T>,List" nameWithType: "T>,List" @@ -1211,3 +1247,7 @@ references: name: "Descriptors.FieldDescriptor,Object>)" nameWithType: "Descriptors.FieldDescriptor,Object>)" fullName: "com.google.protobuf.Descriptors.FieldDescriptor,java.lang.Object>)" +- uid: "ListT>makeMutableCopy(ListT,int)" + name: "ListT>makeMutableCopy(ListT,int)" + nameWithType: "ListT>makeMutableCopy(ListT,int)" + fullName: "ListT>makeMutableCopy(ListT,int)" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml index fa0ce7ae..492435b2 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechClient.yml @@ -52,6 +52,7 @@ items: - "java.lang.Object.wait()" - "java.lang.Object.wait(long)" - "java.lang.Object.wait(long,int)" + status: "beta" - uid: "com.microsoft.samples.google.SpeechClient.SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" id: "SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" parent: "com.microsoft.samples.google.SpeechClient" @@ -63,11 +64,13 @@ items: overload: "com.microsoft.samples.google.SpeechClient.SpeechClient*" type: "Constructor" package: "com.microsoft.samples.google" + summary: "\n" syntax: content: "protected SpeechClient(SpeechStub stub)" parameters: - id: "stub" type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + status: "beta" - uid: "com.microsoft.samples.google.SpeechClient.SpeechClient(com.microsoft.samples.google.SpeechSettings)" id: "SpeechClient(com.microsoft.samples.google.SpeechSettings)" parent: "com.microsoft.samples.google.SpeechClient" @@ -150,7 +153,7 @@ items: overload: "com.microsoft.samples.google.SpeechClient.create*" type: "Method" package: "com.microsoft.samples.google" - summary: "Constructs an instance of SpeechClient, using the given stub for making calls. This is for\n advanced usage - prefer using create(SpeechSettings)." + summary: "\n\n\nConstructs an instance of SpeechClient, using the given stub for making calls. This is for\n advanced usage - prefer using create(SpeechSettings)." syntax: content: "public static final SpeechClient create(SpeechStub stub)" parameters: @@ -158,6 +161,7 @@ items: type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" return: type: "com.microsoft.samples.google.SpeechClient" + status: "beta" javaType: "static method" - uid: "com.microsoft.samples.google.SpeechClient.create(com.microsoft.samples.google.SpeechSettings)" id: "create(com.microsoft.samples.google.SpeechSettings)" @@ -223,10 +227,12 @@ items: overload: "com.microsoft.samples.google.SpeechClient.getStub*" type: "Method" package: "com.microsoft.samples.google" + summary: "\n" syntax: content: "public SpeechStub getStub()" return: type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + status: "beta" - uid: "com.microsoft.samples.google.SpeechClient.isShutdown()" id: "isShutdown()" parent: "com.microsoft.samples.google.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml index d059fabf..01550e46 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml @@ -36,6 +36,7 @@ items: - "com.google.api.gax.rpc.ClientSettings.Builder.getCredentialsProvider()" - "com.google.api.gax.rpc.ClientSettings.Builder.getEndpoint()" - "com.google.api.gax.rpc.ClientSettings.Builder.getExecutorProvider()" + - "com.google.api.gax.rpc.ClientSettings.Builder.getGdchApiAudience()" - "com.google.api.gax.rpc.ClientSettings.Builder.getHeaderProvider()" - "com.google.api.gax.rpc.ClientSettings.Builder.getInternalHeaderProvider()" - "com.google.api.gax.rpc.ClientSettings.Builder.getQuotaProjectId()" @@ -49,6 +50,7 @@ items: - "com.google.api.gax.rpc.ClientSettings.Builder.setCredentialsProvider(com.google.api.gax.core.CredentialsProvider)" - "com.google.api.gax.rpc.ClientSettings.Builder.setEndpoint(java.lang.String)" - "com.google.api.gax.rpc.ClientSettings.Builder.setExecutorProvider(com.google.api.gax.core.ExecutorProvider)" + - "com.google.api.gax.rpc.ClientSettings.Builder.setGdchApiAudience(java.lang.String)" - "com.google.api.gax.rpc.ClientSettings.Builder.setHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" - "com.google.api.gax.rpc.ClientSettings.Builder.setInternalHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" - "com.google.api.gax.rpc.ClientSettings.Builder.setQuotaProjectId(java.lang.String)" @@ -524,6 +526,11 @@ references: name: "Object.wait(long,int)" nameWithType: "Object.wait(long,int)" fullName: "java.lang.Object.wait(long,int)" +- uid: "com.google.api.gax.rpc.ClientSettings.Builder.setGdchApiAudience(java.lang.String)" + isExternal: true + name: "ClientSettings.Builder.setGdchApiAudience(String)" + nameWithType: "ClientSettings.Builder.setGdchApiAudience(String)" + fullName: "com.google.api.gax.rpc.ClientSettings.Builder.setGdchApiAudience(java.lang.String)" - uid: "com.google.api.gax.rpc.ClientSettings.Builder.toString()" isExternal: true name: "ClientSettings.Builder.toString()" @@ -624,6 +631,11 @@ references: name: "ClientSettings.Builder.getTransportChannelProvider()" nameWithType: "ClientSettings.Builder.getTransportChannelProvider()" fullName: "com.google.api.gax.rpc.ClientSettings.Builder.getTransportChannelProvider()" +- uid: "com.google.api.gax.rpc.ClientSettings.Builder.getGdchApiAudience()" + isExternal: true + name: "ClientSettings.Builder.getGdchApiAudience()" + nameWithType: "ClientSettings.Builder.getGdchApiAudience()" + fullName: "com.google.api.gax.rpc.ClientSettings.Builder.getGdchApiAudience()" - uid: "com.google.api.gax.rpc.ClientSettings.Builder.getEndpoint()" isExternal: true name: "ClientSettings.Builder.getEndpoint()" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml index faffd422..a979f9c3 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml @@ -41,6 +41,7 @@ items: - "com.google.api.gax.rpc.ClientSettings.getCredentialsProvider()" - "com.google.api.gax.rpc.ClientSettings.getEndpoint()" - "com.google.api.gax.rpc.ClientSettings.getExecutorProvider()" + - "com.google.api.gax.rpc.ClientSettings.getGdchApiAudience()" - "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" - "com.google.api.gax.rpc.ClientSettings.getInternalHeaderProvider()" - "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" @@ -59,6 +60,7 @@ items: - "java.lang.Object.wait()" - "java.lang.Object.wait(long)" - "java.lang.Object.wait(long,int)" + status: "beta" - uid: "com.microsoft.samples.google.SpeechSettings.SpeechSettings(com.microsoft.samples.google.SpeechSettings.Builder)" id: "SpeechSettings(com.microsoft.samples.google.SpeechSettings.Builder)" parent: "com.microsoft.samples.google.SpeechSettings" @@ -107,10 +109,12 @@ items: overload: "com.microsoft.samples.google.SpeechSettings.defaultApiClientHeaderProviderBuilder*" type: "Method" package: "com.microsoft.samples.google" + summary: "\n" syntax: content: "public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder()" return: type: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + status: "beta" javaType: "static method" - uid: "com.microsoft.samples.google.SpeechSettings.defaultCredentialsProviderBuilder()" id: "defaultCredentialsProviderBuilder()" @@ -602,21 +606,6 @@ references: name: "ClientSettings" nameWithType: "ClientSettings" fullName: "com.google.api.gax.rpc.ClientSettings" -- uid: "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" - isExternal: true - name: "ClientSettings.getHeaderProvider()" - nameWithType: "ClientSettings.getHeaderProvider()" - fullName: "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" -- uid: "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" - isExternal: true - name: "ClientSettings.getQuotaProjectId()" - nameWithType: "ClientSettings.getQuotaProjectId()" - fullName: "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" -- uid: "java.lang.Object.notify()" - href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" - name: "Object.notify()" - nameWithType: "Object.notify()" - fullName: "java.lang.Object.notify()" - uid: "java.lang.Object.wait()" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" name: "Object.wait()" @@ -632,56 +621,26 @@ references: name: "ClientSettings.getWatchdogProvider()" nameWithType: "ClientSettings.getWatchdogProvider()" fullName: "com.google.api.gax.rpc.ClientSettings.getWatchdogProvider()" -- uid: "java.lang.Object.notifyAll()" - href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" - name: "Object.notifyAll()" - nameWithType: "Object.notifyAll()" - fullName: "java.lang.Object.notifyAll()" - uid: "java.lang.Object.clone()" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--" name: "Object.clone()" nameWithType: "Object.clone()" fullName: "java.lang.Object.clone()" -- uid: "com.google.api.gax.rpc.ClientSettings.getCredentialsProvider()" - isExternal: true - name: "ClientSettings.getCredentialsProvider()" - nameWithType: "ClientSettings.getCredentialsProvider()" - fullName: "com.google.api.gax.rpc.ClientSettings.getCredentialsProvider()" - uid: "com.google.api.gax.rpc.ClientSettings.getStubSettings()" isExternal: true name: "ClientSettings.getStubSettings()" nameWithType: "ClientSettings.getStubSettings()" fullName: "com.google.api.gax.rpc.ClientSettings.getStubSettings()" -- uid: "com.google.api.gax.rpc.ClientSettings.toBuilder()" - isExternal: true - name: "ClientSettings.toBuilder()" - nameWithType: "ClientSettings.toBuilder()" - fullName: "com.google.api.gax.rpc.ClientSettings.toBuilder()" -- uid: "java.lang.Object.equals(java.lang.Object)" - href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" - name: "Object.equals(Object)" - nameWithType: "Object.equals(Object)" - fullName: "java.lang.Object.equals(java.lang.Object)" - uid: "com.google.api.gax.rpc.ClientSettings.toString()" isExternal: true name: "ClientSettings.toString()" nameWithType: "ClientSettings.toString()" fullName: "com.google.api.gax.rpc.ClientSettings.toString()" -- uid: "com.google.api.gax.rpc.ClientSettings.getInternalHeaderProvider()" - isExternal: true - name: "ClientSettings.getInternalHeaderProvider()" - nameWithType: "ClientSettings.getInternalHeaderProvider()" - fullName: "com.google.api.gax.rpc.ClientSettings.getInternalHeaderProvider()" - uid: "com.google.api.gax.rpc.ClientSettings.getWatchdogCheckInterval()" isExternal: true name: "ClientSettings.getWatchdogCheckInterval()" nameWithType: "ClientSettings.getWatchdogCheckInterval()" fullName: "com.google.api.gax.rpc.ClientSettings.getWatchdogCheckInterval()" -- uid: "com.google.api.gax.rpc.ClientSettings.getTransportChannelProvider()" - isExternal: true - name: "ClientSettings.getTransportChannelProvider()" - nameWithType: "ClientSettings.getTransportChannelProvider()" - fullName: "com.google.api.gax.rpc.ClientSettings.getTransportChannelProvider()" - uid: "com.google.api.gax.rpc.ClientSettings.getBackgroundExecutorProvider()" isExternal: true name: "ClientSettings.getBackgroundExecutorProvider()" @@ -692,21 +651,16 @@ references: name: "ClientSettings.getEndpoint()" nameWithType: "ClientSettings.getEndpoint()" fullName: "com.google.api.gax.rpc.ClientSettings.getEndpoint()" -- uid: "java.lang.Object.getClass()" - href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" - name: "Object.getClass()" - nameWithType: "Object.getClass()" - fullName: "java.lang.Object.getClass()" -- uid: "com.google.api.gax.rpc.ClientSettings.getClock()" - isExternal: true - name: "ClientSettings.getClock()" - nameWithType: "ClientSettings.getClock()" - fullName: "com.google.api.gax.rpc.ClientSettings.getClock()" - uid: "java.lang.Object.wait(long)" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" name: "Object.wait(long)" nameWithType: "Object.wait(long)" fullName: "java.lang.Object.wait(long)" +- uid: "java.lang.Object.getClass()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" + name: "Object.getClass()" + nameWithType: "Object.getClass()" + fullName: "java.lang.Object.getClass()" - uid: "java.lang.Object.hashCode()" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--" name: "Object.hashCode()" @@ -722,6 +676,61 @@ references: name: "Object.wait(long,int)" nameWithType: "Object.wait(long,int)" fullName: "java.lang.Object.wait(long,int)" +- uid: "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" + isExternal: true + name: "ClientSettings.getHeaderProvider()" + nameWithType: "ClientSettings.getHeaderProvider()" + fullName: "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" +- uid: "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" + isExternal: true + name: "ClientSettings.getQuotaProjectId()" + nameWithType: "ClientSettings.getQuotaProjectId()" + fullName: "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" +- uid: "java.lang.Object.notify()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" + name: "Object.notify()" + nameWithType: "Object.notify()" + fullName: "java.lang.Object.notify()" +- uid: "com.google.api.gax.rpc.ClientSettings.getGdchApiAudience()" + isExternal: true + name: "ClientSettings.getGdchApiAudience()" + nameWithType: "ClientSettings.getGdchApiAudience()" + fullName: "com.google.api.gax.rpc.ClientSettings.getGdchApiAudience()" +- uid: "java.lang.Object.notifyAll()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" + name: "Object.notifyAll()" + nameWithType: "Object.notifyAll()" + fullName: "java.lang.Object.notifyAll()" +- uid: "com.google.api.gax.rpc.ClientSettings.getCredentialsProvider()" + isExternal: true + name: "ClientSettings.getCredentialsProvider()" + nameWithType: "ClientSettings.getCredentialsProvider()" + fullName: "com.google.api.gax.rpc.ClientSettings.getCredentialsProvider()" +- uid: "com.google.api.gax.rpc.ClientSettings.toBuilder()" + isExternal: true + name: "ClientSettings.toBuilder()" + nameWithType: "ClientSettings.toBuilder()" + fullName: "com.google.api.gax.rpc.ClientSettings.toBuilder()" +- uid: "java.lang.Object.equals(java.lang.Object)" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" + name: "Object.equals(Object)" + nameWithType: "Object.equals(Object)" + fullName: "java.lang.Object.equals(java.lang.Object)" +- uid: "com.google.api.gax.rpc.ClientSettings.getInternalHeaderProvider()" + isExternal: true + name: "ClientSettings.getInternalHeaderProvider()" + nameWithType: "ClientSettings.getInternalHeaderProvider()" + fullName: "com.google.api.gax.rpc.ClientSettings.getInternalHeaderProvider()" +- uid: "com.google.api.gax.rpc.ClientSettings.getTransportChannelProvider()" + isExternal: true + name: "ClientSettings.getTransportChannelProvider()" + nameWithType: "ClientSettings.getTransportChannelProvider()" + fullName: "com.google.api.gax.rpc.ClientSettings.getTransportChannelProvider()" +- uid: "com.google.api.gax.rpc.ClientSettings.getClock()" + isExternal: true + name: "ClientSettings.getClock()" + nameWithType: "ClientSettings.getClock()" + fullName: "com.google.api.gax.rpc.ClientSettings.getClock()" - uid: "com.google.api.gax.rpc.UnaryCallSettings" isExternal: true name: "UnaryCallSettings" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md index ba2a4ebf..6473498e 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md @@ -131,4 +131,5 @@ Exception thrown if there is a validation problem with a path template, http con See Also: Google Cloud Storage error codes - \ No newline at end of file + + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml index 50642cb9..7868c0db 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.SpeechClient.yml @@ -37,6 +37,7 @@ items: syntax: {} inheritance: - "java.lang.Object" + status: "beta" - uid: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" id: "SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" parent: "com.microsoft.samples.google.v1.SpeechClient" @@ -48,11 +49,13 @@ items: overload: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient*" type: "Constructor" package: "com.microsoft.samples.google.v1" + summary: "\n" syntax: content: "protected SpeechClient(SpeechStub stub)" parameters: - id: "stub" type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + status: "beta" - uid: "com.microsoft.samples.google.v1.SpeechClient.SpeechClient(com.microsoft.samples.google.SpeechSettings)" id: "SpeechClient(com.microsoft.samples.google.SpeechSettings)" parent: "com.microsoft.samples.google.v1.SpeechClient" @@ -135,7 +138,7 @@ items: overload: "com.microsoft.samples.google.v1.SpeechClient.create*" type: "Method" package: "com.microsoft.samples.google.v1" - summary: "Constructs an instance of SpeechClient, using the given stub for making calls. This is for\n advanced usage - prefer using create(SpeechSettings)." + summary: "\n\n\nConstructs an instance of SpeechClient, using the given stub for making calls. This is for\n advanced usage - prefer using create(SpeechSettings)." syntax: content: "public static final SpeechClient create(SpeechStub stub)" parameters: @@ -143,6 +146,7 @@ items: type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" return: type: "com.microsoft.samples.google.v1.SpeechClient" + status: "beta" javaType: "static method" - uid: "com.microsoft.samples.google.v1.SpeechClient.create(com.microsoft.samples.google.SpeechSettings)" id: "create(com.microsoft.samples.google.SpeechSettings)" @@ -208,10 +212,12 @@ items: overload: "com.microsoft.samples.google.v1.SpeechClient.getStub*" type: "Method" package: "com.microsoft.samples.google.v1" + summary: "\n" syntax: content: "public SpeechStub getStub()" return: type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + status: "beta" - uid: "com.microsoft.samples.google.v1.SpeechClient.isShutdown()" id: "isShutdown()" parent: "com.microsoft.samples.google.v1.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.GrpcSpeechStub.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.GrpcSpeechStub.yml index 7d7de3a2..651f3d28 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.GrpcSpeechStub.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.GrpcSpeechStub.yml @@ -52,6 +52,7 @@ items: - "java.lang.Object.wait()" - "java.lang.Object.wait(long)" - "java.lang.Object.wait(long,int)" + status: "beta" - uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub.GrpcSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext)" id: "GrpcSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext)" parent: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.yml index 20c0c19e..9e71d37c 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.yml @@ -53,6 +53,7 @@ items: - "java.lang.Object.wait()" - "java.lang.Object.wait(long)" - "java.lang.Object.wait(long,int)" + status: "beta" - uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.HttpJsonSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext)" id: "HttpJsonSpeechStub(com.microsoft.samples.google.v1.stub.SpeechStubSettings,com.google.api.gax.rpc.ClientContext)" parent: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" @@ -221,6 +222,7 @@ items: overload: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub.getMethodDescriptors*" type: "Method" package: "com.microsoft.samples.google.v1.stub" + summary: "\n" syntax: content: "public static List getMethodDescriptors()" return: diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStub.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStub.yml index 149929f1..12e98fd2 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStub.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStub.yml @@ -38,6 +38,7 @@ items: - "java.lang.Object.wait()" - "java.lang.Object.wait(long)" - "java.lang.Object.wait(long,int)" + status: "beta" - uid: "com.microsoft.samples.google.v1.stub.SpeechStub.SpeechStub()" id: "SpeechStub()" parent: "com.microsoft.samples.google.v1.stub.SpeechStub" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml index a2e61693..ef8d0393 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml @@ -35,6 +35,7 @@ items: - "com.google.api.gax.rpc.StubSettings.Builder.getCredentialsProvider()" - "com.google.api.gax.rpc.StubSettings.Builder.getEndpoint()" - "com.google.api.gax.rpc.StubSettings.Builder.getExecutorProvider()" + - "com.google.api.gax.rpc.StubSettings.Builder.getGdchApiAudience()" - "com.google.api.gax.rpc.StubSettings.Builder.getHeaderProvider()" - "com.google.api.gax.rpc.StubSettings.Builder.getInternalHeaderProvider()" - "com.google.api.gax.rpc.StubSettings.Builder.getMtlsEndpoint()" @@ -49,6 +50,7 @@ items: - "com.google.api.gax.rpc.StubSettings.Builder.setCredentialsProvider(com.google.api.gax.core.CredentialsProvider)" - "com.google.api.gax.rpc.StubSettings.Builder.setEndpoint(java.lang.String)" - "com.google.api.gax.rpc.StubSettings.Builder.setExecutorProvider(com.google.api.gax.core.ExecutorProvider)" + - "com.google.api.gax.rpc.StubSettings.Builder.setGdchApiAudience(java.lang.String)" - "com.google.api.gax.rpc.StubSettings.Builder.setHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" - "com.google.api.gax.rpc.StubSettings.Builder.setInternalHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" - "com.google.api.gax.rpc.StubSettings.Builder.setMtlsEndpoint(java.lang.String)" @@ -162,11 +164,12 @@ items: overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeOperationSettings*" type: "Method" package: "com.microsoft.samples.google.v1.stub" - summary: "Returns the builder for the settings used for calls to longRunningRecognize." + summary: "\n\n\nReturns the builder for the settings used for calls to longRunningRecognize." syntax: content: "public OperationCallSettings.Builder longRunningRecognizeOperationSettings()" return: type: "com.google.api.gax.rpc.OperationCallSettings.Builder" + status: "beta" - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.longRunningRecognizeSettings()" id: "longRunningRecognizeSettings()" parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" @@ -508,11 +511,21 @@ references: name: "StubSettings.Builder.getBackgroundExecutorProvider()" nameWithType: "StubSettings.Builder.getBackgroundExecutorProvider()" fullName: "com.google.api.gax.rpc.StubSettings.Builder.getBackgroundExecutorProvider()" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.getGdchApiAudience()" + isExternal: true + name: "StubSettings.Builder.getGdchApiAudience()" + nameWithType: "StubSettings.Builder.getGdchApiAudience()" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.getGdchApiAudience()" - uid: "com.google.api.gax.rpc.StubSettings.Builder.setClock(com.google.api.core.ApiClock)" isExternal: true name: "StubSettings.Builder.setClock(ApiClock)" nameWithType: "StubSettings.Builder.setClock(ApiClock)" fullName: "com.google.api.gax.rpc.StubSettings.Builder.setClock(com.google.api.core.ApiClock)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setGdchApiAudience(java.lang.String)" + isExternal: true + name: "StubSettings.Builder.setGdchApiAudience(String)" + nameWithType: "StubSettings.Builder.setGdchApiAudience(String)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setGdchApiAudience(java.lang.String)" - uid: "com.google.api.gax.rpc.StubSettings.Builder.setTransportChannelProvider(com.google.api.gax.rpc.TransportChannelProvider)" isExternal: true name: "StubSettings.Builder.setTransportChannelProvider(TransportChannelProvider)" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml index 3755cff4..44bc1f60 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml @@ -45,6 +45,7 @@ items: - "com.google.api.gax.rpc.StubSettings.getCredentialsProvider()" - "com.google.api.gax.rpc.StubSettings.getEndpoint()" - "com.google.api.gax.rpc.StubSettings.getExecutorProvider()" + - "com.google.api.gax.rpc.StubSettings.getGdchApiAudience()" - "com.google.api.gax.rpc.StubSettings.getHeaderProvider()" - "com.google.api.gax.rpc.StubSettings.getInternalHeaderProvider()" - "com.google.api.gax.rpc.StubSettings.getMtlsEndpoint()" @@ -65,6 +66,7 @@ items: - "java.lang.Object.wait()" - "java.lang.Object.wait(long)" - "java.lang.Object.wait(long,int)" + status: "beta" - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.SpeechStubSettings(com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder)" id: "SpeechStubSettings(com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder)" parent: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" @@ -159,10 +161,12 @@ items: overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcApiClientHeaderProviderBuilder*" type: "Method" package: "com.microsoft.samples.google.v1.stub" + summary: "\n" syntax: content: "public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder()" return: type: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + status: "beta" javaType: "static method" - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultGrpcTransportProviderBuilder()" id: "defaultGrpcTransportProviderBuilder()" @@ -192,10 +196,12 @@ items: overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonApiClientHeaderProviderBuilder*" type: "Method" package: "com.microsoft.samples.google.v1.stub" + summary: "\n" syntax: content: "public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder()" return: type: "com.google.api.gax.rpc.ApiClientHeaderProvider.Builder" + status: "beta" javaType: "static method" - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonTransportProviderBuilder()" id: "defaultHttpJsonTransportProviderBuilder()" @@ -208,11 +214,12 @@ items: overload: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultHttpJsonTransportProviderBuilder*" type: "Method" package: "com.microsoft.samples.google.v1.stub" - summary: "Returns a builder for the default REST ChannelProvider for this service." + summary: "\n\n\nReturns a builder for the default REST ChannelProvider for this service." syntax: content: "public static InstantiatingHttpJsonChannelProvider.Builder defaultHttpJsonTransportProviderBuilder()" return: type: "com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider.Builder" + status: "beta" javaType: "static method" - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.defaultTransportChannelProvider()" id: "defaultTransportChannelProvider()" @@ -737,6 +744,11 @@ references: name: "Object.finalize()" nameWithType: "Object.finalize()" fullName: "java.lang.Object.finalize()" +- uid: "com.google.api.gax.rpc.StubSettings.getGdchApiAudience()" + isExternal: true + name: "StubSettings.getGdchApiAudience()" + nameWithType: "StubSettings.getGdchApiAudience()" + fullName: "com.google.api.gax.rpc.StubSettings.getGdchApiAudience()" - uid: "com.google.api.gax.rpc.StubSettings.getTransportChannelProvider()" isExternal: true name: "StubSettings.getTransportChannelProvider()" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml index 8a1f5d94..5626cb39 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.SpeechClient.yml @@ -37,6 +37,7 @@ items: syntax: {} inheritance: - "java.lang.Object" + status: "beta" - uid: "com.microsoft.samples.google.v1beta.SpeechClient.SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" id: "SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" parent: "com.microsoft.samples.google.v1beta.SpeechClient" @@ -48,11 +49,13 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.SpeechClient*" type: "Constructor" package: "com.microsoft.samples.google.v1beta" + summary: "\n" syntax: content: "protected SpeechClient(SpeechStub stub)" parameters: - id: "stub" type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + status: "beta" - uid: "com.microsoft.samples.google.v1beta.SpeechClient.SpeechClient(com.microsoft.samples.google.SpeechSettings)" id: "SpeechClient(com.microsoft.samples.google.SpeechSettings)" parent: "com.microsoft.samples.google.v1beta.SpeechClient" @@ -135,7 +138,7 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.create*" type: "Method" package: "com.microsoft.samples.google.v1beta" - summary: "Constructs an instance of SpeechClient, using the given stub for making calls. This is for\n advanced usage - prefer using create(SpeechSettings)." + summary: "\n\n\nConstructs an instance of SpeechClient, using the given stub for making calls. This is for\n advanced usage - prefer using create(SpeechSettings)." syntax: content: "public static final SpeechClient create(SpeechStub stub)" parameters: @@ -143,6 +146,7 @@ items: type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" return: type: "com.microsoft.samples.google.v1beta.SpeechClient" + status: "beta" javaType: "static method" - uid: "com.microsoft.samples.google.v1beta.SpeechClient.create(com.microsoft.samples.google.SpeechSettings)" id: "create(com.microsoft.samples.google.SpeechSettings)" @@ -208,10 +212,12 @@ items: overload: "com.microsoft.samples.google.v1beta.SpeechClient.getStub*" type: "Method" package: "com.microsoft.samples.google.v1beta" + summary: "\n" syntax: content: "public SpeechStub getStub()" return: type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + status: "beta" - uid: "com.microsoft.samples.google.v1beta.SpeechClient.isShutdown()" id: "isShutdown()" parent: "com.microsoft.samples.google.v1beta.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml index cd9154e2..e0c278c4 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.SpeechClient.yml @@ -37,6 +37,7 @@ items: syntax: {} inheritance: - "java.lang.Object" + status: "beta" - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient.SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" id: "SpeechClient(com.google.cloud.speech.v1p1beta1.stub.SpeechStub)" parent: "com.microsoft.samples.google.v1p1alpha.SpeechClient" @@ -48,11 +49,13 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.SpeechClient*" type: "Constructor" package: "com.microsoft.samples.google.v1p1alpha" + summary: "\n" syntax: content: "protected SpeechClient(SpeechStub stub)" parameters: - id: "stub" type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + status: "beta" - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient.SpeechClient(com.microsoft.samples.google.SpeechSettings)" id: "SpeechClient(com.microsoft.samples.google.SpeechSettings)" parent: "com.microsoft.samples.google.v1p1alpha.SpeechClient" @@ -135,7 +138,7 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.create*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" - summary: "Constructs an instance of SpeechClient, using the given stub for making calls. This is for\n advanced usage - prefer using create(SpeechSettings)." + summary: "\n\n\nConstructs an instance of SpeechClient, using the given stub for making calls. This is for\n advanced usage - prefer using create(SpeechSettings)." syntax: content: "public static final SpeechClient create(SpeechStub stub)" parameters: @@ -143,6 +146,7 @@ items: type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" return: type: "com.microsoft.samples.google.v1p1alpha.SpeechClient" + status: "beta" javaType: "static method" - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient.create(com.microsoft.samples.google.SpeechSettings)" id: "create(com.microsoft.samples.google.SpeechSettings)" @@ -208,10 +212,12 @@ items: overload: "com.microsoft.samples.google.v1p1alpha.SpeechClient.getStub*" type: "Method" package: "com.microsoft.samples.google.v1p1alpha" + summary: "\n" syntax: content: "public SpeechStub getStub()" return: type: "com.google.cloud.speech.v1p1beta1.stub.SpeechStub" + status: "beta" - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient.isShutdown()" id: "isShutdown()" parent: "com.microsoft.samples.google.v1p1alpha.SpeechClient" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml index b740f0cc..7c9c4ac6 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/toc.yml @@ -35,6 +35,7 @@ - heading: "Exceptions" - uid: "com.microsoft.samples.ExceptionHandler" name: "ExceptionHandler" + status: "beta" - uid: "com.microsoft.samples.ExceptionHandler.Builder" name: "ExceptionHandler.Builder" - uid: "com.microsoft.samples.agreements" @@ -99,8 +100,10 @@ name: "RecognitionAudio" - uid: "com.microsoft.samples.google.SpeechClient" name: "SpeechClient" + status: "beta" - uid: "com.microsoft.samples.google.SpeechSettings" name: "SpeechSettings" + status: "beta" - uid: "com.microsoft.samples.google.SpeechSettings.Builder" name: "SpeechSettings.Builder" - heading: "Enums" @@ -109,6 +112,7 @@ - heading: "Annotation Types" - uid: "com.microsoft.samples.google.BetaApi" name: "BetaApi" + status: "beta" - heading: "Exceptions" - uid: "com.microsoft.samples.google.ValidationException" name: "ValidationException" @@ -123,6 +127,7 @@ items: - uid: "com.microsoft.samples.google.v1.SpeechClient" name: "SpeechClient" + status: "beta" - uid: "Stub packages" name: "Stub packages" items: @@ -137,15 +142,19 @@ items: - uid: "com.microsoft.samples.google.v1.stub.GrpcSpeechStub" name: "GrpcSpeechStub" + status: "beta" - uid: "com.microsoft.samples.google.v1.stub.HttpJsonSpeechStub" name: "HttpJsonSpeechStub" + status: "beta" - uid: "com.microsoft.samples.google.v1.stub.SpeechStub" name: "SpeechStub" + status: "beta" - uid: "Settings" name: "Settings" items: - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings" name: "SpeechStubSettings" + status: "beta" - uid: "com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder" name: "SpeechStubSettings.Builder" - uid: "com.microsoft.samples.offers" @@ -194,6 +203,7 @@ items: - uid: "com.microsoft.samples.google.v1beta.SpeechClient" name: "SpeechClient" + status: "beta" - uid: "com.microsoft.samples.google.v1p1alpha" name: "com.microsoft.samples.google.v1p1alpha" status: "alpha" @@ -206,3 +216,4 @@ items: - uid: "com.microsoft.samples.google.v1p1alpha.SpeechClient" name: "SpeechClient" + status: "beta" From 3aa99c2327f07ea5834253e4b5785e5e19680aa2 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Tue, 28 Nov 2023 15:37:39 -0500 Subject: [PATCH 123/168] feat: update library overview formatting (#226) * feat: update library overview formatting * fix lint --- .../microsoft/model/LibraryOverviewFile.java | 82 ++++++++++--------- .../expected-generated-files/overview.md | 55 ++++++------- 2 files changed, 68 insertions(+), 69 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java index ced58cc9..52940b0b 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java @@ -55,7 +55,12 @@ public LibraryOverviewFile( "# " + repoMetadata.getArtifactId() + " overview (" + artifactVersion + ")\n\n"; this.LIBRARY_OVERVIEW_KEY_REFERENCE_HEADER = - "## Key Reference Links\n" + repoMetadata.getApiDescription() + "\n\n"; + "## Key Reference Links\n" + + "**" + + repoMetadata.getNamePretty() + + " Description:** " + + capitalizeFirstLetter(repoMetadata.getApiDescription()) + + "\n\n"; this.LIBRARY_OVERVIEW_KEY_REFERENCE_TABLE = "\n" @@ -108,17 +113,17 @@ public LibraryOverviewFile( + "set previously. For more information about\n" + "BOMs, see [Google Cloud Platform Libraries BOM](https://cloud.google.com/java/docs/bom).\n\n"; + // When b/312765900 is implemented, then refactor this section to use the devsite-selector + // format. Current format is a workaround so the sanitizer doesn't remove the content. this.LIBRARY_OVERVIEW_CLIENT_INSTALLATION_SECTION = - "
\n" - + "\n" - + "
\n" - + "

Maven

\n" - + "

Import the BOM in the dependencyManagement section of your pom.xml file.\n" + "### Maven\n" + + "Import the BOM in the dependencyManagement section of your pom.xml file.\n" + "Include specific artifacts you depend on in the dependencies section, but don't\n" - + "specify the artifacts' versions in the dependencies section.

\n" + + "specify the artifacts' versions in the dependencies section.\n" + "\n" - + "

The example below demonstrates how you would import the BOM and include the google-cloud-apikeys\n" - + "artifact.

\n" + + "The example below demonstrates how you would import the BOM and include the " + + repoMetadata.getArtifactId() + + " artifact.\n" + "
\n"
             + "<dependencyManagement>\n"
             + " <dependencies>\n"
@@ -141,16 +146,15 @@ public LibraryOverviewFile(
             + "</artifactId>\n"
             + " </dependency>\n"
             + "</dependencies>\n"
-            + "
\n" - + "
\n" - + "
\n" - + "

Gradle

\n" - + "

BOMs are supported by default in Gradle 5.x or later. Add a platform\n" + + "\n\n" + + "### Gradle\n" + + "BOMs are supported by default in Gradle 5.x or later. Add a platform\n" + "dependency on com.google.cloud:libraries-bom and remove the version from the\n" - + "dependency declarations in the artifact's build.gradle file.

\n" + + "dependency declarations in the artifact's build.gradle file.\n" + "\n" - + "

The example below demonstrates how you would import the BOM and include the google-cloud-apikeys\n" - + "artifact.

\n" + + "The example below demonstrates how you would import the BOM and include the " + + repoMetadata.getArtifactId() + + " artifact.\n" + "
\n"
             + "implementation platform('com.google.cloud:libraries-bom:"
             + librariesBomVersion
@@ -158,36 +162,30 @@ public LibraryOverviewFile(
             + "implementation '"
             + repoMetadata.getDistributionName()
             + "'\n"
-            + "
\n" - + "

The platform and enforcedPlatform keywords supply dependency versions\n" + + "\n\n" + + "The platform and enforcedPlatform keywords supply dependency versions\n" + "declared in a BOM. The enforcedPlatform keyword enforces the dependency\n" - + "versions declared in the BOM and thus overrides what you specified.

\n" - + "\n" - + "

For more details of the platform and enforcedPlatform keywords Gradle 5.x or higher, see\n" - + "Gradle: Importing Maven BOMs.

\n" + + "versions declared in the BOM and thus overrides what you specified.\n\n" + + "For more details of the platform and enforcedPlatform keywords Gradle 5.x or higher, see\n" + + "[Gradle: Importing Maven BOMs](https://docs.gradle.org/current/userguide/platforms.html#sub:bom_import).\n" + "\n" - + "

If you're using Gradle 4.6 or later, add\n" + + "If you're using Gradle 4.6 or later, add\n" + "enableFeaturePreview('IMPROVED_POM_SUPPORT') to your settings.gradle file. For details, see\n" - + "Gradle 4.6 Release Notes: BOM import.\n" - + "Versions of Gradle earlier than 4.6 don't support BOMs.

\n" - + "
\n" - + "
\n" - + "

SBT

\n" - + "

SBT doesn't support BOMs. You can find\n" + + "[Gradle 4.6 Release Notes: BOM import](https://docs.gradle.org/4.6/release-notes.html#bom-import).\n" + + "Versions of Gradle earlier than 4.6 don't support BOMs.

\n\n" + + "### SBT\n" + + "SBT [doesn't support BOMs](https://github.com/sbt/sbt/issues/4531). You can find\n" + "recommended versions of libraries from a particular BOM version on the\n" - + "dashboard\n" - + "and set the versions manually.

\n" - + "

To use the latest version of this library, add this to your dependencies:

\n" + + "[dashboard](https://storage.googleapis.com/cloud-opensource-java-dashboard/com.google.cloud/libraries-bom/index.html)\n" + + "and set the versions manually.\n" + + "To use the latest version of this library, add this to your dependencies:\n" + "
\n"
             + "libraryDependencies += "com.google.cloud" % ""
             + repoMetadata.getArtifactId()
             + "" % ""
             + artifactVersion
             + ""\n"
-            + "
\n" - + "
\n" - + "
\n" - + "
\n\n"; + + "\n\n"; // Some client libraries do not have an underlying API service (e.g. // google-cloud-logging-logback, google-cloud-storage-nio, google-cloud-spanner-jdbc), hence @@ -220,6 +218,16 @@ public String getFileContent() { + LIBRARY_OVERVIEW_PACKAGE_SELECTION_SECTION; } + @JsonIgnore + private static String capitalizeFirstLetter(String string) { + if (string == null || string.isEmpty()) { + return string; // Return unchanged if input is null or empty + } + + // Capitalize the first character and append the rest of the string + return string.substring(0, 1).toUpperCase() + string.substring(1); + } + @JsonIgnore public String getFileNameWithPath() { return outputPath + File.separator + fileName; diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md index d0a56d41..9ae046d5 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md @@ -1,7 +1,7 @@ # google-cloud-apikeys overview (0.18.0) ## Key Reference Links -API Keys lets you create and manage your API keys for your projects. +**API Keys API Description:** API Keys lets you create and manage your API keys for your projects.
@@ -27,16 +27,12 @@ the BOM to specify dependency versions. Be sure to remove any versions that you set previously. For more information about BOMs, see [Google Cloud Platform Libraries BOM](https://cloud.google.com/java/docs/bom). -
- -
-

Maven

-

Import the BOM in the dependencyManagement section of your pom.xml file. +### Maven +Import the BOM in the dependencyManagement section of your pom.xml file. Include specific artifacts you depend on in the dependencies section, but don't -specify the artifacts' versions in the dependencies section.

+specify the artifacts' versions in the dependencies section. -

The example below demonstrates how you would import the BOM and include the google-cloud-apikeys -artifact.

+The example below demonstrates how you would import the BOM and include the google-cloud-apikeys artifact.
 <dependencyManagement>
  <dependencies>
@@ -57,44 +53,39 @@ artifact.

</dependency> </dependencies>
-
-
-

Gradle

-

BOMs are supported by default in Gradle 5.x or later. Add a platform + +### Gradle +BOMs are supported by default in Gradle 5.x or later. Add a platform dependency on com.google.cloud:libraries-bom and remove the version from the -dependency declarations in the artifact's build.gradle file.

+dependency declarations in the artifact's build.gradle file. -

The example below demonstrates how you would import the BOM and include the google-cloud-apikeys -artifact.

+The example below demonstrates how you would import the BOM and include the google-cloud-apikeys artifact.
 implementation platform('com.google.cloud:libraries-bom:26.19.0')
 implementation 'com.google.cloud:google-cloud-apikeys'
 
-

The platform and enforcedPlatform keywords supply dependency versions + +The platform and enforcedPlatform keywords supply dependency versions declared in a BOM. The enforcedPlatform keyword enforces the dependency -versions declared in the BOM and thus overrides what you specified.

+versions declared in the BOM and thus overrides what you specified. -

For more details of the platform and enforcedPlatform keywords Gradle 5.x or higher, see -Gradle: Importing Maven BOMs.

+For more details of the platform and enforcedPlatform keywords Gradle 5.x or higher, see +[Gradle: Importing Maven BOMs](https://docs.gradle.org/current/userguide/platforms.html#sub:bom_import). -

If you're using Gradle 4.6 or later, add +If you're using Gradle 4.6 or later, add enableFeaturePreview('IMPROVED_POM_SUPPORT') to your settings.gradle file. For details, see -Gradle 4.6 Release Notes: BOM import. +[Gradle 4.6 Release Notes: BOM import](https://docs.gradle.org/4.6/release-notes.html#bom-import). Versions of Gradle earlier than 4.6 don't support BOMs.

-
-
-

SBT

-

SBT doesn't support BOMs. You can find + +### SBT +SBT [doesn't support BOMs](https://github.com/sbt/sbt/issues/4531). You can find recommended versions of libraries from a particular BOM version on the -dashboard -and set the versions manually.

-

To use the latest version of this library, add this to your dependencies:

+[dashboard](https://storage.googleapis.com/cloud-opensource-java-dashboard/com.google.cloud/libraries-bom/index.html) +and set the versions manually. +To use the latest version of this library, add this to your dependencies:
 libraryDependencies += "com.google.cloud" % "google-cloud-apikeys" % "0.18.0"
 
-
-
-
## Which version should I use? For this library, we recommend using API version v1 for new applications. From 94ceb69d69df941a5ffcb944cc2f896357a95d99 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Tue, 28 Nov 2023 15:55:43 -0500 Subject: [PATCH 124/168] chore: update version for release (#227) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index c7af9ac3..1cef0557 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -6,7 +6,7 @@ com.microsoftdocfx-doclet - 1.11.1-SNAPSHOT + 1.12.0-SNAPSHOT UTF-8 From a0dc4717d659c76e853fab84e03cbfda595b6df7 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 29 Nov 2023 00:09:57 +0100 Subject: [PATCH 125/168] fix(deps): update dependency org.jsoup:jsoup to v1.17.1 (#218) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 1cef0557..a486a3b2 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -159,7 +159,7 @@ org.jsoup jsoup - 1.16.1 + 1.17.1 com.google.guava From e01fa55ea6765b0b1b52eb495e0a4be4b23693e5 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 29 Nov 2023 00:11:51 +0100 Subject: [PATCH 126/168] fix(deps): update dependency commons-io:commons-io to v2.15.0 (#220) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index a486a3b2..0aff2a6a 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -16,7 +16,7 @@ 2.15.3 3.13.0 4.4 - 2.14.0 + 2.15.0 1.10.0 1.1.0 From 4dfede16f31214f983f9ed70c401a21d7d54278c Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 29 Nov 2023 00:13:47 +0100 Subject: [PATCH 127/168] fix(deps): update dependency org.apache.commons:commons-text to v1.11.0 (#221) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 0aff2a6a..ac02e79d 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -17,7 +17,7 @@ 3.13.0 4.4 2.15.0 - 1.10.0 + 1.11.0 1.1.0 From e5d7445c4d2e775dc8baabe91e9d7438c901377b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 29 Nov 2023 00:17:38 +0100 Subject: [PATCH 128/168] fix(deps): update jackson.version to v2.16.0 (#224) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index ac02e79d..467d9469 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -13,7 +13,7 @@ 11 ${java.version} ${java.version} - 2.15.3 + 2.16.0 3.13.0 4.4 2.15.0 From 0659c3ae7be1bfe2fdd305bdfc440b6b08106d8e Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 29 Nov 2023 00:19:42 +0100 Subject: [PATCH 129/168] fix(deps): update dependency org.apache.commons:commons-lang3 to v3.14.0 (#225) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 467d9469..476aa22b 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -14,7 +14,7 @@ ${java.version} ${java.version} 2.16.0 - 3.13.0 + 3.14.0 4.4 2.15.0 1.11.0 From 8d710f40c050b07640a3f7e7e78e8a0c30711e4f Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Fri, 9 Feb 2024 17:43:26 -0500 Subject: [PATCH 130/168] fix: initialize uncategorized array (#242) --- .../src/main/java/com/microsoft/model/StubPackageToc.java | 1 + 1 file changed, 1 insertion(+) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/StubPackageToc.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/StubPackageToc.java index 9d1e4986..92802fa6 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/StubPackageToc.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/StubPackageToc.java @@ -18,6 +18,7 @@ public StubPackageToc() { visibleCategories.put(STUBS, new ArrayList<>()); visibleCategories.put(SETTINGS, new ArrayList<>()); visibleCategories.put(CALLABLE_FACTORIES, new ArrayList<>()); + visibleCategories.put(UNCATEGORIZED, new ArrayList<>()); } public void addStub(TocItem tocItem) { From 52f95e8a093be53eab996afe59f789e98d2b3537 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 12 Feb 2024 17:23:26 +0100 Subject: [PATCH 131/168] chore(deps): update actions/setup-java action to v4 (#229) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7195a82a..32c9fac6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: java-version: 11 distribution: temurin @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: java-version: 11 distribution: temurin @@ -36,7 +36,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: java-version: 11 distribution: temurin From e3627ebee12a14b1eb9838f19fbe2ce9a4f2015c Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 12 Feb 2024 20:28:23 +0100 Subject: [PATCH 132/168] fix(deps): update dependency commons-io:commons-io to v2.15.1 (#230) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 476aa22b..9be61de1 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -16,7 +16,7 @@ 2.16.0 3.14.0 4.4 - 2.15.0 + 2.15.1 1.11.0 1.1.0 From d17519a20cffced22a03e46f8096fac192bf7cd3 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 12 Feb 2024 20:29:45 +0100 Subject: [PATCH 133/168] chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.12.1 (#232) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 9be61de1..5ad9d5b4 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -26,7 +26,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.11.0 + 3.12.1 -Xlint:unchecked From 5b32c5bf0abe57c620da021e449ea4ee7333fab1 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 12 Feb 2024 20:32:03 +0100 Subject: [PATCH 134/168] fix(deps): update dependency com.google.guava:guava to v33 (#233) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 5ad9d5b4..0e086187 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -164,7 +164,7 @@ com.google.guava guava - 32.1.3-jre + 33.0.0-jre com.google.code.gson From 9b1df6b9e265b13dd47e1c7d03996890e9bb4e9a Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 12 Feb 2024 20:34:47 +0100 Subject: [PATCH 135/168] chore(deps): update dependency com.google.googlejavaformat:google-java-format to v1.19.2 (#234) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 0e086187..f6b4878d 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -106,7 +106,7 @@ com.google.googlejavaformat google-java-format - 1.18.1 + 1.19.2 From ba98e0f567b7102161966c6872ffa67c1fee2d71 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 12 Feb 2024 20:36:53 +0100 Subject: [PATCH 136/168] fix(deps): update jackson.version to v2.16.1 (#235) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index f6b4878d..7259721c 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -13,7 +13,7 @@ 11 ${java.version} ${java.version} - 2.16.0 + 2.16.1 3.14.0 4.4 2.15.1 From 9a7ebcd19e3145d917c8742dca1cb4fc363e2891 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 12 Feb 2024 20:38:05 +0100 Subject: [PATCH 137/168] fix(deps): update dependency org.jsoup:jsoup to v1.17.2 (#236) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 7259721c..ad4e6900 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -159,7 +159,7 @@ org.jsoup jsoup - 1.17.1 + 1.17.2 com.google.guava From 0ab51b2643eca1ae2bf43db6a33a1bbdbc16ce84 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 21 Feb 2024 17:35:41 +0100 Subject: [PATCH 138/168] chore(deps): update dependency com.google.googlejavaformat:google-java-format to v1.20.0 (#243) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index ad4e6900..1f50249c 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -106,7 +106,7 @@ com.google.googlejavaformat google-java-format - 1.19.2 + 1.20.0 From e0fd4b65861e8bfa3e71a7fb5f13047d49d1e329 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Wed, 21 Feb 2024 12:07:29 -0500 Subject: [PATCH 139/168] feat: update golden tests for usage with Java17 (#244) * feat: update golden tests for usage with Java17 * update ci.yml to run with java17 * revert lint to use java 11 --- .github/workflows/ci.yml | 4 ++-- third_party/docfx-doclet-143274/README.md | 14 +++++++------- .../com/microsoft/doclet/DocletRunnerTest.java | 4 ++-- ...es.ExceptionHandler.Interceptor.RetryResult.yml | 8 +++++++- ...les.google.RecognitionAudio.AudioSourceCase.yml | 8 +++++++- ...subpackage.Person.IdentificationInfo.Gender.yml | 6 ++++++ 6 files changed, 31 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32c9fac6..ea531de5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: - java-version: 11 + java-version: 17 distribution: temurin - run: mvn -B -ntp install -DskipTests @@ -28,7 +28,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: - java-version: 11 + java-version: 17 distribution: temurin - run: mvn -B -ntp test diff --git a/third_party/docfx-doclet-143274/README.md b/third_party/docfx-doclet-143274/README.md index 4d88be6a..f1c9131a 100644 --- a/third_party/docfx-doclet-143274/README.md +++ b/third_party/docfx-doclet-143274/README.md @@ -1,15 +1,15 @@ ## JavaDoc Doclet for DocFX -[![Build status](https://apidrop.visualstudio.com/Toolshed/_apis/build/status/Toolshed-Maven-CI)](https://apidrop.visualstudio.com/Toolshed/_build/latest?definitionId=1633) - This doclet is designed to produce a YAML representation of the Javadoc-generated documentation, that can be integrated into [DocFX](https://dotnet.github.io/docfx/). +It contains some Google-specific configurations to render pages on cloud.google.com. +The latest version of this doclet has been updated to be run with Java 17. It should work with Java 11 to generate Yaml files; however, the unit tests within this repo will fail. ## Getting started -The easiest way is to just get the JAR files directly from our [releases](https://github.com/dendeli-msft/docfx-doclet/releases). +This repo is a fork off of: [https://github.com/docascode/docfx-doclet](https://github.com/dendeli-msft/docfx-doclet/releases). -Alternatively, you can clone the repository and build it with the help of Maven. You can do so by calling: +You can clone this repository and build it with the help of Maven. You can do so by calling: ```bash mvn compile @@ -38,7 +38,7 @@ To cut a new release of the doclet for updated Cloud RAD content, do the followi `git push origin v1..` -3) Update the `publish_javadoc11.sh` script within g3 to use the latest version of the doclet. +3) Update the `publish_javadoc17.sh` script within g3 to use the latest version of the doclet. ## Usage @@ -50,7 +50,7 @@ When there is an existing java project where Maven is used as a build tool, one org.apache.maven.plugins maven-javadoc-plugin - 3.0.1 + 3.5.0 com.microsoft.doclet.DocFxDoclet @@ -97,7 +97,7 @@ One can execute the `javadoc` command with the command line parameters: ```bash javadoc \ -encoding UTF-8 \ --docletpath ./target/docfx-doclet-1.0-SNAPSHOT-jar-with-dependencies.jar \ +-docletpath ./target/docfx-doclet-1.0-SNAPSHOT-jar-with-dependencies.jar \ # Update the version here to the doclet version you want to use -doclet com.microsoft.doclet.DocFxDoclet \ -classpath \ -sourcepath ./src/test/java \ diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java index cfd29039..e4c9b46c 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java @@ -93,8 +93,8 @@ public void testFilesGeneration() throws IOException { assertEquals( "Unexpected amount of lines in file " + generatedFilePath, - generatedFileLines.length, - expectedFileLines.length); + expectedFileLines.length, + generatedFileLines.length); for (int i = 0; i < generatedFileLines.length; i++) { assertEquals( diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml index 96e630fa..80ec1aed 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml @@ -25,6 +25,7 @@ items: - "java.lang.Enum.valueOf(java.lang.Class,java.lang.String)" - "java.lang.Enum.clone()" - "java.lang.Enum.compareTo(E)" + - "java.lang.Enum.describeConstable()" - "java.lang.Enum.equals(java.lang.Object)" - "java.lang.Enum.finalize()" - "java.lang.Enum.getDeclaringClass()" @@ -195,6 +196,11 @@ references: name: "Enum.finalize()" nameWithType: "Enum.finalize()" fullName: "java.lang.Enum.finalize()" +- uid: "java.lang.Enum.describeConstable()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#describeConstable--" + name: "Enum.describeConstable()" + nameWithType: "Enum.describeConstable()" + fullName: "java.lang.Enum.describeConstable()" - uid: "java.lang.Object.notifyAll()" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" name: "Object.notifyAll()" @@ -267,4 +273,4 @@ references: - uid: "T>valueOf(java.lang.Class" name: "T>valueOf(Class" nameWithType: "T>valueOf(Class" - fullName: "T>valueOf(java.lang.Class" + fullName: "T>valueOf(java.lang.Class" \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml index 3ceed122..3f3224c4 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml @@ -31,6 +31,7 @@ items: - "java.lang.Enum.valueOf(java.lang.Class,java.lang.String)" - "java.lang.Enum.clone()" - "java.lang.Enum.compareTo(E)" + - "java.lang.Enum.describeConstable()" - "java.lang.Enum.equals(java.lang.Object)" - "java.lang.Enum.finalize()" - "java.lang.Enum.getDeclaringClass()" @@ -287,6 +288,11 @@ references: name: "Enum.finalize()" nameWithType: "Enum.finalize()" fullName: "java.lang.Enum.finalize()" +- uid: "java.lang.Enum.describeConstable()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#describeConstable--" + name: "Enum.describeConstable()" + nameWithType: "Enum.describeConstable()" + fullName: "java.lang.Enum.describeConstable()" - uid: "java.lang.Object.notifyAll()" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" name: "Object.notifyAll()" @@ -359,4 +365,4 @@ references: - uid: "T>valueOf(java.lang.Class" name: "T>valueOf(Class" nameWithType: "T>valueOf(Class" - fullName: "T>valueOf(java.lang.Class" + fullName: "T>valueOf(java.lang.Class" \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.yml index ede81fa9..1fb375dd 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.IdentificationInfo.Gender.yml @@ -25,6 +25,7 @@ items: - "java.lang.Enum.valueOf(java.lang.Class,java.lang.String)" - "java.lang.Enum.clone()" - "java.lang.Enum.compareTo(E)" + - "java.lang.Enum.describeConstable()" - "java.lang.Enum.equals(java.lang.Object)" - "java.lang.Enum.finalize()" - "java.lang.Enum.getDeclaringClass()" @@ -179,6 +180,11 @@ references: name: "Enum.finalize()" nameWithType: "Enum.finalize()" fullName: "java.lang.Enum.finalize()" +- uid: "java.lang.Enum.describeConstable()" + href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#describeConstable--" + name: "Enum.describeConstable()" + nameWithType: "Enum.describeConstable()" + fullName: "java.lang.Enum.describeConstable()" - uid: "java.lang.Object.notifyAll()" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" name: "Object.notifyAll()" From 14621377515b9a8d8641096a08fa0abbeaf0076f Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 21 Feb 2024 21:07:57 +0100 Subject: [PATCH 140/168] fix(deps): update dependency com.google.cloud:libraries-bom to v26.32.0 (#231) * fix(deps): update dependency com.google.cloud:libraries-bom to v26.32.0 * fix(deps): update dependency com.google.cloud:libraries-bom to v26.32.0 * update goldens --------- Co-authored-by: Alice Li --- third_party/docfx-doclet-143274/pom.xml | 7 +++---- ...amples.google.ProductSearchSettings.Builder.yml | 8 +++++++- ...rosoft.samples.google.ProductSearchSettings.yml | 6 ++++++ ...m.microsoft.samples.google.RecognitionAudio.yml | 8 +++++++- ...osoft.samples.google.SpeechSettings.Builder.yml | 8 +++++++- ...com.microsoft.samples.google.SpeechSettings.yml | 8 +++++++- ...s.google.v1.stub.SpeechStubSettings.Builder.yml | 8 +++++++- ...t.samples.google.v1.stub.SpeechStubSettings.yml | 14 +++++++++++++- 8 files changed, 57 insertions(+), 10 deletions(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 1f50249c..3669bfb5 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -10,9 +10,8 @@ UTF-8 - 11 - ${java.version} - ${java.version} + 17 + 17 2.16.1 3.14.0 4.4 @@ -118,7 +117,7 @@ com.google.cloud libraries-bom - 26.27.0 + 26.32.0 pom import diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml index 6afb0cb7..dce80be2 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml @@ -72,6 +72,7 @@ items: - "com.google.api.gax.rpc.ClientSettings.Builder.setInternalHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" - "com.google.api.gax.rpc.ClientSettings.Builder.setQuotaProjectId(java.lang.String)" - "com.google.api.gax.rpc.ClientSettings.Builder.setTransportChannelProvider(com.google.api.gax.rpc.TransportChannelProvider)" + - "com.google.api.gax.rpc.ClientSettings.Builder.setUniverseDomain(java.lang.String)" - "com.google.api.gax.rpc.ClientSettings.Builder.setWatchdogCheckInterval(org.threeten.bp.Duration)" - "com.google.api.gax.rpc.ClientSettings.Builder.setWatchdogProvider(com.google.api.gax.rpc.WatchdogProvider)" - "com.google.api.gax.rpc.ClientSettings.Builder.toString()" @@ -1408,6 +1409,11 @@ references: name: "ClientSettings.Builder.setQuotaProjectId(String)" nameWithType: "ClientSettings.Builder.setQuotaProjectId(String)" fullName: "com.google.api.gax.rpc.ClientSettings.Builder.setQuotaProjectId(java.lang.String)" +- uid: "com.google.api.gax.rpc.ClientSettings.Builder.setUniverseDomain(java.lang.String)" + isExternal: true + name: "ClientSettings.Builder.setUniverseDomain(String)" + nameWithType: "ClientSettings.Builder.setUniverseDomain(String)" + fullName: "com.google.api.gax.rpc.ClientSettings.Builder.setUniverseDomain(java.lang.String)" - uid: "com.google.api.gax.rpc.ClientSettings.Builder.getCredentialsProvider()" isExternal: true name: "ClientSettings.Builder.getCredentialsProvider()" @@ -1602,4 +1608,4 @@ references: - uid: "?,?>,java.lang.Void>)" name: "?,?>,Void>)" nameWithType: "?,?>,Void>)" - fullName: "?,?>,java.lang.Void>)" + fullName: "?,?>,java.lang.Void>)" \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml index 85f63d92..8087c567 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.yml @@ -64,6 +64,7 @@ items: - "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" - "com.google.api.gax.rpc.ClientSettings.getStubSettings()" - "com.google.api.gax.rpc.ClientSettings.getTransportChannelProvider()" + - "com.google.api.gax.rpc.ClientSettings.getUniverseDomain()" - "com.google.api.gax.rpc.ClientSettings.getWatchdogCheckInterval()" - "com.google.api.gax.rpc.ClientSettings.getWatchdogProvider()" - "com.google.api.gax.rpc.ClientSettings.toString()" @@ -1492,6 +1493,11 @@ references: name: "Object.wait(long,int)" nameWithType: "Object.wait(long,int)" fullName: "java.lang.Object.wait(long,int)" +- uid: "com.google.api.gax.rpc.ClientSettings.getUniverseDomain()" + isExternal: true + name: "ClientSettings.getUniverseDomain()" + nameWithType: "ClientSettings.getUniverseDomain()" + fullName: "com.google.api.gax.rpc.ClientSettings.getUniverseDomain()" - uid: "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" isExternal: true name: "ClientSettings.getHeaderProvider()" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml index 291b652e..979c33f4 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml @@ -92,6 +92,7 @@ items: - "com.google.protobuf.GeneratedMessageV3.hasOneof(com.google.protobuf.Descriptors.OneofDescriptor)" - "com.google.protobuf.GeneratedMessageV3.internalGetFieldAccessorTable()" - "com.google.protobuf.GeneratedMessageV3.internalGetMapField(int)" + - "com.google.protobuf.GeneratedMessageV3.internalGetMapFieldReflection(int)" - "com.google.protobuf.GeneratedMessageV3.isInitialized()" - "com.google.protobuf.GeneratedMessageV3.isStringEmpty(java.lang.Object)" - "com.google.protobuf.GeneratedMessageV3.makeExtensionsImmutable()" @@ -977,6 +978,11 @@ references: name: "GeneratedMessageV3.getParserForType()" nameWithType: "GeneratedMessageV3.getParserForType()" fullName: "com.google.protobuf.GeneratedMessageV3.getParserForType()" +- uid: "com.google.protobuf.GeneratedMessageV3.internalGetMapFieldReflection(int)" + isExternal: true + name: "GeneratedMessageV3.internalGetMapFieldReflection(int)" + nameWithType: "GeneratedMessageV3.internalGetMapFieldReflection(int)" + fullName: "com.google.protobuf.GeneratedMessageV3.internalGetMapFieldReflection(int)" - uid: "com.google.protobuf.GeneratedMessageV3.getRepeatedFieldCount(com.google.protobuf.Descriptors.FieldDescriptor)" isExternal: true name: "GeneratedMessageV3.getRepeatedFieldCount(Descriptors.FieldDescriptor)" @@ -1250,4 +1256,4 @@ references: - uid: "ListT>makeMutableCopy(ListT,int)" name: "ListT>makeMutableCopy(ListT,int)" nameWithType: "ListT>makeMutableCopy(ListT,int)" - fullName: "ListT>makeMutableCopy(ListT,int)" + fullName: "ListT>makeMutableCopy(ListT,int)" \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml index 01550e46..48f81f4e 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml @@ -55,6 +55,7 @@ items: - "com.google.api.gax.rpc.ClientSettings.Builder.setInternalHeaderProvider(com.google.api.gax.rpc.HeaderProvider)" - "com.google.api.gax.rpc.ClientSettings.Builder.setQuotaProjectId(java.lang.String)" - "com.google.api.gax.rpc.ClientSettings.Builder.setTransportChannelProvider(com.google.api.gax.rpc.TransportChannelProvider)" + - "com.google.api.gax.rpc.ClientSettings.Builder.setUniverseDomain(java.lang.String)" - "com.google.api.gax.rpc.ClientSettings.Builder.setWatchdogCheckInterval(org.threeten.bp.Duration)" - "com.google.api.gax.rpc.ClientSettings.Builder.setWatchdogProvider(com.google.api.gax.rpc.WatchdogProvider)" - "com.google.api.gax.rpc.ClientSettings.Builder.toString()" @@ -601,6 +602,11 @@ references: name: "ClientSettings.Builder.setQuotaProjectId(String)" nameWithType: "ClientSettings.Builder.setQuotaProjectId(String)" fullName: "com.google.api.gax.rpc.ClientSettings.Builder.setQuotaProjectId(java.lang.String)" +- uid: "com.google.api.gax.rpc.ClientSettings.Builder.setUniverseDomain(java.lang.String)" + isExternal: true + name: "ClientSettings.Builder.setUniverseDomain(String)" + nameWithType: "ClientSettings.Builder.setUniverseDomain(String)" + fullName: "com.google.api.gax.rpc.ClientSettings.Builder.setUniverseDomain(java.lang.String)" - uid: "com.google.api.gax.rpc.ClientSettings.Builder.getCredentialsProvider()" isExternal: true name: "ClientSettings.Builder.getCredentialsProvider()" @@ -727,4 +733,4 @@ references: - uid: "?,?>,java.lang.Void>)" name: "?,?>,Void>)" nameWithType: "?,?>,Void>)" - fullName: "?,?>,java.lang.Void>)" + fullName: "?,?>,java.lang.Void>)" \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml index a979f9c3..a51808b5 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml @@ -47,6 +47,7 @@ items: - "com.google.api.gax.rpc.ClientSettings.getQuotaProjectId()" - "com.google.api.gax.rpc.ClientSettings.getStubSettings()" - "com.google.api.gax.rpc.ClientSettings.getTransportChannelProvider()" + - "com.google.api.gax.rpc.ClientSettings.getUniverseDomain()" - "com.google.api.gax.rpc.ClientSettings.getWatchdogCheckInterval()" - "com.google.api.gax.rpc.ClientSettings.getWatchdogProvider()" - "com.google.api.gax.rpc.ClientSettings.toString()" @@ -676,6 +677,11 @@ references: name: "Object.wait(long,int)" nameWithType: "Object.wait(long,int)" fullName: "java.lang.Object.wait(long,int)" +- uid: "com.google.api.gax.rpc.ClientSettings.getUniverseDomain()" + isExternal: true + name: "ClientSettings.getUniverseDomain()" + nameWithType: "ClientSettings.getUniverseDomain()" + fullName: "com.google.api.gax.rpc.ClientSettings.getUniverseDomain()" - uid: "com.google.api.gax.rpc.ClientSettings.getHeaderProvider()" isExternal: true name: "ClientSettings.getHeaderProvider()" @@ -780,4 +786,4 @@ references: - uid: "B>toBuilder()" name: "B>toBuilder()" nameWithType: "B>toBuilder()" - fullName: "B>toBuilder()" + fullName: "B>toBuilder()" \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml index ef8d0393..9fa53bd5 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml @@ -60,6 +60,7 @@ items: - "com.google.api.gax.rpc.StubSettings.Builder.setSwitchToMtlsEndpointAllowed(boolean)" - "com.google.api.gax.rpc.StubSettings.Builder.setTracerFactory(com.google.api.gax.tracing.ApiTracerFactory)" - "com.google.api.gax.rpc.StubSettings.Builder.setTransportChannelProvider(com.google.api.gax.rpc.TransportChannelProvider)" + - "com.google.api.gax.rpc.StubSettings.Builder.setUniverseDomain(java.lang.String)" - "com.google.api.gax.rpc.StubSettings.Builder.toString()" - "java.lang.Object.clone()" - "java.lang.Object.equals(java.lang.Object)" @@ -541,6 +542,11 @@ references: name: "StubSettings.Builder.setTracerFactory(ApiTracerFactory)" nameWithType: "StubSettings.Builder.setTracerFactory(ApiTracerFactory)" fullName: "com.google.api.gax.rpc.StubSettings.Builder.setTracerFactory(com.google.api.gax.tracing.ApiTracerFactory)" +- uid: "com.google.api.gax.rpc.StubSettings.Builder.setUniverseDomain(java.lang.String)" + isExternal: true + name: "StubSettings.Builder.setUniverseDomain(String)" + nameWithType: "StubSettings.Builder.setUniverseDomain(String)" + fullName: "com.google.api.gax.rpc.StubSettings.Builder.setUniverseDomain(java.lang.String)" - uid: "com.google.api.gax.rpc.StubSettings.Builder.setSwitchToMtlsEndpointAllowed(boolean)" isExternal: true name: "StubSettings.Builder.setSwitchToMtlsEndpointAllowed(boolean)" @@ -769,4 +775,4 @@ references: - uid: "B>build()" name: "B>build()" nameWithType: "B>build()" - fullName: "B>build()" + fullName: "B>build()" \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml index 44bc1f60..8951f4cf 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml @@ -50,10 +50,12 @@ items: - "com.google.api.gax.rpc.StubSettings.getInternalHeaderProvider()" - "com.google.api.gax.rpc.StubSettings.getMtlsEndpoint()" - "com.google.api.gax.rpc.StubSettings.getQuotaProjectId()" + - "com.google.api.gax.rpc.StubSettings.getServiceName()" - "com.google.api.gax.rpc.StubSettings.getStreamWatchdogCheckInterval()" - "com.google.api.gax.rpc.StubSettings.getStreamWatchdogProvider()" - "com.google.api.gax.rpc.StubSettings.getTracerFactory()" - "com.google.api.gax.rpc.StubSettings.getTransportChannelProvider()" + - "com.google.api.gax.rpc.StubSettings.getUniverseDomain()" - "com.google.api.gax.rpc.StubSettings.toBuilder()" - "com.google.api.gax.rpc.StubSettings.toString()" - "java.lang.Object.clone()" @@ -804,6 +806,11 @@ references: name: "StubSettings.getQuotaProjectId()" nameWithType: "StubSettings.getQuotaProjectId()" fullName: "com.google.api.gax.rpc.StubSettings.getQuotaProjectId()" +- uid: "com.google.api.gax.rpc.StubSettings.getServiceName()" + isExternal: true + name: "StubSettings.getServiceName()" + nameWithType: "StubSettings.getServiceName()" + fullName: "com.google.api.gax.rpc.StubSettings.getServiceName()" - uid: "java.lang.Object.notify()" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" name: "Object.notify()" @@ -814,6 +821,11 @@ references: name: "StubSettings.toBuilder()" nameWithType: "StubSettings.toBuilder()" fullName: "com.google.api.gax.rpc.StubSettings.toBuilder()" +- uid: "com.google.api.gax.rpc.StubSettings.getUniverseDomain()" + isExternal: true + name: "StubSettings.getUniverseDomain()" + nameWithType: "StubSettings.getUniverseDomain()" + fullName: "com.google.api.gax.rpc.StubSettings.getUniverseDomain()" - uid: "java.lang.Object.notifyAll()" href: "https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" name: "Object.notifyAll()" @@ -894,4 +906,4 @@ references: isExternal: true name: "StubSettings" nameWithType: "StubSettings" - fullName: "com.google.api.gax.rpc.StubSettings" + fullName: "com.google.api.gax.rpc.StubSettings" \ No newline at end of file From 1f3ac62ba464a19dd7ff3822a8fa69eb232b5094 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 21 Feb 2024 21:09:28 +0100 Subject: [PATCH 141/168] chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.6.3 (#196) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 3669bfb5..b95ec913 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -58,7 +58,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.5.0 + 3.6.3 com.microsoft.doclet.DocFxDoclet From 640703969d8084baf82604636d233e1e8452ea2f Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Wed, 21 Feb 2024 15:31:18 -0500 Subject: [PATCH 142/168] chore: Update version for release to v1.13.0-SNAPSHOT (#245) * chore: update version for release * chore: update version for release --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index b95ec913..681e4f5b 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -6,7 +6,7 @@ com.microsoft docfx-doclet - 1.12.0-SNAPSHOT + 1.13.0-SNAPSHOT UTF-8 From 402bc26183875fc51e232581fff9b9b73ffeea74 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 Apr 2024 15:29:31 +0200 Subject: [PATCH 143/168] fix(deps): update dependency com.google.cloud:libraries-bom to v26.36.0 (#246) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 681e4f5b..11dca729 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -117,7 +117,7 @@ com.google.cloud libraries-bom - 26.32.0 + 26.36.0 pom import From b222f10c2b3e9fb3cf1118d016e3364c86cd9e0f Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 Apr 2024 15:31:34 +0200 Subject: [PATCH 144/168] chore(deps): update dependency com.google.googlejavaformat:google-java-format to v1.22.0 (#247) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 11dca729..8c04b637 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -105,7 +105,7 @@ com.google.googlejavaformat google-java-format - 1.20.0 + 1.22.0 From 7c045ca19c96ee4c30f83d6ad589f0b2328ff26d Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 Apr 2024 15:33:08 +0200 Subject: [PATCH 145/168] chore(deps): update dependency org.apache.maven.plugins:maven-assembly-plugin to v3.7.1 (#250) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 8c04b637..4d47b18f 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -36,7 +36,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.6.0 + 3.7.1 From 035a39efc55879e060d127931f8df8a57155d068 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 Apr 2024 15:34:38 +0200 Subject: [PATCH 146/168] fix(deps): update dependency com.google.guava:guava to v33.1.0-jre (#251) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 4d47b18f..a0707f09 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -163,7 +163,7 @@ com.google.guava guava - 33.0.0-jre + 33.1.0-jre com.google.code.gson From 3d626dcdbc34e0039b4a427c1f913e0279816750 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 Apr 2024 15:36:47 +0200 Subject: [PATCH 147/168] chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.13.0 (#252) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index a0707f09..aef812ed 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -25,7 +25,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.12.1 + 3.13.0 -Xlint:unchecked From f64cb56afa4ed9d2557f6b774e20dd748ccbd9ec Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 Apr 2024 15:38:31 +0200 Subject: [PATCH 148/168] fix(deps): update dependency commons-io:commons-io to v2.16.0 (#255) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index aef812ed..fe185935 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -15,7 +15,7 @@ 2.16.1 3.14.0 4.4 - 2.15.1 + 2.16.0 1.11.0 1.1.0 From 4b487c4b5ac7a28a89276a186dbedc2ece024d07 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 Apr 2024 15:43:20 +0200 Subject: [PATCH 149/168] fix(deps): update dependency com.fasterxml.jackson.core:jackson-databind to v2.17.0 (#248) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index fe185935..14cca05d 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -12,7 +12,7 @@ UTF-8 17 17 - 2.16.1 + 2.17.0 3.14.0 4.4 2.16.0 From 0487d2aee1058d1f32bc7135a59f8ec92fb20112 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 Apr 2024 15:47:12 +0200 Subject: [PATCH 150/168] chore(deps): update dependency org.jacoco:jacoco-maven-plugin to v0.8.12 (#256) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 14cca05d..a6263964 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -76,7 +76,7 @@ org.jacoco jacoco-maven-plugin - 0.8.11 + 0.8.12 From 991e2a92a92f78d38d6c42e8bfdf04cfb5fd7fa9 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Wed, 10 Apr 2024 10:35:26 -0400 Subject: [PATCH 151/168] feat: refactor Version selection (#257) * feat: refactor Version selection * update fmt-maven-plugin and lint * refactor to not pre-calculate the version unnecessarily --- third_party/docfx-doclet-143274/pom.xml | 4 +- .../com/google/docfx/doclet/RepoMetadata.java | 7 + .../com/microsoft/build/PackageBuilder.java | 4 +- .../microsoft/build/PackageOverviewFile.java | 84 +++--- .../com/microsoft/build/YmlFilesBuilder.java | 40 ++- .../microsoft/model/LibraryOverviewFile.java | 249 ++++++++++-------- .../com.microsoft.samples.agreements.md | 12 +- ...om.microsoft.samples.commentinheritance.md | 22 +- .../com.microsoft.samples.google.md | 24 +- .../com.microsoft.samples.google.v1.md | 2 +- .../com.microsoft.samples.google.v1.stub.md | 16 +- .../com.microsoft.samples.google.v1beta.md | 14 +- .../com.microsoft.samples.google.v1p1alpha.md | 14 +- .../com.microsoft.samples.md | 26 +- .../com.microsoft.samples.offers.md | 6 +- .../com.microsoft.samples.subpackage.md | 16 +- .../expected-generated-files/overview.md | 30 ++- 17 files changed, 329 insertions(+), 241 deletions(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index a6263964..0b702e4a 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -94,9 +94,9 @@ - com.coveo + com.spotify.fmt fmt-maven-plugin - 2.13 + 2.23 true diff --git a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java index a2c378b9..c9408fea 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java @@ -46,6 +46,9 @@ public class RepoMetadata { @SerializedName("api_id") private String apiId; + @SerializedName("recommended_package") + private String recommendedPackage; + private String artifactId; public String getNamePretty() { @@ -80,6 +83,10 @@ public void setProductDocumentationUri(String productDocumentationUri) { this.productDocumentationUri = productDocumentationUri; } + public Optional getRecommendedPackage() { + return Optional.ofNullable(this.recommendedPackage); + } + public String getApiDescription() { return this.apiDescription; } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java index bba0e5b6..d5f89216 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageBuilder.java @@ -35,7 +35,7 @@ PackageOverviewFile buildPackageOverviewFile( PackageElement packageElement, RepoMetadata repoMetadata, String artifactVersion, - String recommendedApiVersion) { + String recommendedPackage) { String status = packageLookup.extractStatus(packageElement); String fileName = packageElement.getQualifiedName() + ".md"; PackageOverviewFile packageOverviewFile = @@ -48,7 +48,7 @@ PackageOverviewFile buildPackageOverviewFile( packageLookup, referenceBuilder, artifactVersion, - recommendedApiVersion); + recommendedPackage); return packageOverviewFile; } } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java index 19758662..862f5cb3 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java @@ -55,9 +55,13 @@ public class PackageOverviewFile { // This is only set if the package is not a GA package private String PRERELEASE_IMPLICATIONS = ""; - private String recommendedApiVersion; + // Uses the `recommended_package` field set in the RepoMetadata file if set; otherwise computes + // it. + private String recommendedPackage; - // This is only set if the package is not the latest GA package + private String recommendedPackageLink; + + // This is only set if the package is not the recommended package private String RECOMMENDED_VERSION = ""; // This is only set if the package is a stub package @@ -81,19 +85,22 @@ public PackageOverviewFile( PackageLookup packageLookup, ReferenceBuilder referenceBuilder, String artifactVersion, - String recommendedApiVersion) { + String recommendedPackage) { this.outputPath = outputPath; this.fileName = fileName; this.packageElement = packageElement; - this.recommendedApiVersion = recommendedApiVersion; + this.recommendedPackage = recommendedPackage; String packageURIPath = fileName.replace(".md", ""); this.PACKAGE_HEADER = "# Package " + packageURIPath + " (" + artifactVersion + ")\n"; - // This will always link to the latest version of the package classes String cloudRADChildElementLinkPrefix = - "https://cloud.google.com/java/docs/reference/" + repoMetadata.getArtifactId() + "/latest/"; + "https://cloud.google.com/java/docs/reference/" + + repoMetadata.getArtifactId() + + "/" + + artifactVersion + + "/"; String packageURIPathGithub = packageURIPath.replace('.', '/'); String githubSourcePackageLink = @@ -103,56 +110,49 @@ public PackageOverviewFile( + "/src/main/java/" + packageURIPathGithub; + String cgcRootUri = "https://cloud.google.com/java/docs/reference/"; + this.recommendedPackageLink = + cgcRootUri + + repoMetadata.getArtifactId() + + "/" + + artifactVersion + + "/" + + this.recommendedPackage; // If the package status is not a GA version, then add a disclaimer around prerelease // implications if (status != null) { this.PRERELEASE_IMPLICATIONS = "## Prerelease Implications\n\n" - + "This package is a prerelease version! Use with caution.\n" - + "Prerelease versions are considered unstable as they may be shut down. You can read more about [Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning).\n" - + "Each Cloud Java client library may contain multiple packages. Each package containing a version number in its name corresponds to a published version of the service.\n" - + "We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix.\n" - + "For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`.\n" - + "If you use an unstable release, breaking changes may be introduced when upgrading.\n\n"; + + "This package is a prerelease version! Use with caution.\n\n" + + "Prerelease versions are considered unstable as they may be shut down and/or subject to breaking changes when upgrading.\n" + + "Use them only for testing or if you specifically need their experimental features.\n\n"; } - // This regex captures the package path before the version (if it exists) and the version - Pattern pattern = Pattern.compile("(.*?)(v\\d+.*?)(?:\\.|$)"); - ImmutableList packageVersionURIInfo = - extractPackageBaseURIBeforeVersion(packageURIPath, pattern); - String basePackageURI = packageVersionURIInfo.get(0).toString(); - String packageVersion = packageVersionURIInfo.get(1).toString(); - // Build link to the Cloud RAD link for the recommended package - String recommendedPackageVersionLink = - cloudRADChildElementLinkPrefix + basePackageURI + recommendedApiVersion; - - // A package is not the latest GA version if it is a prerelease version, or if it is a GA - // version that is not the same as the recommended Api version - if (basePackageURI != "N/A") { - if (status != null || (!packageVersion.equals(this.recommendedApiVersion))) { - this.RECOMMENDED_VERSION = - "## This package is not the latest GA version! \n\n" - + " For this library, we recommend using the [package](" - + recommendedPackageVersionLink - + ")" - + " associated with API version " - + this.recommendedApiVersion - + " for new applications.\n" - + "\n"; - } + // If a package is not the same as the recommended package, add a disclaimer. If the recommended + // package does not exist, then do not set the disclaimer. + if (!this.recommendedPackage.isEmpty() + && !packageElement.getQualifiedName().toString().equals(this.recommendedPackage)) { + this.RECOMMENDED_VERSION = + "## This package is not the recommended entry point to using this client library!\n\n" + + " For this library, we recommend using [" + + recommendedPackage + + "](" + + recommendedPackageLink + + ")" + + " for new applications.\n" + + "\n"; } - // If recommended version package URI exists, link to it for the Stub class as well - if (basePackageURI != "N/A" + // Link to recommended package (if it exists) for the Stub class as well + if (!this.recommendedPackage.isEmpty() && String.valueOf(this.packageElement.getQualifiedName()).contains("stub")) { this.STUB_IMPLICATIONS = "## Stub Package Implications\n\n" + "This package is a a base stub class. It is for advanced usage and reflects the underlying API directly.\n" - + "We generally recommend using non-stub, latest GA package, such as [" - + basePackageURI - + recommendedApiVersion + + "We generally recommend using the non-stub, latest GA package, such as [" + + recommendedPackage + "](" - + recommendedPackageVersionLink + + recommendedPackageLink + ")" + ". Use with caution.\n"; } else if (String.valueOf(this.packageElement.getQualifiedName()).contains("stub")) { diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 4a06a9c7..f0ddb1e8 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -19,8 +19,9 @@ import com.microsoft.util.ElementUtil; import com.microsoft.util.FileUtil; import java.util.ArrayList; -import java.util.HashSet; +import java.util.HashMap; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import javax.lang.model.element.PackageElement; import jdk.javadoc.doclet.DocletEnvironment; @@ -105,7 +106,7 @@ public boolean build() { artifactVersion, librariesBomVersion, repoMetadataFilePath, - processor.recommendedApiVersion); + processor.recommendedPackage); FileUtil.dumpToFile(libraryOverviewFile); } return true; @@ -131,7 +132,10 @@ class Processor { private final List allPackages = elementUtil.extractPackageElements(environment.getIncludedElements()); - private String recommendedApiVersion = ""; + private ApiVersion recommendedApiVersion; + + // If set in RepoMetadata, use that value. Otherwise, calculate based on recommendedApiVersion + private String recommendedPackage = ""; private RepoMetadata repoMetadata = new RepoMetadata(); @@ -143,15 +147,25 @@ void process() { .filter(pkg -> !packageLookup.isApiVersionStubPackage(pkg)) .collect(Collectors.toList())); - // Get recommended ApiVersion for new Library Overview - HashSet versions = new HashSet<>(); - for (PackageElement pkg : allPackages) { - packageLookup.extractApiVersion(pkg).ifPresent(versions::add); - } - - if (!versions.isEmpty()) { - recommendedApiVersion = ApiVersion.getRecommended(versions).toString(); - } + // Use the provided recommended package in the .repo-metadata.json file, if set + recommendedPackage = + repoMetadata + .getRecommendedPackage() + .orElseGet( + () -> { + // Calculate the recommended package based on the latest stable Version ID. + HashMap packageVersions = new HashMap<>(); + for (PackageElement pkg : allPackages) { + Optional apiVersion = packageLookup.extractApiVersion(pkg); + apiVersion.ifPresent( + version -> + packageVersions.put(version, String.valueOf(pkg.getQualifiedName()))); + } + if (packageVersions.isEmpty()) return ""; + + ApiVersion recommended = ApiVersion.getRecommended(packageVersions.keySet()); + return packageVersions.get(recommended).toString(); + }); for (PackageElement element : organizedPackagesWithoutStubs.get(PackageGroup.VISIBLE)) { tocFile.addTocItem(buildPackage(element)); @@ -200,7 +214,7 @@ private TocItem buildPackage(PackageElement element) { packageTocItem.getItems().add(packageSummary); packageOverviewFiles.add( packageBuilder.buildPackageOverviewFile( - element, repoMetadata, artifactVersion, recommendedApiVersion)); + element, repoMetadata, artifactVersion, recommendedPackage)); // build classes/interfaces/enums/exceptions/annotations packageTocItem diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java index 52940b0b..1495a24d 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java @@ -17,22 +17,24 @@ public class LibraryOverviewFile { // This is passed in as an environment variable private String librariesBomVersion; - // This is parsed from the packages - private String recommendedApiVersion; + private String recommendedPackageLink; - private String LIBRARY_OVERVIEW_FILE_HEADER; + // This is parsed from the .repoMetadata.json if it exists, or is calculated in ApiVersion + private String recommendedPackage; - private String LIBRARY_OVERVIEW_KEY_REFERENCE_HEADER; + private String LIBRARY_OVERVIEW_FILE_HEADER = ""; - private String LIBRARY_OVERVIEW_KEY_REFERENCE_TABLE; + private String LIBRARY_OVERVIEW_KEY_REFERENCE_HEADER = ""; - private String LIBRARY_OVERVIEW_GETTING_STARTED_SECTION; + private String LIBRARY_OVERVIEW_KEY_REFERENCE_TABLE = ""; - private String LIBRARY_OVERVIEW_CLIENT_INSTALLATION_SECTION; + private String LIBRARY_OVERVIEW_GETTING_STARTED_SECTION = ""; - private String LIBRARY_OVERVIEW_CLIENT_INSTALLATION_HEADER; + private String LIBRARY_OVERVIEW_CLIENT_INSTALLATION_SECTION = ""; - private String LIBRARY_OVERVIEW_PACKAGE_SELECTION_SECTION; + private String LIBRARY_OVERVIEW_CLIENT_INSTALLATION_HEADER = ""; + + private String LIBRARY_OVERVIEW_PACKAGE_SELECTION_SECTION = ""; public LibraryOverviewFile( String outputPath, @@ -40,17 +42,30 @@ public LibraryOverviewFile( String artifactVersion, String librariesBomVersion, String repoMetadataFilePath, - String recommendedApiVersion) { + String recommendedPackage) { this.outputPath = outputPath; this.fileName = fileName; this.artifactVersion = artifactVersion; this.librariesBomVersion = librariesBomVersion; this.repoMetadataFilePath = repoMetadataFilePath; - this.recommendedApiVersion = recommendedApiVersion; + this.recommendedPackage = recommendedPackage; RepoMetadata repoMetadata = new RepoMetadata(); repoMetadata = repoMetadata.parseRepoMetadata(this.repoMetadataFilePath); + this.recommendedPackageLink = ""; + // Compute the link to the recommended package if it exists + if (!this.recommendedPackage.isEmpty()) { + String cgcRootUri = "https://cloud.google.com/java/docs/reference/"; + this.recommendedPackageLink = + cgcRootUri + + repoMetadata.getArtifactId() + + "/" + + artifactVersion + + "/" + + this.recommendedPackage; + } + this.LIBRARY_OVERVIEW_FILE_HEADER = "# " + repoMetadata.getArtifactId() + " overview (" + artifactVersion + ")\n\n"; @@ -81,6 +96,8 @@ public LibraryOverviewFile( + "\n\n"; // For non-service libraries, these steps are not necessary + // TODO: https://github.com/googleapis/java-docfx-doclet/issues/253 : Ideally we can refactor + // for custom modules to copy from their README sections String[] runtimeLibraries = {"gax", "api-common", "common-protos", "google-cloud-core"}; if (Arrays.asList(runtimeLibraries).contains(repoMetadata.getApiShortName())) { @@ -101,109 +118,121 @@ public LibraryOverviewFile( + repoMetadata.getApiShortName() + ".googleapis.com)\n" + "- [Set up authentication](https://cloud.google.com/docs/authentication/client-libraries)\n\n"; - } - this.LIBRARY_OVERVIEW_CLIENT_INSTALLATION_HEADER = - "## Use the " - + repoMetadata.getNamePretty() - + " for Java\n" - + "To ensure that your project uses compatible versions of the libraries\n" - + "and their component artifacts, import `com.google.cloud:libraries-bom` and use\n" - + "the BOM to specify dependency versions. Be sure to remove any versions that you\n" - + "set previously. For more information about\n" - + "BOMs, see [Google Cloud Platform Libraries BOM](https://cloud.google.com/java/docs/bom).\n\n"; - - // When b/312765900 is implemented, then refactor this section to use the devsite-selector - // format. Current format is a workaround so the sanitizer doesn't remove the content. - this.LIBRARY_OVERVIEW_CLIENT_INSTALLATION_SECTION = - "### Maven\n" - + "Import the BOM in the dependencyManagement section of your pom.xml file.\n" - + "Include specific artifacts you depend on in the dependencies section, but don't\n" - + "specify the artifacts' versions in the dependencies section.\n" - + "\n" - + "The example below demonstrates how you would import the BOM and include the " - + repoMetadata.getArtifactId() - + " artifact.\n" - + "
\n"
-            + "<dependencyManagement>\n"
-            + " <dependencies>\n"
-            + "   <dependency>\n"
-            + "      <groupId>com.google.cloud</groupId>\n"
-            + "      <artifactId>libraries-bom</artifactId>\n"
-            + "      <version>"
-            + this.librariesBomVersion
-            + "</version>\n"
-            + "      <type>pom</type>\n"
-            + "      <scope>import</scope>\n"
-            + "   </dependency>\n"
-            + " </dependencies>\n"
-            + "</dependencyManagement>\n\n"
-            + "<dependencies>\n"
-            + " <dependency>\n"
-            + "   <groupId>com.google.cloud</groupId>\n"
-            + "   <artifactId>"
-            + repoMetadata.getArtifactId()
-            + "</artifactId>\n"
-            + " </dependency>\n"
-            + "</dependencies>\n"
-            + "
\n\n" - + "### Gradle\n" - + "BOMs are supported by default in Gradle 5.x or later. Add a platform\n" - + "dependency on com.google.cloud:libraries-bom and remove the version from the\n" - + "dependency declarations in the artifact's build.gradle file.\n" - + "\n" - + "The example below demonstrates how you would import the BOM and include the " - + repoMetadata.getArtifactId() - + " artifact.\n" - + "
\n"
-            + "implementation platform('com.google.cloud:libraries-bom:"
-            + librariesBomVersion
-            + "')\n"
-            + "implementation '"
-            + repoMetadata.getDistributionName()
-            + "'\n"
-            + "
\n\n" - + "The platform and enforcedPlatform keywords supply dependency versions\n" - + "declared in a BOM. The enforcedPlatform keyword enforces the dependency\n" - + "versions declared in the BOM and thus overrides what you specified.\n\n" - + "For more details of the platform and enforcedPlatform keywords Gradle 5.x or higher, see\n" - + "[Gradle: Importing Maven BOMs](https://docs.gradle.org/current/userguide/platforms.html#sub:bom_import).\n" - + "\n" - + "If you're using Gradle 4.6 or later, add\n" - + "enableFeaturePreview('IMPROVED_POM_SUPPORT') to your settings.gradle file. For details, see\n" - + "[Gradle 4.6 Release Notes: BOM import](https://docs.gradle.org/4.6/release-notes.html#bom-import).\n" - + "Versions of Gradle earlier than 4.6 don't support BOMs.

\n\n" - + "### SBT\n" - + "SBT [doesn't support BOMs](https://github.com/sbt/sbt/issues/4531). You can find\n" - + "recommended versions of libraries from a particular BOM version on the\n" - + "[dashboard](https://storage.googleapis.com/cloud-opensource-java-dashboard/com.google.cloud/libraries-bom/index.html)\n" - + "and set the versions manually.\n" - + "To use the latest version of this library, add this to your dependencies:\n" - + "
\n"
-            + "libraryDependencies += "com.google.cloud" % ""
-            + repoMetadata.getArtifactId()
-            + "" % ""
-            + artifactVersion
-            + ""\n"
-            + "
\n\n"; - - // Some client libraries do not have an underlying API service (e.g. - // google-cloud-logging-logback, google-cloud-storage-nio, google-cloud-spanner-jdbc), hence - // there is no recommended API version. - if (this.recommendedApiVersion.isEmpty()) { + this.LIBRARY_OVERVIEW_CLIENT_INSTALLATION_HEADER = + "## Use the " + + repoMetadata.getNamePretty() + + " for Java\n" + + "To ensure that your project uses compatible versions of the libraries\n" + + "and their component artifacts, import `com.google.cloud:libraries-bom` and use\n" + + "the BOM to specify dependency versions. Be sure to remove any versions that you\n" + + "set previously. For more information about\n" + + "BOMs, see [Google Cloud Platform Libraries BOM](https://cloud.google.com/java/docs/bom).\n\n"; + + // When b/312765900 is implemented, then refactor this section to use the devsite-selector + // format. Current format is a workaround so the sanitizer doesn't remove the content. + this.LIBRARY_OVERVIEW_CLIENT_INSTALLATION_SECTION = + "### Maven\n" + + "Import the BOM in the dependencyManagement section of your pom.xml file.\n" + + "Include specific artifacts you depend on in the dependencies section, but don't\n" + + "specify the artifacts' versions in the dependencies section.\n" + + "\n" + + "The example below demonstrates how you would import the BOM and include the " + + repoMetadata.getArtifactId() + + " artifact.\n" + + "
\n"
+              + "<dependencyManagement>\n"
+              + " <dependencies>\n"
+              + "   <dependency>\n"
+              + "      <groupId>com.google.cloud</groupId>\n"
+              + "      <artifactId>libraries-bom</artifactId>\n"
+              + "      <version>"
+              + this.librariesBomVersion
+              + "</version>\n"
+              + "      <type>pom</type>\n"
+              + "      <scope>import</scope>\n"
+              + "   </dependency>\n"
+              + " </dependencies>\n"
+              + "</dependencyManagement>\n\n"
+              + "<dependencies>\n"
+              + " <dependency>\n"
+              + "   <groupId>com.google.cloud</groupId>\n"
+              + "   <artifactId>"
+              + repoMetadata.getArtifactId()
+              + "</artifactId>\n"
+              + " </dependency>\n"
+              + "</dependencies>\n"
+              + "
\n\n" + + "### Gradle\n" + + "BOMs are supported by default in Gradle 5.x or later. Add a platform\n" + + "dependency on com.google.cloud:libraries-bom and remove the version from the\n" + + "dependency declarations in the artifact's build.gradle file.\n" + + "\n" + + "The example below demonstrates how you would import the BOM and include the " + + repoMetadata.getArtifactId() + + " artifact.\n" + + "
\n"
+              + "implementation platform('com.google.cloud:libraries-bom:"
+              + librariesBomVersion
+              + "')\n"
+              + "implementation '"
+              + repoMetadata.getDistributionName()
+              + "'\n"
+              + "
\n\n" + + "The platform and enforcedPlatform keywords supply dependency versions\n" + + "declared in a BOM. The enforcedPlatform keyword enforces the dependency\n" + + "versions declared in the BOM and thus overrides what you specified.\n\n" + + "For more details of the platform and enforcedPlatform keywords Gradle 5.x or higher, see\n" + + "[Gradle: Importing Maven BOMs](https://docs.gradle.org/current/userguide/platforms.html#sub:bom_import).\n" + + "\n" + + "If you're using Gradle 4.6 or later, add\n" + + "enableFeaturePreview('IMPROVED_POM_SUPPORT') to your settings.gradle file. For details, see\n" + + "[Gradle 4.6 Release Notes: BOM import](https://docs.gradle.org/4.6/release-notes.html#bom-import).\n" + + "Versions of Gradle earlier than 4.6 don't support BOMs.

\n\n" + + "### SBT\n" + + "SBT [doesn't support BOMs](https://github.com/sbt/sbt/issues/4531). You can find\n" + + "recommended versions of libraries from a particular BOM version on the\n" + + "[dashboard](https://storage.googleapis.com/cloud-opensource-java-dashboard/com.google.cloud/libraries-bom/index.html)\n" + + "and set the versions manually.\n" + + "To use the latest version of this library, add this to your dependencies:\n" + + "
\n"
+              + "libraryDependencies += "com.google.cloud" % ""
+              + repoMetadata.getArtifactId()
+              + "" % ""
+              + artifactVersion
+              + ""\n"
+              + "
\n\n"; + } + // It should be very rare that a client library does not have a recommended package + if (this.recommendedPackage.isEmpty()) { this.LIBRARY_OVERVIEW_PACKAGE_SELECTION_SECTION = ""; } else { this.LIBRARY_OVERVIEW_PACKAGE_SELECTION_SECTION = - "## Which version should I use?\n" - + "For this library, we recommend using API version " - + this.recommendedApiVersion - + " for new applications.\n" - + "\n" - + "Each Cloud Java client library may contain multiple packages. Each package containing a version number in its name corresponds to a published version of the service.\n" - + "We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix.\n" - + "For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`.\n" - + "If you use an unstable release, breaking changes may be introduced when upgrading.\n" - + "You can read more about [Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning).\n\n"; + "## Which version ID should I get started with?\n" + + "For this library, we recommend using " + + "[" + + this.recommendedPackage + + "](" + + this.recommendedPackageLink + + ") for new applications.\n\n" + + "### Understanding Version ID and Library Versions\n" + + "When using a Cloud client library, it's important to distinguish between two types of versions:\n" + + "- **Library Version**: The version of the software package (the client library) that helps you interact with the Cloud service. These libraries are\n" + + "released and updated frequently with bug fixes, improvements, and support for new service features and versions. The version selector at\n" + + "the top of this page represents the client library version.\n" + + "- **Version ID**: The version of the Cloud service itself (e.g. " + + repoMetadata.getNamePretty() + + "). New Version IDs are introduced infrequently, and often involve\n" + + "changes to the core functionality and structure of the Cloud service itself. The packages in the lefthand navigation represent packages tied\n" + + "to a specific Version ID of the Cloud service.\n\n" + + "### Managing Library Versions\n" + + "We recommend using the com.google.cloud:libraries-bom installation method detailed above to streamline dependency management\n" + + "across multiple Cloud Java client libraries. This ensures compatibility and simplifies updates.\n\n" + + "### Choosing the Right Version ID\n" + + "Each Cloud Java client library may contain packages tied to specific Version IDs (e.g., v1, v2alpha). For new production applications, use\n" + + "the latest stable Version ID. This is identified by the highest version number **without** a suffix (like \"alpha\" or \"beta\"). You can read more about\n" + + "[Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning).\n\n" + + "**Important**: Unstable Version ID releases (those _with_ suffixes) are subject to breaking changes when upgrading. Use them only for testing or if you specifically need their experimental features.\n\n"; } } diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md index 37ee1cb2..9618adae 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md @@ -7,6 +7,10 @@
+## This package is not the recommended entry point to using this client library! + + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + ## Classes @@ -15,7 +19,7 @@ Class - + - + - + @@ -44,7 +48,7 @@ Interface - +
Description
com.microsoft.samples.agreements.AgreementDetailsCollectionOperationscom.microsoft.samples.agreements.AgreementDetailsCollectionOperations Deprecated. Use AgreementMetaData instead. @@ -23,13 +27,13 @@ Description Agreement details collection operations implementation class.
com.microsoft.samples.agreements.AgreementMetaDatacom.microsoft.samples.agreements.AgreementMetaData The AgreementMetaData provides metadata about the agreement type that partner can provide confirmation of customer acceptance.
com.microsoft.samples.agreements.ResourceCollectioncom.microsoft.samples.agreements.ResourceCollection Contains a collection of resources with JSON properties to represent the output Type of objects in collection Description
com.microsoft.samples.agreements.IAgreementDetailsCollectioncom.microsoft.samples.agreements.IAgreementDetailsCollection Deprecated. This one is deprecated :( diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md index 31a00725..f07675a6 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md @@ -7,6 +7,10 @@
+## This package is not the recommended entry point to using this client library! + + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + ## Classes @@ -15,22 +19,22 @@ Class - + - + - + - + @@ -44,27 +48,27 @@ Interface - + - + - + - + - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md index 6473498e..1d26ee71 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md @@ -7,6 +7,10 @@
Description
com.microsoft.samples.commentinheritance.Animalcom.microsoft.samples.commentinheritance.Animal Animal.
com.microsoft.samples.commentinheritance.Dogcom.microsoft.samples.commentinheritance.Dog Canine and man's best friend.
com.microsoft.samples.commentinheritance.Herbivorous.Plantcom.microsoft.samples.commentinheritance.Herbivorous.Plant
com.microsoft.samples.commentinheritance.Mammalcom.microsoft.samples.commentinheritance.Mammal Mammal.
Description
com.microsoft.samples.commentinheritance.Carnivorouscom.microsoft.samples.commentinheritance.Carnivorous Marks an Animal that eats other animals.
com.microsoft.samples.commentinheritance.Herbivorouscom.microsoft.samples.commentinheritance.Herbivorous Marks animals that eat plants.
com.microsoft.samples.commentinheritance.Omnivorouscom.microsoft.samples.commentinheritance.Omnivorous Eats plants and animals.
com.microsoft.samples.commentinheritance.Organismcom.microsoft.samples.commentinheritance.Organism
com.microsoft.samples.commentinheritance.Viviparouscom.microsoft.samples.commentinheritance.Viviparous Mammals that give birth to young that develop within the mother's body.
+## This package is not the recommended entry point to using this client library! + + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + ## Client Classes Client classes are the main entry point to using a package. They contain several variations of Java methods for each of the API's methods. @@ -17,7 +21,7 @@ Client Description -com.microsoft.samples.google.SpeechClient +com.microsoft.samples.google.SpeechClient Service Description: Service that implements Google Cloud Speech API. @@ -35,7 +39,7 @@ Settings Description -com.microsoft.samples.google.ProductSearchSettings +com.microsoft.samples.google.ProductSearchSettings Settings class to configure an instance of ProductSearchClient. @@ -43,7 +47,7 @@ Settings class to configure an instance of -com.microsoft.samples.google.SpeechSettings +com.microsoft.samples.google.SpeechSettings Settings class to configure an instance of SpeechClient. @@ -60,12 +64,12 @@ Class Description -com.microsoft.samples.google.ProductSearchSettings.Builder +com.microsoft.samples.google.ProductSearchSettings.Builder Builder for ProductSearchSettings. -com.microsoft.samples.google.RecognitionAudio +com.microsoft.samples.google.RecognitionAudio Contains audio data in the encoding specified in the RecognitionConfig. @@ -73,7 +77,7 @@ Builder for ProductSearchSettings. returns google.rpc.Code.INVALID_ARGUMENT. See -com.microsoft.samples.google.SpeechSettings.Builder +com.microsoft.samples.google.SpeechSettings.Builder Builder for SpeechSettings. @@ -87,7 +91,7 @@ Interface Description -com.microsoft.samples.google.BetaApi +com.microsoft.samples.google.BetaApi Indicates a public API that can change at any time, and has no guarantee of API stability and backward-compatibility. @@ -95,7 +99,7 @@ Indicates a public API that can change at any time, and has no guarantee of API

Usage guidelines: -com.microsoft.samples.google.ValidationException.Supplier +com.microsoft.samples.google.ValidationException.Supplier @@ -109,7 +113,7 @@ Enum Description -com.microsoft.samples.google.RecognitionAudio.AudioSourceCase +com.microsoft.samples.google.RecognitionAudio.AudioSourceCase @@ -123,7 +127,7 @@ Exception Description -com.microsoft.samples.google.ValidationException +com.microsoft.samples.google.ValidationException Exception thrown if there is a validation problem with a path template, http config, or related framework methods. Comes as an illegal argument exception subclass. Allows to globally set a diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md index 7ad4133c..cb50fddf 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md @@ -17,7 +17,7 @@ Client Description -com.microsoft.samples.google.v1.SpeechClient +com.microsoft.samples.google.v1.SpeechClient Service Description: Service that implements Google Cloud Speech API. diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md index b6943d51..f6f5094c 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md @@ -7,10 +7,14 @@ +## This package is not the recommended entry point to using this client library! + + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + ## Stub Package Implications This package is a a base stub class. It is for advanced usage and reflects the underlying API directly. -We generally recommend using non-stub, latest GA package, such as [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1). Use with caution. +We generally recommend using the non-stub, latest GA package, such as [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1). Use with caution. ## Stub Classes @@ -19,21 +23,21 @@ Stub - + - + - + - + - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md index 0219eb2b..96676b5a 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md @@ -7,18 +7,16 @@
Description
com.microsoft.samples.google.v1.stub.GrpcSpeechStubcom.microsoft.samples.google.v1.stub.GrpcSpeechStub gRPC stub implementation for the Speech service API.

This class is for advanced usage and reflects the underlying API directly.

com.microsoft.samples.google.v1.stub.HttpJsonSpeechStubcom.microsoft.samples.google.v1.stub.HttpJsonSpeechStub REST stub implementation for the Speech service API.

This class is for advanced usage and reflects the underlying API directly.

com.microsoft.samples.google.v1.stub.SpeechStubcom.microsoft.samples.google.v1.stub.SpeechStub Base stub class for the Speech service API. @@ -50,7 +54,7 @@ Settings Description
com.microsoft.samples.google.v1.stub.SpeechStubSettingscom.microsoft.samples.google.v1.stub.SpeechStubSettings Settings class to configure an instance of com.google.cloud.speech.v1p1beta1.stub.SpeechStub. @@ -67,7 +71,7 @@ Class Description
com.microsoft.samples.google.v1.stub.SpeechStubSettings.Buildercom.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder Builder for SpeechStubSettings.
-## This package is not the latest GA version! +## This package is not the recommended entry point to using this client library! - For this library, we recommend using the [package](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) associated with API version v1 for new applications. + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. ## Prerelease Implications This package is a prerelease version! Use with caution. -Prerelease versions are considered unstable as they may be shut down. You can read more about [Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning). -Each Cloud Java client library may contain multiple packages. Each package containing a version number in its name corresponds to a published version of the service. -We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix. -For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`. -If you use an unstable release, breaking changes may be introduced when upgrading. + +Prerelease versions are considered unstable as they may be shut down and/or subject to breaking changes when upgrading. +Use them only for testing or if you specifically need their experimental features. ## Client Classes Client classes are the main entry point to using a package. @@ -30,7 +28,7 @@ Client Description -com.microsoft.samples.google.v1beta.SpeechClient +com.microsoft.samples.google.v1beta.SpeechClient Service Description: Service that implements Google Cloud Speech API. diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md index d019536d..0001294b 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md @@ -7,18 +7,16 @@ -## This package is not the latest GA version! +## This package is not the recommended entry point to using this client library! - For this library, we recommend using the [package](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) associated with API version v1 for new applications. + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. ## Prerelease Implications This package is a prerelease version! Use with caution. -Prerelease versions are considered unstable as they may be shut down. You can read more about [Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning). -Each Cloud Java client library may contain multiple packages. Each package containing a version number in its name corresponds to a published version of the service. -We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix. -For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`. -If you use an unstable release, breaking changes may be introduced when upgrading. + +Prerelease versions are considered unstable as they may be shut down and/or subject to breaking changes when upgrading. +Use them only for testing or if you specifically need their experimental features. ## Client Classes Client classes are the main entry point to using a package. @@ -30,7 +28,7 @@ Client Description -com.microsoft.samples.google.v1p1alpha.SpeechClient +com.microsoft.samples.google.v1p1alpha.SpeechClient Service Description: Service that implements Google Cloud Speech API. diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md index f3e3e013..0b3bab6e 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md @@ -7,6 +7,10 @@ +## This package is not the recommended entry point to using this client library! + + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + ## Classes @@ -15,43 +19,43 @@ Class - + - + - + - + - + - + - + - + @@ -65,12 +69,12 @@ Interface - + - + - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md index a0183f03..8280fce5 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md @@ -7,6 +7,10 @@
Description
com.microsoft.samples.BasePartnerComponentcom.microsoft.samples.BasePartnerComponent Holds common partner component properties and behavior. All components should inherit from this class. The context object type.
com.microsoft.samples.BasePartnerComponentStringcom.microsoft.samples.BasePartnerComponentString Holds common partner component properties and behavior. The context is string type by default.
com.microsoft.samples.ExceptionHandlercom.microsoft.samples.ExceptionHandler Exception retry algorithm implementation used by RetryHelper.
com.microsoft.samples.ExceptionHandler.Buildercom.microsoft.samples.ExceptionHandler.Builder ExceptionHandler builder.
com.microsoft.samples.KeyValuePaircom.microsoft.samples.KeyValuePair
com.microsoft.samples.Linkcom.microsoft.samples.Link
com.microsoft.samples.Subpackagecom.microsoft.samples.Subpackage
com.microsoft.samples.SuperHerocom.microsoft.samples.SuperHero Hero is the main entity we will be using to something
Description
com.microsoft.samples.ExceptionHandler.Interceptorcom.microsoft.samples.ExceptionHandler.Interceptor
com.microsoft.samples.IPartnercom.microsoft.samples.IPartner The main entry point into using the partner SDK functionality. Represents a partner and encapsulates all the behavior attached to partners. Use this interface to get to the partner's @@ -86,7 +90,7 @@ Enum Description
com.microsoft.samples.ExceptionHandler.Interceptor.RetryResultcom.microsoft.samples.ExceptionHandler.Interceptor.RetryResult
+## This package is not the recommended entry point to using this client library! + + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + ## Classes @@ -15,7 +19,7 @@ Class - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md index 376e932a..fb830aee 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md @@ -7,6 +7,10 @@
Description
com.microsoft.samples.offers.Offercom.microsoft.samples.offers.Offer Represents a form of product availability to customer
+## This package is not the recommended entry point to using this client library! + + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + ## Classes @@ -15,7 +19,7 @@ Class - + - + - + @@ -42,7 +46,7 @@ Interface - + - + @@ -72,7 +76,7 @@ Exception - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md index 9ae046d5..df45ffd4 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md @@ -87,12 +87,26 @@ To use the latest version of this library, add this to your dependencies: libraryDependencies += "com.google.cloud" % "google-cloud-apikeys" % "0.18.0" -## Which version should I use? -For this library, we recommend using API version v1 for new applications. - -Each Cloud Java client library may contain multiple packages. Each package containing a version number in its name corresponds to a published version of the service. -We recommend using the latest stable version for new production applications, which can be identified by the largest numeric version that does not contain a suffix. -For example, if a client library has two packages: `v1` and `v2alpha`, then the latest stable version is `v1`. -If you use an unstable release, breaking changes may be introduced when upgrading. -You can read more about [Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning). +## Which version ID should I get started with? +For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + +### Understanding Version ID and Library Versions +When using a Cloud client library, it's important to distinguish between two types of versions: +- **Library Version**: The version of the software package (the client library) that helps you interact with the Cloud service. These libraries are +released and updated frequently with bug fixes, improvements, and support for new service features and versions. The version selector at +the top of this page represents the client library version. +- **Version ID**: The version of the Cloud service itself (e.g. API Keys API). New Version IDs are introduced infrequently, and often involve +changes to the core functionality and structure of the Cloud service itself. The packages in the lefthand navigation represent packages tied +to a specific Version ID of the Cloud service. + +### Managing Library Versions +We recommend using the com.google.cloud:libraries-bom installation method detailed above to streamline dependency management +across multiple Cloud Java client libraries. This ensures compatibility and simplifies updates. + +### Choosing the Right Version ID +Each Cloud Java client library may contain packages tied to specific Version IDs (e.g., v1, v2alpha). For new production applications, use +the latest stable Version ID. This is identified by the highest version number **without** a suffix (like "alpha" or "beta"). You can read more about +[Cloud API versioning strategy here](https://cloud.google.com/apis/design/versioning). + +**Important**: Unstable Version ID releases (those _with_ suffixes) are subject to breaking changes when upgrading. Use them only for testing or if you specifically need their experimental features. From bd4d20744d01d9f7f4417b0f3a58983193ba008c Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Thu, 18 Apr 2024 15:59:19 -0400 Subject: [PATCH 152/168] docs: Add contribution guidelines (#258) --- CONTRIBUTING.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6272489d..bab9c54d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,7 +1,10 @@ # How to Contribute -We'd love to accept your patches and contributions to this project. There are -just a few small guidelines you need to follow. +We'd love to accept your patches and contributions to this project. There are just a few small guidelines you need to follow before opening an issue or a PR: +1. Ensure the issue was not already reported. +2. Open a new issue if you are unable to find an existing issue addressing your problem. Make sure to include a title and clear description, as much relevant information as possible, and a code sample or an executable test case demonstrating the expected behavior that is not occurring. +3. Discuss the priority and potential solutions with the maintainers in the issue. The maintainers would review the issue and add a label "Accepting Contributions" once the issue is ready for accepting contributions. +4. Open a PR only if the issue is labeled with "Accepting Contributions", ensure the PR description clearly describes the problem and solution. Note that an open PR without an issue labeled with "Accepting Contributions" will not be accepted. ## Contributor License Agreement From 79996021b7b4aa72ef8a7107c234f87042d4c396 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 24 Apr 2024 20:55:25 +0200 Subject: [PATCH 153/168] fix(deps): update dependency com.google.cloud:libraries-bom to v26.37.0 (#259) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 0b702e4a..5b97fe8c 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -117,7 +117,7 @@ com.google.cloud libraries-bom - 26.36.0 + 26.37.0 pom import From 93d4a88ea2346e9c43d3f57778594052f54c013a Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 24 Apr 2024 20:56:37 +0200 Subject: [PATCH 154/168] fix(deps): update dependency commons-io:commons-io to v2.16.1 (#260) Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 5b97fe8c..8ca05444 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -15,7 +15,7 @@ 2.17.0 3.14.0 4.4 - 2.16.0 + 2.16.1 1.11.0 1.1.0 From 680f924223be27e002d13e6d27e828795b252a6d Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 24 Apr 2024 20:58:32 +0200 Subject: [PATCH 155/168] fix(deps): update dependency org.apache.commons:commons-text to v1.12.0 (#261) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 8ca05444..51abda53 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -16,7 +16,7 @@ 3.14.0 4.4 2.16.1 - 1.11.0 + 1.12.0 1.1.0 From 15ce3a5cca1c1470f5cbc8f02cab5c9732cb76a6 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Thu, 25 Apr 2024 15:07:19 -0400 Subject: [PATCH 156/168] fix: update Package Overview github link (#262) --- .../src/main/java/com/google/docfx/doclet/RepoMetadata.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java index c9408fea..a6138546 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java @@ -149,6 +149,10 @@ public String getGithubLink() { || Objects.equals(this.repo, "googleapis/sdk-platform-java")) { githubLink = githubLink + "/tree/main/" + this.repoShort; } + // Handwritten libraries have a different base URI + else { + githubLink = githubLink + "/tree/main/"; + } return githubLink; } From 06fb50e3dec84535a7294e6db248ac49489633e4 Mon Sep 17 00:00:00 2001 From: Alice <65933803+alicejli@users.noreply.github.com> Date: Thu, 25 Apr 2024 15:11:09 -0400 Subject: [PATCH 157/168] chore: update to v1.14.0 for release (#263) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 51abda53..13f5fd5e 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -6,7 +6,7 @@ com.microsoft docfx-doclet - 1.13.0-SNAPSHOT + 1.14.0-SNAPSHOT UTF-8 From 57dfb426de4e9a0ef9cafec96818cceebb19eefc Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Mon, 29 Jul 2024 16:17:21 -0400 Subject: [PATCH 158/168] fix: use 'latest' version in generated package overview links (#273) * fix: use 'latest' version in generated package overview links * fix: use equals for string comparisons * ci: update goldens * ci: update goldens * chore: format --- .../microsoft/build/PackageOverviewFile.java | 19 ++++----------- .../com.microsoft.samples.agreements.md | 10 ++++---- ...om.microsoft.samples.commentinheritance.md | 20 ++++++++-------- .../com.microsoft.samples.google.md | 22 ++++++++--------- .../com.microsoft.samples.google.v1.md | 2 +- .../com.microsoft.samples.google.v1.stub.md | 14 +++++------ .../com.microsoft.samples.google.v1beta.md | 4 ++-- .../com.microsoft.samples.google.v1p1alpha.md | 4 ++-- .../com.microsoft.samples.md | 24 +++++++++---------- .../com.microsoft.samples.offers.md | 4 ++-- .../com.microsoft.samples.subpackage.md | 14 +++++------ 11 files changed, 63 insertions(+), 74 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java index 862f5cb3..647c4a88 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java @@ -96,11 +96,7 @@ public PackageOverviewFile( this.PACKAGE_HEADER = "# Package " + packageURIPath + " (" + artifactVersion + ")\n"; String cloudRADChildElementLinkPrefix = - "https://cloud.google.com/java/docs/reference/" - + repoMetadata.getArtifactId() - + "/" - + artifactVersion - + "/"; + "https://cloud.google.com/java/docs/reference/" + repoMetadata.getArtifactId() + "/latest/"; String packageURIPathGithub = packageURIPath.replace('.', '/'); String githubSourcePackageLink = @@ -110,14 +106,7 @@ public PackageOverviewFile( + "/src/main/java/" + packageURIPathGithub; - String cgcRootUri = "https://cloud.google.com/java/docs/reference/"; - this.recommendedPackageLink = - cgcRootUri - + repoMetadata.getArtifactId() - + "/" - + artifactVersion - + "/" - + this.recommendedPackage; + this.recommendedPackageLink = cloudRADChildElementLinkPrefix + this.recommendedPackage; // If the package status is not a GA version, then add a disclaimer around prerelease // implications if (status != null) { @@ -366,7 +355,7 @@ private String getUid() { private static String createHtmlTable( String type, String linkPrefix, List listOfPackageChildrenSummaries) { String tableHeader = type; - if (type == "Client/Settings") { + if (type.equals("Client/Settings")) { tableHeader = "Clients or Settings Class"; } StringBuilder tableBuilder = new StringBuilder(); @@ -381,7 +370,7 @@ private static String createHtmlTable( .append("\n"); for (PackageChildSummary packageChildSummary : listOfPackageChildrenSummaries) { - if (packageChildSummary.type == type) { + if (packageChildSummary.type.equals(type)) { tableBuilder .append("\n") .append(" - + - + - + @@ -48,7 +48,7 @@ Interface - +
Description
com.microsoft.samples.subpackage.Personcom.microsoft.samples.subpackage.Person Class that describes some person @@ -23,12 +27,12 @@ Class that describes some person
com.microsoft.samples.subpackage.Person.IdentificationInfocom.microsoft.samples.subpackage.Person.IdentificationInfo Class that describes person's identification
com.microsoft.samples.subpackage.Tuplecom.microsoft.samples.subpackage.Tuple
Description
com.microsoft.samples.subpackage.Displaycom.microsoft.samples.subpackage.Display Do you see some First code block? @@ -58,7 +62,7 @@ Enum Description
com.microsoft.samples.subpackage.Person.IdentificationInfo.Gendercom.microsoft.samples.subpackage.Person.IdentificationInfo.Gender Enum describes person's gender
Description
com.microsoft.samples.subpackage.CustomExceptioncom.microsoft.samples.subpackage.CustomException
@@ -19,7 +19,7 @@ Class Description
com.microsoft.samples.agreements.AgreementDetailsCollectionOperationscom.microsoft.samples.agreements.AgreementDetailsCollectionOperations Deprecated. Use AgreementMetaData instead. @@ -27,13 +27,13 @@ Description Agreement details collection operations implementation class.
com.microsoft.samples.agreements.AgreementMetaDatacom.microsoft.samples.agreements.AgreementMetaData The AgreementMetaData provides metadata about the agreement type that partner can provide confirmation of customer acceptance.
com.microsoft.samples.agreements.ResourceCollectioncom.microsoft.samples.agreements.ResourceCollection Contains a collection of resources with JSON properties to represent the output Type of objects in collection Description
com.microsoft.samples.agreements.IAgreementDetailsCollectioncom.microsoft.samples.agreements.IAgreementDetailsCollection Deprecated. This one is deprecated :( diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md index f07675a6..4e65c14c 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md @@ -9,7 +9,7 @@ ## This package is not the recommended entry point to using this client library! - For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) for new applications. ## Classes @@ -19,22 +19,22 @@ Class - + - + - + - + @@ -48,27 +48,27 @@ Interface - + - + - + - + - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md index 1d26ee71..940fb336 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md @@ -9,7 +9,7 @@ ## This package is not the recommended entry point to using this client library! - For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) for new applications. ## Client Classes Client classes are the main entry point to using a package. @@ -21,7 +21,7 @@ Client - + - + - + - + - + returns google.rpc.Code.INVALID_ARGUMENT. See - + @@ -91,7 +91,7 @@ Interface - + - + @@ -113,7 +113,7 @@ Enum - + @@ -127,7 +127,7 @@ Exception - + - +
Description
com.microsoft.samples.commentinheritance.Animalcom.microsoft.samples.commentinheritance.Animal Animal.
com.microsoft.samples.commentinheritance.Dogcom.microsoft.samples.commentinheritance.Dog Canine and man's best friend.
com.microsoft.samples.commentinheritance.Herbivorous.Plantcom.microsoft.samples.commentinheritance.Herbivorous.Plant
com.microsoft.samples.commentinheritance.Mammalcom.microsoft.samples.commentinheritance.Mammal Mammal.
Description
com.microsoft.samples.commentinheritance.Carnivorouscom.microsoft.samples.commentinheritance.Carnivorous Marks an Animal that eats other animals.
com.microsoft.samples.commentinheritance.Herbivorouscom.microsoft.samples.commentinheritance.Herbivorous Marks animals that eat plants.
com.microsoft.samples.commentinheritance.Omnivorouscom.microsoft.samples.commentinheritance.Omnivorous Eats plants and animals.
com.microsoft.samples.commentinheritance.Organismcom.microsoft.samples.commentinheritance.Organism
com.microsoft.samples.commentinheritance.Viviparouscom.microsoft.samples.commentinheritance.Viviparous Mammals that give birth to young that develop within the mother's body.
Description
com.microsoft.samples.google.SpeechClientcom.microsoft.samples.google.SpeechClient Service Description: Service that implements Google Cloud Speech API. @@ -39,7 +39,7 @@ Settings Description
com.microsoft.samples.google.ProductSearchSettingscom.microsoft.samples.google.ProductSearchSettings Settings class to configure an instance of ProductSearchClient. @@ -47,7 +47,7 @@ Settings class to configure an instance of
com.microsoft.samples.google.SpeechSettingscom.microsoft.samples.google.SpeechSettings Settings class to configure an instance of SpeechClient. @@ -64,12 +64,12 @@ Class Description
com.microsoft.samples.google.ProductSearchSettings.Buildercom.microsoft.samples.google.ProductSearchSettings.Builder Builder for ProductSearchSettings.
com.microsoft.samples.google.RecognitionAudiocom.microsoft.samples.google.RecognitionAudio Contains audio data in the encoding specified in the RecognitionConfig. @@ -77,7 +77,7 @@ Builder for ProductSearchSettings.
com.microsoft.samples.google.SpeechSettings.Buildercom.microsoft.samples.google.SpeechSettings.Builder Builder for SpeechSettings.
Description
com.microsoft.samples.google.BetaApicom.microsoft.samples.google.BetaApi Indicates a public API that can change at any time, and has no guarantee of API stability and backward-compatibility. @@ -99,7 +99,7 @@ Indicates a public API that can change at any time, and has no guarantee of API

Usage guidelines:

com.microsoft.samples.google.ValidationException.Suppliercom.microsoft.samples.google.ValidationException.Supplier
Description
com.microsoft.samples.google.RecognitionAudio.AudioSourceCasecom.microsoft.samples.google.RecognitionAudio.AudioSourceCase
Description
com.microsoft.samples.google.ValidationExceptioncom.microsoft.samples.google.ValidationException Exception thrown if there is a validation problem with a path template, http config, or related framework methods. Comes as an illegal argument exception subclass. Allows to globally set a diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md index cb50fddf..7ad4133c 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md @@ -17,7 +17,7 @@ Client Description
com.microsoft.samples.google.v1.SpeechClientcom.microsoft.samples.google.v1.SpeechClient Service Description: Service that implements Google Cloud Speech API. diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md index f6f5094c..4bac0192 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md @@ -9,12 +9,12 @@ ## This package is not the recommended entry point to using this client library! - For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) for new applications. ## Stub Package Implications This package is a a base stub class. It is for advanced usage and reflects the underlying API directly. -We generally recommend using the non-stub, latest GA package, such as [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1). Use with caution. +We generally recommend using the non-stub, latest GA package, such as [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1). Use with caution. ## Stub Classes @@ -23,21 +23,21 @@ Stub - + - + - + - + - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md index 96676b5a..364177af 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md @@ -9,7 +9,7 @@ ## This package is not the recommended entry point to using this client library! - For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) for new applications. ## Prerelease Implications @@ -28,7 +28,7 @@ Client - + - +\n") .append(" - + - + - + @@ -48,7 +48,7 @@ Interface - + - + - + - + - + @@ -48,27 +48,27 @@ Interface - + - + - + - + - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml index dce80be2..f72252ed 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.ProductSearchSettings.Builder.yml @@ -1608,4 +1608,4 @@ references: - uid: "?,?>,java.lang.Void>)" name: "?,?>,Void>)" nameWithType: "?,?>,Void>)" - fullName: "?,?>,java.lang.Void>)" \ No newline at end of file + fullName: "?,?>,java.lang.Void>)" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml index 3f3224c4..391dbdfd 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.AudioSourceCase.yml @@ -365,4 +365,4 @@ references: - uid: "T>valueOf(java.lang.Class" name: "T>valueOf(Class" nameWithType: "T>valueOf(Class" - fullName: "T>valueOf(java.lang.Class" \ No newline at end of file + fullName: "T>valueOf(java.lang.Class" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml index 979c33f4..ce59af02 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.RecognitionAudio.yml @@ -1256,4 +1256,4 @@ references: - uid: "ListT>makeMutableCopy(ListT,int)" name: "ListT>makeMutableCopy(ListT,int)" nameWithType: "ListT>makeMutableCopy(ListT,int)" - fullName: "ListT>makeMutableCopy(ListT,int)" \ No newline at end of file + fullName: "ListT>makeMutableCopy(ListT,int)" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml index 48f81f4e..9fb5f2ad 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.Builder.yml @@ -733,4 +733,4 @@ references: - uid: "?,?>,java.lang.Void>)" name: "?,?>,Void>)" nameWithType: "?,?>,Void>)" - fullName: "?,?>,java.lang.Void>)" \ No newline at end of file + fullName: "?,?>,java.lang.Void>)" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml index a51808b5..800a05eb 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.SpeechSettings.yml @@ -786,4 +786,4 @@ references: - uid: "B>toBuilder()" name: "B>toBuilder()" nameWithType: "B>toBuilder()" - fullName: "B>toBuilder()" \ No newline at end of file + fullName: "B>toBuilder()" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md index 940fb336..8f10b407 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.md @@ -21,7 +21,7 @@ Client - + - + - + - + - + returns google.rpc.Code.INVALID_ARGUMENT. See - + @@ -91,7 +91,7 @@ Interface - + - + @@ -113,7 +113,7 @@ Enum - + @@ -127,7 +127,7 @@ Exception - + - + - + - + - + - + - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md index 364177af..95af627b 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1beta.md @@ -28,7 +28,7 @@ Client - + - + - + - + - + - + - + - + - + - + @@ -69,12 +69,12 @@ Interface - + - + - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md index 31676c97..da7068c9 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md @@ -19,7 +19,7 @@ Class - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md index 443caf83..6c0e02f5 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md @@ -19,7 +19,7 @@ Class - + - + - + @@ -46,7 +46,7 @@ Interface - + - + @@ -76,7 +76,7 @@ Exception - + From 77d7d5ad59bf3e175139c520d787b4c31e2f3bd3 Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Fri, 30 Jan 2026 10:48:11 -0500 Subject: [PATCH 167/168] chore: replace old java team with cloud-sdk-java-team (#286) Replace old teams with new ones. b/479542582 --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6b9dcffd..3350cc68 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,4 +4,4 @@ # For syntax help see: # https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax -* @googleapis/yoshi-java \ No newline at end of file +* @googleapis/cloud-sdk-java-team \ No newline at end of file From 239d067291481be99dc1d9a908ddcab18a4cce09 Mon Sep 17 00:00:00 2001 From: Jin Seop Kim Date: Wed, 4 Feb 2026 14:44:03 -0500 Subject: [PATCH 168/168] fix: allow overriding source directory per class in GitHub links (#285) Currently, the doclet assumes the source directory name matches the artifact ID when generating GitHub links. This leads to broken links for libraries where they differ, such as Firestore (artifact: `google-cloud-firestore`, directory: `google-cloud-firestore-admin` for `FirestoreAdminClient`). This change adds an optional `library_path_overrides` map to `RepoMetadata` and updates `ClassBuilder` to check this map using the simple class name before falling back to the artifact ID. Fixes: b/442875200 --- .../com/google/docfx/doclet/RepoMetadata.java | 13 +++++ .../com/microsoft/build/ClassBuilder.java | 15 +++--- .../google/docfx/doclet/RepoMetadataTest.java | 29 +++++++++++ .../com/microsoft/build/ClassBuilderTest.java | 48 +++++++++++++++++++ 4 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 third_party/docfx-doclet-143274/src/test/java/com/google/docfx/doclet/RepoMetadataTest.java diff --git a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java index a6138546..b232498d 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/google/docfx/doclet/RepoMetadata.java @@ -8,6 +8,8 @@ import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Collections; +import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -49,6 +51,9 @@ public class RepoMetadata { @SerializedName("recommended_package") private String recommendedPackage; + @SerializedName("library_path_overrides") + private Map libraryPathOverrides; + private String artifactId; public String getNamePretty() { @@ -135,6 +140,14 @@ public void setApiId(String apiId) { this.apiId = apiId; } + public Map getLibraryPathOverrides() { + return this.libraryPathOverrides != null ? this.libraryPathOverrides : Collections.emptyMap(); + } + + public void setLibraryPathOverrides(Map libraryPathOverrides) { + this.libraryPathOverrides = libraryPathOverrides; + } + // artifactId is parsed from distributionName public String getArtifactId() { String substrings[] = this.distributionName.split(":"); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java index e1e93209..08123e4a 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java @@ -248,13 +248,16 @@ private void addClientClassInfo( private String createClientOverviewTable(TypeElement classElement, RepoMetadata repoMetadata) { String clientURI = classLookup.extractUid(classElement).replaceAll("\\.", "/"); + String className = classElement.getSimpleName().toString(); + + // Check overrides map first, otherwise default to artifactId + String directory = + repoMetadata + .getLibraryPathOverrides() + .getOrDefault(className, repoMetadata.getArtifactId()); + String githubSourceLink = - repoMetadata.getGithubLink() - + "/" - + repoMetadata.getArtifactId() - + "/src/main/java/" - + clientURI - + ".java"; + repoMetadata.getGithubLink() + "/" + directory + "/src/main/java/" + clientURI + ".java"; StringBuilder tableBuilder = new StringBuilder(); tableBuilder .append("
Description
com.microsoft.samples.google.v1.stub.GrpcSpeechStubcom.microsoft.samples.google.v1.stub.GrpcSpeechStub gRPC stub implementation for the Speech service API.

This class is for advanced usage and reflects the underlying API directly.

com.microsoft.samples.google.v1.stub.HttpJsonSpeechStubcom.microsoft.samples.google.v1.stub.HttpJsonSpeechStub REST stub implementation for the Speech service API.

This class is for advanced usage and reflects the underlying API directly.

com.microsoft.samples.google.v1.stub.SpeechStubcom.microsoft.samples.google.v1.stub.SpeechStub Base stub class for the Speech service API. @@ -54,7 +54,7 @@ Settings Description
com.microsoft.samples.google.v1.stub.SpeechStubSettingscom.microsoft.samples.google.v1.stub.SpeechStubSettings Settings class to configure an instance of com.google.cloud.speech.v1p1beta1.stub.SpeechStub. @@ -71,7 +71,7 @@ Class Description
com.microsoft.samples.google.v1.stub.SpeechStubSettings.Buildercom.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder Builder for SpeechStubSettings.
Description
com.microsoft.samples.google.v1beta.SpeechClientcom.microsoft.samples.google.v1beta.SpeechClient Service Description: Service that implements Google Cloud Speech API. diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md index 0001294b..29535775 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md @@ -9,7 +9,7 @@ ## This package is not the recommended entry point to using this client library! - For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) for new applications. ## Prerelease Implications @@ -28,7 +28,7 @@ Client Description
com.microsoft.samples.google.v1p1alpha.SpeechClientcom.microsoft.samples.google.v1p1alpha.SpeechClient Service Description: Service that implements Google Cloud Speech API. diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md index 0b3bab6e..a67a89e0 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md @@ -9,7 +9,7 @@ ## This package is not the recommended entry point to using this client library! - For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) for new applications. ## Classes @@ -19,43 +19,43 @@ Class - + - + - + - + - + - + - + - + @@ -69,12 +69,12 @@ Interface - + - + - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md index 8280fce5..31676c97 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.offers.md @@ -9,7 +9,7 @@ ## This package is not the recommended entry point to using this client library! - For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) for new applications. ## Classes
Description
com.microsoft.samples.BasePartnerComponentcom.microsoft.samples.BasePartnerComponent Holds common partner component properties and behavior. All components should inherit from this class. The context object type.
com.microsoft.samples.BasePartnerComponentStringcom.microsoft.samples.BasePartnerComponentString Holds common partner component properties and behavior. The context is string type by default.
com.microsoft.samples.ExceptionHandlercom.microsoft.samples.ExceptionHandler Exception retry algorithm implementation used by RetryHelper.
com.microsoft.samples.ExceptionHandler.Buildercom.microsoft.samples.ExceptionHandler.Builder ExceptionHandler builder.
com.microsoft.samples.KeyValuePaircom.microsoft.samples.KeyValuePair
com.microsoft.samples.Linkcom.microsoft.samples.Link
com.microsoft.samples.Subpackagecom.microsoft.samples.Subpackage
com.microsoft.samples.SuperHerocom.microsoft.samples.SuperHero Hero is the main entity we will be using to something
Description
com.microsoft.samples.ExceptionHandler.Interceptorcom.microsoft.samples.ExceptionHandler.Interceptor
com.microsoft.samples.IPartnercom.microsoft.samples.IPartner The main entry point into using the partner SDK functionality. Represents a partner and encapsulates all the behavior attached to partners. Use this interface to get to the partner's @@ -90,7 +90,7 @@ Enum Description
com.microsoft.samples.ExceptionHandler.Interceptor.RetryResultcom.microsoft.samples.ExceptionHandler.Interceptor.RetryResult
@@ -19,7 +19,7 @@ Class - + diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md index fb830aee..443caf83 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.md @@ -9,7 +9,7 @@ ## This package is not the recommended entry point to using this client library! - For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/0.18.0/com.microsoft.samples.google.v1) for new applications. + For this library, we recommend using [com.microsoft.samples.google.v1](https://cloud.google.com/java/docs/reference/google-cloud-apikeys/latest/com.microsoft.samples.google.v1) for new applications. ## Classes
Description
com.microsoft.samples.offers.Offercom.microsoft.samples.offers.Offer Represents a form of product availability to customer
@@ -19,7 +19,7 @@ Class - + - + - + @@ -46,7 +46,7 @@ Interface - + - + @@ -76,7 +76,7 @@ Exception - + From 5d3aeccd382d5a493c267942995e30c307ae8c03 Mon Sep 17 00:00:00 2001 From: Burke Davison <40617934+burkedavison@users.noreply.github.com> Date: Mon, 29 Jul 2024 16:25:06 -0400 Subject: [PATCH 159/168] chore: update to v1.15.0 for release (#274) --- third_party/docfx-doclet-143274/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 13f5fd5e..4e41fa43 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -6,7 +6,7 @@ com.microsoftdocfx-doclet - 1.14.0-SNAPSHOT + 1.15.0-SNAPSHOT UTF-8 From f7e27b669608e67e31bff54f12ade25f8590931c Mon Sep 17 00:00:00 2001 From: Min Zhu Date: Thu, 21 Nov 2024 14:15:28 -0500 Subject: [PATCH 160/168] fix: switch from Groovy to Kotlin for Gradle build BOM dependency sample code. (#278) --- .../java/com/microsoft/model/LibraryOverviewFile.java | 8 ++++---- .../test/resources/expected-generated-files/overview.md | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java index 1495a24d..63e99ce9 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java @@ -172,12 +172,12 @@ public LibraryOverviewFile( + repoMetadata.getArtifactId() + " artifact.\n" + "
\n"
-              + "implementation platform('com.google.cloud:libraries-bom:"
+              + "implementation(platform("com.google.cloud:libraries-bom:"
               + librariesBomVersion
-              + "')\n"
-              + "implementation '"
+              + ""))\n"
+              + "implementation(""
               + repoMetadata.getDistributionName()
-              + "'\n"
+              + "")\n"
               + "
\n\n" + "The platform and enforcedPlatform keywords supply dependency versions\n" + "declared in a BOM. The enforcedPlatform keyword enforces the dependency\n" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md index df45ffd4..ed379159 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md @@ -61,8 +61,8 @@ dependency declarations in the artifact's build.gradle file. The example below demonstrates how you would import the BOM and include the google-cloud-apikeys artifact.
-implementation platform('com.google.cloud:libraries-bom:26.19.0')
-implementation 'com.google.cloud:google-cloud-apikeys'
+implementation(platform("com.google.cloud:libraries-bom:26.19.0"))
+implementation("com.google.cloud:google-cloud-apikeys")
 
The platform and enforcedPlatform keywords supply dependency versions From 3158fc7a879ead250a3bda16b6da396db1141fe7 Mon Sep 17 00:00:00 2001 From: Jin Seop Kim <1007sky@gmail.com> Date: Wed, 28 May 2025 10:42:46 -0400 Subject: [PATCH 161/168] fix: remove white spaces between colon and version (#279) --- .../main/java/com/microsoft/model/LibraryOverviewFile.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java index 63e99ce9..80680de7 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java @@ -46,7 +46,7 @@ public LibraryOverviewFile( this.outputPath = outputPath; this.fileName = fileName; this.artifactVersion = artifactVersion; - this.librariesBomVersion = librariesBomVersion; + this.librariesBomVersion = librariesBomVersion.trim(); this.repoMetadataFilePath = repoMetadataFilePath; this.recommendedPackage = recommendedPackage; @@ -173,7 +173,7 @@ public LibraryOverviewFile( + " artifact.\n" + "
\n"
               + "implementation(platform("com.google.cloud:libraries-bom:"
-              + librariesBomVersion
+              + this.librariesBomVersion
               + ""))\n"
               + "implementation(""
               + repoMetadata.getDistributionName()

From 120cd16deaf03808017efa99471bdfc45fdf04dc Mon Sep 17 00:00:00 2001
From: Jin Seop Kim 
Date: Wed, 28 May 2025 15:42:16 -0400
Subject: [PATCH 162/168] chore: update to v1.16.0 (#280)

---
 third_party/docfx-doclet-143274/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml
index 4e41fa43..2e347308 100644
--- a/third_party/docfx-doclet-143274/pom.xml
+++ b/third_party/docfx-doclet-143274/pom.xml
@@ -6,7 +6,7 @@
 
   com.microsoft
   docfx-doclet
-  1.15.0-SNAPSHOT
+  1.16.0-SNAPSHOT
 
   
     UTF-8

From 0d5d71459534b682c4c12e0861b2e2190d29cb90 Mon Sep 17 00:00:00 2001
From: Diego Marquez 
Date: Fri, 30 May 2025 16:26:01 -0400
Subject: [PATCH 163/168] fix: remove `(includes samples)` from overview link

b/404600681
The samples inside the GitHub repositories are not meant for user consumption and are better portrayed in https://cloud.google.com/docs/samples
---
 .../src/main/java/com/microsoft/model/LibraryOverviewFile.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java
index 80680de7..3adfef30 100644
--- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java
+++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java
@@ -87,7 +87,7 @@ public LibraryOverviewFile(
             + " Product Reference\n"
             + "     
\n" + + "\">GitHub Repository\n" + " \n" From 9497395db2c387b183564f41848f585b551cdc93 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 30 May 2025 16:30:32 -0400 Subject: [PATCH 164/168] Revert "fix: remove `(includes samples)` from overview link " This reverts commit 0d5d71459534b682c4c12e0861b2e2190d29cb90. --- .../src/main/java/com/microsoft/model/LibraryOverviewFile.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java index 3adfef30..80680de7 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java @@ -87,7 +87,7 @@ public LibraryOverviewFile( + " Product Reference\n" + " \n" + + "\">GitHub Repository (includes samples)\n" + " \n" From 4a2acc1de77957ed2954e1364dd85f1a44e351d7 Mon Sep 17 00:00:00 2001 From: Diego Marquez Date: Mon, 2 Jun 2025 14:13:46 -0400 Subject: [PATCH 165/168] fix: remove `(includes samples)` from overview link (#282) * fix: remove `(includes samples)` from overview link b/404600681 The samples inside the GitHub repositories are not meant for user consumption and are better portrayed in https://cloud.google.com/docs/samples * test: adjust golden file --- .../src/main/java/com/microsoft/model/LibraryOverviewFile.java | 2 +- .../src/test/resources/expected-generated-files/overview.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java index 80680de7..3adfef30 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/LibraryOverviewFile.java @@ -87,7 +87,7 @@ public LibraryOverviewFile( + " Product Reference\n" + " \n" + + "\">GitHub Repository\n" + " \n" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md index ed379159..1304190a 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/overview.md @@ -6,7 +6,7 @@
Description
com.microsoft.samples.subpackage.Personcom.microsoft.samples.subpackage.Person Class that describes some person @@ -27,12 +27,12 @@ Class that describes some person
com.microsoft.samples.subpackage.Person.IdentificationInfocom.microsoft.samples.subpackage.Person.IdentificationInfo Class that describes person's identification
com.microsoft.samples.subpackage.Tuplecom.microsoft.samples.subpackage.Tuple
Description
com.microsoft.samples.subpackage.Displaycom.microsoft.samples.subpackage.Display Do you see some First code block? @@ -62,7 +62,7 @@ Enum Description
com.microsoft.samples.subpackage.Person.IdentificationInfo.Gendercom.microsoft.samples.subpackage.Person.IdentificationInfo.Gender Enum describes person's gender
Description
com.microsoft.samples.subpackage.CustomExceptioncom.microsoft.samples.subpackage.CustomException
GitHub Repository (includes samples)Maven artifactGitHub RepositoryMaven artifactGitHub Repository (includes samples)Maven artifact
- +
API Keys API Product ReferenceGitHub Repository (includes samples)GitHub Repository Maven artifact
From 53bc72bff17b1d79b93b0c9fdc9cfd803a2b9c44 Mon Sep 17 00:00:00 2001 From: Diego Marquez Date: Fri, 7 Nov 2025 10:49:23 -0500 Subject: [PATCH 166/168] fix: add wrapping for package summary (#284) * fix: add wrapping for package summary * chore: use regex matcher instead * chore: handle no match edge case * chore: simplify logic * chore: update goldens --- .../microsoft/build/PackageOverviewFile.java | 17 +++++++++++++- .../build/PackageOverviewFileTest.java | 13 +++++++++++ ...ceptionHandler.Interceptor.RetryResult.yml | 2 +- .../com.microsoft.samples.agreements.md | 8 +++---- ...om.microsoft.samples.commentinheritance.md | 18 +++++++-------- ...s.google.ProductSearchSettings.Builder.yml | 2 +- ...oogle.RecognitionAudio.AudioSourceCase.yml | 2 +- ...rosoft.samples.google.RecognitionAudio.yml | 2 +- ....samples.google.SpeechSettings.Builder.yml | 2 +- ...icrosoft.samples.google.SpeechSettings.yml | 2 +- .../com.microsoft.samples.google.md | 20 ++++++++--------- .../com.microsoft.samples.google.v1.md | 2 +- ...gle.v1.stub.SpeechStubSettings.Builder.yml | 2 +- ...ples.google.v1.stub.SpeechStubSettings.yml | 2 +- .../com.microsoft.samples.google.v1.stub.md | 10 ++++----- .../com.microsoft.samples.google.v1beta.md | 2 +- .../com.microsoft.samples.google.v1p1alpha.md | 2 +- .../com.microsoft.samples.md | 22 +++++++++---------- .../com.microsoft.samples.offers.md | 2 +- .../com.microsoft.samples.subpackage.md | 12 +++++----- 20 files changed, 86 insertions(+), 58 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java index 647c4a88..a5c95058 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/PackageOverviewFile.java @@ -3,6 +3,7 @@ import static com.microsoft.build.BuilderUtil.LANGS; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.docfx.doclet.RepoMetadata; import com.microsoft.lookup.PackageLookup; @@ -376,7 +377,7 @@ private static String createHtmlTable( .append("
") - .append(packageChildSummary.uid) + .append(withLineBreaks(packageChildSummary.uid)) .append("\n") .append(packageChildSummary.summary != null ? packageChildSummary.summary : "") @@ -417,4 +418,18 @@ public String getFileName() { public void setFileName(String fileName) { this.fileName = fileName; } + + @VisibleForTesting + static String withLineBreaks(String uid) { + Pattern p = Pattern.compile("[a-zA-Z\\d][a-z\\d]+\\.|[A-Z][a-z]+"); + Matcher m = p.matcher(uid); + if (!m.find()) { + return uid; + } + StringBuilder s = new StringBuilder(); + while (m.find()) { + m.appendReplacement(s, "" + m.group()); + } + return s.toString(); + } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/PackageOverviewFileTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/PackageOverviewFileTest.java index baf6f8fa..9a7ca4a2 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/PackageOverviewFileTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/PackageOverviewFileTest.java @@ -45,4 +45,17 @@ public void testExtractPackageBaseURIBeforeVersion() { assertEquals("N/A", packageInfo_4.get(0)); assertEquals("N/A", packageInfo_4.get(1)); } + + @Test + public void testWithLineBreaks() { + String uid = + "com.google.cloud.securitycenter.v2.AttackPathName.OrganizationLocationSimulationValuedResourceAttackPathBuilder"; + String converted = PackageOverviewFile.withLineBreaks(uid); + assertEquals( + "com.google.cloud.securitycenter.v2.AttackPathName.OrganizationLocationSimulationValuedResourceAttackPathBuilder", + converted); + + String nonMatchable = "123non-matchable"; + assertEquals(nonMatchable, PackageOverviewFile.withLineBreaks(nonMatchable)); + } } diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml index 80ec1aed..1bf26120 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.ExceptionHandler.Interceptor.RetryResult.yml @@ -273,4 +273,4 @@ references: - uid: "T>valueOf(java.lang.Class" name: "T>valueOf(Class" nameWithType: "T>valueOf(Class" - fullName: "T>valueOf(java.lang.Class" \ No newline at end of file + fullName: "T>valueOf(java.lang.Class" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md index 14650eb1..fd7cbe5c 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.agreements.md @@ -19,7 +19,7 @@ Class Description
com.microsoft.samples.agreements.AgreementDetailsCollectionOperationscom.microsoft.samples.agreements.AgreementDetailsCollectionOperations Deprecated. Use AgreementMetaData instead. @@ -27,13 +27,13 @@ Description Agreement details collection operations implementation class.
com.microsoft.samples.agreements.AgreementMetaDatacom.microsoft.samples.agreements.AgreementMetaData The AgreementMetaData provides metadata about the agreement type that partner can provide confirmation of customer acceptance.
com.microsoft.samples.agreements.ResourceCollectioncom.microsoft.samples.agreements.ResourceCollection Contains a collection of resources with JSON properties to represent the output Type of objects in collection Description
com.microsoft.samples.agreements.IAgreementDetailsCollectioncom.microsoft.samples.agreements.IAgreementDetailsCollection Deprecated. This one is deprecated :( diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md index 4e65c14c..91cfe392 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.commentinheritance.md @@ -19,22 +19,22 @@ Class Description
com.microsoft.samples.commentinheritance.Animalcom.microsoft.samples.commentinheritance.Animal Animal.
com.microsoft.samples.commentinheritance.Dogcom.microsoft.samples.commentinheritance.Dog Canine and man's best friend.
com.microsoft.samples.commentinheritance.Herbivorous.Plantcom.microsoft.samples.commentinheritance.Herbivorous.Plant
com.microsoft.samples.commentinheritance.Mammalcom.microsoft.samples.commentinheritance.Mammal Mammal.
Description
com.microsoft.samples.commentinheritance.Carnivorouscom.microsoft.samples.commentinheritance.Carnivorous Marks an Animal that eats other animals.
com.microsoft.samples.commentinheritance.Herbivorouscom.microsoft.samples.commentinheritance.Herbivorous Marks animals that eat plants.
com.microsoft.samples.commentinheritance.Omnivorouscom.microsoft.samples.commentinheritance.Omnivorous Eats plants and animals.
com.microsoft.samples.commentinheritance.Organismcom.microsoft.samples.commentinheritance.Organism
com.microsoft.samples.commentinheritance.Viviparouscom.microsoft.samples.commentinheritance.Viviparous Mammals that give birth to young that develop within the mother's body.
Description
com.microsoft.samples.google.SpeechClientcom.microsoft.samples.google.SpeechClient Service Description: Service that implements Google Cloud Speech API. @@ -39,7 +39,7 @@ Settings Description
com.microsoft.samples.google.ProductSearchSettingscom.microsoft.samples.google.ProductSearchSettings Settings class to configure an instance of ProductSearchClient. @@ -47,7 +47,7 @@ Settings class to configure an instance of
com.microsoft.samples.google.SpeechSettingscom.microsoft.samples.google.SpeechSettings Settings class to configure an instance of SpeechClient. @@ -64,12 +64,12 @@ Class Description
com.microsoft.samples.google.ProductSearchSettings.Buildercom.microsoft.samples.google.ProductSearchSettings.Builder Builder for ProductSearchSettings.
com.microsoft.samples.google.RecognitionAudiocom.microsoft.samples.google.RecognitionAudio Contains audio data in the encoding specified in the RecognitionConfig. @@ -77,7 +77,7 @@ Builder for ProductSearchSettings.
com.microsoft.samples.google.SpeechSettings.Buildercom.microsoft.samples.google.SpeechSettings.Builder Builder for SpeechSettings.
Description
com.microsoft.samples.google.BetaApicom.microsoft.samples.google.BetaApi Indicates a public API that can change at any time, and has no guarantee of API stability and backward-compatibility. @@ -99,7 +99,7 @@ Indicates a public API that can change at any time, and has no guarantee of API

Usage guidelines:

com.microsoft.samples.google.ValidationException.Suppliercom.microsoft.samples.google.ValidationException.Supplier
Description
com.microsoft.samples.google.RecognitionAudio.AudioSourceCasecom.microsoft.samples.google.RecognitionAudio.AudioSourceCase
Description
com.microsoft.samples.google.ValidationExceptioncom.microsoft.samples.google.ValidationException Exception thrown if there is a validation problem with a path template, http config, or related framework methods. Comes as an illegal argument exception subclass. Allows to globally set a diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md index 7ad4133c..8f3b533b 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.md @@ -17,7 +17,7 @@ Client Description
com.microsoft.samples.google.v1.SpeechClientcom.microsoft.samples.google.v1.SpeechClient Service Description: Service that implements Google Cloud Speech API. diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml index 9fa53bd5..9945f7a7 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder.yml @@ -775,4 +775,4 @@ references: - uid: "B>build()" name: "B>build()" nameWithType: "B>build()" - fullName: "B>build()" \ No newline at end of file + fullName: "B>build()" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml index 8951f4cf..7cf8bb9a 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.SpeechStubSettings.yml @@ -906,4 +906,4 @@ references: isExternal: true name: "StubSettings" nameWithType: "StubSettings" - fullName: "com.google.api.gax.rpc.StubSettings" \ No newline at end of file + fullName: "com.google.api.gax.rpc.StubSettings" diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md index 4bac0192..6bb92abb 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1.stub.md @@ -23,21 +23,21 @@ Stub Description
com.microsoft.samples.google.v1.stub.GrpcSpeechStubcom.microsoft.samples.google.v1.stub.GrpcSpeechStub gRPC stub implementation for the Speech service API.

This class is for advanced usage and reflects the underlying API directly.

com.microsoft.samples.google.v1.stub.HttpJsonSpeechStubcom.microsoft.samples.google.v1.stub.HttpJsonSpeechStub REST stub implementation for the Speech service API.

This class is for advanced usage and reflects the underlying API directly.

com.microsoft.samples.google.v1.stub.SpeechStubcom.microsoft.samples.google.v1.stub.SpeechStub Base stub class for the Speech service API. @@ -54,7 +54,7 @@ Settings Description
com.microsoft.samples.google.v1.stub.SpeechStubSettingscom.microsoft.samples.google.v1.stub.SpeechStubSettings Settings class to configure an instance of com.google.cloud.speech.v1p1beta1.stub.SpeechStub. @@ -71,7 +71,7 @@ Class Description
com.microsoft.samples.google.v1.stub.SpeechStubSettings.Buildercom.microsoft.samples.google.v1.stub.SpeechStubSettings.Builder Builder for SpeechStubSettings.
Description
com.microsoft.samples.google.v1beta.SpeechClientcom.microsoft.samples.google.v1beta.SpeechClient Service Description: Service that implements Google Cloud Speech API. diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md index 29535775..1c81a5b4 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.google.v1p1alpha.md @@ -28,7 +28,7 @@ Client Description
com.microsoft.samples.google.v1p1alpha.SpeechClientcom.microsoft.samples.google.v1p1alpha.SpeechClient Service Description: Service that implements Google Cloud Speech API. diff --git a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md index a67a89e0..90f0188b 100644 --- a/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md +++ b/third_party/docfx-doclet-143274/src/test/resources/expected-generated-files/com.microsoft.samples.md @@ -19,43 +19,43 @@ Class Description
com.microsoft.samples.BasePartnerComponentcom.microsoft.samples.BasePartnerComponent Holds common partner component properties and behavior. All components should inherit from this class. The context object type.
com.microsoft.samples.BasePartnerComponentStringcom.microsoft.samples.BasePartnerComponentString Holds common partner component properties and behavior. The context is string type by default.
com.microsoft.samples.ExceptionHandlercom.microsoft.samples.ExceptionHandler Exception retry algorithm implementation used by RetryHelper.
com.microsoft.samples.ExceptionHandler.Buildercom.microsoft.samples.ExceptionHandler.Builder ExceptionHandler builder.
com.microsoft.samples.KeyValuePaircom.microsoft.samples.KeyValuePair
com.microsoft.samples.Linkcom.microsoft.samples.Link
com.microsoft.samples.Subpackagecom.microsoft.samples.Subpackage
com.microsoft.samples.SuperHerocom.microsoft.samples.SuperHero Hero is the main entity we will be using to something
Description
com.microsoft.samples.ExceptionHandler.Interceptorcom.microsoft.samples.ExceptionHandler.Interceptor
com.microsoft.samples.IPartnercom.microsoft.samples.IPartner The main entry point into using the partner SDK functionality. Represents a partner and encapsulates all the behavior attached to partners. Use this interface to get to the partner's @@ -90,7 +90,7 @@ Enum Description
com.microsoft.samples.ExceptionHandler.Interceptor.RetryResultcom.microsoft.samples.ExceptionHandler.Interceptor.RetryResult
Description
com.microsoft.samples.offers.Offercom.microsoft.samples.offers.Offer Represents a form of product availability to customer
Description
com.microsoft.samples.subpackage.Personcom.microsoft.samples.subpackage.Person Class that describes some person @@ -27,12 +27,12 @@ Class that describes some person
com.microsoft.samples.subpackage.Person.IdentificationInfocom.microsoft.samples.subpackage.Person.IdentificationInfo Class that describes person's identification
com.microsoft.samples.subpackage.Tuplecom.microsoft.samples.subpackage.Tuple
Description
com.microsoft.samples.subpackage.Displaycom.microsoft.samples.subpackage.Display Do you see some First code block? @@ -62,7 +62,7 @@ Enum Description
com.microsoft.samples.subpackage.Person.IdentificationInfo.Gendercom.microsoft.samples.subpackage.Person.IdentificationInfo.Gender Enum describes person's gender
Description
com.microsoft.samples.subpackage.CustomExceptioncom.microsoft.samples.subpackage.CustomException
") diff --git a/third_party/docfx-doclet-143274/src/test/java/com/google/docfx/doclet/RepoMetadataTest.java b/third_party/docfx-doclet-143274/src/test/java/com/google/docfx/doclet/RepoMetadataTest.java new file mode 100644 index 00000000..3b7d3317 --- /dev/null +++ b/third_party/docfx-doclet-143274/src/test/java/com/google/docfx/doclet/RepoMetadataTest.java @@ -0,0 +1,29 @@ +package com.google.docfx.doclet; + +import static org.junit.Assert.assertEquals; + +import com.google.gson.Gson; +import org.junit.Test; + +public class RepoMetadataTest { + + @Test + public void testParseWithLibraryPathOverrides() { + String json = + "{ " + + "\"distribution_name\": \"com.google.cloud:google-cloud-firestore\", " + + "\"library_path_overrides\": { " + + " \"FirestoreAdminClient\": \"google-cloud-firestore-admin\" " + + "}, " + + "\"repo\": \"googleapis/java-firestore\" " + + "}"; + + RepoMetadata metadata = new Gson().fromJson(json, RepoMetadata.class); + + assertEquals("google-cloud-firestore", metadata.getArtifactId()); + // Verify the map is populated correctly + assertEquals( + "google-cloud-firestore-admin", + metadata.getLibraryPathOverrides().get("FirestoreAdminClient")); + } +} diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java index d3945f64..a09a5371 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java @@ -16,8 +16,10 @@ package com.microsoft.build; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; +import com.google.docfx.doclet.RepoMetadata; import com.google.testing.compile.CompilationRule; import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; @@ -28,6 +30,9 @@ import com.sun.source.util.DocTrees; import java.io.File; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import javax.lang.model.element.Name; // Required for mocking getSimpleName() import javax.lang.model.element.TypeElement; import javax.lang.model.util.Elements; import jdk.javadoc.doclet.DocletEnvironment; @@ -89,4 +94,47 @@ public void addConstructorsInfo() { Collection constructorItems = container.getItems(); assertEquals("Container should contain 2 constructor items", constructorItems.size(), 2); } + + @Test + public void createClientOverviewTable_usesLibraryPathOverride() { + // 1. Setup Mock RepoMetadata + RepoMetadata repoMetadata = new RepoMetadata(); + repoMetadata.setRepo("googleapis/java-firestore"); + repoMetadata.setDistributionName("com.google.cloud:google-cloud-firestore:1.0.0"); + + Map overrides = new HashMap<>(); + overrides.put("FirestoreAdminClient", "google-cloud-firestore-admin"); + repoMetadata.setLibraryPathOverrides(overrides); + + // 2. Mock ClassLookup and Element + ClassLookup classLookup = Mockito.mock(ClassLookup.class); + TypeElement classElement = Mockito.mock(TypeElement.class); + + Name simpleName = Mockito.mock(Name.class); + when(simpleName.toString()).thenReturn("FirestoreAdminClient"); + when(classElement.getSimpleName()).thenReturn(simpleName); + + when(classLookup.extractUid(classElement)) + .thenReturn("com.google.cloud.firestore.v1.FirestoreAdminClient"); + + // 3. Test + ClassBuilder builder = new ClassBuilder(null, classLookup, null, null, null, null); + + try { + java.lang.reflect.Method method = + ClassBuilder.class.getDeclaredMethod( + "createClientOverviewTable", TypeElement.class, RepoMetadata.class); + method.setAccessible(true); + String html = (String) method.invoke(builder, classElement, repoMetadata); + + // 4. Verify link contains "google-cloud-firestore-admin" and the double slash "//" + assertTrue( + "Link should use the override directory", + html.contains( + "googleapis/java-firestore/tree/main//google-cloud-firestore-admin/src/main/java")); + + } catch (Exception e) { + throw new RuntimeException(e); + } + } }