diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 4f9f224c9..cf32e0872 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -13,13 +13,12 @@ jobs: name: Test on java-version ${{ matrix.java-version }} and ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: - max-parallel: 4 matrix: - java-version: ['8.0.x', '11.0.x'] + java-version: ['8', '11', '17'] os: [ubuntu-latest, windows-latest] steps: - - uses: actions/checkout@master + - uses: actions/checkout@v3 - name: Check limited Guava usage if: matrix.os == 'ubuntu-latest' run: | @@ -28,14 +27,15 @@ jobs: exit 1 fi - name: Setup java - uses: actions/setup-java@v1 + uses: actions/setup-java@v3 with: + distribution: temurin java-version: ${{ matrix.java-version }} - name: Set environment variables run: | echo "DEV_VERSION=$(./gradlew properties | awk '/^version:/ { print $2 }')" >> $GITHUB_ENV echo "RELEASE_VERSION=$(./gradlew properties -Prelease | awk '/^version:/ { print $2 }')" >> $GITHUB_ENV - - name: Gradle build on ${{ matrix.java-version }} + - name: Gradle build on java ${{ matrix.java-version }} if: matrix.os == 'ubuntu-latest' run: | ./gradlew build @@ -46,7 +46,7 @@ jobs: ./gradlew build -Prelease javac -cp api/build/libs/minio-${RELEASE_VERSION}-all.jar functional/TestUserAgent.java java -Dversion=${RELEASE_VERSION} -cp api/build/libs/minio-${RELEASE_VERSION}-all.jar:functional TestUserAgent - - name: Gradle build on ${{ matrix.java-version }} + - name: Gradle build on java ${{ matrix.java-version }} if: matrix.os == 'windows-latest' run: | $Env:Path += ';.' diff --git a/adminapi/src/main/java/io/minio/admin/messages/DataUsageInfo.java b/adminapi/src/main/java/io/minio/admin/messages/DataUsageInfo.java index 138150cf6..285aa9a04 100644 --- a/adminapi/src/main/java/io/minio/admin/messages/DataUsageInfo.java +++ b/adminapi/src/main/java/io/minio/admin/messages/DataUsageInfo.java @@ -88,7 +88,7 @@ public Map bucketsUsageInfo() { } public Map bucketsSizes() { - return bucketsSizes; + return Collections.unmodifiableMap(bucketsSizes); } public AllTierStats tierStats() { diff --git a/api/src/main/java/io/minio/MinioProperties.java b/api/src/main/java/io/minio/MinioProperties.java index fca35f387..95673050a 100644 --- a/api/src/main/java/io/minio/MinioProperties.java +++ b/api/src/main/java/io/minio/MinioProperties.java @@ -26,6 +26,7 @@ import java.util.logging.Logger; /** Identifies and stores version information of minio-java package at run time. */ +@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(value = "MS_EXPOSE_REP") public enum MinioProperties { INSTANCE; diff --git a/api/src/main/java/io/minio/errors/XmlParserException.java b/api/src/main/java/io/minio/errors/XmlParserException.java index 52d8043e2..55de48554 100644 --- a/api/src/main/java/io/minio/errors/XmlParserException.java +++ b/api/src/main/java/io/minio/errors/XmlParserException.java @@ -20,15 +20,7 @@ public class XmlParserException extends MinioException { private static final long serialVersionUID = -3877568719271880309L; - Exception exception; - - public XmlParserException(Exception exception) { - super(); - this.exception = exception; - } - - @Override - public String toString() { - return exception.toString(); + public XmlParserException(Exception e) { + super(e.toString()); } } diff --git a/api/src/main/java/io/minio/messages/Event.java b/api/src/main/java/io/minio/messages/Event.java index e287c452d..ad3576291 100644 --- a/api/src/main/java/io/minio/messages/Event.java +++ b/api/src/main/java/io/minio/messages/Event.java @@ -19,6 +19,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import java.time.ZonedDateTime; +import java.util.Collections; +import java.util.HashMap; import java.util.Map; /** Helper class to denote single event record for {@link NotificationRecords}. */ @@ -58,11 +60,13 @@ public String userId() { } public Map requestParameters() { - return requestParameters; + return Collections.unmodifiableMap( + requestParameters == null ? new HashMap<>() : requestParameters); } public Map responseElements() { - return responseElements; + return Collections.unmodifiableMap( + responseElements == null ? new HashMap<>() : responseElements); } public String bucketName() { diff --git a/api/src/main/java/io/minio/messages/NotificationRecords.java b/api/src/main/java/io/minio/messages/NotificationRecords.java index b409885ca..84f4e717f 100644 --- a/api/src/main/java/io/minio/messages/NotificationRecords.java +++ b/api/src/main/java/io/minio/messages/NotificationRecords.java @@ -18,6 +18,8 @@ package io.minio.messages; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Collections; +import java.util.LinkedList; import java.util.List; /** @@ -33,6 +35,6 @@ public class NotificationRecords { private List events; public List events() { - return events; + return Collections.unmodifiableList(events == null ? new LinkedList<>() : events); } } diff --git a/api/src/main/java/io/minio/messages/ObjectMetadata.java b/api/src/main/java/io/minio/messages/ObjectMetadata.java index 62ae88fae..f7d4da8e7 100644 --- a/api/src/main/java/io/minio/messages/ObjectMetadata.java +++ b/api/src/main/java/io/minio/messages/ObjectMetadata.java @@ -18,6 +18,8 @@ package io.minio.messages; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Collections; +import java.util.HashMap; import java.util.Map; /** Helper class to denote object information for {@link EventMetadata}. */ @@ -50,6 +52,6 @@ public String sequencer() { } public Map userMetadata() { - return userMetadata; + return Collections.unmodifiableMap(userMetadata == null ? new HashMap<>() : userMetadata); } } diff --git a/build.gradle b/build.gradle index e3526928c..621d22e1c 100644 --- a/build.gradle +++ b/build.gradle @@ -15,15 +15,15 @@ */ /***************************/ -/* gradleVersion = '6.6.1' */ +/* gradleVersion = '7.6' */ /***************************/ plugins { - id "com.github.johnrengelman.shadow" version "6.1.0" - id "com.github.spotbugs" version "4.5.0" - id "io.codearte.nexus-staging" version "0.22.0" + id "com.github.johnrengelman.shadow" version "7.1.2" + id "com.github.spotbugs" version "5.0.13" + id "io.codearte.nexus-staging" version "0.30.0" id "de.marcphilipp.nexus-publish" version "0.4.0" - id "com.diffplug.spotless" version "5.3.0" + id "com.diffplug.spotless" version "6.12.0" } /* @@ -34,7 +34,7 @@ apply plugin: "de.marcphilipp.nexus-publish" allprojects { group = 'io.minio' - version = '8.4.7' + version = '8.5.0' if (!project.hasProperty('release')) { version += '-DEV' } @@ -51,15 +51,15 @@ subprojects { } dependencies { - compile "com.carrotsearch.thirdparty:simple-xml-safe:2.7.1" - compile "com.google.guava:guava:30.1.1-jre" - compile "com.squareup.okhttp3:okhttp:4.10.0" - compile "com.fasterxml.jackson.core:jackson-annotations:2.13.4" - compile "com.fasterxml.jackson.core:jackson-core:2.13.4" - compile "com.fasterxml.jackson.core:jackson-databind:2.13.4.2" - compile "org.bouncycastle:bcprov-jdk15on:1.69" - compile 'org.apache.commons:commons-compress:1.21' - compile "org.xerial.snappy:snappy-java:1.1.8.4" + implementation "com.carrotsearch.thirdparty:simple-xml-safe:2.7.1" + implementation "com.google.guava:guava:30.1.1-jre" + implementation "com.squareup.okhttp3:okhttp:4.10.0" + implementation "com.fasterxml.jackson.core:jackson-annotations:2.13.4" + implementation "com.fasterxml.jackson.core:jackson-core:2.13.4" + implementation "com.fasterxml.jackson.core:jackson-databind:2.13.4.2" + implementation "org.bouncycastle:bcprov-jdk15on:1.69" + implementation 'org.apache.commons:commons-compress:1.21' + implementation "org.xerial.snappy:snappy-java:1.1.8.4" compileOnly "com.github.spotbugs:spotbugs-annotations:4.1.2" testImplementation "com.squareup.okhttp3:mockwebserver:4.8.1" @@ -81,8 +81,8 @@ subprojects { spotbugsMain { reports { html { - enabled = true - destination = file("$buildDir/reports/spotbugs/main/spotbugs.html") + required = true + outputLocation = file("$buildDir/reports/spotbugs/main/spotbugs.html") stylesheet = 'fancy-hist.xsl' } } @@ -116,7 +116,7 @@ subprojects { target '**/*.java' importOrder 'edu', 'com', 'io', 'java', 'javax', 'org', '' removeUnusedImports() - googleJavaFormat() + googleJavaFormat('1.7') } groovyGradle { target '*.gradle' @@ -241,8 +241,8 @@ project(':adminapi') { archivesBaseName = 'minio-admin' dependencies { - compile project(':api') - compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4" + implementation project(':api') + implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4" testImplementation project(':api') } @@ -346,8 +346,8 @@ project(':adminapi') { project(':examples') { dependencies { - compile "me.tongfei:progressbar:0.5.3" - compile project(':api') + compileOnly "me.tongfei:progressbar:0.5.3" + compileOnly project(':api') } sourceSets { @@ -363,9 +363,9 @@ import org.gradle.internal.os.OperatingSystem; project(':functional') { dependencies { - compile "junit:junit:4.13.2" - compile project(':api') - compile project(':adminapi') + implementation "junit:junit:4.13.2" + implementation project(':api') + implementation project(':adminapi') } sourceSets { @@ -377,7 +377,7 @@ project(':functional') { } task runFunctionalTest(type:JavaExec) { - main = 'FunctionalTest' + mainClass = 'FunctionalTest' classpath = sourceSets.main.runtimeClasspath ext.endpoint = 'https://play.min.io:9000' diff --git a/examples/PutObjectUiProgressBar.java b/examples/PutObjectUiProgressBar.java index 1fab958d4..655eae64d 100644 --- a/examples/PutObjectUiProgressBar.java +++ b/examples/PutObjectUiProgressBar.java @@ -35,18 +35,15 @@ public class PutObjectUiProgressBar extends JFrame { private static final long serialVersionUID = 1L; private static final String defaultFileName = "/etc/issue"; - private JButton button; + private JButton button = null; - PutObjectUiProgressBar() { - button = new JButton("Click here to upload !"); - ButtonActionListener bal = new ButtonActionListener(); - button.addActionListener(bal); - - this.getContentPane().add(button); - } + PutObjectUiProgressBar() {} /** go() implements a blocking UI frame. */ public void go() { + button = new JButton("Click here to upload!"); + button.addActionListener(new ButtonActionListener()); + this.getContentPane().add(button); this.setLocationRelativeTo(null); this.setVisible(true); @@ -97,7 +94,6 @@ private void uploadFile(String fileName) /** Internal class extends button listener, adds methods to initiate upload operation. */ private class ButtonActionListener implements ActionListener { - @Override public void actionPerformed(ActionEvent e) { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f3d88b1c2..e708b1c02 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 12d38de6a..070cb702f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/spotbugs-filter.xml b/spotbugs-filter.xml index e7ff493c4..31ead90e7 100644 --- a/spotbugs-filter.xml +++ b/spotbugs-filter.xml @@ -8,4 +8,16 @@ + + + + + + + + + + + +