Skip to content

Commit 3bab74a

Browse files
Adding new annotation, InternalExtensionOnly (#34)
Also fixing a warning.
1 parent fc96a82 commit 3bab74a

File tree

4 files changed

+84
-4
lines changed

4 files changed

+84
-4
lines changed

sdk-platform-java/api-common-java/src/main/java/com/google/api/core/ApiFutures.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,9 @@ public static <V> ApiFuture<List<V>> allAsList(
105105
return new ListenableFutureToApiFuture<>(
106106
Futures.allAsList(
107107
Iterables.transform(
108-
(Iterable<ApiFuture<V>>) futures,
109-
new Function<ApiFuture<V>, ListenableFuture<V>>() {
110-
public ListenableFuture<V> apply(ApiFuture<V> apiFuture) {
108+
futures,
109+
new Function<ApiFuture<? extends V>, ListenableFuture<? extends V>>() {
110+
public ListenableFuture<? extends V> apply(ApiFuture<? extends V> apiFuture) {
111111
return listenableFutureForApiFuture(apiFuture);
112112
}
113113
})));

sdk-platform-java/api-common-java/src/main/java/com/google/api/core/BetaApi.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@
4747
* use it.</li>
4848
* <li>This annotation should only be added to new APIs. Adding it to an existing API is considered
4949
* API-breaking.</li>
50-
* <li>Removing this annotation from an API gives it stable status.</li>
50+
* <li>Removing this annotation from an API gives it stable status, assuming the API doesn't have
51+
* other annotations denoting instability (such as {@link InternalApi} or
52+
* {@link InternalExtensionOnly}).</li>
5153
* </ol>
5254
*/
5355
@BetaApi

sdk-platform-java/api-common-java/src/main/java/com/google/api/core/InternalApi.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,12 @@
4040
* Annotates a program element (class, method, package etc) which is internal to its containing
4141
* library, not part of the public API, and should not be used by users of the library.
4242
*
43+
* <p>
4344
* This annotation only makes sense on APIs that are not private. Its existence is necessary because
4445
* Java does not have a visibility level for code within a compilation unit.
46+
*
47+
* <p>
48+
* Adding this annotation to an API is considered API-breaking.
4549
*/
4650
@BetaApi
4751
@Retention(RetentionPolicy.RUNTIME)
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* Copyright 2017, Google Inc.
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are
7+
* met:
8+
*
9+
* * Redistributions of source code must retain the above copyright
10+
* notice, this list of conditions and the following disclaimer.
11+
* * Redistributions in binary form must reproduce the above
12+
* copyright notice, this list of conditions and the following disclaimer
13+
* in the documentation and/or other materials provided with the
14+
* distribution.
15+
* * Neither the name of Google Inc. nor the names of its
16+
* contributors may be used to endorse or promote products derived from
17+
* this software without specific prior written permission.
18+
*
19+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30+
*/
31+
package com.google.api.core;
32+
33+
import java.lang.annotation.Documented;
34+
import java.lang.annotation.ElementType;
35+
import java.lang.annotation.Retention;
36+
import java.lang.annotation.RetentionPolicy;
37+
import java.lang.annotation.Target;
38+
39+
/**
40+
* Indicates a public API that is stable for callers to use, but has no guarantee of stability for
41+
* extension. Consequently, the API should only be extended within the package containing the API.
42+
*
43+
* <p>
44+
* For example:
45+
* <ul>
46+
* <li>An interface marked with this annotation can have new methods added to it.</li>
47+
* <li>A non-final class with this annotation can be marked final.</li>
48+
* <li>A class with this annotation can have new abstract methods added.</li>
49+
* <li>a non-final method with this annotation can be marked final.</li>
50+
* </ul>
51+
*
52+
* <p>
53+
* The list above is just for illustration purposes and is not exhaustive.
54+
*
55+
* <p>
56+
* Adding this annotation to an API is considered API-breaking.
57+
*/
58+
@BetaApi
59+
@Retention(RetentionPolicy.RUNTIME)
60+
@Target({
61+
ElementType.ANNOTATION_TYPE,
62+
ElementType.CONSTRUCTOR,
63+
ElementType.FIELD,
64+
ElementType.METHOD,
65+
ElementType.PACKAGE,
66+
ElementType.TYPE
67+
})
68+
@Documented
69+
public @interface InternalExtensionOnly {
70+
/**
71+
* Context information on why the interface/class is annotated with InternalExtensionOnly.
72+
*/
73+
String value() default "";
74+
}

0 commit comments

Comments
 (0)