lucene/gradle/validation/missing-docs-check.gradle

128 lines
4.0 KiB
Groovy

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
allprojects {
plugins.withType(JavaPlugin) {
// Too many classes to fix overall to just enable the above to be level="method" right now,
// but we can prevent the modules that don't have problems from getting any worse.
def methodLevelProjects = [
':lucene:analysis:icu',
':lucene:analysis:morfologik',
':lucene:analysis:phonetic',
':lucene:analysis:stempel',
':lucene:classification',
':lucene:demo',
':lucene:expressions',
':lucene:facet',
':lucene:join',
':lucene:memory',
':lucene:suggest',
':lucene:spatial3d',
]
task checkMissingDocsDefault(type: CheckMissingDocsTask, dependsOn: 'renderJavadoc') {
dirs += [ project.javadoc.destinationDir ]
onlyIf {
def maxSupported = JavaVersion.VERSION_14
def runtimeVersion = runtimeJava.javaVersion
if (runtimeVersion > JavaVersion.VERSION_14) {
logger.warn("Skipping task because runtime Java version ${runtimeVersion} is " +
"higher than Java ${maxSupported}.")
return false
} else {
return true
}
}
// TODO: add missing docs for all classes and bump this to level=class
if (project.path.startsWith(":solr")) {
level = 'package'
} else if (project.path in methodLevelProjects) {
level = 'method'
} else {
level = 'class'
}
}
task checkMissingDocs() {
group 'Verification'
description 'Check missing Javadocs'
dependsOn checkMissingDocsDefault
}
}
}
configure(project(':lucene:core')) {
// Defer until java plugin has been applied, otherwise we can't resolve project.javadoc.
plugins.withType(JavaPlugin) {
task checkMissingDocsMethod(type: CheckMissingDocsTask, dependsOn: 'renderJavadoc') {
level = 'method'
}
// Too much to fix core/ for now, but enforce full javadocs for key packages.
checkMissingDocsMethod.dirs = [
"org/apache/lucene/util/automaton",
"org/apache/lucene/analysis",
"org/apache/lucene/document",
"org/apache/lucene/search/similarities",
"org/apache/lucene/index",
"org/apache/lucene/codecs"
].collect { path -> file("${project.javadoc.destinationDir}/${path}") }
checkMissingDocs {
dependsOn checkMissingDocsMethod
}
}
}
class CheckMissingDocsTask extends DefaultTask {
@Input
List<File> dirs = []
@Input
String level = "none"
def checkMissingJavadocs(File dir, String level) {
def output = new ByteArrayOutputStream()
def result = project.exec {
executable project.externalToolExecutables["python3"]
ignoreExitValue = true
standardOutput = output
errorOutput = output
args = [
"-B",
project.rootProject.file("dev-tools/scripts/checkJavaDocs.py").absolutePath,
dir.absolutePath,
level
]
}
if (result.getExitValue() != 0) {
throw new GradleException("Javadoc verification failed:\n${output}")
}
}
@TaskAction
def lint() {
dirs.findAll { it.exists() }.each { dir ->
project.logger.info("Checking for missing docs... (dir=${dir}, level=${level})")
checkMissingJavadocs(dir, level)
}
}
}