Move intellij_info.bzl to a tool packaged with bazel.
This will allow use of the Skylark IDE aspect in bazel,
unblocking the migration away from the native aspect.
--
MOS_MIGRATED_REVID=139796095
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index 05e709a..8fcb520 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -647,12 +647,20 @@
],
)
+# Copy intellij_info.bzl so it's in a predictable resource location
+genrule(
+ name = "intellij_info_bzl_copy",
+ srcs = ["//tools/ide:intellij_info"],
+ outs = ["ideinfo/intellij_info.bzl"],
+ cmd = "cp $(SRCS) $@",
+)
+
java_test(
name = "ideinfo_test",
srcs = glob([
"ideinfo/*.java",
]),
- resources = ["ideinfo/intellij_info.bzl"],
+ resources = [":intellij_info_bzl_copy"],
tags = ["ideinfo"],
test_class = "com.google.devtools.build.lib.AllTests",
deps = [
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/intellij_info_tests.bzl b/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/intellij_info_tests.bzl
deleted file mode 100644
index 14bea49..0000000
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/intellij_info_tests.bzl
+++ /dev/null
@@ -1,144 +0,0 @@
-# Copyright 2016 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Tests for intellij_info.bzl
-
-load(":skylarktests/testing.bzl",
- "start_test",
- "end_test",
- "fail_test",
- "assert_equals",
- "assert_contains_all",
- "assert_true")
-
-
-load(":intellij_info.bzl", "intellij_info_test_aspect")
-
-def test(impl):
- return rule(impl,
- attrs = {
- 'targets' : attr.label_list(aspects = [intellij_info_test_aspect]),
- },
- test = True,
- )
-
-def _source_paths(env, artifact_locations):
- for f in artifact_locations:
- assert_true(env, f.is_source, '%s is not source' % f)
- return [f.relative_path for f in artifact_locations]
-
-def _jar_string(library_artifact, name):
- if hasattr(library_artifact, name):
- return "<%s:%s>" % (name, getattr(library_artifact, name).relative_path)
- else:
- return ""
-
-def _library_artifact_string(env, library_artifact):
- return _jar_string(library_artifact, 'jar') + \
- _jar_string(library_artifact, 'interface_jar') + \
- _jar_string(library_artifact, 'source_jar')
-
-def _jar_expected_string(base, jar, interface_jar, source_jar):
- s = ""
- if jar:
- s += "<jar:%s>" % (base + "/" + jar)
- if interface_jar:
- s += "<interface_jar:%s>" % (base + "/" + interface_jar)
- if source_jar:
- s += "<source_jar:%s>" % (base + "/" + source_jar)
- return s
-
-################################################
-
-def _test_simple_java_library(ctx):
- env = start_test(ctx)
- infos = ctx.attr.targets[0].intellij_infos
- info = infos[str(ctx.label.relative(":simple1"))]
- if not info:
- fail_test(env, "info not found")
- end_test(ctx, env)
- return
- assert_equals(env,
- ctx.label.package + "/BUILD",
- info.build_file_artifact_location.relative_path)
-
- assert_equals(env,
- True,
- info.build_file_artifact_location.is_source)
-
- assert_equals(env, "java_library", info.kind_string)
-
- assert_equals(env,
- [ctx.label.package + "/skylarktests/testfiles/Simple1.java"],
- _source_paths(env, info.java_rule_ide_info.sources))
-
- # When Java header compilation is active, the interface jar is an -hjar.jar instead of an
- # -ijar.jar. Try to detect that and test accordingly.
- interface_jar_name = "libsimple1-ijar.jar"
- for jar in info.java_rule_ide_info.jars:
- if "-hjar.jar" in getattr(jar, "interface_jar").relative_path:
- interface_jar_name = "libsimple1-hjar.jar"
-
- assert_equals(env,
- [_jar_expected_string(ctx.label.package,
- "libsimple1.jar", interface_jar_name, "libsimple1-src.jar")],
- [_library_artifact_string(env, a) for a in info.java_rule_ide_info.jars])
-
- assert_equals(env,
- ctx.label.package + "/libsimple1.jdeps",
- info.java_rule_ide_info.jdeps.relative_path)
-
- end_test(env)
-
-test_simple_java_library_rule_test = test(_test_simple_java_library)
-
-def test_simple_java_library():
- native.java_library(name = "simple1", srcs = ["skylarktests/testfiles/Simple1.java"])
- test_simple_java_library_rule_test(name = "test_simple_java_library",
- targets = [":simple1"]
- )
-
-################################################
-def _test_java_library_with_dependencies(ctx):
- env = start_test(ctx)
- infos = ctx.attr.targets[0].intellij_infos
- info_simple = infos[str(ctx.label.relative(":simple2"))]
- info_complex = infos[str(ctx.label.relative(":complex2"))]
- assert_equals(env,
- [ctx.label.package + "/skylarktests/testfiles/Complex2.java"],
- _source_paths(env, info_complex.java_rule_ide_info.sources))
- assert_contains_all(env,
- [str(ctx.label.relative(":simple2"))],
- info_complex.dependencies)
- end_test(env)
-
-test_java_library_with_dependencies_rule_test = test(_test_java_library_with_dependencies)
-
-def test_java_library_with_dependencies():
- native.java_library(name = "simple2", srcs = ["skylarktests/testfiles/Simple2.java"])
- native.java_library(name = "complex2",
- srcs = ["skylarktests/testfiles/Complex2.java"],
- deps = [":simple2"])
- test_java_library_with_dependencies_rule_test(name = "test_java_library_with_dependencies",
- targets = [":complex2"]
- )
-
-def skylark_tests():
- test_simple_java_library()
- test_java_library_with_dependencies()
-
- native.test_suite(name = "skylark_tests",
- tests = [":test_simple_java_library",
- ":test_java_library_with_dependencies"])
-
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testfiles/Complex2.java b/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testfiles/Complex2.java
deleted file mode 100644
index 5a0f6e2..0000000
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testfiles/Complex2.java
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2016 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.ideinfo.skylarktests.testfiles;
-
-/**
- * Test class.
- */
-public class Complex2 {
-
-}
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testfiles/Simple1.java b/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testfiles/Simple1.java
deleted file mode 100644
index 84d7729..0000000
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testfiles/Simple1.java
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2016 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.ideinfo.skylarktests.testfiles;
-
-/**
- * Test class.
- */
-public class Simple1 {
-
-}
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testfiles/Simple2.java b/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testfiles/Simple2.java
deleted file mode 100644
index 3b28249..0000000
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testfiles/Simple2.java
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2016 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.ideinfo.skylarktests.testfiles;
-
-/**
- * Test class.
- */
-public class Simple2 {
-
-}
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testing.bzl b/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testing.bzl
deleted file mode 100644
index f1b30f7..0000000
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/skylarktests/testing.bzl
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright 2016 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Small testing framework for Skylark rules and aspects.
-
-def start_test(ctx):
- return struct(errors = [], ctx = ctx)
-
-def end_test(env):
- cmd = "\n".join([
- "cat << EOF",
- "\n".join(reversed(env.errors)),
- "EOF",
- "exit %d" % (1 if env.errors else 0)])
- env.ctx.file_action(
- output = env.ctx.outputs.executable,
- content = cmd,
- executable = True,
- )
-
-def fail_test(env, msg):
- print(msg)
- env.errors.append(msg)
-
-
-def assert_equals(env, expected, actual):
- if not expected == actual:
- fail_test(env, "'%s' != '%s'" % (expected, actual))
-
-def assert_contains_all(env, expected, actual):
- for e in expected:
- if e not in actual:
- fail_test(env, "'%s' is not in '%s'" % (e, actual))
-
-
-def assert_true(env, condition, message):
- if not condition:
- fail_test(env, message)
diff --git a/src/test/shell/integration/BUILD b/src/test/shell/integration/BUILD
index c6f0cff..078e962 100644
--- a/src/test/shell/integration/BUILD
+++ b/src/test/shell/integration/BUILD
@@ -135,9 +135,33 @@
)
sh_test(
- name = "ide_info_generation",
+ name = "ide_info_generation_native",
size = "large",
srcs = ["ide_info_generation.sh"],
+ args = [
+ "AndroidStudioInfoAspect",
+ "ide-info",
+ "aswb-build",
+ "ide-info-text",
+ "aswb-build.txt",
+ ],
+ data = [
+ ":test-deps",
+ "//src/tools/android/java/com/google/devtools/build/android/ideinfo:PackageParser",
+ ],
+)
+
+sh_test(
+ name = "ide_info_generation_skylark",
+ size = "large",
+ srcs = ["ide_info_generation.sh"],
+ args = [
+ "@bazel_tools//tools/ide:intellij_info.bzl%intellij_info_aspect",
+ "ide-info-text",
+ "intellij-build.txt",
+ "ide-info-text",
+ "intellij-build.txt",
+ ],
data = [
":test-deps",
"//src/tools/android/java/com/google/devtools/build/android/ideinfo:PackageParser",
diff --git a/src/test/shell/integration/ide_info_generation.sh b/src/test/shell/integration/ide_info_generation.sh
index 9cd215a..b3e2873 100755
--- a/src/test/shell/integration/ide_info_generation.sh
+++ b/src/test/shell/integration/ide_info_generation.sh
@@ -16,6 +16,12 @@
#
# Integration tests for IDE build info generation.
+ASPECT=$1
+BINARY_OUTPUT_GROUP=$2
+BINARY_OUTPUT=$3
+TEXT_OUTPUT_GROUP=$4
+TEXT_OUTPUT=$5
+
# Load the test setup defined in the parent directory
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${CURRENT_DIR}/../integration_test_setup.sh" \
@@ -61,12 +67,12 @@
EOF
bazel build //com/google/example:complex \
- --aspects AndroidStudioInfoAspect --output_groups "ide-info" \
+ --aspects $ASPECT --output_groups "$BINARY_OUTPUT_GROUP" \
|| fail "Expected success"
- SIMPLE_ASWB_BUILD="${PRODUCT_NAME}-bin/com/google/example/simple.aswb-build"
- [ -e $SIMPLE_ASWB_BUILD ] || fail "$SIMPLE_ASWB_BUILD not found"
- COMPLEX_ASWB_BUILD="${PRODUCT_NAME}-bin/com/google/example/complex.aswb-build"
- [ -e $COMPLEX_ASWB_BUILD ] || fail "$COMPLEX_ASWB_BUILD not found"
+ SIMPLE_BUILD="${PRODUCT_NAME}-bin/com/google/example/simple.$BINARY_OUTPUT"
+ [ -e $SIMPLE_BUILD ] || fail "$SIMPLE_BUILD not found"
+ COMPLEX_BUILD="${PRODUCT_NAME}-bin/com/google/example/complex.$BINARY_OUTPUT"
+ [ -e $COMPLEX_BUILD ] || fail "$COMPLEX_BUILD not found"
}
function test_detailed_result() {
@@ -111,26 +117,26 @@
EOF
bazel build //com/google/example:complex \
- --aspects AndroidStudioInfoAspect --output_groups "ide-info" \
+ --aspects $ASPECT --output_groups "$BINARY_OUTPUT_GROUP" \
--experimental_show_artifacts 2> $TEST_log \
|| fail "Expected success"
- SIMPLE_ASWB_BUILD="${PRODUCT_NAME}-bin/com/google/example/simple.aswb-build"
- [ -e $SIMPLE_ASWB_BUILD ] || fail "$SIMPLE_ASWB_BUILD not found"
- COMPLEX_ASWB_BUILD="${PRODUCT_NAME}-bin/com/google/example/complex.aswb-build"
- [ -e $COMPLEX_ASWB_BUILD ] || fail "$COMPLEX_ASWB_BUILD not found"
+ SIMPLE_BUILD="${PRODUCT_NAME}-bin/com/google/example/simple.$BINARY_OUTPUT"
+ [ -e $SIMPLE_BUILD ] || fail "$SIMPLE_BUILD not found"
+ COMPLEX_BUILD="${PRODUCT_NAME}-bin/com/google/example/complex.$BINARY_OUTPUT"
+ [ -e $COMPLEX_BUILD ] || fail "$COMPLEX_BUILD not found"
expect_log '^Build artifacts:'
- expect_log "^>>>.*/com/google/example/complex.aswb-build"
- expect_log "^>>>.*/com/google/example/simple.aswb-build"
+ expect_log "^>>>.*/com/google/example/complex.$BINARY_OUTPUT"
+ expect_log "^>>>.*/com/google/example/simple.$BINARY_OUTPUT"
# second build; test that up-to-date artifacts are output.
bazel build //com/google/example:complex \
- --aspects AndroidStudioInfoAspect --output_groups "ide-info" \
+ --aspects $ASPECT --output_groups "$BINARY_OUTPUT_GROUP" \
--experimental_show_artifacts 2> $TEST_log \
|| fail "Expected success"
expect_log '^Build artifacts:'
- expect_log "^>>>.*/com/google/example/complex.aswb-build"
- expect_log "^>>>.*/com/google/example/simple.aswb-build"
+ expect_log "^>>>.*/com/google/example/complex.$BINARY_OUTPUT"
+ expect_log "^>>>.*/com/google/example/simple.$BINARY_OUTPUT"
}
function test_ide_resolve_output_group() {
@@ -171,7 +177,7 @@
EOF
bazel build //com/google/example:complex \
- --aspects AndroidStudioInfoAspect --output_groups "ide-resolve" \
+ --aspects $ASPECT --output_groups "ide-resolve" \
|| fail "Expected success"
[ -e ${PRODUCT_NAME}-bin/com/google/example/libsimple.jar ] \
|| fail "${PRODUCT_NAME}-bin/com/google/example/libsimple.jar not found"
@@ -199,7 +205,7 @@
EOF
bazel build //com/google/example:test \
- --aspects AndroidStudioInfoAspect --output_groups "ide-resolve" \
+ --aspects $ASPECT --output_groups "ide-resolve" \
--experimental_show_artifacts \
|| fail "Expected success"
EXAMPLE_DIR="${PRODUCT_NAME}-bin/com/google/example"
@@ -253,12 +259,12 @@
EOF
bazel build //com/google/example:complex \
- --aspects AndroidStudioInfoAspect --output_groups "ide-info-text" \
+ --aspects $ASPECT --output_groups "$TEXT_OUTPUT_GROUP" \
|| fail "Expected success"
- SIMPLE_ASWB_BUILD="${PRODUCT_NAME}-bin/com/google/example/simple.aswb-build.txt"
- [ -e $SIMPLE_ASWB_BUILD ] || fail "$SIMPLE_ASWB_BUILD not found"
- COMPLEX_ASWB_BUILD="${PRODUCT_NAME}-bin/com/google/example/complex.aswb-build.txt"
- [ -e $COMPLEX_ASWB_BUILD ] || fail "$COMPLEX_ASWB_BUILD not found"
+ SIMPLE_BUILD="${PRODUCT_NAME}-bin/com/google/example/simple.$TEXT_OUTPUT"
+ [ -e $SIMPLE_BUILD ] || fail "$SIMPLE_BUILD not found"
+ COMPLEX_BUILD="${PRODUCT_NAME}-bin/com/google/example/complex.$TEXT_OUTPUT"
+ [ -e $COMPLEX_BUILD ] || fail "$COMPLEX_BUILD not found"
}
run_suite "Test IDE info files generation"
diff --git a/tools/BUILD b/tools/BUILD
index 19d04c5..e2ba653 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -17,6 +17,7 @@
"//tools/build_defs/repo:srcs",
"//tools/build_rules:srcs",
"//tools/proto/toolchains:srcs",
+ "//tools/ide:srcs",
"//tools/jdk:srcs",
"//tools/genrule:srcs",
"//tools/cpp:srcs",
@@ -44,6 +45,7 @@
"//tools/proto/toolchains:srcs",
"//tools/cpp:srcs",
"//tools/genrule:srcs",
+ "//tools/ide:embedded_tools_srcs",
"//tools/j2objc:srcs",
"//tools/jdk:package-srcs",
"//tools/jdk:srcs",
diff --git a/tools/ide/BUILD b/tools/ide/BUILD
new file mode 100644
index 0000000..d771e5c
--- /dev/null
+++ b/tools/ide/BUILD
@@ -0,0 +1,24 @@
+licenses(["notice"]) # Apache 2.0
+
+filegroup(
+ name = "intellij_info",
+ srcs = ["intellij_info.bzl"],
+ visibility = [
+ "//src/test/java/com/google/devtools/build/lib:__pkg__",
+ ],
+)
+
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"]),
+ visibility = ["//tools:__pkg__"],
+)
+
+filegroup(
+ name = "embedded_tools_srcs",
+ srcs = [
+ "BUILD.tools",
+ "intellij_info.bzl",
+ ],
+ visibility = ["//visibility:public"],
+)
diff --git a/tools/ide/BUILD.tools b/tools/ide/BUILD.tools
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tools/ide/BUILD.tools
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl b/tools/ide/intellij_info.bzl
similarity index 100%
rename from src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl
rename to tools/ide/intellij_info.bzl