Skip to content

Commit fe07a55

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

File tree

24 files changed

+529
-175
lines changed

24 files changed

+529
-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: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@
2424
import java.util.stream.Collectors;
2525
import org.gradle.api.DefaultTask;
2626
import org.gradle.api.GradleException;
27+
import org.gradle.api.artifacts.Configuration;
28+
import org.gradle.api.file.FileCollection;
2729
import org.gradle.api.tasks.Input;
2830
import org.gradle.api.tasks.InputFile;
31+
import org.gradle.api.tasks.InputFiles;
2932
import org.gradle.api.tasks.OutputFile;
3033
import org.gradle.api.tasks.TaskAction;
3134

@@ -43,6 +46,9 @@ public abstract class ApiInformationTask extends DefaultTask {
4346

4447
abstract AndroidSourceSet getSourceSet();
4548

49+
@InputFiles
50+
abstract FileCollection getClassPath();
51+
4652
@OutputFile
4753
abstract File getBaselineFile();
4854

@@ -57,6 +63,8 @@ public abstract class ApiInformationTask extends DefaultTask {
5763

5864
public abstract void setSourceSet(AndroidSourceSet value);
5965

66+
public abstract void setClassPath(FileCollection value);
67+
6068
public abstract void setBaselineFile(File value);
6169

6270
public abstract void setUpdateBaseline(boolean value);
@@ -76,6 +84,13 @@ void execute() {
7684
.filter(File::exists)
7785
.map(File::getAbsolutePath)
7886
.collect(Collectors.joining(":"));
87+
if (sourcePath.isEmpty()) {
88+
getLogger()
89+
.warn(
90+
"Project {} has no sources in main source set, skipping...", getProject().getPath());
91+
return;
92+
}
93+
7994
File outputFileDir = getOutputFile().getParentFile();
8095
if (!outputFileDir.exists()) {
8196
outputFileDir.mkdirs();
@@ -89,8 +104,11 @@ void execute() {
89104
spec.setArgs(
90105
Arrays.asList(
91106
getMetalavaJarPath(),
107+
"--no-banner",
92108
"--source-path",
93109
sourcePath,
110+
"--classpath",
111+
getClassPath().getAsPath(),
94112
"--api",
95113
getOutputApiFile().getAbsolutePath(),
96114
"--format=v2"));
@@ -104,13 +122,13 @@ void execute() {
104122
new ArrayList<>(
105123
Arrays.asList(
106124
getMetalavaJarPath(),
125+
"--no-banner",
107126
"--source-files",
108127
getOutputApiFile().getAbsolutePath(),
109128
"--check-compatibility:api:current",
110129
getApiTxt().getAbsolutePath(),
111130
"--format=v2",
112-
"--no-color",
113-
"--delete-empty-baselines"));
131+
"--no-color"));
114132
if (getUpdateBaseline()) {
115133
args.addAll(
116134
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)