Skip to content

Commit 656b47b

Browse files
committed
Update metalava api.txt, fix metalava task.
1 parent 00956bc commit 656b47b

File tree

24 files changed

+540
-175
lines changed

24 files changed

+540
-175
lines changed

buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java

Lines changed: 109 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@
2727
import java.nio.file.Paths;
2828
import org.gradle.api.Plugin;
2929
import org.gradle.api.Project;
30+
import org.gradle.api.artifacts.ArtifactView;
31+
import org.gradle.api.artifacts.Configuration;
32+
import org.gradle.api.attributes.Attribute;
33+
import org.gradle.api.file.FileCollection;
34+
import org.gradle.api.tasks.TaskProvider;
3035
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile;
3136

3237
public class FirebaseLibraryPlugin implements Plugin<Project> {
@@ -93,6 +98,13 @@ private static void setupApiInformationAnalysis(Project project, LibraryExtensio
9398
project.getPath().substring(1).replace(":", "_")));
9499
File outputApiFile = new File(outputFile.getAbsolutePath() + "_api.txt");
95100

101+
Configuration metalavaClasspath =
102+
project
103+
.getConfigurations()
104+
.create(
105+
"metalavaClasspath",
106+
c -> c.extendsFrom(project.getConfigurations().getByName("implementation")));
107+
96108
project
97109
.getTasks()
98110
.register(
@@ -101,55 +113,104 @@ private static void setupApiInformationAnalysis(Project project, LibraryExtensio
101113
task -> {
102114
task.setOutputFile(metalavaOutputJarFile);
103115
});
104-
project
105-
.getTasks()
106-
.register(
107-
"apiInformation",
108-
ApiInformationTask.class,
109-
task -> {
110-
task.setApiTxt(project.file("api.txt"));
111-
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
112-
task.setSourceSet(mainSourceSet);
113-
task.setOutputFile(outputFile);
114-
task.setBaselineFile(project.file("baseline.txt"));
115-
task.setOutputApiFile(outputApiFile);
116-
if (project.hasProperty("updateBaseline")) {
117-
task.setUpdateBaseline(true);
118-
} else {
119-
task.setUpdateBaseline(false);
120-
}
121-
task.dependsOn("getMetalavaJar");
122-
});
123-
124-
project
125-
.getTasks()
126-
.register(
127-
"generateApiTxtFile",
128-
GenerateApiTxtFileTask.class,
129-
task -> {
130-
task.setApiTxt(project.file("api.txt"));
131-
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
132-
task.setSourceSet(mainSourceSet);
133-
task.setBaselineFile(project.file("baseline.txt"));
134-
if (project.hasProperty("updateBaseline")) {
135-
task.setUpdateBaseline(true);
136-
} else {
137-
task.setUpdateBaseline(false);
116+
File apiTxt =
117+
project.file("api.txt").exists()
118+
? project.file("api.txt")
119+
: project.file(project.getRootDir() + "/empty-api.txt");
120+
TaskProvider<ApiInformationTask> apiInfo =
121+
project
122+
.getTasks()
123+
.register(
124+
"apiInformation",
125+
ApiInformationTask.class,
126+
task -> {
127+
task.setApiTxt(apiTxt);
128+
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
129+
task.setSourceSet(mainSourceSet);
130+
android
131+
.getLibraryVariants()
132+
.all(
133+
v -> {
134+
if (v.getName().equals("release")) {
135+
ArtifactView artifactView =
136+
v.getCompileConfiguration()
137+
.getIncoming()
138+
.artifactView(
139+
config ->
140+
config.attributes(
141+
container ->
142+
container.attribute(
143+
Attribute.of(
144+
"artifactType", String.class),
145+
"jar")));
146+
task.setClassPath(artifactView.getArtifacts().getArtifactFiles());
147+
}
148+
});
149+
150+
task.setOutputFile(outputFile);
151+
task.setBaselineFile(project.file("baseline.txt"));
152+
task.setOutputApiFile(outputApiFile);
153+
if (project.hasProperty("updateBaseline")) {
154+
task.setUpdateBaseline(true);
155+
} else {
156+
task.setUpdateBaseline(false);
157+
}
158+
task.dependsOn("getMetalavaJar");
159+
});
160+
161+
TaskProvider<GenerateApiTxtFileTask> generateApiTxt =
162+
project
163+
.getTasks()
164+
.register(
165+
"generateApiTxtFile",
166+
GenerateApiTxtFileTask.class,
167+
task -> {
168+
task.setApiTxt(project.file("api.txt"));
169+
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
170+
task.setSourceSet(mainSourceSet);
171+
task.setBaselineFile(project.file("baseline.txt"));
172+
if (project.hasProperty("updateBaseline")) {
173+
task.setUpdateBaseline(true);
174+
} else {
175+
task.setUpdateBaseline(false);
176+
}
177+
task.dependsOn("getMetalavaJar");
178+
});
179+
180+
TaskProvider<GenerateStubsTask> docStubs =
181+
project
182+
.getTasks()
183+
.register(
184+
"docStubs",
185+
GenerateStubsTask.class,
186+
task -> {
187+
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
188+
task.setOutputDir(new File(project.getBuildDir(), "doc-stubs"));
189+
task.dependsOn("getMetalavaJar");
190+
191+
task.setSourceSet(mainSourceSet);
192+
});
193+
194+
android
195+
.getLibraryVariants()
196+
.all(
197+
v -> {
198+
if (v.getName().equals("release")) {
199+
FileCollection jars =
200+
v.getCompileConfiguration()
201+
.getIncoming()
202+
.artifactView(
203+
config ->
204+
config.attributes(
205+
container ->
206+
container.attribute(
207+
Attribute.of("artifactType", String.class), "jar")))
208+
.getArtifacts()
209+
.getArtifactFiles();
210+
apiInfo.configure(t -> t.setClassPath(jars));
211+
generateApiTxt.configure(t -> t.setClassPath(jars));
212+
docStubs.configure(t -> t.setClassPath(jars));
138213
}
139-
task.dependsOn("getMetalavaJar");
140-
});
141-
142-
project
143-
.getTasks()
144-
.register(
145-
"docStubs",
146-
GenerateStubsTask.class,
147-
task -> {
148-
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
149-
task.setOutputDir(new File(project.getBuildDir(), "doc-stubs"));
150-
task.dependsOn("getMetalavaJar");
151-
152-
task.setSourceSet(mainSourceSet);
153214
});
154215
}
155216

buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/ApiInformationTask.java

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,25 @@
1515
package com.google.firebase.gradle.plugins.apiinfo;
1616

1717
import com.android.build.gradle.api.AndroidSourceSet;
18+
import com.google.firebase.gradle.plugins.SdkUtil;
19+
1820
import java.io.File;
1921
import java.io.FileNotFoundException;
2022
import java.io.FileOutputStream;
2123
import java.util.ArrayList;
2224
import java.util.Arrays;
2325
import java.util.List;
2426
import java.util.stream.Collectors;
27+
import java.util.stream.Stream;
28+
import java.util.stream.StreamSupport;
29+
2530
import org.gradle.api.DefaultTask;
2631
import org.gradle.api.GradleException;
32+
import org.gradle.api.artifacts.Configuration;
33+
import org.gradle.api.file.FileCollection;
2734
import org.gradle.api.tasks.Input;
2835
import org.gradle.api.tasks.InputFile;
36+
import org.gradle.api.tasks.InputFiles;
2937
import org.gradle.api.tasks.OutputFile;
3038
import org.gradle.api.tasks.TaskAction;
3139

@@ -43,6 +51,9 @@ public abstract class ApiInformationTask extends DefaultTask {
4351

4452
abstract AndroidSourceSet getSourceSet();
4553

54+
@InputFiles
55+
abstract FileCollection getClassPath();
56+
4657
@OutputFile
4758
abstract File getBaselineFile();
4859

@@ -57,6 +68,8 @@ public abstract class ApiInformationTask extends DefaultTask {
5768

5869
public abstract void setSourceSet(AndroidSourceSet value);
5970

71+
public abstract void setClassPath(FileCollection value);
72+
6073
public abstract void setBaselineFile(File value);
6174

6275
public abstract void setUpdateBaseline(boolean value);
@@ -76,6 +89,19 @@ void execute() {
7689
.filter(File::exists)
7790
.map(File::getAbsolutePath)
7891
.collect(Collectors.joining(":"));
92+
if (sourcePath.isEmpty()) {
93+
getLogger()
94+
.warn(
95+
"Project {} has no sources in main source set, skipping...", getProject().getPath());
96+
return;
97+
}
98+
99+
String classPath =
100+
Stream.concat(
101+
getClassPath().getFiles().stream(), Stream.of(SdkUtil.getAndroidJar(getProject())))
102+
.map(File::getAbsolutePath)
103+
.collect(Collectors.joining(":"));
104+
79105
File outputFileDir = getOutputFile().getParentFile();
80106
if (!outputFileDir.exists()) {
81107
outputFileDir.mkdirs();
@@ -89,8 +115,11 @@ void execute() {
89115
spec.setArgs(
90116
Arrays.asList(
91117
getMetalavaJarPath(),
118+
"--no-banner",
92119
"--source-path",
93120
sourcePath,
121+
"--classpath",
122+
classPath,
94123
"--api",
95124
getOutputApiFile().getAbsolutePath(),
96125
"--format=v2"));
@@ -104,13 +133,13 @@ void execute() {
104133
new ArrayList<>(
105134
Arrays.asList(
106135
getMetalavaJarPath(),
136+
"--no-banner",
107137
"--source-files",
108138
getOutputApiFile().getAbsolutePath(),
109139
"--check-compatibility:api:current",
110140
getApiTxt().getAbsolutePath(),
111141
"--format=v2",
112-
"--no-color",
113-
"--delete-empty-baselines"));
142+
"--no-color"));
114143
if (getUpdateBaseline()) {
115144
args.addAll(
116145
Arrays.asList("--update-baseline", getBaselineFile().getAbsolutePath()));

buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GenerateApiTxtFileTask.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import java.util.List;
2222
import java.util.stream.Collectors;
2323
import org.gradle.api.DefaultTask;
24+
import org.gradle.api.file.FileCollection;
2425
import org.gradle.api.tasks.Input;
26+
import org.gradle.api.tasks.InputFiles;
2527
import org.gradle.api.tasks.OutputFile;
2628
import org.gradle.api.tasks.TaskAction;
2729

@@ -35,6 +37,9 @@ public abstract class GenerateApiTxtFileTask extends DefaultTask {
3537

3638
abstract AndroidSourceSet getSourceSet();
3739

40+
@InputFiles
41+
public abstract FileCollection getClassPath();
42+
3843
@OutputFile
3944
abstract File getBaselineFile();
4045

@@ -43,6 +48,8 @@ public abstract class GenerateApiTxtFileTask extends DefaultTask {
4348

4449
public abstract void setSourceSet(AndroidSourceSet value);
4550

51+
public abstract void setClassPath(FileCollection value);
52+
4653
public abstract void setBaselineFile(File value);
4754

4855
public abstract void setUpdateBaseline(boolean value);
@@ -58,16 +65,24 @@ void execute() {
5865
.filter(File::exists)
5966
.map(File::getAbsolutePath)
6067
.collect(Collectors.joining(":"));
68+
if (sourcePath.isEmpty()) {
69+
getLogger()
70+
.warn(
71+
"Project {} has no sources in main source set, skipping...", getProject().getPath());
72+
return;
73+
}
6174
List<String> args =
6275
new ArrayList<>(
6376
Arrays.asList(
6477
getMetalavaJarPath(),
78+
"--no-banner",
6579
"--source-path",
6680
sourcePath,
81+
"--classpath",
82+
getClassPath().getAsPath(),
6783
"--api",
6884
getApiTxt().getAbsolutePath(),
69-
"--format=v2",
70-
"--delete-empty-baselines"));
85+
"--format=v2"));
7186

7287
if (getUpdateBaseline()) {
7388
args.addAll(Arrays.asList("--update-baseline", getBaselineFile().getAbsolutePath()));

buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GenerateStubsTask.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
import java.util.Arrays;
2020
import java.util.stream.Collectors;
2121
import org.gradle.api.DefaultTask;
22+
import org.gradle.api.file.FileCollection;
2223
import org.gradle.api.tasks.Input;
24+
import org.gradle.api.tasks.InputFiles;
2325
import org.gradle.api.tasks.OutputDirectory;
2426
import org.gradle.api.tasks.TaskAction;
2527

@@ -31,8 +33,13 @@ public abstract class GenerateStubsTask extends DefaultTask {
3133

3234
public abstract AndroidSourceSet getSourceSet();
3335

36+
@InputFiles
37+
public abstract FileCollection getClassPath();
38+
3439
public abstract void setSourceSet(AndroidSourceSet sourceSet);
3540

41+
public abstract void setClassPath(FileCollection value);
42+
3643
@OutputDirectory
3744
public abstract File getOutputDir();
3845

@@ -56,6 +63,8 @@ public void run() {
5663
"--quiet",
5764
"--source-path",
5865
sourcePath,
66+
"--classpath",
67+
getClassPath().getAsPath(),
5968
"--include-annotations",
6069
"--doc-stubs",
6170
getOutputDir().getAbsolutePath()));
File renamed without changes.

firebase-common/api.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ package com.google.firebase {
1818
field @NonNull public static final String DEFAULT_APP_NAME;
1919
}
2020

21-
public class FirebaseNetworkException {
21+
public class FirebaseNetworkException extends com.google.firebase.FirebaseException {
2222
ctor public FirebaseNetworkException(@NonNull String);
2323
}
2424

@@ -47,7 +47,7 @@ package com.google.firebase {
4747
method @NonNull public com.google.firebase.FirebaseOptions.Builder setStorageBucket(@Nullable String);
4848
}
4949

50-
public class FirebaseTooManyRequestsException {
50+
public class FirebaseTooManyRequestsException extends com.google.firebase.FirebaseException {
5151
ctor public FirebaseTooManyRequestsException(@NonNull String);
5252
}
5353

firebase-common/ktx/api.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Signature format: 2.0
2+
package com.google.firebase.ktx {
3+
4+
public final class Firebase {
5+
field public static final com.google.firebase.ktx.Firebase INSTANCE;
6+
}
7+
8+
public final class FirebaseKt {
9+
ctor public FirebaseKt();
10+
method @NonNull public static com.google.firebase.FirebaseApp app(@NonNull com.google.firebase.ktx.Firebase, @NonNull String name);
11+
method @NonNull public static com.google.firebase.FirebaseApp getApp(@NonNull com.google.firebase.ktx.Firebase);
12+
method @NonNull public static com.google.firebase.FirebaseOptions getOptions(@NonNull com.google.firebase.ktx.Firebase);
13+
method @Nullable public static com.google.firebase.FirebaseApp initialize(@NonNull com.google.firebase.ktx.Firebase, @NonNull error.NonExistentClass context);
14+
method @NonNull public static com.google.firebase.FirebaseApp initialize(@NonNull com.google.firebase.ktx.Firebase, @NonNull error.NonExistentClass context, @NonNull com.google.firebase.FirebaseOptions options);
15+
method @NonNull public static com.google.firebase.FirebaseApp initialize(@NonNull com.google.firebase.ktx.Firebase, @NonNull error.NonExistentClass context, @NonNull com.google.firebase.FirebaseOptions options, @NonNull String name);
16+
}
17+
18+
}
19+

0 commit comments

Comments
 (0)