Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 73 additions & 73 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
plugins {
id 'java-library'
id "java-library"

// To create a fat jar build/libs/...-all.jar, run: ./gradlew shadowJar
id 'com.gradleup.shadow' version '9.2.2'
id "com.gradleup.shadow" version "9.2.2"

// Code formatting; defines targets "spotlessApply" and "spotlessCheck"
// Requires JDK 11 or higher; the plugin crashes under JDK 8.
id 'com.diffplug.spotless' version '8.0.0'
id "com.diffplug.spotless" version "8.0.0"

// Error Prone linter
id('net.ltgt.errorprone') version '4.3.0'
id("net.ltgt.errorprone") version "4.3.0"

// Checker Framework pluggable type-checking
id 'org.checkerframework' version '0.6.60'
id "org.checkerframework" version "0.6.60"
}

repositories {
mavenLocal()
mavenCentral()
maven { url = 'https://central.sonatype.com/repository/maven-snapshots/' }
maven { url = "https://central.sonatype.com/repository/maven-snapshots/" }
gradlePluginPortal()
}

ext {
errorproneVersion = '2.42.0'
errorproneVersion = "2.42.0"
isJava17orHigher = JavaVersion.current() >= JavaVersion.VERSION_17
isJava21orHigher = JavaVersion.current() >= JavaVersion.VERSION_21
}
Expand All @@ -43,8 +43,8 @@ java {

test {
useJUnitPlatform {
includeEngines 'junit-jupiter'
excludeEngines 'junit-vintage'
includeEngines "junit-jupiter"
excludeEngines "junit-vintage"
}

testLogging {
Expand All @@ -56,24 +56,24 @@ test {
}

spotless {
format 'misc', {
format "misc", {
// define the files to apply `misc` to
target '*.md', '.gitignore'
target "*.md", ".gitignore"

// define the steps to apply to those files
trimTrailingWhitespace()
leadingTabsToSpaces(2)
endWithNewline()
}
java {
targetExclude('**/WeakIdentityHashMap.java')
targetExclude("**/WeakIdentityHashMap.java")
// googleJavaFormat()
// Version number required for Java 25.
googleJavaFormat('1.28.0')
googleJavaFormat("1.28.0")
formatAnnotations()
}
groovyGradle {
target '**/*.gradle'
target "**/*.gradle"
greclipse() // which formatter Spotless should use to format .gradle files.
leadingTabsToSpaces(2)
trimTrailingWhitespace()
Expand All @@ -89,100 +89,100 @@ dependencies {
tasks.withType(JavaCompile).configureEach {
// "-processing" avoids javac warning "No processor claimed any of these annotations".
// "-options" avoids javac warning "source value 8 is obsolete and will be removed in a future release"; remove it when we no longer support Java 8.
options.compilerArgs << '-Xlint:all,-processing,-options' << '-Werror'
options.compilerArgs << "-Xlint:all,-processing,-options" << "-Werror"
options.errorprone {
disable('ExtendsObject') // Incorrect when using the Checker Framework
disable('ReferenceEquality') // Use Interning Checker instead.
// disable('StringSplitter') // Obscure case isn't likely.
disable('AnnotateFormatMethod') // Error Prone doesn't know about Checker Framework @FormatMethod.
disable('EffectivelyPrivate') // Loses information about the abstraction.
disable("ExtendsObject") // Incorrect when using the Checker Framework
disable("ReferenceEquality") // Use Interning Checker instead.
// disable("StringSplitter") // Obscure case isn't likely.
disable("AnnotateFormatMethod") // Error Prone doesn't know about Checker Framework @FormatMethod.
disable("EffectivelyPrivate") // Loses information about the abstraction.
}
options.errorprone.enabled = isJava17orHigher
}

// Checker Framework pluggable type-checking

apply plugin: 'org.checkerframework'
apply plugin: "org.checkerframework"

checkerFramework {
checkers = [
// No need to run CalledMethodsChecker, because ResourceLeakChecker does so.
// 'org.checkerframework.checker.calledmethods.CalledMethodsChecker',
'org.checkerframework.checker.formatter.FormatterChecker',
'org.checkerframework.checker.index.IndexChecker',
'org.checkerframework.checker.interning.InterningChecker',
'org.checkerframework.checker.lock.LockChecker',
'org.checkerframework.checker.nullness.NullnessChecker',
'org.checkerframework.checker.regex.RegexChecker',
'org.checkerframework.checker.resourceleak.ResourceLeakChecker',
'org.checkerframework.checker.signature.SignatureChecker',
'org.checkerframework.checker.signedness.SignednessChecker',
'org.checkerframework.common.initializedfields.InitializedFieldsChecker',
// "org.checkerframework.checker.calledmethods.CalledMethodsChecker",
"org.checkerframework.checker.formatter.FormatterChecker",
"org.checkerframework.checker.index.IndexChecker",
"org.checkerframework.checker.interning.InterningChecker",
"org.checkerframework.checker.lock.LockChecker",
"org.checkerframework.checker.nullness.NullnessChecker",
"org.checkerframework.checker.regex.RegexChecker",
"org.checkerframework.checker.resourceleak.ResourceLeakChecker",
"org.checkerframework.checker.signature.SignatureChecker",
"org.checkerframework.checker.signedness.SignednessChecker",
"org.checkerframework.common.initializedfields.InitializedFieldsChecker",
]
extraJavacArgs = [
'-Werror',
'-AcheckPurityAnnotations',
'-ArequirePrefixInWarningSuppressions',
'-AwarnRedundantAnnotations',
'-AwarnUnneededSuppressions',
"-Werror",
"-AcheckPurityAnnotations",
"-ArequirePrefixInWarningSuppressions",
"-AwarnRedundantAnnotations",
"-AwarnUnneededSuppressions",
]
}
// To use a snapshot version of the Checker Framework.
if (false) {
// TODO: Change the above test to false when CF is released.
ext.checkerFrameworkVersion = '3.51.1'
ext.checkerFrameworkVersion = "3.51.1"
dependencies {
compileOnly "org.checkerframework:checker-qual:${checkerFrameworkVersion}"
testCompileOnly "org.checkerframework:checker-qual:${checkerFrameworkVersion}"
checkerFramework "org.checkerframework:checker:${checkerFrameworkVersion}"
}
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'minutes'
resolutionStrategy.cacheChangingModulesFor 0, "minutes"
}
}
// To use a locally-built Checker Framework, run gradle with "-PcfLocal".
if (project.hasProperty('cfLocal')) {
def cfHome = String.valueOf(System.getenv('CHECKERFRAMEWORK'))
if (project.hasProperty("cfLocal")) {
def cfHome = String.valueOf(System.getenv("CHECKERFRAMEWORK"))
dependencies {
compileOnly files(cfHome + '/checker/dist/checker-qual.jar')
testCompileOnly files(cfHome + '/checker/dist/checker-qual.jar')
checkerFramework files(cfHome + '/checker/dist/checker.jar')
compileOnly files(cfHome + "/checker/dist/checker-qual.jar")
testCompileOnly files(cfHome + "/checker/dist/checker-qual.jar")
checkerFramework files(cfHome + "/checker/dist/checker.jar")
}
}

// Javadoc

// Turn Javadoc warnings into errors.
javadoc {
options.addStringOption('Xwerror', '-Xdoclint:all')
options.addStringOption('private', '-quiet')
options.addStringOption('source', '8')
options.addStringOption("Xwerror", "-Xdoclint:all")
options.addStringOption("private", "-quiet")
options.addStringOption("source", "8")
doLast {
ant.replaceregexp(match:"@import url\\('resources/fonts/dejavu.css'\\);\\s*", replace:'',
flags:'g', byline:true) {
ant.replaceregexp(match:"@import url\\('resources/fonts/dejavu.css'\\);\\s*", replace:"",
flags:"g", byline:true) {
fileset(dir: destinationDir)
}
}
}
check.dependsOn javadoc

tasks.register('javadocWeb', Javadoc) {
description = 'Upload API documentation to website.'
tasks.register("javadocWeb", Javadoc) {
description = "Upload API documentation to website."
source = sourceSets.main.allJava
destinationDir = file("/cse/web/research/plumelib/${project.name}/api")
classpath = project.sourceSets.main.compileClasspath
options.addStringOption('source', '8')
options.addStringOption("source", "8")
doLast {
ant.replaceregexp(match:"@import url\\('resources/fonts/dejavu.css'\\);\\s*", replace:'',
flags:'g', byline:true) {
ant.replaceregexp(match:"@import url\\('resources/fonts/dejavu.css'\\);\\s*", replace:"",
flags:"g", byline:true) {
fileset(dir: destinationDir)
}
// Set permissions
project.exec {
commandLine('chgrp', '-R', 'plse_www', "/cse/web/research/plumelib/${project.name}/api")
commandLine("chgrp", "-R", "plse_www", "/cse/web/research/plumelib/${project.name}/api")
}
project.exec {
commandLine('chmod', '-R', 'g+w', "/cse/web/research/plumelib/${project.name}/api")
commandLine("chmod", "-R", "g+w", "/cse/web/research/plumelib/${project.name}/api")
}
}
}
Expand All @@ -191,24 +191,24 @@ configurations {
requireJavadoc
}
dependencies {
requireJavadoc 'org.plumelib:require-javadoc:2.0.0'
requireJavadoc "org.plumelib:require-javadoc:2.0.0"
}
tasks.register('requireJavadoc', JavaExec) {
group = 'Documentation'
description = 'Ensures that Javadoc documentation exists.'
tasks.register("requireJavadoc", JavaExec) {
group = "Documentation"
description = "Ensures that Javadoc documentation exists."
inputs.files jar.getArchiveFile()
mainClass = 'org.plumelib.javadoc.RequireJavadoc'
mainClass = "org.plumelib.javadoc.RequireJavadoc"
classpath = configurations.requireJavadoc
args 'src/main/java'
args "src/main/java"
jvmArgs += [
'--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED',
'--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED',
'--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED',
'--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED',
'--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED',
'--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED',
'--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED',
'--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED',
"--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
]
}
check.dependsOn requireJavadoc
Expand All @@ -217,7 +217,7 @@ javadocWeb.dependsOn requireJavadoc
// Emacs support

/* Make Emacs TAGS table */
tasks.register('tags', Exec) {
description = 'Run etags to create an Emacs TAGS table'
commandLine 'bash', '-c', "find src/ -name '*.java' | sort | xargs etags"
tasks.register("tags", Exec) {
description = "Run etags to create an Emacs TAGS table"
commandLine "bash", "-c", "find src/ -name '*.java' | sort | xargs etags"
}
34 changes: 17 additions & 17 deletions gradle/mavencentral.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@
// * Make a GitHub release. Go to the GitHub releases page, make a release, call it "reflection-util 1.1.5", use the text from ../CHANGELOG.md as the description, attach the .jar and -all.jar files from ../build/libs/ .
// * Finally, run on the CSE filesystem: git pull && ./gradlew javadocWeb

apply plugin: 'maven-publish'
apply plugin: 'signing'
apply plugin: "maven-publish"
apply plugin: "signing"

group = 'org.plumelib'
version = '1.1.5'
group = "org.plumelib"
version = "1.1.5"
ext {
packageName = 'reflection-util'
packageName = "reflection-util"
}

final isSnapshot = version.contains('SNAPSHOT')
final isSnapshot = version.contains("SNAPSHOT")

java {
withJavadocJar()
Expand All @@ -43,8 +43,8 @@ publishing {
from components.java

pom {
name = 'Reflection Util'
description = 'Utility libraries for reflection, converting among string representations of Java types, etc.'
name = "Reflection Util"
description = "Utility libraries for reflection, converting among string representations of Java types, etc."
url = "https://github.com/plume-lib/${packageName}"

scm {
Expand All @@ -55,16 +55,16 @@ publishing {

licenses {
license {
name = 'MIT License'
url = 'https://opensource.org/licenses/MIT'
name = "MIT License"
url = "https://opensource.org/licenses/MIT"
}
}

developers {
developer {
id = 'mernst'
name = 'Michael Ernst'
email = '[email protected]'
id = "mernst"
name = "Michael Ernst"
email = "[email protected]"
}
}
}
Expand All @@ -74,12 +74,12 @@ publishing {
repositories {
maven {
url = (isSnapshot
? project.properties.getOrDefault('SNAPSHOT_REPOSITORY_URL', 'https://central.sonatype.com/repository/maven-snapshots/')
: project.properties.getOrDefault('RELEASE_REPOSITORY_URL', 'https://ossrh-staging-api.central.sonatype.com/service/local/')
? project.properties.getOrDefault("SNAPSHOT_REPOSITORY_URL", "https://central.sonatype.com/repository/maven-snapshots/")
: project.properties.getOrDefault("RELEASE_REPOSITORY_URL", "https://ossrh-staging-api.central.sonatype.com/service/local/")
)
credentials {
username = project.properties.get('SONATYPE_NEXUS_USERNAME')
password = project.properties.get('SONATYPE_NEXUS_PASSWORD')
username = project.properties.get("SONATYPE_NEXUS_USERNAME")
password = project.properties.get("SONATYPE_NEXUS_PASSWORD")
}
}
}
Expand Down