aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-10-06 21:41:04 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-10-07 08:08:27 +0000
commit440b73203054d1a163e28127c8680dd696e3458b (patch)
treeeaaee95210977e91a568a94e57bd3bba1a00d74a /src
parent67d736b55a495ec1ac46a59a006d428ced97de96 (diff)
*** Reason for rollback *** With this approach, the R.class winds up in the filtered jar because its origin isn't among the "normal" Java sources. I'll have to be a little smarter, but start with rolling this back. *** Original change description *** Support srcjar files in filtered gen jar. If a java_library has any srcjar files in its sources attribute, the output of these would be discarded. To make it more robust, invert the jar filter to keep everything *except* source artifact java files. Previously, we would build a manifest containing all the generated java files and use that to filter. This should also be ever so slightly faster since we can skip an action. -- MOS_MIGRATED_REVID=135406849
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java304
-rw-r--r--src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java109
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java407
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl65
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java112
5 files changed, 465 insertions, 532 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
index 17a0b53652..a6c84893e5 100644
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
@@ -89,7 +89,9 @@ import java.util.Collection;
import java.util.List;
import javax.annotation.Nullable;
-/** Generates ide-build information for Android Studio. */
+/**
+ * Generates ide-build information for Android Studio.
+ */
public class AndroidStudioInfoAspect extends NativeAspectClass implements ConfiguredAspectFactory {
public static final String NAME = "AndroidStudioInfoAspect";
@@ -105,7 +107,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
private final ImmutableList<PrerequisiteAttr> prerequisiteAttrs;
public AndroidStudioInfoAspect(
- String toolsRepository, AndroidStudioInfoSemantics androidStudioInfoSemantics) {
+ String toolsRepository,
+ AndroidStudioInfoSemantics androidStudioInfoSemantics) {
this.toolsRepository = toolsRepository;
this.androidStudioInfoSemantics = androidStudioInfoSemantics;
this.prerequisiteAttrs = buildPrerequisiteAttrs();
@@ -116,11 +119,12 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
return NAME;
}
- /** Attribute to propagate dependencies along. */
+ /**
+ * Attribute to propagate dependencies along.
+ */
public static class PrerequisiteAttr {
public final String name;
public final Type<?> type;
-
public PrerequisiteAttr(String name, Type<?> type) {
this.name = name;
this.type = type;
@@ -146,35 +150,25 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
// File suffixes.
public static final String ASWB_BUILD_SUFFIX = ".aswb-build";
public static final String ASWB_BUILD_TEXT_SUFFIX = ".aswb-build.txt";
- public static final Function<Label, String> LABEL_TO_STRING =
- new Function<Label, String>() {
- @Nullable
- @Override
- public String apply(Label label) {
- return label.toString();
- }
- };
+ public static final Function<Label, String> LABEL_TO_STRING = new Function<Label, String>() {
+ @Nullable
+ @Override
+ public String apply(Label label) {
+ return label.toString();
+ }
+ };
@Override
public AspectDefinition getDefinition(AspectParameters aspectParameters) {
- AspectDefinition.Builder builder =
- new AspectDefinition.Builder(NAME)
- .attributeAspect("runtime_deps", this)
- .attributeAspect("resources", this)
- .add(
- attr("$packageParser", LABEL)
- .cfg(HOST)
- .exec()
- .value(
- Label.parseAbsoluteUnchecked(
- toolsRepository + "//tools/android:PackageParser")))
- .add(
- attr("$jarFilter", LABEL)
- .cfg(HOST)
- .exec()
- .value(
- Label.parseAbsoluteUnchecked(
- toolsRepository + "//tools/android:JarFilter")));
+ AspectDefinition.Builder builder = new AspectDefinition.Builder(NAME)
+ .attributeAspect("runtime_deps", this)
+ .attributeAspect("resources", this)
+ .add(attr("$packageParser", LABEL).cfg(HOST).exec()
+ .value(Label.parseAbsoluteUnchecked(
+ toolsRepository + "//tools/android:PackageParser")))
+ .add(attr("$jarFilter", LABEL).cfg(HOST).exec()
+ .value(Label.parseAbsoluteUnchecked(
+ toolsRepository + "//tools/android:JarFilter")));
for (PrerequisiteAttr prerequisiteAttr : prerequisiteAttrs) {
builder.attributeAspect(prerequisiteAttr.name, this);
@@ -193,10 +187,15 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
RuleIdeInfo.Kind ruleKind = getRuleKind(ruleContext.getRule(), base);
- DependenciesResult dependenciesResult = processDependencies(base, ruleContext, providerBuilder);
+ DependenciesResult dependenciesResult = processDependencies(
+ base, ruleContext, providerBuilder);
- AndroidStudioInfoFilesProvider provider =
- createIdeBuildArtifact(base, ruleContext, ruleKind, dependenciesResult, providerBuilder);
+ AndroidStudioInfoFilesProvider provider = createIdeBuildArtifact(
+ base,
+ ruleContext,
+ ruleKind,
+ dependenciesResult,
+ providerBuilder);
builder
.addOutputGroup(IDE_INFO, provider.getIdeInfoFiles())
@@ -209,21 +208,19 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
}
private static class DependenciesResult {
- private DependenciesResult(
- Iterable<Label> deps, Iterable<Label> runtimeDeps, @Nullable Label resources) {
+ private DependenciesResult(Iterable<Label> deps,
+ Iterable<Label> runtimeDeps, @Nullable Label resources) {
this.deps = deps;
this.runtimeDeps = runtimeDeps;
this.resources = resources;
}
-
final Iterable<Label> deps;
final Iterable<Label> runtimeDeps;
@Nullable final Label resources;
}
private DependenciesResult processDependencies(
- ConfiguredTarget base,
- RuleContext ruleContext,
+ ConfiguredTarget base, RuleContext ruleContext,
AndroidStudioInfoFilesProvider.Builder providerBuilder) {
// Calculate direct dependencies
@@ -232,8 +229,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
if (ruleContext.attributes().has(prerequisiteAttr.name, prerequisiteAttr.type)) {
Mode mode = ruleContext.getAttributeMode(prerequisiteAttr.name);
if (mode == Mode.TARGET || mode == Mode.SPLIT) {
- directDepsBuilder.addAll(
- ruleContext.getPrerequisites(prerequisiteAttr.name, Mode.TARGET));
+ directDepsBuilder
+ .addAll(ruleContext.getPrerequisites(prerequisiteAttr.name, Mode.TARGET));
}
}
}
@@ -253,15 +250,14 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
// Propagate my own exports
JavaExportsProvider javaExportsProvider = base.getProvider(JavaExportsProvider.class);
if (javaExportsProvider != null) {
- providerBuilder
- .exportedDepsBuilder()
+ providerBuilder.exportedDepsBuilder()
.addTransitive(javaExportsProvider.getTransitiveExports());
}
// android_library without sources exports all its deps
if (ruleContext.getRule().getRuleClass().equals("android_library")) {
JavaSourceInfoProvider sourceInfoProvider = base.getProvider(JavaSourceInfoProvider.class);
- boolean hasSources =
- sourceInfoProvider != null && !sourceInfoProvider.getSourceFiles().isEmpty();
+ boolean hasSources = sourceInfoProvider != null
+ && !sourceInfoProvider.getSourceFiles().isEmpty();
if (!hasSources) {
for (TransitiveInfoCollection dep : directDeps) {
providerBuilder.exportedDepsBuilder().add(dep.getLabel());
@@ -280,8 +276,7 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
}
// resources
- @Nullable
- TransitiveInfoCollection resources =
+ @Nullable TransitiveInfoCollection resources =
ruleContext.attributes().has("resources", BuildType.LABEL)
? ruleContext.getPrerequisite("resources", Mode.TARGET)
: null;
@@ -304,8 +299,11 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
providerBuilder.ideCompileFilesBuilder().addTransitive(depProvider.getIdeCompileFiles());
}
+
return new DependenciesResult(
- dependencies, runtimeDepsBuilder.build(), resources != null ? resources.getLabel() : null);
+ dependencies,
+ runtimeDepsBuilder.build(),
+ resources != null ? resources.getLabel() : null);
}
private AndroidStudioInfoFilesProvider createIdeBuildArtifact(
@@ -338,8 +336,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
JavaRuleOutputJarsProvider outputJarsProvider =
base.getProvider(JavaRuleOutputJarsProvider.class);
if (outputJarsProvider != null && !androidStudioInfoSemantics.suppressJavaRuleInfo(base)) {
- JavaRuleIdeInfo javaRuleIdeInfo =
- makeJavaRuleIdeInfo(base, ruleContext, outputJarsProvider, providerBuilder);
+ JavaRuleIdeInfo javaRuleIdeInfo = makeJavaRuleIdeInfo(base, ruleContext,
+ outputJarsProvider, providerBuilder);
outputBuilder.setJavaRuleIdeInfo(javaRuleIdeInfo);
}
@@ -347,9 +345,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
if (isCppRule(base)) {
CppCompilationContext cppCompilationContext = base.getProvider(CppCompilationContext.class);
if (cppCompilationContext != null) {
- CRuleIdeInfo cRuleIdeInfo =
- makeCRuleIdeInfo(
- base, ruleContext, cppCompilationContext, ideResolveArtifacts, ideCompileArtifacts);
+ CRuleIdeInfo cRuleIdeInfo = makeCRuleIdeInfo(base, ruleContext,
+ cppCompilationContext, ideResolveArtifacts, ideCompileArtifacts);
outputBuilder.setCRuleIdeInfo(cRuleIdeInfo);
}
}
@@ -369,16 +366,15 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
// Android rules
AndroidIdeInfoProvider androidIdeInfoProvider = base.getProvider(AndroidIdeInfoProvider.class);
if (androidIdeInfoProvider != null) {
- outputBuilder.setAndroidRuleIdeInfo(
- makeAndroidRuleIdeInfo(androidIdeInfoProvider, dependenciesResult, ideResolveArtifacts));
+ outputBuilder.setAndroidRuleIdeInfo(makeAndroidRuleIdeInfo(
+ androidIdeInfoProvider, dependenciesResult, ideResolveArtifacts));
}
// Test rules
if (TargetUtils.isTestRule(base.getTarget())) {
TestInfo.Builder builder = TestInfo.newBuilder();
- String attr =
- NonconfigurableAttributeMapper.of(base.getTarget().getAssociatedRule())
- .get("size", Type.STRING);
+ String attr = NonconfigurableAttributeMapper.of(base.getTarget().getAssociatedRule())
+ .get("size", Type.STRING);
if (attr != null) {
builder.setSize(attr);
}
@@ -388,10 +384,9 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
// Java toolchain rule
JavaToolchainProvider javaToolchainProvider = base.getProvider(JavaToolchainProvider.class);
if (javaToolchainProvider != null) {
- outputBuilder.setJavaToolchainIdeInfo(
- JavaToolchainIdeInfo.newBuilder()
- .setSourceVersion(javaToolchainProvider.getSourceVersion())
- .setTargetVersion(javaToolchainProvider.getTargetVersion()));
+ outputBuilder.setJavaToolchainIdeInfo(JavaToolchainIdeInfo.newBuilder()
+ .setSourceVersion(javaToolchainProvider.getSourceVersion())
+ .setTargetVersion(javaToolchainProvider.getTargetVersion()));
}
androidStudioInfoSemantics.augmentRuleInfo(
@@ -428,17 +423,18 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
}
private static Action[] makePackageManifestAction(
- RuleContext ruleContext, Artifact packageManifest, Collection<Artifact> sourceFiles) {
+ RuleContext ruleContext,
+ Artifact packageManifest,
+ Collection<Artifact> sourceFiles) {
return new SpawnAction.Builder()
.addInputs(sourceFiles)
.addOutput(packageManifest)
.setExecutable(ruleContext.getExecutablePrerequisite("$packageParser", Mode.HOST))
- .setCommandLine(
- CustomCommandLine.builder()
- .addExecPath("--output_manifest", packageManifest)
- .addJoinStrings("--sources", ":", toSerializedArtifactLocations(sourceFiles))
- .build())
+ .setCommandLine(CustomCommandLine.builder()
+ .addExecPath("--output_manifest", packageManifest)
+ .addJoinStrings("--sources", ":", toSerializedArtifactLocations(sourceFiles))
+ .build())
.useParameterFile(ParameterFileType.SHELL_QUOTED)
.setProgressMessage("Parsing java package strings for " + ruleContext.getRule())
.setMnemonic("JavaPackageManifest")
@@ -447,7 +443,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
private static Iterable<String> toSerializedArtifactLocations(Iterable<Artifact> artifacts) {
return Iterables.transform(
- Iterables.filter(artifacts, Artifact.MIDDLEMAN_FILTER), PACKAGE_PARSER_SERIALIZER);
+ Iterables.filter(artifacts, Artifact.MIDDLEMAN_FILTER),
+ PACKAGE_PARSER_SERIALIZER);
}
private static final Function<Artifact, String> PACKAGE_PARSER_SERIALIZER =
@@ -455,8 +452,10 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
@Override
public String apply(Artifact artifact) {
Root root = artifact.getRoot();
- return Joiner.on(",")
- .join(root.getExecPath().toString(), artifact.getRootRelativePath().toString());
+ return Joiner.on(",").join(
+ root.getExecPath().toString(),
+ artifact.getRootRelativePath().toString()
+ );
}
};
@@ -471,28 +470,29 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
.addInput(generatedPackageManifest)
.addOutput(output)
.setExecutable(ruleContext.getExecutablePrerequisite("$jarFilter", Mode.HOST))
- .setCommandLine(
- CustomCommandLine.builder()
- .addExecPaths("--jars", jars)
- .addExecPath("--manifest", generatedPackageManifest)
- .addExecPath("--output", output)
- .add("--mode=keep_all_except")
- .build())
+ .setCommandLine(CustomCommandLine.builder()
+ .addExecPaths("--jars", jars)
+ .addExecPath("--manifest", generatedPackageManifest)
+ .addExecPath("--output", output)
+ .build())
.useParameterFile(ParameterFileType.SHELL_QUOTED)
.setProgressMessage("Filtering generated code for " + ruleContext.getRule())
.setMnemonic("JarFilter")
.build(ruleContext);
}
- private static Artifact derivedArtifact(
- ConfiguredTarget base, RuleContext ruleContext, String suffix) {
+ private static Artifact derivedArtifact(ConfiguredTarget base, RuleContext ruleContext,
+ String suffix) {
BuildConfiguration configuration = ruleContext.getConfiguration();
assert configuration != null;
- Root binDirectory = configuration.getBinDirectory(ruleContext.getRule().getRepository());
+ Root binDirectory = configuration.getBinDirectory(
+ ruleContext.getRule().getRepository());
- PathFragment derivedFilePath = getOutputFilePath(base, ruleContext, suffix);
+ PathFragment derivedFilePath =
+ getOutputFilePath(base, ruleContext, suffix);
- return ruleContext.getAnalysisEnvironment().getDerivedArtifact(derivedFilePath, binDirectory);
+ return ruleContext.getAnalysisEnvironment().getDerivedArtifact(
+ derivedFilePath, binDirectory);
}
private static AndroidRuleIdeInfo makeAndroidRuleIdeInfo(
@@ -529,12 +529,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
boolean hasIdlSources = !androidIdeInfoProvider.getIdlSrcs().isEmpty();
builder.setHasIdlSources(hasIdlSources);
if (hasIdlSources) {
- LibraryArtifact idlLibraryArtifact =
- makeLibraryArtifact(
- ideResolveArtifacts,
- androidIdeInfoProvider.getIdlClassJar(),
- null,
- androidIdeInfoProvider.getIdlSourceJar());
+ LibraryArtifact idlLibraryArtifact = makeLibraryArtifact(ideResolveArtifacts,
+ androidIdeInfoProvider.getIdlClassJar(), null, androidIdeInfoProvider.getIdlSourceJar());
if (idlLibraryArtifact != null) {
builder.setIdlJar(idlLibraryArtifact);
}
@@ -548,12 +544,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
OutputJar resourceJar = androidIdeInfoProvider.getResourceJar();
if (resourceJar != null) {
- LibraryArtifact resourceLibraryArtifact =
- makeLibraryArtifact(
- ideResolveArtifacts,
- resourceJar.getClassJar(),
- resourceJar.getIJar(),
- resourceJar.getSrcJar());
+ LibraryArtifact resourceLibraryArtifact = makeLibraryArtifact(ideResolveArtifacts,
+ resourceJar.getClassJar(), resourceJar.getIJar(), resourceJar.getSrcJar());
if (resourceLibraryArtifact != null) {
builder.setResourceJar(resourceLibraryArtifact);
}
@@ -595,8 +587,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
}
private static ArtifactLocation makeArtifactLocation(Package pkg) {
- Root root =
- Root.asSourceRoot(pkg.getSourceRoot(), pkg.getPackageIdentifier().getRepository().isMain());
+ Root root = Root.asSourceRoot(pkg.getSourceRoot(),
+ pkg.getPackageIdentifier().getRepository().isMain());
PathFragment relativePath = pkg.getBuildFile().getPath().relativeTo(root.getPath());
return makeArtifactLocation(root, relativePath);
}
@@ -625,34 +617,40 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
NestedSetBuilder<Artifact> ideResolveArtifacts = providerBuilder.ideResolveFilesBuilder();
JavaRuleIdeInfo.Builder builder = JavaRuleIdeInfo.newBuilder();
- List<Artifact> javaSources = getJavaSourcesForPackageManifest(ruleContext);
+ List<Artifact> javaSources = Lists.newArrayList();
+ List<Artifact> generatedJavaSources = Lists.newArrayList();
+ getJavaSourcesForPackageManifest(ruleContext, javaSources, generatedJavaSources);
if (!javaSources.isEmpty()) {
Artifact packageManifest = derivedArtifact(base, ruleContext, ".manifest");
providerBuilder.ideInfoFilesBuilder().add(packageManifest);
- ruleContext.registerAction(
- makePackageManifestAction(ruleContext, packageManifest, javaSources));
+ ruleContext.registerAction(makePackageManifestAction(
+ ruleContext, packageManifest, javaSources));
builder.setPackageManifest(makeArtifactLocation(packageManifest));
+ }
- if (hasGeneratedSources(ruleContext)) {
- Artifact filteredGenJar = derivedArtifact(base, ruleContext, "-filtered-gen.jar");
- List<Artifact> jars = Lists.newArrayList();
- for (OutputJar outputJar : outputJarsProvider.getOutputJars()) {
- Artifact jar = outputJar.getIJar();
- if (jar == null) {
- jar = outputJar.getClassJar();
- }
- if (jar == null) {
- continue;
- }
- jars.add(jar);
+ if (!javaSources.isEmpty() && !generatedJavaSources.isEmpty()) {
+ Artifact generatedPackageManifest = derivedArtifact(
+ base, ruleContext, "-filtered-gen.manifest");
+ ruleContext.registerAction(makePackageManifestAction(ruleContext,
+ generatedPackageManifest, generatedJavaSources));
+ Artifact filteredGenJar = derivedArtifact(base, ruleContext, "-filtered-gen.jar");
+ List<Artifact> jars = Lists.newArrayList();
+ for (OutputJar outputJar : outputJarsProvider.getOutputJars()) {
+ Artifact jar = outputJar.getIJar();
+ if (jar == null) {
+ jar = outputJar.getClassJar();
+ }
+ if (jar == null) {
+ continue;
}
- ruleContext.registerAction(
- makeFilteredJarAction(ruleContext, jars, packageManifest, filteredGenJar));
- ideResolveArtifacts.add(filteredGenJar);
- builder.setFilteredGenJar(
- makeLibraryArtifact(ideResolveArtifacts, filteredGenJar, null, null));
+ jars.add(jar);
}
+ ruleContext.registerAction(makeFilteredJarAction(ruleContext,
+ jars, generatedPackageManifest, filteredGenJar));
+ ideResolveArtifacts.add(filteredGenJar);
+ builder.setFilteredGenJar(makeLibraryArtifact(
+ ideResolveArtifacts, filteredGenJar, null, null));
}
collectJarsFromOutputJarsProvider(builder, ideResolveArtifacts, outputJarsProvider);
@@ -662,7 +660,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
builder.setJdeps(makeArtifactLocation(jdeps));
}
- JavaGenJarsProvider genJarsProvider = base.getProvider(JavaGenJarsProvider.class);
+ JavaGenJarsProvider genJarsProvider =
+ base.getProvider(JavaGenJarsProvider.class);
if (genJarsProvider != null) {
collectGenJars(builder, ideResolveArtifacts, genJarsProvider);
}
@@ -742,13 +741,15 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
builder.addAllLinkOption(cppConfiguration.getLinkOptions());
// This includes options such as system includes from toolchains.
- builder.addAllUnfilteredCompilerOption(cppConfiguration.getUnfilteredCompilerOptions(features));
+ builder.addAllUnfilteredCompilerOption(
+ cppConfiguration.getUnfilteredCompilerOptions(features));
builder.setPreprocessorExecutable(
cppConfiguration.getCpreprocessorExecutable().getSafePathString());
builder.setCppExecutable(cppConfiguration.getCppExecutable().getSafePathString());
- List<PathFragment> builtInIncludeDirectories = cppConfiguration.getBuiltInIncludeDirectories();
+ List<PathFragment> builtInIncludeDirectories = cppConfiguration
+ .getBuiltInIncludeDirectories();
for (PathFragment builtInIncludeDirectory : builtInIncludeDirectories) {
builder.addBuiltInIncludeDirectory(builtInIncludeDirectory.getSafePathString());
}
@@ -760,12 +761,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
NestedSetBuilder<Artifact> ideResolveArtifacts,
JavaRuleOutputJarsProvider outputJarsProvider) {
for (OutputJar outputJar : outputJarsProvider.getOutputJars()) {
- LibraryArtifact libraryArtifact =
- makeLibraryArtifact(
- ideResolveArtifacts,
- outputJar.getClassJar(),
- outputJar.getIJar(),
- outputJar.getSrcJar());
+ LibraryArtifact libraryArtifact = makeLibraryArtifact(ideResolveArtifacts,
+ outputJar.getClassJar(), outputJar.getIJar(), outputJar.getSrcJar());
if (libraryArtifact != null) {
builder.addJars(libraryArtifact);
@@ -778,7 +775,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
NestedSetBuilder<Artifact> ideResolveArtifacts,
@Nullable Artifact classJar,
@Nullable Artifact iJar,
- @Nullable Artifact sourceJar) {
+ @Nullable Artifact sourceJar
+ ) {
// We don't want to add anything that doesn't have a class jar
if (classJar == null) {
return null;
@@ -822,31 +820,18 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
}
}
- private static List<Artifact> getJavaSourcesForPackageManifest(RuleContext ruleContext) {
- List<Artifact> result = Lists.newArrayList();
+ private static void getJavaSourcesForPackageManifest(RuleContext ruleContext,
+ List<Artifact> javaSources, List<Artifact> generatedSources) {
Collection<Artifact> srcs = getSources(ruleContext);
for (Artifact src : srcs) {
if (src.getRootRelativePathString().endsWith(".java")) {
if (src.isSourceArtifact()) {
- result.add(src);
- }
- }
- }
- return result;
- }
-
- private static boolean hasGeneratedSources(RuleContext ruleContext) {
- Collection<Artifact> srcs = getSources(ruleContext);
- for (Artifact src : srcs) {
- if (src.getRootRelativePathString().endsWith(".java")) {
- if (!src.isSourceArtifact()) {
- return true;
+ javaSources.add(src);
+ } else {
+ generatedSources.add(src);
}
- } else if (src.getRootRelativePathString().endsWith(".srcjar")) {
- return true;
}
}
- return false;
}
private static Collection<Artifact> getSources(RuleContext ruleContext) {
@@ -865,31 +850,32 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
return getStringListAttribute(ruleContext, "copts");
}
- private static Collection<Artifact> getTargetListAttribute(
- RuleContext ruleContext, String attributeName) {
+ private static Collection<Artifact> getTargetListAttribute(RuleContext ruleContext,
+ String attributeName) {
return (ruleContext.attributes().has(attributeName, BuildType.LABEL_LIST)
- && ruleContext.getAttributeMode(attributeName) == Mode.TARGET)
+ && ruleContext.getAttributeMode(attributeName) == Mode.TARGET)
? ruleContext.getPrerequisiteArtifacts(attributeName, Mode.TARGET).list()
: ImmutableList.<Artifact>of();
}
- private static Collection<String> getStringListAttribute(
- RuleContext ruleContext, String attributeName) {
+ private static Collection<String> getStringListAttribute(RuleContext ruleContext,
+ String attributeName) {
return ruleContext.attributes().has(attributeName, Type.STRING_LIST)
? ruleContext.attributes().get(attributeName, Type.STRING_LIST)
: ImmutableList.<String>of();
}
- private static PathFragment getOutputFilePath(
- ConfiguredTarget base, RuleContext ruleContext, String suffix) {
+ private static PathFragment getOutputFilePath(ConfiguredTarget base, RuleContext ruleContext,
+ String suffix) {
PathFragment packagePathFragment =
ruleContext.getLabel().getPackageIdentifier().getSourceRoot();
String name = base.getLabel().getName();
return new PathFragment(packagePathFragment, new PathFragment(name + suffix));
}
- private static void addResolveArtifact(
- NestedSetBuilder<Artifact> ideResolveArtifacts, Artifact artifact) {
+
+ private static void addResolveArtifact(NestedSetBuilder<Artifact> ideResolveArtifacts,
+ Artifact artifact) {
if (!artifact.isSourceArtifact()) {
ideResolveArtifacts.add(artifact);
}
@@ -933,13 +919,13 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
case "java_wrap_cc":
return Kind.JAVA_WRAP_CC;
default:
- {
- if (base.getProvider(AndroidSdkProvider.class) != null) {
- return RuleIdeInfo.Kind.ANDROID_SDK;
- } else {
- return RuleIdeInfo.Kind.UNRECOGNIZED;
- }
+ {
+ if (base.getProvider(AndroidSdkProvider.class) != null) {
+ return RuleIdeInfo.Kind.ANDROID_SDK;
+ } else {
+ return RuleIdeInfo.Kind.UNRECOGNIZED;
}
+ }
}
}
}
diff --git a/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java b/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java
index 1de5605853..64cdc6e005 100644
--- a/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java
+++ b/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java
@@ -17,10 +17,10 @@ package com.google.devtools.build.android.ideinfo;
import static com.google.common.truth.Truth.assertThat;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.android.ideinfo.JarFilter.Mode;
import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.ArtifactLocation;
import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.JavaSourcePackage;
import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.PackageManifest;
+
import java.io.File;
import java.nio.file.Paths;
import java.util.List;
@@ -28,80 +28,69 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-/** Unit tests for {@link JarFilter} */
+/**
+ * Unit tests for {@link JarFilter}
+ */
@RunWith(JUnit4.class)
public class JarFilterTest {
@Test
public void testParseCommandLineArguments() throws Exception {
- String[] args =
- new String[] {
- "--jars",
- "/tmp/1.jar" + File.pathSeparator + "/tmp/2.jar",
- "--output",
- "/tmp/out.jar",
- "--manifest",
- "/tmp/manifest.file",
- "--mode",
- "keep_all_except",
- };
+ String[] args = new String[]{
+ "--jars",
+ "/tmp/1.jar" + File.pathSeparator + "/tmp/2.jar",
+ "--output",
+ "/tmp/out.jar",
+ "--manifest",
+ "/tmp/manifest.file",
+ };
JarFilter.JarFilterOptions options = JarFilter.parseArgs(args);
- assertThat(options.jars).containsExactly(Paths.get("/tmp/1.jar"), Paths.get("/tmp/2.jar"));
+ assertThat(options.jars).containsExactly(
+ Paths.get("/tmp/1.jar"),
+ Paths.get("/tmp/2.jar")
+ );
assertThat(options.output.toString()).isEqualTo(Paths.get("/tmp/out.jar").toString());
assertThat(options.manifest.toString()).isEqualTo(Paths.get("/tmp/manifest.file").toString());
- assertThat(options.mode).isEqualTo("keep_all_except");
}
@Test
public void testFilterMethod() throws Exception {
- List<String> prefixes =
- ImmutableList.of("com/google/foo/Foo", "com/google/bar/Bar", "com/google/baz/Baz");
-
- assertThat(JarFilter.nameInManifest(prefixes, "com/google/foo/Foo.class")).isTrue();
- assertThat(JarFilter.nameInManifest(prefixes, "com/google/foo/Foo$Inner.class")).isTrue();
- assertThat(JarFilter.nameInManifest(prefixes, "com/google/bar/Bar.class")).isTrue();
- assertThat(JarFilter.nameInManifest(prefixes, "com/google/foo/Foo/NotFoo.class")).isFalse();
- assertThat(JarFilter.nameInManifest(prefixes, "wrong/com/google/foo/Foo.class")).isFalse();
-
- // Test mode parameter
- assertThat(JarFilter.shouldKeep(prefixes, "com/google/foo/Foo.class", Mode.KEEP_ONLY)).isTrue();
- assertThat(JarFilter.shouldKeep(prefixes, "com/google/foo/Foo.class", Mode.KEEP_ALL_EXCEPT))
- .isFalse();
-
- // Test that only ".class" is retained
- assertThat(JarFilter.shouldKeep(prefixes, "com/google/foo/Foo.glass", Mode.KEEP_ONLY))
- .isFalse();
- assertThat(JarFilter.shouldKeep(prefixes, "com/google/foo/Foo.glass", Mode.KEEP_ALL_EXCEPT))
- .isFalse();
+ List<String> prefixes = ImmutableList.of(
+ "com/google/foo/Foo",
+ "com/google/bar/Bar",
+ "com/google/baz/Baz"
+ );
+ assertThat(JarFilter.shouldKeep(prefixes, "com/google/foo/Foo.class")).isTrue();
+ assertThat(JarFilter.shouldKeep(prefixes, "com/google/foo/Foo$Inner.class")).isTrue();
+ assertThat(JarFilter.shouldKeep(prefixes, "com/google/bar/Bar.class")).isTrue();
+ assertThat(JarFilter.shouldKeep(prefixes, "com/google/foo/Foo/NotFoo.class")).isFalse();
+ assertThat(JarFilter.shouldKeep(prefixes, "wrong/com/google/foo/Foo.class")).isFalse();
}
@Test
public void testManifestParser() throws Exception {
- PackageManifest packageManifest =
- PackageManifest.newBuilder()
- .addSources(
- JavaSourcePackage.newBuilder()
- .setArtifactLocation(
- ArtifactLocation.newBuilder()
- .setIsSource(true)
- .setRelativePath("com/google/foo/Foo.java"))
- .setPackageString("com.google.foo"))
- .addSources(
- JavaSourcePackage.newBuilder()
- .setArtifactLocation(
- ArtifactLocation.newBuilder()
- .setIsSource(true)
- .setRelativePath("com/google/bar/Bar.java"))
- .setPackageString("com.google.bar"))
- .addSources(
- JavaSourcePackage.newBuilder()
- .setArtifactLocation(
- ArtifactLocation.newBuilder()
- .setIsSource(true)
- .setRelativePath("some/path/Test.java"))
- .setPackageString("com.google.test"))
- .build();
- assertThat(JarFilter.parsePackageManifest(packageManifest))
- .containsExactly("com/google/foo/Foo", "com/google/bar/Bar", "com/google/test/Test");
+ PackageManifest packageManifest = PackageManifest.newBuilder()
+ .addSources(JavaSourcePackage.newBuilder()
+ .setArtifactLocation(ArtifactLocation.newBuilder()
+ .setIsSource(true)
+ .setRelativePath("com/google/foo/Foo.java"))
+ .setPackageString("com.google.foo"))
+ .addSources(JavaSourcePackage.newBuilder()
+ .setArtifactLocation(ArtifactLocation.newBuilder()
+ .setIsSource(true)
+ .setRelativePath("com/google/bar/Bar.java"))
+ .setPackageString("com.google.bar"))
+ .addSources(JavaSourcePackage.newBuilder()
+ .setArtifactLocation(ArtifactLocation.newBuilder()
+ .setIsSource(true)
+ .setRelativePath("some/path/Test.java"))
+ .setPackageString("com.google.test"))
+ .build();
+ assertThat(JarFilter.parsePackageManifest(packageManifest)).containsExactly(
+ "com/google/foo/Foo",
+ "com/google/bar/Bar",
+ "com/google/test/Test"
+ );
}
}
+
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
index ccc8ef3f20..5d5f7db50c 100644
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
@@ -37,7 +37,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-/** Tests for {@link AndroidStudioInfoAspect} validating proto's contents. */
+/**
+ * Tests for {@link AndroidStudioInfoAspect} validating proto's contents.
+ */
@RunWith(JUnit4.class)
public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase {
@@ -55,8 +57,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" srcs = ['simple/Simple.java']",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
ArtifactLocation location = ruleIdeInfo.getBuildFileArtifactLocation();
assertThat(Paths.get(location.getRelativePath()).toString())
.isEqualTo(Paths.get("com/google/example/BUILD").toString());
@@ -88,9 +90,9 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" srcs = ['simple/Simple.java']",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
-
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
+
ArtifactLocation packageManifest = ruleIdeInfo.getJavaRuleIdeInfo().getPackageManifest();
assertNotNull(packageManifest);
assertEquals(packageManifest.getRelativePath(), "com/google/example/simple.manifest");
@@ -110,8 +112,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" srcs = [':gen_sources']",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
assertThat(ruleIdeInfo.getJavaRuleIdeInfo().hasPackageManifest()).isFalse();
}
@@ -124,8 +126,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" srcs = ['Test.java']",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
assertThat(ruleIdeInfo.getJavaRuleIdeInfo().hasFilteredGenJar()).isFalse();
}
@@ -143,8 +145,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" srcs = [':gen_sources']",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
assertThat(ruleIdeInfo.getJavaRuleIdeInfo().hasFilteredGenJar()).isFalse();
}
@@ -162,32 +164,13 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" srcs = [':gen_sources', 'Test.java']",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getFilteredGenJar().getJar().getRelativePath())
.isEqualTo("com/google/example/simple-filtered-gen.jar");
}
@Test
- public void testFilteredGenJarIsCreatedForMixedSourceAndJars() throws Exception {
- scratch.file(
- "com/google/example/BUILD",
- "genrule(",
- " name = 'gen_sources',",
- " outs = ['sources.srcjar'],",
- " cmd = '',",
- ")",
- "java_library(",
- " name = 'lib',",
- " srcs = ['sources.srcjar', 'Test.java']",
- ")");
- Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib");
- RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos);
- assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getFilteredGenJar().getJar().getRelativePath())
- .isEqualTo("com/google/example/lib-filtered-gen.jar");
- }
-
- @Test
public void testJavaLibraryWithDependencies() throws Exception {
scratch.file(
"com/google/example/BUILD",
@@ -204,14 +187,15 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:complex");
getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
- RuleIdeInfo complexRuleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos);
+ RuleIdeInfo complexRuleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:complex", ruleIdeInfos);
assertThat(relativePathsForJavaSourcesOf(complexRuleIdeInfo))
.containsExactly("com/google/example/complex/Complex.java");
- assertThat(complexRuleIdeInfo.getDependenciesList()).contains("//com/google/example:simple");
+ assertThat(complexRuleIdeInfo.getDependenciesList())
+ .contains("//com/google/example:simple");
}
-
+
@Test
public void testJavaLibraryWithTransitiveDependencies() throws Exception {
scratch.file(
@@ -235,8 +219,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos);
- RuleIdeInfo extraComplexRuleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:extracomplex", ruleIdeInfos);
+ RuleIdeInfo extraComplexRuleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:extracomplex", ruleIdeInfos);
assertThat(relativePathsForJavaSourcesOf(extraComplexRuleIdeInfo))
.containsExactly("com/google/example/extracomplex/ExtraComplex.java");
@@ -285,13 +269,14 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos);
getRuleInfoAndVerifyLabel("//com/google/example:complex1", ruleIdeInfos);
- RuleIdeInfo extraComplexRuleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:extracomplex", ruleIdeInfos);
+ RuleIdeInfo extraComplexRuleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:extracomplex", ruleIdeInfos);
assertThat(relativePathsForJavaSourcesOf(extraComplexRuleIdeInfo))
.containsExactly("com/google/example/extracomplex/ExtraComplex.java");
- assertThat(extraComplexRuleIdeInfo.getDependenciesList())
- .containsAllOf("//com/google/example:complex", "//com/google/example:complex1");
+ assertThat(extraComplexRuleIdeInfo.getDependenciesList()).containsAllOf(
+ "//com/google/example:complex",
+ "//com/google/example:complex1");
}
@Test
@@ -317,15 +302,17 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos);
- RuleIdeInfo complexRuleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos);
- RuleIdeInfo extraComplexRuleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:extracomplex", ruleIdeInfos);
+ RuleIdeInfo complexRuleIdeInfo = getRuleInfoAndVerifyLabel("//com/google/example:complex",
+ ruleIdeInfos);
+ RuleIdeInfo extraComplexRuleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:extracomplex", ruleIdeInfos);
- assertThat(complexRuleIdeInfo.getDependenciesList()).contains("//com/google/example:simple");
+ assertThat(complexRuleIdeInfo.getDependenciesList())
+ .contains("//com/google/example:simple");
- assertThat(extraComplexRuleIdeInfo.getDependenciesList())
- .containsAllOf("//com/google/example:simple", "//com/google/example:complex");
+ assertThat(extraComplexRuleIdeInfo.getDependenciesList()).containsAllOf(
+ "//com/google/example:simple",
+ "//com/google/example:complex");
assertThat(getIdeResolveFiles())
.containsExactly(
"com/google/example/libextracomplex.jar",
@@ -361,23 +348,23 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" name = 'megacomplex',",
" srcs = ['megacomplex/MegaComplex.java'],",
" deps = [':extracomplex'],",
- ")");
+ ")"
+ );
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:megacomplex");
getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos);
getRuleInfoAndVerifyLabel("//com/google/example:extracomplex", ruleIdeInfos);
- RuleIdeInfo megaComplexRuleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:megacomplex", ruleIdeInfos);
+ RuleIdeInfo megaComplexRuleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:megacomplex", ruleIdeInfos);
assertThat(relativePathsForJavaSourcesOf(megaComplexRuleIdeInfo))
.containsExactly("com/google/example/megacomplex/MegaComplex.java");
- assertThat(megaComplexRuleIdeInfo.getDependenciesList())
- .containsAllOf(
- "//com/google/example:simple",
- "//com/google/example:complex",
- "//com/google/example:extracomplex");
+ assertThat(megaComplexRuleIdeInfo.getDependenciesList()).containsAllOf(
+ "//com/google/example:simple",
+ "//com/google/example:complex",
+ "//com/google/example:extracomplex");
}
@Test
@@ -409,25 +396,18 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(javaRuleIdeInfo).isNotNull();
assertThat(transform(javaRuleIdeInfo.getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
.containsExactly(
- jarString(
- "com/google/example",
- "a.jar",
- "_ijar/imp/com/google/example/a-ijar.jar",
- "impsrc.jar"),
- jarString(
- "com/google/example",
- "b.jar",
- "_ijar/imp/com/google/example/b-ijar.jar",
- "impsrc.jar"))
+ jarString("com/google/example",
+ "a.jar", "_ijar/imp/com/google/example/a-ijar.jar", "impsrc.jar"),
+ jarString("com/google/example",
+ "b.jar", "_ijar/imp/com/google/example/b-ijar.jar", "impsrc.jar"))
.inOrder();
- assertThat(getIdeResolveFiles())
- .containsExactly(
- "com/google/example/_ijar/imp/com/google/example/a-ijar.jar",
- "com/google/example/_ijar/imp/com/google/example/b-ijar.jar",
- "com/google/example/liblib.jar",
- "com/google/example/liblib-hjar.jar",
- "com/google/example/liblib-src.jar");
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/_ijar/imp/com/google/example/a-ijar.jar",
+ "com/google/example/_ijar/imp/com/google/example/b-ijar.jar",
+ "com/google/example/liblib.jar",
+ "com/google/example/liblib-hjar.jar",
+ "com/google/example/liblib-src.jar");
}
@Test
@@ -459,8 +439,9 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
}
assertThat(impInfo.getKindString()).isEqualTo("java_import");
assertThat(impInfo.getDependenciesList()).contains("//com/google/example:foobar");
- assertThat(libInfo.getDependenciesList())
- .containsAllOf("//com/google/example:foobar", "//com/google/example:imp");
+ assertThat(libInfo.getDependenciesList()).containsAllOf(
+ "//com/google/example:foobar",
+ "//com/google/example:imp");
}
@Test
@@ -482,11 +463,11 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" srcs = ['Lib.java'],",
" deps = [':imp'],",
")");
-
+
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib");
RuleIdeInfo libInfo = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos);
RuleIdeInfo impInfo = getRuleInfoAndVerifyLabel("//com/google/example:imp", ruleIdeInfos);
-
+
assertThat(!impInfo.getJavaRuleIdeInfo().hasPackageManifest()).isTrue();
assertThat(libInfo.getJavaRuleIdeInfo().hasPackageManifest()).isTrue();
}
@@ -511,11 +492,10 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" cmd = '',",
")");
buildTarget("//com/google/example:imp");
- assertThat(getIdeResolveFiles())
- .containsExactly(
- "com/google/example/_ijar/imp/com/google/example/gen_jar-ijar.jar",
- "com/google/example/gen_jar.jar",
- "com/google/example/gen_srcjar.jar");
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/_ijar/imp/com/google/example/gen_jar-ijar.jar",
+ "com/google/example/gen_jar.jar",
+ "com/google/example/gen_srcjar.jar");
}
@Test
@@ -550,10 +530,10 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" size = 'large',",
" deps = [':foobar'],",
")");
- Map<String, RuleIdeInfo> ruleIdeInfos =
- buildRuleIdeInfo("//java/com/google/example:FooBarTest");
- RuleIdeInfo testInfo =
- getRuleInfoAndVerifyLabel("//java/com/google/example:FooBarTest", ruleIdeInfos);
+ Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo(
+ "//java/com/google/example:FooBarTest");
+ RuleIdeInfo testInfo = getRuleInfoAndVerifyLabel(
+ "//java/com/google/example:FooBarTest", ruleIdeInfos);
if (testLegacyAswbPluginVersionCompatibility()) {
assertThat(testInfo.getKind()).isEqualTo(Kind.JAVA_TEST);
}
@@ -562,8 +542,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
.containsExactly("java/com/google/example/FooBarTest.java");
assertThat(testInfo.getDependenciesList()).contains("//java/com/google/example:foobar");
assertThat(transform(testInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
- .containsExactly(
- jarString("java/com/google/example", "FooBarTest.jar", null, "FooBarTest-src.jar"));
+ .containsExactly(jarString("java/com/google/example",
+ "FooBarTest.jar", null, "FooBarTest-src.jar"));
assertThat(getIdeResolveFiles())
.containsExactly(
@@ -593,8 +573,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" deps = [':foobar'],",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:foobar-exe");
- RuleIdeInfo binaryInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:foobar-exe", ruleIdeInfos);
+ RuleIdeInfo binaryInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:foobar-exe", ruleIdeInfos);
if (testLegacyAswbPluginVersionCompatibility()) {
assertThat(binaryInfo.getKind()).isEqualTo(Kind.JAVA_BINARY);
@@ -605,8 +585,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(binaryInfo.getDependenciesList()).contains("//com/google/example:foobar");
assertThat(transform(binaryInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
- .containsExactly(
- jarString("com/google/example", "foobar-exe.jar", null, "foobar-exe-src.jar"));
+ .containsExactly(jarString("com/google/example",
+ "foobar-exe.jar", null, "foobar-exe-src.jar"));
assertThat(getIdeResolveFiles())
.containsExactly(
@@ -642,8 +622,9 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(toolChainInfo.getJavaToolchainIdeInfo().getTargetVersion()).isNotEmpty();
RuleIdeInfo a = ruleIdeInfos.get("//com/google/example:a");
- assertThat(a.getDependenciesList())
- .containsAllOf("//com/google/example:b", toolChainInfo.getLabel());
+ assertThat(a.getDependenciesList()).containsAllOf(
+ "//com/google/example:b",
+ toolChainInfo.getLabel());
}
@Test
@@ -686,8 +667,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(ruleInfo.getKind()).isEqualTo(Kind.ANDROID_LIBRARY);
}
assertThat(ruleInfo.getKindString()).isEqualTo("android_library");
- assertThat(relativePathsForJavaSourcesOf(ruleInfo))
- .containsExactly("com/google/example/Main.java");
+ assertThat(relativePathsForJavaSourcesOf(ruleInfo)).containsExactly("com/google/example/Main.java");
assertThat(transform(ruleInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
.containsExactly(
jarString("com/google/example", "libl.jar", "libl-hjar.jar", "libl-src.jar"),
@@ -700,7 +680,9 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
.isEqualTo("com/google/example/AndroidManifest.xml");
assertThat(ruleInfo.getAndroidRuleIdeInfo().getJavaPackage()).isEqualTo("com.google.example");
assertThat(LIBRARY_ARTIFACT_TO_STRING.apply(ruleInfo.getAndroidRuleIdeInfo().getResourceJar()))
- .isEqualTo(jarString("com/google/example", "l_resources.jar", null, "l_resources-src.jar"));
+ .isEqualTo(jarString("com/google/example",
+ "l_resources.jar", null, "l_resources-src.jar"
+ ));
assertThat(ruleInfo.getDependenciesList()).contains("//com/google/example:l1");
assertThat(getIdeResolveFiles())
@@ -743,8 +725,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(ruleInfo.getKind()).isEqualTo(Kind.ANDROID_BINARY);
}
assertThat(ruleInfo.getKindString()).isEqualTo("android_binary");
- assertThat(relativePathsForJavaSourcesOf(ruleInfo))
- .containsExactly("com/google/example/Main.java");
+ assertThat(relativePathsForJavaSourcesOf(ruleInfo)).containsExactly("com/google/example/Main.java");
assertThat(transform(ruleInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
.containsExactly(
jarString("com/google/example", "libb.jar", "libb-hjar.jar", "libb-src.jar"),
@@ -760,6 +741,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(ruleInfo.getAndroidRuleIdeInfo().getApk().getRelativePath())
.isEqualTo("com/google/example/b.apk");
+
assertThat(ruleInfo.getDependenciesList()).contains("//com/google/example:l1");
assertThat(getIdeResolveFiles())
@@ -806,7 +788,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
"android_library(",
" name = 'no_idl',",
" srcs = ['Test.java'],",
- ")");
+ ")"
+ );
String noIdlTarget = "//java/com/google/example:no_idl";
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo(noIdlTarget);
RuleIdeInfo noIdlRuleInfo = getRuleInfoAndVerifyLabel(noIdlTarget, ruleIdeInfos);
@@ -821,17 +804,18 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
"android_library(",
" name = 'has_idl',",
" idl_srcs = ['a.aidl'],",
- ")");
+ ")"
+ );
String idlTarget = "//java/com/google/example:has_idl";
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo(idlTarget);
RuleIdeInfo idlRuleInfo = getRuleInfoAndVerifyLabel(idlTarget, ruleIdeInfos);
assertThat(idlRuleInfo.getAndroidRuleIdeInfo().getHasIdlSources()).isTrue();
assertThat(LIBRARY_ARTIFACT_TO_STRING.apply(idlRuleInfo.getAndroidRuleIdeInfo().getIdlJar()))
- .isEqualTo(
- jarString(
- "java/com/google/example", "libhas_idl-idl.jar", null, "libhas_idl-idl.srcjar"));
- assertThat(relativePathsForJavaSourcesOf(idlRuleInfo)).isEmpty();
+ .isEqualTo(jarString("java/com/google/example",
+ "libhas_idl-idl.jar", null, "libhas_idl-idl.srcjar"));
+ assertThat(relativePathsForJavaSourcesOf(idlRuleInfo))
+ .isEmpty();
assertThat(getIdeResolveFiles())
.containsExactly(
"java/com/google/example/libhas_idl.jar",
@@ -885,13 +869,12 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" cmd = '',",
")");
buildTarget("//com/google/example:lib");
- assertThat(getIdeResolveFiles())
- .containsExactly(
- "com/google/example/liblib.jar",
- "com/google/example/liblib-src.jar",
- "com/google/example/lib_resources.jar",
- "com/google/example/lib_resources-src.jar",
- "com/google/example/AndroidManifest.xml");
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/liblib.jar",
+ "com/google/example/liblib-src.jar",
+ "com/google/example/lib_resources.jar",
+ "com/google/example/lib_resources-src.jar",
+ "com/google/example/AndroidManifest.xml");
}
@Test
@@ -901,12 +884,14 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
"java_library(",
" name = 'no_plugin',",
" srcs = ['Test.java'],",
- ")");
+ ")"
+ );
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:no_plugin");
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//java/com/google/example:no_plugin", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//java/com/google/example:no_plugin", ruleIdeInfos);
- assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getGeneratedJarsList()).isEmpty();
+ assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getGeneratedJarsList())
+ .isEmpty();
}
@Test
@@ -926,17 +911,17 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
"java_library(",
" name = 'plugin_lib',",
" srcs = ['Plugin.java'],",
- ")");
+ ")"
+ );
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:test");
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//java/com/google/example:test", ruleIdeInfos);
-
- assertThat(
- transform(
- ruleIdeInfo.getJavaRuleIdeInfo().getGeneratedJarsList(),
- LIBRARY_ARTIFACT_TO_STRING))
- .containsExactly(
- jarString("java/com/google/example", "libtest-gen.jar", null, "libtest-gensrc.jar"));
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//java/com/google/example:test", ruleIdeInfos);
+
+ assertThat(transform(
+ ruleIdeInfo.getJavaRuleIdeInfo().getGeneratedJarsList(),
+ LIBRARY_ARTIFACT_TO_STRING))
+ .containsExactly(jarString("java/com/google/example",
+ "libtest-gen.jar", null, "libtest-gensrc.jar"));
assertThat(getIdeResolveFiles())
.containsExactly(
"java/com/google/example/libtest.jar",
@@ -957,7 +942,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib");
RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos);
- assertThat(ruleIdeInfo.getTagsList()).containsExactly("a", "b", "c", "d");
+ assertThat(ruleIdeInfo.getTagsList())
+ .containsExactly("a", "b", "c", "d");
}
@Test
@@ -977,11 +963,12 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" deps = [':forward'],",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:super");
- RuleIdeInfo ruleInfo =
- getRuleInfoAndVerifyLabel("//java/com/google/example:super", ruleIdeInfos);
+ RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel(
+ "//java/com/google/example:super", ruleIdeInfos);
- assertThat(ruleInfo.getDependenciesList())
- .containsAllOf("//java/com/google/example:forward", "//java/com/google/example:lib");
+ assertThat(ruleInfo.getDependenciesList()).containsAllOf(
+ "//java/com/google/example:forward",
+ "//java/com/google/example:lib");
}
@Test
@@ -1004,8 +991,10 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib");
RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos);
RuleIdeInfo javaToolchain = Iterables.getOnlyElement(findJavaToolchain(ruleIdeInfos));
- assertThat(ruleInfo.getDependenciesList())
- .containsExactly(javaToolchain.getLabel(), "//com/google/example:middle");
+ assertThat(ruleInfo.getDependenciesList()).containsExactly(
+ javaToolchain.getLabel(),
+ "//com/google/example:middle"
+ );
}
@Test
@@ -1024,18 +1013,17 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib");
RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos);
// todo(dslomov): Skylark aspect implementation does not yet return a correct root path.
- assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getSourcesList())
- .containsExactly(
- ArtifactLocation.newBuilder()
- .setRootExecutionPathFragment(
- targetConfig.getGenfilesDirectory(RepositoryName.MAIN).getExecPathString())
- .setRelativePath("com/google/example/gen.java")
- .setIsSource(false)
- .build(),
- ArtifactLocation.newBuilder()
- .setRelativePath("com/google/example/Test.java")
- .setIsSource(true)
- .build());
+ assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getSourcesList()).containsExactly(
+ ArtifactLocation.newBuilder()
+ .setRootExecutionPathFragment(
+ targetConfig.getGenfilesDirectory(RepositoryName.MAIN).getExecPathString())
+ .setRelativePath("com/google/example/gen.java")
+ .setIsSource(false)
+ .build(),
+ ArtifactLocation.newBuilder()
+ .setRelativePath("com/google/example/Test.java")
+ .setIsSource(true)
+ .build());
}
@Test
@@ -1112,12 +1100,12 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:neither");
- RuleIdeInfo neither =
- getRuleInfoAndVerifyLabel("//java/com/google/example:neither", ruleIdeInfos);
- RuleIdeInfo resourceFiles =
- getRuleInfoAndVerifyLabel("//java/com/google/example:resource_files", ruleIdeInfos);
- RuleIdeInfo manifest =
- getRuleInfoAndVerifyLabel("//java/com/google/example:manifest", ruleIdeInfos);
+ RuleIdeInfo neither = getRuleInfoAndVerifyLabel(
+ "//java/com/google/example:neither", ruleIdeInfos);
+ RuleIdeInfo resourceFiles = getRuleInfoAndVerifyLabel(
+ "//java/com/google/example:resource_files", ruleIdeInfos);
+ RuleIdeInfo manifest = getRuleInfoAndVerifyLabel(
+ "//java/com/google/example:manifest", ruleIdeInfos);
assertThat(neither.getAndroidRuleIdeInfo().getGenerateResourceClass()).isFalse();
assertThat(resourceFiles.getAndroidRuleIdeInfo().getGenerateResourceClass()).isTrue();
@@ -1132,10 +1120,11 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" name = 'plugin',",
" srcs = ['Plugin.java'],",
" processor_class = 'com.google.example.Plugin',",
- ")");
+ ")"
+ );
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:plugin");
- RuleIdeInfo plugin =
- getRuleInfoAndVerifyLabel("//java/com/google/example:plugin", ruleIdeInfos);
+ RuleIdeInfo plugin = getRuleInfoAndVerifyLabel(
+ "//java/com/google/example:plugin", ruleIdeInfos);
if (testLegacyAswbPluginVersionCompatibility()) {
assertThat(plugin.getKind()).isEqualTo(Kind.JAVA_PLUGIN);
@@ -1162,9 +1151,12 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
assertThat(ruleIdeInfos).hasSize(2);
- RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
- Entry<String, RuleIdeInfo> toolchainEntry =
- getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos);
+ RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple",
+ ruleIdeInfos
+ );
+ Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne(
+ ruleIdeInfos);
RuleIdeInfo toolchainInfo = toolchainEntry.getValue();
ArtifactLocation location = ruleInfo.getBuildFileArtifactLocation();
assertThat(Paths.get(location.getRelativePath()).toString())
@@ -1186,8 +1178,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
assertThat(ruleIdeInfos).hasSize(2);
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
ArtifactLocation location = ruleIdeInfo.getBuildFileArtifactLocation();
assertThat(Paths.get(location.getRelativePath()).toString())
.isEqualTo(Paths.get("com/google/example/BUILD").toString());
@@ -1228,8 +1220,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
assertThat(ruleIdeInfos).hasSize(2);
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
assertThat(ruleIdeInfo.hasCRuleIdeInfo()).isTrue();
CRuleIdeInfo cRuleIdeInfo = ruleIdeInfo.getCRuleIdeInfo();
@@ -1237,8 +1229,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(cRuleIdeInfo.getRuleIncludeList()).containsExactly("foo/bar");
// Make sure our understanding of where this attributes show up in other providers is correct.
- Entry<String, RuleIdeInfo> toolchainEntry =
- getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos);
+ Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne(
+ ruleIdeInfos);
RuleIdeInfo toolchainInfo = toolchainEntry.getValue();
assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue();
CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo();
@@ -1274,8 +1266,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
assertThat(ruleIdeInfos).hasSize(2);
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
assertThat(ruleIdeInfo.hasCRuleIdeInfo()).isTrue();
CRuleIdeInfo cRuleIdeInfo = ruleIdeInfo.getCRuleIdeInfo();
@@ -1283,8 +1275,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(cRuleIdeInfo.getRuleCoptList()).containsExactly("-DGOPT", "-Ifoo/baz/");
// Make sure our understanding of where this attributes show up in other providers is correct.
- Entry<String, RuleIdeInfo> toolchainEntry =
- getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos);
+ Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne(
+ ruleIdeInfos);
RuleIdeInfo toolchainInfo = toolchainEntry.getValue();
assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue();
CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo();
@@ -1313,8 +1305,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
assertThat(ruleIdeInfos).hasSize(2);
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
assertThat(ruleIdeInfo.hasCRuleIdeInfo()).isTrue();
CRuleIdeInfo cRuleIdeInfo = ruleIdeInfo.getCRuleIdeInfo();
@@ -1336,8 +1328,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
assertThat(ruleIdeInfos).hasSize(2);
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
ArtifactLocation location = ruleIdeInfo.getBuildFileArtifactLocation();
assertThat(Paths.get(location.getRelativePath()).toString())
.isEqualTo(Paths.get("com/google/example/BUILD").toString());
@@ -1371,8 +1363,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
assertThat(ruleIdeInfos).hasSize(2);
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
ArtifactLocation location = ruleIdeInfo.getBuildFileArtifactLocation();
assertThat(Paths.get(location.getRelativePath()).toString())
.isEqualTo(Paths.get("com/google/example/BUILD").toString());
@@ -1413,14 +1405,15 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
assertThat(ruleIdeInfos).hasSize(3);
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
assertThat(ruleIdeInfo.getDependenciesList()).contains("//com/google/example:lib");
assertThat(ruleIdeInfo.getDependenciesList()).hasSize(2);
- assertThat(getIdeCompileFiles())
- .containsExactly("com/google/example/liblib.a", "com/google/example/libsimple.a");
+ assertThat(getIdeCompileFiles()).containsExactly(
+ "com/google/example/liblib.a",
+ "com/google/example/libsimple.a");
}
@Test
@@ -1438,8 +1431,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" hdrs = ['simple/simple.h'],",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:androidlib");
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:androidlib", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:androidlib", ruleIdeInfos);
assertThat(ruleIdeInfo.getDependenciesList()).contains("//com/google/example:simple");
}
@@ -1463,7 +1456,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib1");
assertThat(ruleIdeInfos).hasSize(3);
- RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel("//com/google/example:lib1", ruleIdeInfos);
+ RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel(
+ "//com/google/example:lib1", ruleIdeInfos);
assertThat(lib1.hasCRuleIdeInfo()).isTrue();
CRuleIdeInfo cRuleIdeInfo = lib1.getCRuleIdeInfo();
@@ -1471,8 +1465,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(cRuleIdeInfo.getRuleIncludeList()).containsExactly("foo/bar");
// Make sure our understanding of where this attributes show up in other providers is correct.
- Entry<String, RuleIdeInfo> toolchainEntry =
- getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos);
+ Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne(
+ ruleIdeInfos);
RuleIdeInfo toolchainInfo = toolchainEntry.getValue();
assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue();
CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo();
@@ -1523,7 +1517,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib1");
assertThat(ruleIdeInfos).hasSize(3);
- RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel("//com/google/example:lib1", ruleIdeInfos);
+ RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel(
+ "//com/google/example:lib1", ruleIdeInfos);
assertThat(lib1.hasCRuleIdeInfo()).isTrue();
CRuleIdeInfo cRuleIdeInfo = lib1.getCRuleIdeInfo();
@@ -1531,8 +1526,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(cRuleIdeInfo.getRuleCoptList()).containsExactly("-DGOPT", "-Ifoo/baz/");
// Make sure our understanding of where this attributes show up in other providers is correct.
- Entry<String, RuleIdeInfo> toolchainEntry =
- getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos);
+ Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne(
+ ruleIdeInfos);
RuleIdeInfo toolchainInfo = toolchainEntry.getValue();
assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue();
CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo();
@@ -1574,7 +1569,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib1");
assertThat(ruleIdeInfos).hasSize(3);
- RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel("//com/google/example:lib1", ruleIdeInfos);
+ RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel(
+ "//com/google/example:lib1", ruleIdeInfos);
assertThat(lib1.hasCRuleIdeInfo()).isTrue();
CRuleIdeInfo cRuleIdeInfo = lib1.getCRuleIdeInfo();
@@ -1604,8 +1600,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" name = 'simple',",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:simple");
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//java/com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//java/com/google/example:simple", ruleIdeInfos);
if (testLegacyAswbPluginVersionCompatibility()) {
assertThat(ruleIdeInfo.getKind()).isEqualTo(Kind.ANDROID_BINARY);
}
@@ -1638,9 +1634,12 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
assertThat(ruleIdeInfos).hasSize(2);
- RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
- Entry<String, RuleIdeInfo> toolchainEntry =
- getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos);
+ RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple",
+ ruleIdeInfos
+ );
+ Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne(
+ ruleIdeInfos);
RuleIdeInfo toolchainInfo = toolchainEntry.getValue();
ArtifactLocation location = ruleInfo.getBuildFileArtifactLocation();
assertThat(Paths.get(location.getRelativePath()).toString())
@@ -1659,8 +1658,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" srcs = ['simple/Simple.java']",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
- RuleIdeInfo ruleIdeInfo =
- getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos);
+ RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:simple", ruleIdeInfos);
assertThat(ruleIdeInfo.hasCRuleIdeInfo()).isFalse();
}
@@ -1686,8 +1685,10 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" srcs = ['Real.java'],",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:test");
- RuleIdeInfo testInfo = getRuleInfoAndVerifyLabel("//com/google/example:test", ruleIdeInfos);
- assertThat(testInfo.getDependenciesList()).contains("//com/google/example:real");
+ RuleIdeInfo testInfo = getRuleInfoAndVerifyLabel(
+ "//com/google/example:test", ruleIdeInfos);
+ assertThat(testInfo.getDependenciesList())
+ .contains("//com/google/example:real");
assertThat(getRuleInfoAndVerifyLabel("//com/google/example:real", ruleIdeInfos)).isNotNull();
}
@@ -1701,7 +1702,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
"foo = rule(",
" implementation=impl,",
" attrs={'deps': attr.label_list(cfg='data')},",
- ")");
+ ")"
+ );
scratch.file(
"com/google/example/BUILD",
"load('//com/google/example:foo.bzl', 'foo')",
@@ -1712,15 +1714,18 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
}
/**
- * Returns true if we are testing the native aspect, not the Skylark one. Eventually Skylark
- * aspect will be equivalent to a native one, and this method will be removed.
+ * Returns true if we are testing the native aspect, not the Skylark one.
+ * Eventually Skylark aspect will be equivalent to a native one, and this method
+ * will be removed.
*/
@Override
protected boolean isNativeTest() {
return true;
}
- /** Test for Skylark version of the aspect. */
+ /**
+ * Test for Skylark version of the aspect.
+ */
@RunWith(JUnit4.class)
public static class IntelliJSkylarkAspectTest extends AndroidStudioInfoAspectTest {
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl b/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl
index aff43da51d..4d2cfa8ff1 100644
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl
+++ b/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl
@@ -288,31 +288,37 @@ def build_java_rule_ide_info(target, ctx):
jdeps = artifact_location(target.java.outputs.jdeps)
- java_sources = java_sources_for_package_manifest(ctx)
+ java_sources, gen_java_sources = java_sources_for_package_manifest(ctx)
package_manifest = None
- filtered_gen_jar = None
if java_sources:
package_manifest = build_java_package_manifest(ctx, target, java_sources, ".manifest")
ide_info_files = ide_info_files | set([package_manifest])
- if has_generated_sources(ctx):
- jar_artifacts = []
- for jar in target.java.outputs.jars:
- if jar.ijar:
- jar_artifacts.append(jar.ijar)
- elif jar.class_jar:
- jar_artifacts.append(jar.class_jar)
- filtered_gen_jar_artifact = build_filtered_gen_jar(
- ctx,
- target,
- jar_artifacts,
- package_manifest
- )
- ide_resolve_files = ide_resolve_files | set([filtered_gen_jar_artifact])
- filtered_gen_jar = struct(
- jar=artifact_location(filtered_gen_jar_artifact),
- )
+ filtered_gen_jar = None
+ if java_sources and gen_java_sources:
+ gen_package_manifest = build_java_package_manifest(
+ ctx,
+ target,
+ gen_java_sources,
+ "-filtered-gen.manifest"
+ )
+ jar_artifacts = []
+ for jar in target.java.outputs.jars:
+ if jar.ijar:
+ jar_artifacts.append(jar.ijar)
+ elif jar.class_jar:
+ jar_artifacts.append(jar.class_jar)
+ filtered_gen_jar_artifact = build_filtered_gen_jar(
+ ctx,
+ target,
+ jar_artifacts,
+ gen_package_manifest
+ )
+ ide_resolve_files = ide_resolve_files | set([filtered_gen_jar_artifact])
+ filtered_gen_jar = struct(
+ jar=artifact_location(filtered_gen_jar_artifact),
+ )
java_rule_ide_info = struct_omit_none(
sources = sources,
@@ -347,14 +353,13 @@ def build_java_package_manifest(ctx, target, source_files, suffix):
return output
def build_filtered_gen_jar(ctx, target, jars, manifest):
- """Filters the passed jar to contain classes that are not in the given manifest."""
+ """Filters the passed jar to contain only classes from the given manifest."""
output = ctx.new_file(target.label.name + "-filtered-gen.jar")
args = []
args += ["--jars"]
args += [":".join([jar.path for jar in jars])]
args += ["--manifest", manifest.path]
args += ["--output", output.path]
- args += ["--mode", "keep_all_except"]
ctx.action(
inputs = jars + [manifest],
outputs = [output],
@@ -371,20 +376,10 @@ def java_sources_for_package_manifest(ctx):
if hasattr(ctx.rule.attr, "srcs"):
srcs = ctx.rule.attr.srcs
all_java_sources = [f for src in srcs for f in src.files if f.basename.endswith(".java")]
- return [f for f in all_java_sources if f.is_source]
- return []
-
-def has_generated_sources(ctx):
- """Checks whether there are any generated sources."""
- if hasattr(ctx.rule.attr, "srcs"):
- srcs = ctx.rule.attr.srcs
- files = [f for src in srcs for f in src.files]
- for f in files:
- if f.basename.endswith(".java") and not f.is_source:
- return True
- if f.basename.endswith(".srcjar"):
- return True
- return False
+ java_sources = [f for f in all_java_sources if f.is_source]
+ gen_java_sources = [f for f in all_java_sources if not f.is_source]
+ return java_sources, gen_java_sources
+ return [], []
def build_android_rule_ide_info(target, ctx, legacy_resource_label):
"""Build AndroidRuleIdeInfo.
diff --git a/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java b/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java
index a8b870178f..2a373565cf 100644
--- a/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java
+++ b/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java
@@ -42,55 +42,36 @@ import java.util.zip.ZipOutputStream;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-/** Filters a jar, using the supplied package manifest to keep or exclude classes. */
+/**
+ * Filters a jar, keeping only the classes that are contained
+ * in the supplied package manifest.
+ */
public final class JarFilter {
/** The options for a {@JarFilter} action. */
public static final class JarFilterOptions extends OptionsBase {
- @Option(
- name = "jars",
- defaultValue = "null",
- converter = PathListConverter.class,
- category = "input",
- help = "A list of the paths to jars to filter for generated sources."
- )
+ @Option(name = "jars",
+ defaultValue = "null",
+ converter = PathListConverter.class,
+ category = "input",
+ help = "A list of the paths to jars to filter for generated sources.")
public List<Path> jars;
- @Option(
- name = "manifest",
- defaultValue = "null",
- converter = PathConverter.class,
- category = "input",
- help = "The path to a package manifest containing sources to filter (see mode)."
- )
+ @Option(name = "manifest",
+ defaultValue = "null",
+ converter = PathConverter.class,
+ category = "input",
+ help = "The path to a package manifest generated only from generated sources.")
public Path manifest;
- @Option(
- name = "mode",
- defaultValue = "",
- category = "input",
- help =
- "How the filter will operate. "
- + "'keep_only': Keep only classes that appear in the package manifest. "
- + "'keep_all_except': Keep all classes except those in the package manifest."
- )
- public String mode;
-
- @Option(
- name = "output",
- defaultValue = "null",
- converter = PathConverter.class,
- category = "output",
- help = "The path to the jar to output."
- )
+ @Option(name = "output",
+ defaultValue = "null",
+ converter = PathConverter.class,
+ category = "output",
+ help = "The path to the jar to output.")
public Path output;
}
- enum Mode {
- KEEP_ONLY,
- KEEP_ALL_EXCEPT,
- }
-
private static final Logger logger = Logger.getLogger(JarFilter.class.getName());
public static void main(String[] args) throws Exception {
@@ -99,11 +80,9 @@ public final class JarFilter {
Preconditions.checkNotNull(options.manifest);
Preconditions.checkNotNull(options.output);
- Mode mode = parseMode(options.mode);
-
try {
List<String> archiveFileNamePrefixes = parsePackageManifest(options.manifest);
- filterJars(options.jars, options.output, archiveFileNamePrefixes, mode);
+ filterJars(options.jars, options.output, archiveFileNamePrefixes);
} catch (Throwable e) {
logger.log(Level.SEVERE, "Error parsing package strings", e);
System.exit(1);
@@ -131,37 +110,19 @@ public final class JarFilter {
}
}
- private static Mode parseMode(String mode) {
- switch (mode) {
- case "keep_only":
- return Mode.KEEP_ONLY;
- case "keep_all_except":
- return Mode.KEEP_ALL_EXCEPT;
- case "":
- return Mode.KEEP_ONLY;
- default:
- String message = String.format("No such mode '%s'", mode);
- System.err.println("Error parsing command line: " + message);
- System.err.println("Try --help.");
- System.exit(2);
- return null;
- }
- }
-
- private static void filterJars(
- List<Path> jars, Path output, List<String> archiveFileNamePrefixes, Mode mode)
- throws IOException {
+ private static void filterJars(List<Path> jars, Path output,
+ List<String> archiveFileNamePrefixes) throws IOException {
final int bufferSize = 8 * 1024;
byte[] buffer = new byte[bufferSize];
- try (ZipOutputStream outputStream =
- new ZipOutputStream(new FileOutputStream(output.toFile()))) {
+ try (ZipOutputStream outputStream = new ZipOutputStream(
+ new FileOutputStream(output.toFile()))) {
for (Path jar : jars) {
try (ZipFile sourceZipFile = new ZipFile(jar.toFile())) {
Enumeration<? extends ZipEntry> entries = sourceZipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
- if (!shouldKeep(archiveFileNamePrefixes, entry.getName(), mode)) {
+ if (!shouldKeep(archiveFileNamePrefixes, entry.getName())) {
continue;
}
@@ -180,13 +141,7 @@ public final class JarFilter {
}
@VisibleForTesting
- static boolean shouldKeep(List<String> archiveFileNamePrefixes, String name, Mode mode) {
- return name.endsWith(".class")
- && (nameInManifest(archiveFileNamePrefixes, name) ^ (mode == Mode.KEEP_ALL_EXCEPT));
- }
-
- @VisibleForTesting
- static boolean nameInManifest(List<String> archiveFileNamePrefixes, String name) {
+ static boolean shouldKeep(List<String> archiveFileNamePrefixes, String name) {
for (String archiveFileNamePrefix : archiveFileNamePrefixes) {
if (name.startsWith(archiveFileNamePrefix)
&& name.length() > archiveFileNamePrefix.length()) {
@@ -208,9 +163,12 @@ public final class JarFilter {
}
/**
- * Reads the package manifest and computes a list of the expected jar archive file names.
+ * Reads the package manifest and computes a list of the expected jar archive
+ * file names.
*
- * <p>Eg.: file java/com/google/foo/Foo.java, package com.google.foo -> com/google/foo/Foo
+ * Eg.:
+ * file java/com/google/foo/Foo.java, package com.google.foo ->
+ * com/google/foo/Foo
*/
@VisibleForTesting
static List<String> parsePackageManifest(PackageManifest packageManifest) {
@@ -225,12 +183,12 @@ public final class JarFilter {
}
@Nullable
- private static String getArchiveFileNamePrefix(
- ArtifactLocation artifactLocation, String packageString) {
+ private static String getArchiveFileNamePrefix(ArtifactLocation artifactLocation,
+ String packageString) {
String relativePath = artifactLocation.getRelativePath();
int lastSlashIndex = relativePath.lastIndexOf('/');
- String fileName =
- lastSlashIndex != -1 ? relativePath.substring(lastSlashIndex + 1) : relativePath;
+ String fileName = lastSlashIndex != -1
+ ? relativePath.substring(lastSlashIndex + 1) : relativePath;
String className = fileName.substring(0, fileName.length() - ".java".length());
return packageString.replace('.', '/') + '/' + className;
}