diff options
author | 2016-10-06 21:41:04 +0000 | |
---|---|---|
committer | 2016-10-07 08:08:27 +0000 | |
commit | 440b73203054d1a163e28127c8680dd696e3458b (patch) | |
tree | eaaee95210977e91a568a94e57bd3bba1a00d74a /src | |
parent | 67d736b55a495ec1ac46a59a006d428ced97de96 (diff) |
Rollback of commit f21d35ead25167ca7191229c7a365ccdf1a2550e.
*** 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')
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; } |