From aa4acea41e0a8fe26f722275ca9333086f953187 Mon Sep 17 00:00:00 2001 From: Andy Scott Date: Tue, 24 Apr 2018 22:36:32 -0700 Subject: [PATCH] Add test w/ tool to read zinc analysis output --- rules/providers.bzl | 22 ++++++++++++++++++++ rules/scala.bzl | 12 +++++++++++ rules/scala/private/binary.bzl | 9 +++++++-- tests/zinc/BUILD | 37 ++++++++++++++++++++++++++++++++++ tests/zinc/source.scala | 6 ++++++ tests/zinc/test | 4 ++++ tests/zinc/tool.scala | 30 +++++++++++++++++++++++++++ 7 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 tests/zinc/BUILD create mode 100644 tests/zinc/source.scala create mode 100755 tests/zinc/test create mode 100644 tests/zinc/tool.scala diff --git a/rules/providers.bzl b/rules/providers.bzl index a6a04fd52..a599d67dd 100644 --- a/rules/providers.bzl +++ b/rules/providers.bzl @@ -67,6 +67,28 @@ ZincInfo = provider( }, ) +def _zinc_info_implementation(ctx): + input = ctx.attr.dep[ZincInfo].analysis + output = ctx.outputs.analysis + ctx.actions.run_shell( + inputs = [input], + outputs = [output], + command = "cp %s %s" % (input.path, output.path), + ) + +zinc_info = rule( + implementation = _zinc_info_implementation, + attrs = { + "dep": attr.label( + mandatory = True, + providers = [ZincInfo], + ), + }, + outputs = { + "analysis": "%{name}.gz", + }, +) + def _collect(index, entries): return [ entry[index] diff --git a/rules/scala.bzl b/rules/scala.bzl index d200da87a..05375b3d0 100644 --- a/rules/scala.bzl +++ b/rules/scala.bzl @@ -41,6 +41,10 @@ annex_scala_library = rule( "deps": attr.label_list(), "runtime_deps": attr.label_list(), "exports": attr.label_list(), + "data": attr.label_list( + allow_files = True, + cfg = "data", + ), "scala": attr.label( default = "@scala", mandatory = True, @@ -72,6 +76,10 @@ annex_scala_binary = rule( "deps": attr.label_list(), "runtime_deps": attr.label_list(), "exports": attr.label_list(), + "data": attr.label_list( + allow_files = True, + cfg = "data", + ), "main_class": attr.string(), "scala": attr.label( default = "@scala", @@ -106,6 +114,10 @@ annex_scala_test = rule( "deps": attr.label_list(), "runtime_deps": attr.label_list(), "exports": attr.label_list(), + "data": attr.label_list( + allow_files = True, + cfg = "data", + ), "scala": attr.label( default = "@scala", mandatory = True, diff --git a/rules/scala/private/binary.bzl b/rules/scala/private/binary.bzl index 2662ab457..d2d5afa05 100644 --- a/rules/scala/private/binary.bzl +++ b/rules/scala/private/binary.bzl @@ -29,6 +29,11 @@ def annex_scala_binary_implementation(ctx): jvm_flags = [], ) + for entry in ctx.attr.data: + print(dir(entry)) + print(entry.files) + data_files = [entry.files for entry in ctx.attr.data] + return struct( providers = [ res.java_info, @@ -37,13 +42,13 @@ def annex_scala_binary_implementation(ctx): res.intellij_info, DefaultInfo( executable = ctx.outputs.bin, - files = depset(files, transitive = [res.files]), + files = depset(files, transitive = [res.files] + data_files), runfiles = ctx.runfiles( files = files + [mains_file], transitive_files = depset( order = "default", direct = [ctx.executable._java], - transitive = [java_info.transitive_runtime_deps], + transitive = [java_info.transitive_runtime_deps] + data_files, ), collect_default = True, ), diff --git a/tests/zinc/BUILD b/tests/zinc/BUILD new file mode 100644 index 000000000..82d0fea23 --- /dev/null +++ b/tests/zinc/BUILD @@ -0,0 +1,37 @@ +load( + "@rules_scala_annex//rules:scala.bzl", + "annex_scala_library", + "annex_scala_binary", +) +load( + "@rules_scala_annex//rules:providers.bzl", + "zinc_info", +) + +annex_scala_library( + name = "source", + srcs = ["source.scala"], + scala = "@scala_2_12", +) + +zinc_info( + name = "source-analysis", + dep = ":source", +) + +annex_scala_binary( + name = "tool", + srcs = ["tool.scala"], + args = ["$(location :source-analysis)"], + data = [":source-analysis"], + scala = "@scala_2_12", + runtime_deps = [ + "@scala_annex_org_scala_sbt_zinc_core_2_12", + ], + deps = [ + "@scala_annex_com_trueaccord_scalapb_scalapb_runtime_2_12", + #"@scala_annex_org_scala_sbt_compiler_interface", + #"@scala_annex_org_scala_sbt_zinc_core_2_12", + "@scala_annex_org_scala_sbt_zinc_persist_2_12", + ], +) diff --git a/tests/zinc/source.scala b/tests/zinc/source.scala new file mode 100644 index 000000000..87490447e --- /dev/null +++ b/tests/zinc/source.scala @@ -0,0 +1,6 @@ +sealed trait A +sealed trait B extends A +sealed trait C extends B +sealed trait D extends C +sealed trait E extends D +sealed trait F extends E diff --git a/tests/zinc/test b/tests/zinc/test new file mode 100755 index 000000000..25203e096 --- /dev/null +++ b/tests/zinc/test @@ -0,0 +1,4 @@ +#!/bin/bash -e +. "$(dirname "$0")"/../common.sh + +bazel run :tool | grep "inheritance {" diff --git a/tests/zinc/tool.scala b/tests/zinc/tool.scala new file mode 100644 index 000000000..810f50196 --- /dev/null +++ b/tests/zinc/tool.scala @@ -0,0 +1,30 @@ +package anx + +import java.nio.file.{Files, Paths} +import java.util.zip.GZIPInputStream +import sbt.internal.inc.schema.AnalysisFile +import sbt.internal.inc.binary.converters.ProtobufReaders +import xsbti.compile.analysis.ReadMapper +import xsbti.compile.FileAnalysisStore + +object Tool { + def main(args: Array[String]): Unit = + args.toList match { + case path :: Nil => + process(path) + case other => + println(s"bad arguments: $other") + System.exit(-1) + } + + private def process(path: String): Unit = { + val stream = Files.newInputStream(Paths.get(path)) + val analysisFile = AnalysisFile.parseFrom(new GZIPInputStream(stream)) + stream.close() + val readMapper = ReadMapper.getMachineIndependentMapper(Paths.get(".")) + val reader = new ProtobufReaders(readMapper) + //val analysis = reader.fromAnalysisFile(analysisFile) + //print(analysis) + print(analysisFile) + } +}