diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 8e26b458..79bd3992 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -1,30 +1,31 @@ name: JPX Build on: - push: - branches: - - master - - releases/* - - issues/* - pull_request: - branches: - - master - - releases/* + push: + branches: + - master + - releases/* + - issues/* + pull_request: + branches: + - master + - releases/* jobs: - build: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ ubuntu-latest, macos-latest ] - java-version: [ 21, 24 ] - steps: - - uses: actions/checkout@v2 + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ ubuntu-latest, macos-latest ] + java-version: [ 25 ] + steps: + - uses: actions/checkout@v4 - - name: Set up JDK ${{ matrix.java-version }} on ${{ matrix.os }} - uses: actions/setup-java@v2 - with: - java-version: ${{ matrix.java-version }} - distribution: 'zulu' - - name: Build with Gradle - run: ./gradlew build --stacktrace --info + - name: Set up JDK ${{ matrix.java-version }} on ${{ matrix.os }} + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java-version }} + distribution: 'zulu' + cache: 'gradle' + - name: Build with Gradle + run: ./gradlew build --stacktrace --info diff --git a/README.md b/README.md index a0b9839f..e5af928f 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,18 @@ # JPX ![Build Status](https://github.com/jenetics/jpx/actions/workflows/gradle.yml/badge.svg) -[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.jenetics/jpx/badge.svg)](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22jpx%22) +[![Maven Central Version](https://img.shields.io/maven-central/v/io.jenetics/jpx?color=green)](https://central.sonatype.com/artifact/io.jenetics/jpx) [![Javadoc](https://www.javadoc.io/badge/io.jenetics/jpx.svg)](http://www.javadoc.io/doc/io.jenetics/jpx) -**JPX** is a Java library for creating, reading and writing [GPS](https://en.wikipedia.org/wiki/Global_Positioning_System) data in [GPX](https://en.wikipedia.org/wiki/GPS_Exchange_Format) format. It is a *full* implementation of version [1.1](http://www.topografix.com/GPX/1/1/) and version [1.0](http://www.topografix.com/gpx_manual.asp) of the GPX format. The data classes are completely immutable and allows a functional programming style. They are working also nicely with the Java [Stream](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Stream.html) API. It is also possible to convert the location information into strings which are compatible to the [ISO 6709](http://en.wikipedia.org/wiki/ISO_6709) standard. + +**JPX** is a Java library for creating, reading and writing [GPS](https://en.wikipedia.org/wiki/Global_Positioning_System) data in [GPX](https://en.wikipedia.org/wiki/GPS_Exchange_Format) format. It is a *full* implementation of version [1.1](http://www.topografix.com/GPX/1/1/) and version [1.0](http://www.topografix.com/gpx_manual.asp) of the GPX format. The data classes are completely immutable and allows a functional programming style. They are working also nicely with the Java [Stream](https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/stream/Stream.html) API. It is also possible to convert the location information into strings which are compatible to the [ISO 6709](http://en.wikipedia.org/wiki/ISO_6709) standard. Besides the basic functionality of reading and writing GPX files, the library also allows manipulating the read GPX object in a functional way. ## Dependencies -The _JPX_ library needs no external dependencies. It only needs **Java 17** to compile and run. It also runs and compiles with **Java 21** and **Java 23**. +The _JPX_ library needs no external dependencies. It needs **Java 25** to compile and run. ## Building JPX @@ -314,7 +315,7 @@ org.acme.NonValidatingDocumentBuilder The library is licensed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html). - Copyright 2016-2025 Franz Wilhelmstötter + Copyright 2016-2026 Franz Wilhelmstötter Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -330,7 +331,7 @@ The library is licensed under the [Apache License, Version 2.0](http://www.apach ## Release notes -### [3.2.1](https://github.com/jenetics/jpx/releases/tag/v3.2.1) +### [4.0.0](https://github.com/jenetics/jpx/releases/tag/v4.0.0) #### Improvements @@ -345,47 +346,4 @@ The library is licensed under the [Apache License, Version 2.0](http://www.apach ### [3.1.0](https://github.com/jenetics/jpx/releases/tag/v3.1.0) -#### Improvements - -* [#170](https://github.com/jenetics/jpx/issues/170): GPX files with invalid version number are now readable in _LENIENT_ mode. -```java -final GPX gpx; -try (InputStream in = new FileInputStream(resource)) { - gpx = GPX.Reader.of(Mode.LENIENT).read(in); -} -``` - -#### Bugs - -* [#167](https://github.com/jenetics/jpx/issues/167): Fixing a test case for Windows. - -### [3.0.1](https://github.com/jenetics/jpx/releases/tag/v3.0.1) - -#### Bugs - -* [#162](https://github.com/jenetics/jpx/issues/162): Elevation serialization for values > 1000m is incompatible with deserialization. - -### [3.0.0](https://github.com/jenetics/jpx/releases/tag/v3.0.0) - -#### Improvements - -* [#125](https://github.com/jenetics/jpx/issues/125): **Breaking change** - Use `Instant` instead of `ZonedDateTime` for `Point.time` property. -* [#148](https://github.com/jenetics/jpx/issues/148): **Breaking change** - Update to Java17. -* [#155](https://github.com/jenetics/jpx/issues/155): Improved `GPX.Reader` and `GPX.Writer` classes. -* [#158](https://github.com/jenetics/jpx/issues/158): Add XML `Document` reader/writer methods. -```java -final GPX gpx = ...; - -final Document doc = XMLProvider.provider() - .documentBuilderFactory() - .newDocumentBuilder() - .newDocument(); - -// The GPX data are written to the empty `doc` object. -GPX.Writer.DEFAULT.write(gpx, new DOMResult(doc)); -``` - -#### Bugs -* [#151](https://github.com/jenetics/jpx/issues/151): `Double`'s being written as exponents in GPX file. -* [#152](https://github.com/jenetics/jpx/issues/152): `LocationFormatter::parse` method is not thread-safe. diff --git a/build.gradle.kts b/build.gradle.kts index 7d79ba60..c73d9273 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -35,7 +35,7 @@ plugins { rootProject.version = JPX.VERSION tasks.named("wrapper") { - version = "9.0.0" + version = "9.3.1" distributionType = Wrapper.DistributionType.ALL } @@ -72,8 +72,8 @@ gradle.projectsEvaluated { plugins.withType { configure { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 + sourceCompatibility = JavaVersion.VERSION_25 + targetCompatibility = JavaVersion.VERSION_25 } configure { @@ -133,7 +133,7 @@ fun setupTestReporting(project: Project) { project.apply(plugin = "jacoco") project.configure { - toolVersion = "0.8.12" + toolVersion = libs.jacoco.agent.get().version.toString() } project.tasks { @@ -170,7 +170,7 @@ fun setupJavadoc(project: Project) { doclet.charSet = "UTF-8" doclet.linkSource(true) doclet.linksOffline( - "https://docs.oracle.com/en/java/javase/21/docs/api/", + "https://docs.oracle.com/en/java/javase/25/docs/api/", "${project.rootDir}/buildSrc/resources/javadoc/java.se" ) doclet.windowTitle = "JPX ${project.version}" diff --git a/buildSrc/resources/javadoc/java.se/element-list b/buildSrc/resources/javadoc/java.se/element-list index 4d9e2fef..0e170a3a 100644 --- a/buildSrc/resources/javadoc/java.se/element-list +++ b/buildSrc/resources/javadoc/java.se/element-list @@ -2,6 +2,10 @@ module:java.base java.io java.lang java.lang.annotation +java.lang.classfile +java.lang.classfile.attribute +java.lang.classfile.constantpool +java.lang.classfile.instruction java.lang.constant java.lang.foreign java.lang.invoke @@ -91,6 +95,7 @@ javax.print javax.print.attribute javax.print.attribute.standard javax.print.event +javax.sound javax.sound.midi javax.sound.midi.spi javax.sound.sampled @@ -210,7 +215,6 @@ com.sun.source.tree com.sun.source.util com.sun.tools.javac module:jdk.crypto.cryptoki -module:jdk.crypto.ec module:jdk.dynalink jdk.dynalink jdk.dynalink.beans @@ -255,6 +259,7 @@ module:jdk.jstatd module:jdk.localedata module:jdk.management com.sun.management +jdk.management module:jdk.management.agent module:jdk.management.jfr jdk.management.jfr @@ -279,4 +284,4 @@ org.w3c.dom.css org.w3c.dom.html org.w3c.dom.stylesheets org.w3c.dom.xpath -module:jdk.zipfs +module:jdk.zipfs \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Env.kt b/buildSrc/src/main/kotlin/Env.kt index 78f339f9..a6994cdb 100644 --- a/buildSrc/src/main/kotlin/Env.kt +++ b/buildSrc/src/main/kotlin/Env.kt @@ -52,7 +52,7 @@ object Env { * Information about the library and author. */ object JPX { - const val VERSION = "4.0.0-SNAPSHOT" + const val VERSION = "4.0.0" const val ID = "jpx" const val NAME = "jpx" const val GROUP = "io.jenetics" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 53454cf7..7abf0665 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] -assertj = "3.27.4" -codemodel = "4.0.5" +assertj = "3.27.7" +codemodel = "4.0.6" commons-csv = "1.14.1" commons-math4-legacy = "4.0-beta1" commons-numbers-combinatorics = "1.2" @@ -9,35 +9,35 @@ commons-numbers-gamma = "1.2" commons-numbers-rootfinder = "1.2" commons-rng-sampling = "1.6" commons-rng-simple = "1.6" -commons-statistics-descriptive = "1.1" -commons-statistics-distribution = "1.1" -equalsverifier = "4.0.9" +commons-statistics-descriptive = "1.2" +commons-statistics-distribution = "1.2" +equalsverifier = "4.4" facilejdbc = "2.1.1" -guava = "33.4.8-jre" -h2 = "2.3.232" -jackson = "2.19.2" -jackson-databind-nullable = "0.2.7" -jackson-datatype-jsr310 = "2.19.2" -jacoco-agent = "0.8.13" +guava = "33.5.0-jre" +h2 = "2.4.240" +jackson = "2.21" +jackson-databind-nullable = "0.2.9" +jackson-datatype-jsr310 = "2.21.0" +jacoco-agent = "0.8.14" jakarta-annotation-api = "3.0.0" jakarta-validation-api = "3.1.1" javacsv = "2.0" -jexl = "3.5.0" +jexl = "3.6.2" jmh = "0.7.3" jpx = "3.2.1" -lombok = "8.14.2" +lombok = "9.2.0" mvel = "2.5.2.Final" nashorn = "15.7" -openapi-generator = "7.14.0" +openapi-generator = "7.20.0" opencsv = "5.12.0" prngine = "2.0.0" -reactor-core = "3.7.9" +reactor-core = "3.8.3" rxjava = "2.2.21" supercsv = "2.4.0" -swagger-models = "2.2.36" -swagger-parser = "2.1.32" -testng = "7.11.0" -version-catalog-update = "1.0.0" +swagger-models = "2.2.43" +swagger-parser = "2.1.38" +testng = "7.12.0" +version-catalog-update = "1.1.0" [plugins] jmh = { id = "me.champeau.jmh", version.ref = "jmh" } @@ -63,7 +63,7 @@ facilejdbc = { module = "io.jenetics:facilejdbc", version.ref = "facilejdbc" } guava = { module = "com.google.guava:guava", version.ref = "guava" } h2 = { module = "com.h2database:h2", version.ref = "h2" } jackson-annotations = { module = "com.fasterxml.jackson.core:jackson-annotations", version.ref = "jackson" } -jackson-databind = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" } +jackson-databind = "com.fasterxml.jackson.core:jackson-databind:2.21.0" jackson-databind-nullable = { module = "org.openapitools:jackson-databind-nullable", version.ref = "jackson-databind-nullable" } jackson-datatype-jsr310 = { module = "com.fasterxml.jackson.datatype:jackson-datatype-jsr310", version.ref = "jackson-datatype-jsr310" } jacoco-agent = { module = "org.jacoco:org.jacoco.agent", version.ref = "jacoco-agent" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b95..8bdaf60c 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradlew b/gradlew index f5feea6d..ef07e016 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -115,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -206,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. @@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9b42019c..5eed7ee8 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,11 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/jpx/src/main/java/io/jenetics/jpx/Bounds.java b/jpx/src/main/java/io/jenetics/jpx/Bounds.java index 1c811ea0..aceb8f0c 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Bounds.java +++ b/jpx/src/main/java/io/jenetics/jpx/Bounds.java @@ -117,8 +117,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Bounds bounds && + return obj instanceof Bounds bounds && Objects.equals(bounds._minLatitude, _minLatitude) && Objects.equals(bounds._minLongitude, _minLongitude) && Objects.equals(bounds._maxLatitude, _maxLatitude) && @@ -140,7 +139,6 @@ public String toString() { * Return a collector which calculates the bounds of a given way-point * stream. The following example shows how to calculate the bounds of all * track-points of a given GPX object. - * * {@snippet lang="java": * final Bounds bounds = gpx.tracks() * .flatMap(Track::segments) diff --git a/jpx/src/main/java/io/jenetics/jpx/Copyright.java b/jpx/src/main/java/io/jenetics/jpx/Copyright.java index 4ef80af9..8ea7d4c0 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Copyright.java +++ b/jpx/src/main/java/io/jenetics/jpx/Copyright.java @@ -103,8 +103,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Copyright cr && + return obj instanceof Copyright cr && Objects.equals(cr._author, _author) && Objects.equals(cr._year, _year) && Objects.equals(cr._license, _license); diff --git a/jpx/src/main/java/io/jenetics/jpx/DGPSStation.java b/jpx/src/main/java/io/jenetics/jpx/DGPSStation.java index 1637a907..03b53dd2 100644 --- a/jpx/src/main/java/io/jenetics/jpx/DGPSStation.java +++ b/jpx/src/main/java/io/jenetics/jpx/DGPSStation.java @@ -120,8 +120,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof DGPSStation dgps && + return obj instanceof DGPSStation dgps && dgps._value == _value; } diff --git a/jpx/src/main/java/io/jenetics/jpx/Degrees.java b/jpx/src/main/java/io/jenetics/jpx/Degrees.java index 6905dcd4..40009c67 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Degrees.java +++ b/jpx/src/main/java/io/jenetics/jpx/Degrees.java @@ -76,7 +76,9 @@ public final class Degrees * range of {@code [0..360]} */ private Degrees(final double value) { - if (value < MIN_VALUE || value >= MAX_VALUE) { + if (Double.compare(value, MIN_VALUE) < 0 || + Double.compare(value, MAX_VALUE) >= 0) + { throw new IllegalArgumentException(format( "%f not in the range [0, 360).", value )); @@ -140,8 +142,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Degrees deg && + return obj instanceof Degrees deg && Double.compare(deg._value, _value) == 0; } diff --git a/jpx/src/main/java/io/jenetics/jpx/Email.java b/jpx/src/main/java/io/jenetics/jpx/Email.java index d30b4cf1..034ebf66 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Email.java +++ b/jpx/src/main/java/io/jenetics/jpx/Email.java @@ -105,8 +105,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Email email && + return obj instanceof Email email && Objects.equals(email._id, _id) && Objects.equals(email._domain, _domain); } diff --git a/jpx/src/main/java/io/jenetics/jpx/Filters.java b/jpx/src/main/java/io/jenetics/jpx/Filters.java index bdb83835..6acf7085 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Filters.java +++ b/jpx/src/main/java/io/jenetics/jpx/Filters.java @@ -93,7 +93,7 @@ public static List mergeTracks(final List tracks) { return tracks.isEmpty() ? List.of() : List.of( - tracks.get(0).toBuilder() + tracks.getFirst().toBuilder() .segments(segments) .build() ); @@ -125,7 +125,7 @@ public static List fullyMergeTracks(final List tracks) { return tracks.isEmpty() ? List.of() : List.of( - tracks.get(0).toBuilder() + tracks.getFirst().toBuilder() .segments(List.of(TrackSegment.of(points))) .build() ); diff --git a/jpx/src/main/java/io/jenetics/jpx/GPX.java b/jpx/src/main/java/io/jenetics/jpx/GPX.java index ec41e9ab..cf97c45c 100644 --- a/jpx/src/main/java/io/jenetics/jpx/GPX.java +++ b/jpx/src/main/java/io/jenetics/jpx/GPX.java @@ -472,8 +472,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof GPX gpx && + return obj instanceof GPX gpx && Objects.equals(gpx._creator, _creator) && Objects.equals(gpx._version, _version) && Objects.equals(gpx._metadata, _metadata) && diff --git a/jpx/src/main/java/io/jenetics/jpx/Latitude.java b/jpx/src/main/java/io/jenetics/jpx/Latitude.java index e890bf5d..1443d355 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Latitude.java +++ b/jpx/src/main/java/io/jenetics/jpx/Latitude.java @@ -84,7 +84,9 @@ public final class Latitude extends Number implements Serializable { * range of {@code [-90..90]} */ private Latitude(final double value) { - if (value < MIN_DEGREES || value > MAX_DEGREES) { + if (Double.compare(value, MIN_DEGREES) < 0 || + Double.compare(value, MAX_DEGREES) > 0) + { throw new IllegalArgumentException(format( "%f is not in range [-90, 90].", value )); @@ -143,8 +145,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Latitude lat && + return obj instanceof Latitude lat && Double.compare(lat._value, _value) == 0; } diff --git a/jpx/src/main/java/io/jenetics/jpx/Length.java b/jpx/src/main/java/io/jenetics/jpx/Length.java index c9c9bef4..9a702ba7 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Length.java +++ b/jpx/src/main/java/io/jenetics/jpx/Length.java @@ -192,8 +192,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Length lng && + return obj instanceof Length lng && Double.compare(lng._value, _value) == 0; } diff --git a/jpx/src/main/java/io/jenetics/jpx/Link.java b/jpx/src/main/java/io/jenetics/jpx/Link.java index 06c2c3e6..fbe9d637 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Link.java +++ b/jpx/src/main/java/io/jenetics/jpx/Link.java @@ -101,8 +101,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Link link && + return obj instanceof Link link && Objects.equals(link._href, _href) && Objects.equals(link._text, _text) && Objects.equals(link._type, _type); diff --git a/jpx/src/main/java/io/jenetics/jpx/Longitude.java b/jpx/src/main/java/io/jenetics/jpx/Longitude.java index 7d561f65..d2c4151b 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Longitude.java +++ b/jpx/src/main/java/io/jenetics/jpx/Longitude.java @@ -84,7 +84,9 @@ public final class Longitude extends Number implements Serializable { * range of {@code [-180..180]} */ private Longitude(final double value) { - if (value < MIN_DEGREES || value > MAX_DEGREES) { + if (Double.compare(value, MIN_DEGREES) < 0 || + Double.compare(value, MAX_DEGREES) > 0) + { throw new IllegalArgumentException(format( "%f is not in range [-180, 180).", value )); @@ -143,8 +145,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Longitude lng && + return obj instanceof Longitude lng && Double.compare(lng._value, _value) == 0; } diff --git a/jpx/src/main/java/io/jenetics/jpx/Metadata.java b/jpx/src/main/java/io/jenetics/jpx/Metadata.java index 15d098c4..451d37d7 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Metadata.java +++ b/jpx/src/main/java/io/jenetics/jpx/Metadata.java @@ -270,8 +270,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Metadata meta && + return obj instanceof Metadata meta && Objects.equals(meta._name, _name) && Objects.equals(meta._description, _description) && Objects.equals(meta._author, _author) && diff --git a/jpx/src/main/java/io/jenetics/jpx/NonNullList.java b/jpx/src/main/java/io/jenetics/jpx/NonNullList.java index 7b328e51..d3254d9b 100644 --- a/jpx/src/main/java/io/jenetics/jpx/NonNullList.java +++ b/jpx/src/main/java/io/jenetics/jpx/NonNullList.java @@ -292,7 +292,7 @@ public int hashCode() { @Override public boolean equals(final Object o) { - return o == this || _adoptee.equals(o); + return o instanceof List list && _adoptee.equals(list); } } diff --git a/jpx/src/main/java/io/jenetics/jpx/Person.java b/jpx/src/main/java/io/jenetics/jpx/Person.java index 257739f0..fc8b8ba2 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Person.java +++ b/jpx/src/main/java/io/jenetics/jpx/Person.java @@ -116,8 +116,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Person person && + return obj instanceof Person person && Objects.equals(person._name, _name) && Objects.equals(person._email, _email) && Objects.equals(person._link, _link); diff --git a/jpx/src/main/java/io/jenetics/jpx/Route.java b/jpx/src/main/java/io/jenetics/jpx/Route.java index dff2df36..eca0fedb 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Route.java +++ b/jpx/src/main/java/io/jenetics/jpx/Route.java @@ -288,8 +288,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Route route && + return obj instanceof Route route && Objects.equals(route._name, _name) && Objects.equals(route._comment, _comment) && Objects.equals(route._description, _description) && @@ -862,13 +861,13 @@ static Route read(final DataInput in) throws IOException { private static String url(final Route route) { return route.getLinks().isEmpty() ? null - : route.getLinks().get(0).getHref().toString(); + : route.getLinks().getFirst().getHref().toString(); } private static String urlname(final Route route) { return route.getLinks().isEmpty() ? null - : route.getLinks().get(0).getText().orElse(null); + : route.getLinks().getFirst().getText().orElse(null); } // Define the necessary writers for the different versions. diff --git a/jpx/src/main/java/io/jenetics/jpx/Speed.java b/jpx/src/main/java/io/jenetics/jpx/Speed.java index 186102a6..bd1c5f09 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Speed.java +++ b/jpx/src/main/java/io/jenetics/jpx/Speed.java @@ -88,7 +88,6 @@ public enum Unit { * Convert the given speed value of the given {@code sourceUnit} into a * speed value of {@code this} speed unit. The given example converts 3 * knots into kilometers per hour. - * * {@snippet lang="java": * final double kilometersPerHour = KILOMETERS_PER_HOUR.convert(3, KNOTS); * } @@ -167,8 +166,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Speed speed && + return obj instanceof Speed speed && Double.compare(speed._value, _value) == 0; } diff --git a/jpx/src/main/java/io/jenetics/jpx/Track.java b/jpx/src/main/java/io/jenetics/jpx/Track.java index 613a0136..2053579b 100644 --- a/jpx/src/main/java/io/jenetics/jpx/Track.java +++ b/jpx/src/main/java/io/jenetics/jpx/Track.java @@ -296,8 +296,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof Track track && + return obj instanceof Track track && Objects.equals(track._name, _name) && Objects.equals(track._comment, _comment) && Objects.equals(track._description, _description) && @@ -840,13 +839,13 @@ static Track read(final DataInput in) throws IOException { private static String url(final Track track) { return track.getLinks().isEmpty() ? null - : track.getLinks().get(0).getHref().toString(); + : track.getLinks().getFirst().getHref().toString(); } private static String urlname(final Track track) { return track.getLinks().isEmpty() ? null - : track.getLinks().get(0).getText().orElse(null); + : track.getLinks().getFirst().getText().orElse(null); } // Define the necessary writers for the different versions. diff --git a/jpx/src/main/java/io/jenetics/jpx/TrackSegment.java b/jpx/src/main/java/io/jenetics/jpx/TrackSegment.java index ce12f479..2e950c8f 100644 --- a/jpx/src/main/java/io/jenetics/jpx/TrackSegment.java +++ b/jpx/src/main/java/io/jenetics/jpx/TrackSegment.java @@ -164,8 +164,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof TrackSegment && + return obj instanceof TrackSegment && Objects.equals(((TrackSegment)obj)._points, _points); } diff --git a/jpx/src/main/java/io/jenetics/jpx/UInt.java b/jpx/src/main/java/io/jenetics/jpx/UInt.java index 2a3ddc1b..c3961a6f 100644 --- a/jpx/src/main/java/io/jenetics/jpx/UInt.java +++ b/jpx/src/main/java/io/jenetics/jpx/UInt.java @@ -105,8 +105,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof UInt uint && + return obj instanceof UInt uint && uint._value == _value; } diff --git a/jpx/src/main/java/io/jenetics/jpx/WayPoint.java b/jpx/src/main/java/io/jenetics/jpx/WayPoint.java index ac4a8218..28912f5c 100644 --- a/jpx/src/main/java/io/jenetics/jpx/WayPoint.java +++ b/jpx/src/main/java/io/jenetics/jpx/WayPoint.java @@ -467,8 +467,7 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - return obj == this || - obj instanceof WayPoint wp && + return obj instanceof WayPoint wp && Objects.equals(wp._latitude, _latitude) && Objects.equals(wp._longitude, _longitude) && Objects.equals(wp._elevation, _elevation) && @@ -1946,13 +1945,13 @@ static WayPoint read(final DataInput in) throws IOException { private static String url(final WayPoint point) { return point.getLinks().isEmpty() ? null - : point.getLinks().get(0).getHref().toString(); + : point.getLinks().getFirst().getHref().toString(); } private static String urlname(final WayPoint point) { return point.getLinks().isEmpty() ? null - : point.getLinks().get(0).getText().orElse(null); + : point.getLinks().getFirst().getText().orElse(null); } // Define the necessary writers for the different versions. diff --git a/jpx/src/main/java/io/jenetics/jpx/XMLReader.java b/jpx/src/main/java/io/jenetics/jpx/XMLReader.java index a4cd4448..e72936b2 100644 --- a/jpx/src/main/java/io/jenetics/jpx/XMLReader.java +++ b/jpx/src/main/java/io/jenetics/jpx/XMLReader.java @@ -99,7 +99,6 @@ enum Type { /** * Read the given type from the underlying XML stream {@code reader}. - * * {@snippet lang="java": * try (AutoCloseableXMLStreamReader xml = XML.reader(in)) { * // Move XML stream to first element. diff --git a/jpx/src/main/java/io/jenetics/jpx/XMLWriter.java b/jpx/src/main/java/io/jenetics/jpx/XMLWriter.java index 679e4161..d6af4e1d 100644 --- a/jpx/src/main/java/io/jenetics/jpx/XMLWriter.java +++ b/jpx/src/main/java/io/jenetics/jpx/XMLWriter.java @@ -109,7 +109,6 @@ void write(final XMLStreamWriter xml, final T data) /** * Writes the attribute with the given {@code name} to the current * outer element. - * * {@snippet lang="java": * final XMLWriter writer1 = elem("element", attr("attribute")); * } diff --git a/jpx/src/main/java/io/jenetics/jpx/format/Location.java b/jpx/src/main/java/io/jenetics/jpx/format/Location.java index db30c627..5b042c9d 100644 --- a/jpx/src/main/java/io/jenetics/jpx/format/Location.java +++ b/jpx/src/main/java/io/jenetics/jpx/format/Location.java @@ -108,8 +108,7 @@ public int hashCode(){ @Override public boolean equals(final Object other) { - return other == this || - other instanceof Location loc && + return other instanceof Location loc && Objects.equals(_latitude, loc._latitude) && Objects.equals(_longitude, loc._longitude) && Objects.equals(_elevation, loc._elevation); diff --git a/jpx/src/test/java/io/jenetics/jpx/DegreesTest.java b/jpx/src/test/java/io/jenetics/jpx/DegreesTest.java index cbc19344..69dbc30a 100644 --- a/jpx/src/test/java/io/jenetics/jpx/DegreesTest.java +++ b/jpx/src/test/java/io/jenetics/jpx/DegreesTest.java @@ -19,8 +19,6 @@ */ package io.jenetics.jpx; -import nl.jqno.equalsverifier.EqualsVerifier; - import java.util.Random; import java.util.function.Supplier; @@ -68,9 +66,4 @@ public void ofDegrees() { ); } - @Test - public void equalsVerifier() { - EqualsVerifier.forClass(Degrees.class).verify(); - } - } diff --git a/jpx/src/test/java/io/jenetics/jpx/LatitudeTest.java b/jpx/src/test/java/io/jenetics/jpx/LatitudeTest.java index d9ca3b43..6db82c08 100644 --- a/jpx/src/test/java/io/jenetics/jpx/LatitudeTest.java +++ b/jpx/src/test/java/io/jenetics/jpx/LatitudeTest.java @@ -19,8 +19,6 @@ */ package io.jenetics.jpx; -import nl.jqno.equalsverifier.EqualsVerifier; - import java.util.Random; import java.util.function.Supplier; @@ -64,9 +62,4 @@ public void ofDegrees() { ); } - @Test - public void equalsVerifier() { - EqualsVerifier.forClass(Latitude.class).verify(); - } - } diff --git a/jpx/src/test/java/io/jenetics/jpx/LongitudeTest.java b/jpx/src/test/java/io/jenetics/jpx/LongitudeTest.java index a77021ef..dacc7002 100644 --- a/jpx/src/test/java/io/jenetics/jpx/LongitudeTest.java +++ b/jpx/src/test/java/io/jenetics/jpx/LongitudeTest.java @@ -22,8 +22,6 @@ import static java.lang.Double.doubleToLongBits; import static java.lang.Double.longBitsToDouble; -import nl.jqno.equalsverifier.EqualsVerifier; - import java.util.Random; import java.util.function.Supplier; @@ -76,9 +74,4 @@ public void ofDegrees() { ); } - @Test - public void equalsVerifier() { - EqualsVerifier.forClass(Longitude.class).verify(); - } - }