diff options
author | Paul Duffin <paulduffin@google.com> | 2017-06-27 15:59:56 +0100 |
---|---|---|
committer | Paul Duffin <paulduffin@google.com> | 2017-06-28 12:34:53 +0100 |
commit | 06244b0031643c1b5a616db851025d5d07780a3a (patch) | |
tree | 6dd28bc151e160e01bd0e5194053ed2d7fd386ad | |
parent | 8d026d9abec0b0d1a5bd0613bf31eff0ba667a11 (diff) | |
download | platform_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.java | 9 | ||||
-rw-r--r-- | src/com/google/doclava/Stubs.java | 8 |
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) { |