update to gradle 8.1.1, add putIfNotNull to tiny map builder

This commit is contained in:
Jörg Prante 2023-04-25 17:47:23 +02:00
parent 95c0501d5e
commit efbce5bd1c
19 changed files with 99 additions and 77 deletions

View file

@ -1,10 +1,13 @@
plugins {
id "de.marcphilipp.nexus-publish" version "0.4.0"
id "io.codearte.nexus-staging" version "0.21.1"
id "org.cyclonedx.bom" version "1.7.2"
//id "com.github.spotbugs" version "5.0.13"
id "checkstyle"
id "pmd"
id 'maven-publish'
id 'signing'
id "io.github.gradle-nexus.publish-plugin" version "1.3.0"
id "com.github.spotbugs" version "5.0.14"
id "org.cyclonedx.bom" version "1.7.2"
id "org.xbib.gradle.plugin.asciidoctor" version "2.5.2.2"
}
wrapper {
@ -27,17 +30,18 @@ ext {
licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
apply plugin: 'java-library'
apply plugin: "io.github.gradle-nexus.publish-plugin"
subprojects {
apply from: rootProject.file('gradle/ide/idea.gradle')
apply from: rootProject.file('gradle/compile/java.gradle')
apply from: rootProject.file('gradle/repositories/maven.gradle')
apply from: rootProject.file('gradle/compile/java.gradle')
apply from: rootProject.file('gradle/test/junit5.gradle')
apply from: rootProject.file('gradle/publishing/publication.gradle')
//apply from: rootProject.file('gradle/quality/spotbugs.gradle')
apply from: rootProject.file('gradle/documentation/asciidoc.gradle')
apply from: rootProject.file('gradle/quality/checkstyle.gradle')
apply from: rootProject.file('gradle/quality/pmd.gradle')
apply from: rootProject.file('gradle/quality/spotbugs.gradle')
apply from: rootProject.file('gradle/publish/maven.gradle')
}
apply from: rootProject.file('gradle/publishing/sonatype.gradle')
apply from: rootProject.file('gradle/publish/sonatype.gradle')
apply from: rootProject.file('gradle/quality/cyclonedx.gradle')

View file

@ -529,7 +529,7 @@ public class XMLChar {
* Check to see if a string is a valid NCName according to [4]
* from the XML Namespaces 1.0 Recommendation
*
* @param name string to check
* @param ncName string to check
* @return true if name is a valid NCName
*/
public static boolean isValidNCName(String ncName) {

View file

@ -16,6 +16,8 @@ public interface IndexedMap<K, V> extends Map<K, V> {
V setValueAt(int index, V value);
V putIfNotNull(K key, V value);
boolean isRemoved(int index);
int rawSize();

View file

@ -100,6 +100,11 @@ public abstract class IndexedMapBase<K, V> implements IndexedMap<K, V> {
throw new UnsupportedOperationException("modification not supported: " + this);
}
@Override
public V putIfNotNull(K key, V value) {
throw new UnsupportedOperationException("modification not supported: " + this);
}
@Override
public V remove(Object key) {
int index = getIndex(key);

View file

@ -90,6 +90,11 @@ public abstract class TinyMap<K, V> extends IndexedMapBase<K, V> {
return null;
}
@Override
public V putIfNotNull(K key, V value) {
return value != null ? put(key, value) : null;
}
@Override
public int getIndex(Object key) {
return keys.getIndex(key);

View file

@ -224,13 +224,21 @@ public class TinyMapTest {
assertEquals(1, builder.build().size());
}
@Test
public void testPutIfNotNull() {
TinyMap.Builder<String, Object> builder = TinyMap.builder();
builder.putIfNotNull("a", "b");
builder.putIfNotNull("c", null);
assertEquals(1, builder.build().size());
}
private void testCount(int count, boolean withNull) {
TinyMap.Builder<String, Object> builder = TinyMap.builder();
LinkedHashMap<String, Object> expectedMap = new LinkedHashMap<>();
for (int i = 0; i < count; i++) {
if (count < 1000)
if (count < 1000) {
builder.build();
}
builder.putAll(Collections.singletonMap("aaa" + i, i));
expectedMap.put("aaa" + i, i);
}

View file

@ -38,7 +38,7 @@ public class NodeUtil {
* the constraints documented in this method
*
* @param edgeFirstCharacter The first character of the edge for which the associated node is required
* @return The index of the node representing the indicated edge, or a value < 0 if no such node exists in the
* @return The index of the node representing the indicated edge, or a value &lt; 0 if no such node exists in the
* array
*/
public static int binarySearchForEdge(AtomicReferenceArray<Node> childNodes, Character edgeFirstCharacter) {

View file

@ -125,11 +125,6 @@ public class Validator<T> implements Validatable<T> {
this.collectionValidators.forEach(action);
}
/**
* This method is supposed to be used only internally.
*
* @param action callback per <code>Pair<ConstraintCondition<T>, Validator<T>></code>.
*/
public void forEachConditionalValidator(
Consumer<Pair<ConstraintCondition<T>, Validatable<T>>> action) {
this.conditionalValidators.forEach(action);

View file

@ -1,5 +1,5 @@
group = org.xbib
name = datastructures
version = 2.1.0
version = 2.3.0
org.gradle.warning.mode = all

View file

@ -3,6 +3,8 @@ apply plugin: 'java-library'
java {
modularity.inferModulePath.set(true)
withSourcesJar()
withJavadocJar()
}
compileJava {
@ -21,22 +23,6 @@ jar {
}
}
task sourcesJar(type: Jar, dependsOn: classes) {
dependsOn classes
classifier 'sources'
from sourceSets.main.allSource
}
task javadocJar(type: Jar, dependsOn: javadoc) {
dependsOn javadoc
classifier 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives sourcesJar, javadocJar
}
tasks.withType(JavaCompile) {
options.compilerArgs.add('-Xlint:all')
options.encoding = 'UTF-8'

27
gradle/publish/ivy.gradle Normal file
View file

@ -0,0 +1,27 @@
apply plugin: 'ivy-publish'
publishing {
repositories {
ivy {
url = "https://xbib.org/repo"
}
}
publications {
ivy(IvyPublication) {
from components.java
descriptor {
license {
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
author {
name = 'Jörg Prante'
url = 'http://example.com/users/jane'
}
descriptor.description {
text = rootProject.ext.description
}
}
}
}
}

View file

@ -1,14 +1,10 @@
import java.time.Duration
apply plugin: "de.marcphilipp.nexus-publish"
publishing {
publications {
mavenJava(MavenPublication) {
"${project.name}"(MavenPublication) {
from components.java
artifact sourcesJar
artifact javadocJar
pom {
artifactId = project.name
name = project.name
description = rootProject.ext.description
url = rootProject.ext.url
@ -50,19 +46,6 @@ publishing {
if (project.hasProperty("signing.keyId")) {
apply plugin: 'signing'
signing {
sign publishing.publications.mavenJava
}
}
if (project.hasProperty("ossrhUsername")) {
nexusPublishing {
repositories {
sonatype {
username = project.property('ossrhUsername')
password = project.property('ossrhPassword')
packageGroup = "org.xbib"
}
}
clientTimeout = Duration.ofSeconds(600)
sign publishing.publications."${project.name}"
}
}

View file

@ -0,0 +1,12 @@
if (project.hasProperty('ossrhUsername') && project.hasProperty('ossrhPassword')) {
nexusPublishing {
repositories {
sonatype {
username = project.property('ossrhUsername')
password = project.property('ossrhPassword')
packageGroup = "org.xbib"
}
}
}
}

View file

@ -1,12 +0,0 @@
import java.time.Duration
if (project.hasProperty('ossrhUsername') && project.hasProperty('ossrhPassword')) {
apply plugin: 'io.codearte.nexus-staging'
nexusStaging {
username = project.property('ossrhUsername')
password = project.property('ossrhPassword')
packageGroup = "org.xbib"
}
}

Binary file not shown.

View file

@ -1,5 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-all.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

19
gradlew vendored
View file

@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@ -80,13 +80,10 @@ do
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@ -143,12 +140,16 @@ fi
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@ -193,6 +194,10 @@ if "$cygwin" || "$msys" ; then
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in

1
gradlew.bat vendored
View file

@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

View file

@ -15,8 +15,8 @@ pluginManagement {
dependencyResolutionManagement {
versionCatalogs {
libs {
version('gradle', '7.5.1')
version('junit', '5.9.1')
version('gradle', '8.1.1')
version('junit', '5.9.2')
version('jackson', '2.12.7')
library('junit-jupiter-api', 'org.junit.jupiter', 'junit-jupiter-api').versionRef('junit')
library('junit-jupiter-params', 'org.junit.jupiter', 'junit-jupiter-params').versionRef('junit')