Bazel: add java_doc rule

Add javadoc rules for plugin API:

* gerrit-extension-api
* gerrit-plugin-api
* gerrit-acceptance-framework

Note that GWT UI is not covered by Bazel build yet, so that we cannot
offer gerrit-plugin-gwtui:plugin-gwtui-javadoc rule in this change.

TEST PLAN:

  bazel build gerrit-acceptance-framework:acceptance-framework-javadoc
  bazel build gerrit-extension-api:extension-api-javadoc
  bazel build gerrit-plugin-api:plugin-api-javadoc

Change-Id: I60832752010118e33eb6a06529032d86f169ee44
This commit is contained in:
Han-Wen Nienhuys
2016-08-17 17:05:44 +02:00
committed by David Ostrovsky
parent 5e2f370bff
commit e703f3a35a
5 changed files with 115 additions and 0 deletions

View File

@@ -59,3 +59,12 @@ java_library2(
],
visibility = ['//visibility:public'],
)
load('//tools/bzl:javadoc.bzl', 'java_doc')
java_doc(
name = 'acceptance-framework-javadoc',
title = 'Gerrit Acceptance Test Framework Documentation',
libs = [':lib'],
pkgs = ['com.google.gerrit.acceptance'],
)

View File

@@ -44,3 +44,12 @@ java_library(
],
visibility = ['//visibility:public'],
)
load('//tools/bzl:javadoc.bzl', 'java_doc')
java_doc(
name = 'extension-api-javadoc',
title = 'Gerrit Review Extension API Documentation',
libs = [':api'],
pkgs = ['com.google.gerrit.extensions'],
)

View File

@@ -76,3 +76,20 @@ java_binary(
],
visibility = ['//visibility:public'],
)
load('//tools/bzl:javadoc.bzl', 'java_doc')
java_doc(
name = 'plugin-api-javadoc',
title = 'Gerrit Review Plugin API Documentation',
pkgs = ['com.google.gerrit'],
libs = PLUGIN_API + [
'//gerrit-antlr:query_exception',
'//gerrit-antlr:query_parser',
'//gerrit-common:annotations',
'//gerrit-common:server',
'//gerrit-extension-api:api',
'//gerrit-gwtexpui:server',
'//gerrit-reviewdb:server',
],
)

View File

@@ -208,3 +208,12 @@ junit_tests(
],
visibility = ['//visibility:public'],
)
load('//tools/bzl:javadoc.bzl', 'java_doc')
java_doc(
name = 'doc',
title = 'Gerrit Review Server Documentation',
libs = [':server'],
pkgs = ['com.google.gerrit'],
)

71
tools/bzl/javadoc.bzl Normal file
View File

@@ -0,0 +1,71 @@
# Copyright (C) 2016 The Android Open Source Project
#
# 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.
# Javadoc rule.
def _impl(ctx):
zip_output = ctx.outputs.zip
transitive_jar_set = set()
source_jars = set()
for l in ctx.attr.libs:
source_jars += l.java.source_jars
transitive_jar_set += l.java.transitive_deps
transitive_jar_paths = [j.path for j in transitive_jar_set]
dir = ctx.outputs.zip.path + ".dir"
source = ctx.outputs.zip.path + ".source"
cmd = [
"mkdir %s" % source,
" && ".join(["unzip -qud %s %s" % (source, j.path) for j in source_jars]),
"mkdir %s" % dir,
" ".join([
ctx.file._javadoc.path,
"-protected",
"-encoding UTF-8",
"-charset UTF-8",
"-notimestamp",
"-quiet",
"-windowtitle '%s'" % ctx.attr.title,
"-link", "http://docs.oracle.com/javase/7/docs/api",
"-sourcepath %s" % source,
"-subpackages ",
":".join(ctx.attr.pkgs),
" -classpath ",
":".join(transitive_jar_paths),
"-d %s" % dir]),
"find %s -exec touch -t 198001010000 '{}' ';'" % dir,
"(cd %s && zip -qr ../%s *)" % (dir, ctx.outputs.zip.basename),
]
ctx.action(
inputs = list(transitive_jar_set) + list(source_jars) + ctx.files._jdk,
outputs = [zip_output],
command = " && ".join(cmd))
java_doc = rule(
attrs = {
"libs": attr.label_list(allow_files = False),
"pkgs": attr.string_list(),
"title": attr.string(),
"_javadoc": attr.label(
default = Label("@local_jdk//:bin/javadoc"),
single_file = True,
allow_files = True),
"_jdk": attr.label(
default = Label("@local_jdk//:jdk-default"),
allow_files = True),
},
implementation = _impl,
outputs = {"zip" : "%{name}.zip"},
)