summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Duffin <paulduffin@google.com>2017-06-27 15:59:56 +0100
committerPaul Duffin <paulduffin@google.com>2017-06-28 12:34:53 +0100
commit06244b0031643c1b5a616db851025d5d07780a3a (patch)
tree6dd28bc151e160e01bd0e5194053ed2d7fd386ad
parent8d026d9abec0b0d1a5bd0613bf31eff0ba667a11 (diff)
downloadplatform_external_doclava-06244b0031643c1b5a616db851025d5d07780a3a.tar.gz
platform_external_doclava-06244b0031643c1b5a616db851025d5d07780a3a.tar.bz2
platform_external_doclava-06244b0031643c1b5a616db851025d5d07780a3a.zip
Add -stubsourceonly option
Add option to cause Doclava to only generate stubs for classes whose source is provided. This makes it possible to create stubs for a subset of all the classes in a package. This is needed for generating stubs for the JUnit and related classes being removed from the Android API which includes com.android.internal.util.Predicate. Bug: 30188076 Test: make update-legacy-test-api Change-Id: Icc7355cb562072f5604b6c25c4d620002924317c
-rw-r--r--src/com/google/doclava/Doclava.java9
-rw-r--r--src/com/google/doclava/Stubs.java8
2 files changed, 15 insertions, 2 deletions
diff --git a/src/com/google/doclava/Doclava.java b/src/com/google/doclava/Doclava.java
index 9d3f1b6..4a41b32 100644
--- a/src/com/google/doclava/Doclava.java
+++ b/src/com/google/doclava/Doclava.java
@@ -183,6 +183,7 @@ public class Doclava {
String exactApiFile = null;
String debugStubsFile = "";
HashSet<String> stubPackages = null;
+ boolean stubSourceOnly = false;
ArrayList<String> knownTagsFiles = new ArrayList<String>();
root = r;
@@ -281,6 +282,8 @@ public class Doclava {
for (String pkg : a[1].split(":")) {
stubPackages.add(pkg);
}
+ } else if (a[0].equals("-stubsourceonly")) {
+ stubSourceOnly = true;
} else if (a[0].equals("-sdkvalues")) {
sdkValuePath = a[1];
} else if (a[0].equals("-api")) {
@@ -517,7 +520,8 @@ public class Doclava {
if (stubsDir != null || apiFile != null || proguardFile != null || removedApiFile != null
|| exactApiFile != null) {
Stubs.writeStubsAndApi(stubsDir, apiFile, proguardFile, removedApiFile, exactApiFile,
- stubPackages);
+ stubPackages,
+ stubSourceOnly);
}
Errors.printErrors();
@@ -788,6 +792,9 @@ public class Doclava {
if (option.equals("-stubpackages")) {
return 2;
}
+ if (option.equals("-stubsourceonly")) {
+ return 1;
+ }
if (option.equals("-sdkvalues")) {
return 2;
}
diff --git a/src/com/google/doclava/Stubs.java b/src/com/google/doclava/Stubs.java
index fdd9d0d..d1dae32 100644
--- a/src/com/google/doclava/Stubs.java
+++ b/src/com/google/doclava/Stubs.java
@@ -28,6 +28,8 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -44,7 +46,8 @@ import java.util.stream.Collectors;
public class Stubs {
public static void writeStubsAndApi(String stubsDir, String apiFile, String keepListFile,
- String removedApiFile, String exactApiFile, HashSet<String> stubPackages) {
+ String removedApiFile, String exactApiFile, HashSet<String> stubPackages,
+ boolean stubSourceOnly) {
// figure out which classes we need
final HashSet<ClassInfo> notStrippable = new HashSet<ClassInfo>();
ClassInfo[] all = Converter.allClasses();
@@ -188,6 +191,9 @@ public class Stubs {
final HashSet<Pattern> stubPackageWildcards = extractWildcards(stubPackages);
for (ClassInfo cl : notStrippable) {
if (!cl.isDocOnly()) {
+ if (stubSourceOnly && !Files.exists(Paths.get(cl.position().file))) {
+ continue;
+ }
if (shouldWriteStub(cl.containingPackage().name(), stubPackages, stubPackageWildcards)) {
// write out the stubs
if (stubsDir != null) {