aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar ajmichael <ajmichael@google.com>2018-04-02 15:43:57 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-02 15:45:10 -0700
commit6d1393d5b907f0d2c1ae6f831d44db0fa0eca06a (patch)
tree1f37236f19abce146f47a60cb477b8f4c9470186 /src/main/java/com/google/devtools
parente57e9a38d52b63d1baaacfadabf8f3367f5486eb (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/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTest.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTestRule.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java40
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)