From 06244b0031643c1b5a616db851025d5d07780a3a Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Tue, 27 Jun 2017 15:59:56 +0100 Subject: 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 --- src/com/google/doclava/Doclava.java | 9 ++++++++- 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 stubPackages = null; + boolean stubSourceOnly = false; ArrayList knownTagsFiles = new ArrayList(); 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 stubPackages) { + String removedApiFile, String exactApiFile, HashSet stubPackages, + boolean stubSourceOnly) { // figure out which classes we need final HashSet notStrippable = new HashSet(); ClassInfo[] all = Converter.allClasses(); @@ -188,6 +191,9 @@ public class Stubs { final HashSet 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) { -- cgit v1.2.3