diff options
author | ajmichael <ajmichael@google.com> | 2018-04-02 15:43:57 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-02 15:45:10 -0700 |
commit | 6d1393d5b907f0d2c1ae6f831d44db0fa0eca06a (patch) | |
tree | 1f37236f19abce146f47a60cb477b8f4c9470186 /src/main/java | |
parent | e57e9a38d52b63d1baaacfadabf8f3367f5486eb (diff) |
Remove Android jar from android_local_test bootclasspath
Instead, treat it as a regular compile-time library dependency.
This fixes Java8 compilation in android_local_test.
RELNOTES: None
PiperOrigin-RevId: 191359834
Diffstat (limited to 'src/main/java')
3 files changed, 33 insertions, 36 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTest.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTest.java index 0f1ef839f1..7906fcc10c 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTest.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTest.java @@ -23,10 +23,8 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.bazel.rules.java.BazelJavaSemantics; import com.google.devtools.build.lib.rules.android.AndroidLocalTestBase; -import com.google.devtools.build.lib.rules.android.AndroidSdkProvider; import com.google.devtools.build.lib.rules.android.AndroidSemantics; import com.google.devtools.build.lib.rules.java.JavaCommon; -import com.google.devtools.build.lib.rules.java.JavaCompilationArgs.ClasspathType; import com.google.devtools.build.lib.rules.java.JavaCompilationArtifacts.Builder; import com.google.devtools.build.lib.rules.java.JavaCompilationHelper; import com.google.devtools.build.lib.rules.java.JavaSemantics; @@ -82,30 +80,6 @@ public class BazelAndroidLocalTest extends AndroidLocalTestBase { } @Override - protected JavaCompilationHelper getJavaCompilationHelperWithDependencies( - RuleContext ruleContext, - JavaSemantics javaSemantics, - JavaCommon javaCommon, - JavaTargetAttributes.Builder javaTargetAttributesBuilder) { - - JavaCompilationHelper javaCompilationHelper = - new JavaCompilationHelper( - ruleContext, javaSemantics, javaCommon.getJavacOpts(), javaTargetAttributesBuilder); - javaCompilationHelper.addLibrariesToAttributes( - ImmutableList.copyOf(javaCommon.targetsTreatedAsDeps(ClasspathType.COMPILE_ONLY))); - - javaCompilationHelper.addLibrariesToAttributes( - ImmutableList.of(getAndCheckTestSupport(ruleContext))); - - javaTargetAttributesBuilder.setBootClassPath( - ImmutableList.of(AndroidSdkProvider.fromRuleContext(ruleContext).getAndroidJar())); - javaTargetAttributesBuilder.addRuntimeClassPathEntry( - AndroidSdkProvider.fromRuleContext(ruleContext).getAndroidJar()); - - return javaCompilationHelper; - } - - @Override protected TransitiveInfoCollection getAndCheckTestSupport(RuleContext ruleContext) { // Add the unit test support to the list of dependencies. return Iterables.getOnlyElement(ruleContext.getPrerequisites("$testsupport", Mode.TARGET)); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTestRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTestRule.java index 67228a5292..2d91a65c1f 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTestRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTestRule.java @@ -69,6 +69,9 @@ public class BazelAndroidLocalTestRule implements RuleDefinition { ImmutableList.of( SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey()))))) .override(attr("$testsupport", LABEL).value(environment.getToolsLabel(JUNIT_TESTRUNNER))) + .add( + attr("$robolectric_implicit_classpath", LABEL_LIST) + .value(ImmutableList.of(environment.getToolsLabel("//tools/android:android_jar")))) .override(attr("stamp", TRISTATE).value(TriState.NO)) .removeAttribute("$experimental_testsupport") .removeAttribute("classpath_resources") diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java index dca5a7f142..ff90341fe6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java @@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.rules.android; -import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; @@ -36,6 +35,7 @@ import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTa import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; +import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; import com.google.devtools.build.lib.rules.java.ClasspathConfiguredFragment; import com.google.devtools.build.lib.rules.java.JavaCommon; @@ -447,19 +447,17 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor builder.addRunfiles(ruleContext, RunfilesProvider.DEFAULT_RUNFILES); builder.add(ruleContext, JavaRunfilesProvider.TO_RUNFILES); - List<TransitiveInfoCollection> depsForRunfiles = new ArrayList<>(); - - if (ruleContext.isAttrDefined("$robolectric", LABEL_LIST)) { - depsForRunfiles.addAll(ruleContext.getPrerequisites("$robolectric", Mode.TARGET)); - } + ImmutableList<TransitiveInfoCollection> depsForRunfiles = + ImmutableList.<TransitiveInfoCollection>builder() + .addAll(ruleContext.getPrerequisites("$robolectric_implicit_classpath", Mode.TARGET)) + .addAll(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET)) + .build(); Artifact androidAllJarsPropertiesFile = getAndroidAllJarsPropertiesFile(ruleContext); if (androidAllJarsPropertiesFile != null) { builder.addArtifact(androidAllJarsPropertiesFile); } - depsForRunfiles.addAll(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET)); - builder.addArtifacts(getRuntimeJarsForTargets(getAndCheckTestSupport(ruleContext))); builder.addTargets(depsForRunfiles, JavaRunfilesProvider.TO_RUNFILES); @@ -566,12 +564,34 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor * * @throws RuleErrorException */ - protected abstract JavaCompilationHelper getJavaCompilationHelperWithDependencies( + private JavaCompilationHelper getJavaCompilationHelperWithDependencies( RuleContext ruleContext, JavaSemantics javaSemantics, JavaCommon javaCommon, JavaTargetAttributes.Builder javaTargetAttributesBuilder) - throws RuleErrorException; + throws RuleErrorException { + JavaCompilationHelper javaCompilationHelper = + new JavaCompilationHelper( + ruleContext, javaSemantics, javaCommon.getJavacOpts(), javaTargetAttributesBuilder); + + if (ruleContext.isAttrDefined("$junit", BuildType.LABEL)) { + // JUnit jar must be ahead of android runtime jars since these contain stubbed definitions + // for framework.junit.* classes which Robolectric does not re-write. + javaCompilationHelper.addLibrariesToAttributes( + ruleContext.getPrerequisites("$junit", Mode.TARGET)); + } + // Robolectric jars must be ahead of other potentially conflicting jars + // (e.g., Android runtime jars) in the classpath to make sure they always take precedence. + javaCompilationHelper.addLibrariesToAttributes( + ruleContext.getPrerequisites("$robolectric_implicit_classpath", Mode.TARGET)); + + javaCompilationHelper.addLibrariesToAttributes( + javaCommon.targetsTreatedAsDeps(ClasspathType.COMPILE_ONLY)); + + javaCompilationHelper.addLibrariesToAttributes( + ImmutableList.of(getAndCheckTestSupport(ruleContext))); + return javaCompilationHelper; + } /** Get the testrunner from the rule */ protected abstract TransitiveInfoCollection getAndCheckTestSupport(RuleContext ruleContext) |