Use --override_repository instead of --package_path to inject the aspect --package_path invalidates package loading when switching between command line and IDE invocation. --override_repository was specifically designed not to have that drawback Change-Id: I0c0d10aaf23bc2b8035e2e7262584eacae9c82b6
diff --git a/BUILD b/BUILD index 932e07a..3534b37 100644 --- a/BUILD +++ b/BUILD
@@ -12,7 +12,7 @@ srcs = glob(["java/**/*.java"]), activator = "com.google.devtools.bazel.e4b.Activator", bundle_name = "Eclipse 4 Bazel", - resources = glob(["resources/**"]) + ["//resources/tools/must/be/unique:srcs"], + resources = ["//resources:srcs"], vendor = "The Bazel Authors", version = VERSION, visibility = ["//visibility:public"],
diff --git a/WORKSPACE b/WORKSPACE index a91ed5f..4fd9945 100644 --- a/WORKSPACE +++ b/WORKSPACE
@@ -2,7 +2,7 @@ load("//tools/build_defs:eclipse.bzl", "load_eclipse_deps") load(":bazel_version.bzl", "check_bazel_version") -check_bazel_version("0.4.5") +check_bazel_version("0.5.0") load_eclipse_deps()
diff --git a/java/com/google/devtools/bazel/e4b/BazelAspectLocationImpl.java b/java/com/google/devtools/bazel/e4b/BazelAspectLocationImpl.java index a14cdf3..b07f605 100644 --- a/java/com/google/devtools/bazel/e4b/BazelAspectLocationImpl.java +++ b/java/com/google/devtools/bazel/e4b/BazelAspectLocationImpl.java
@@ -14,13 +14,15 @@ package com.google.devtools.bazel.e4b; -import com.google.devtools.bazel.e4b.command.BazelAspectLocation; import java.io.File; import java.io.IOException; import java.net.URL; + import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Platform; +import com.google.devtools.bazel.e4b.command.BazelAspectLocation; + /** Implementation of {@link BazelAspectLocation} using Eclipse OSGi Bundle locations */ class BazelAspectLocationImpl implements BazelAspectLocation { @@ -44,7 +46,7 @@ @Override public String getAspectLabel() { - return "//tools/must/be/unique:e4b_aspect.bzl%e4b_aspect"; + return "//:e4b_aspect.bzl%e4b_aspect"; } }
diff --git a/java/com/google/devtools/bazel/e4b/command/BazelCommand.java b/java/com/google/devtools/bazel/e4b/command/BazelCommand.java index 28fae71..85c9282 100644 --- a/java/com/google/devtools/bazel/e4b/command/BazelCommand.java +++ b/java/com/google/devtools/bazel/e4b/command/BazelCommand.java
@@ -14,10 +14,6 @@ package com.google.devtools.bazel.e4b.command; -import com.google.common.base.Joiner; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.devtools.bazel.e4b.command.CommandConsole.CommandConsoleFactory; import java.io.File; import java.io.IOException; import java.io.OutputStream; @@ -29,6 +25,11 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.google.common.base.Joiner; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.devtools.bazel.e4b.command.CommandConsole.CommandConsoleFactory; + /** * Main utility to call bazel commands, wrapping its input and output to the message console. */ @@ -38,8 +39,8 @@ private static Pattern VERSION_PATTERN = Pattern.compile("^([0-9]+)\\.([0-9]+)\\.([0-9]+)([^0-9].*)?$"); - // Minimum bazel version needed to work with this plugin (currently 0.4.0) - private static int[] MINIMUM_BAZEL_VERSION = {0, 4, 0}; + // Minimum bazel version needed to work with this plugin (currently 0.5.0) + private static int[] MINIMUM_BAZEL_VERSION = {0, 5, 0}; private static enum ConsoleType { NO_CONSOLE, SYSTEM, WORKSPACE @@ -62,7 +63,9 @@ this.aspectLocation = aspectLocation; this.consoleFactory = consoleFactory; this.buildOptions = - ImmutableList.of("--watchfs", "--aspects=" + aspectLocation.getAspectLabel()); + ImmutableList.of("--watchfs", + "--override_repository=local_eclipse_aspect=" + aspectLocation.getWorkspaceDirectory(), + "--aspects=@local_eclipse_aspect" + aspectLocation.getAspectLabel()); this.aspectOptions = ImmutableList.<String>builder().addAll(buildOptions).add("-k", "--output_groups=ide-info-text,ide-resolve,-_,-defaults", "--experimental_show_artifacts") .build(); @@ -153,7 +156,6 @@ */ public class BazelInstance { private final File workspaceRoot; - private final String packagePath; private final File execRoot; private final Map<String, ImmutableMap<String, IdeBuildInfo>> buildInfoCache = new HashMap<>(); @@ -161,8 +163,6 @@ private BazelInstance(File workspaceRoot) throws IOException, InterruptedException, BazelNotFoundException { this.workspaceRoot = workspaceRoot; - this.packagePath = String.join("", runBazel("info", "package_path")) + ":" - + aspectLocation.getWorkspaceDirectory().toString(); this.execRoot = new File(String.join("", runBazel("info", "execution_root"))); } @@ -199,8 +199,8 @@ private synchronized List<String> buildIdeInfo(Collection<String> targets) throws IOException, InterruptedException, BazelNotFoundException { return BazelCommand.this.runBazelAndGetErrorLines(ConsoleType.WORKSPACE, workspaceRoot, - ImmutableList.<String>builder().add("build").add("--package_path", packagePath) - .addAll(aspectOptions).addAll(targets).build(), + ImmutableList.<String>builder().add("build").addAll(aspectOptions).addAll(targets) + .build(), // Strip out the artifact list, keeping the e4b-build.json files. t -> t.startsWith(">>>") ? (t.endsWith(".e4b-build.json") ? t.substring(3) : "") : null); } @@ -245,7 +245,7 @@ public synchronized int build(List<String> targets, String... extraArgs) throws IOException, InterruptedException, BazelNotFoundException { return BazelCommand.this.runBazel(workspaceRoot, - ImmutableList.<String>builder().add("build", "--package_path", packagePath) + ImmutableList.<String>builder().add("build") .addAll(buildOptions).add(extraArgs).addAll(targets).build()); } @@ -257,7 +257,7 @@ public synchronized int tests(List<String> targets, String... extraArgs) throws IOException, InterruptedException, BazelNotFoundException { return BazelCommand.this.runBazel(workspaceRoot, - ImmutableList.<String>builder().add("test").add("--package_path", packagePath) + ImmutableList.<String>builder().add("test") .addAll(buildOptions).add(extraArgs).addAll(targets).build()); }
diff --git a/resources/BUILD b/resources/BUILD new file mode 100644 index 0000000..78e2457 --- /dev/null +++ b/resources/BUILD
@@ -0,0 +1,9 @@ +# This is a build file for creating a corresponding package. This package will be a local repository +# added with --override_repository when using the aspect so we can load the e4b_aspect.bzl Skylark +# aspect extension when calling build from Eclipse. + +filegroup( + name = "srcs", + srcs = glob(["**"]), + visibility = ["//visibility:public"], +)
diff --git a/resources/WORKSPACE b/resources/WORKSPACE new file mode 100644 index 0000000..11cc71a --- /dev/null +++ b/resources/WORKSPACE
@@ -0,0 +1,3 @@ +# This is a workspace file for creating a local repository added with --override_repository when +# using the aspect so we can load the e4b_aspect.bzl Skylark aspect extension when calling build +# from Eclipse. \ No newline at end of file
diff --git a/resources/tools/must/be/unique/e4b_aspect.bzl b/resources/e4b_aspect.bzl similarity index 100% rename from resources/tools/must/be/unique/e4b_aspect.bzl rename to resources/e4b_aspect.bzl
diff --git a/resources/tools/must/be/unique/BUILD b/resources/tools/must/be/unique/BUILD deleted file mode 100644 index 3b68e55..0000000 --- a/resources/tools/must/be/unique/BUILD +++ /dev/null
@@ -1,10 +0,0 @@ -# This is a build file for creating a corresponding package. This package will be added to the -# package path when using the aspect so we can load the e4b_aspect.bzl Skylark aspect extension -# when calling build from Eclipse. This package has an improbable name to avoid collision with -# packages in the main repository. - -filegroup( - name = "srcs", - srcs = glob(["**"]), - visibility = ["//visibility:public"], -)