From a0678624376d8f1e1ebeadc9ea2205dc4f9aa2e1 Mon Sep 17 00:00:00 2001 From: Chapman Flack Date: Thu, 20 Mar 2025 16:19:11 -0400 Subject: [PATCH 1/2] Suppress warnings from recent javac versions Unchecked warnings at VarHandle invocations appear to be new in javac 24. Various deprecation warnings not seen with --release 9 may not be brand new with javac 24 but simply left unaddressed earlier. Use the recommended alternatives where possible for PL/Java 1.6 (available in Java 9, and no behavior change), or add @SuppressWarnings and a comment where the alternative can't be used until a major PL/Java rev (because it could change behavior subtly, or break Java 9 source compatibility). --- .../pljava/example/annotation/UDTScalarIOTest.java | 10 +++++++--- .../java/org/postgresql/pljava/internal/Backend.java | 1 + .../org/postgresql/pljava/internal/InstallHelper.java | 10 +++++++--- .../java/org/postgresql/pljava/jdbc/SPIConnection.java | 6 ++++-- .../org/postgresql/pljava/jdbc/SQLInputFromChunk.java | 4 +++- .../java/org/postgresql/pljava/jdbc/SQLXMLImpl.java | 5 ++++- .../org/postgresql/pljava/management/Commands.java | 1 + .../main/java/org/postgresql/pljava/sqlj/Loader.java | 5 ++++- 8 files changed, 31 insertions(+), 11 deletions(-) diff --git a/pljava-examples/src/main/java/org/postgresql/pljava/example/annotation/UDTScalarIOTest.java b/pljava-examples/src/main/java/org/postgresql/pljava/example/annotation/UDTScalarIOTest.java index 8bc9affd9..659a5e2ab 100644 --- a/pljava-examples/src/main/java/org/postgresql/pljava/example/annotation/UDTScalarIOTest.java +++ b/pljava-examples/src/main/java/org/postgresql/pljava/example/annotation/UDTScalarIOTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020 Tada AB and other contributors, as listed below. + * Copyright (c) 2016-2025 Tada AB and other contributors, as listed below. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the The BSD 3-Clause License @@ -15,6 +15,8 @@ import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.net.MalformedURLException; @@ -100,9 +102,11 @@ public class UDTScalarIOTest implements SQLData s_utfgedicht = new byte[bb.limit()]; bb.get(s_utfgedicht); - s_url = new URL("http://tada.github.io/pljava/"); + s_url = new URI("http://tada.github.io/pljava/").toURL(); } - catch ( CharacterCodingException | MalformedURLException e ) + catch ( + CharacterCodingException | + URISyntaxException | MalformedURLException e ) { throw new RuntimeException(e); } diff --git a/pljava/src/main/java/org/postgresql/pljava/internal/Backend.java b/pljava/src/main/java/org/postgresql/pljava/internal/Backend.java index 326048437..a07c477da 100644 --- a/pljava/src/main/java/org/postgresql/pljava/internal/Backend.java +++ b/pljava/src/main/java/org/postgresql/pljava/internal/Backend.java @@ -50,6 +50,7 @@ public class Backend public static final boolean WITHOUT_ENFORCEMENT = "disallow".equals(System.getProperty("java.security.manager")); + @SuppressWarnings("deprecation") // Java >= 10: .feature() static final int JAVA_MAJOR = Runtime.version().major(); static diff --git a/pljava/src/main/java/org/postgresql/pljava/internal/InstallHelper.java b/pljava/src/main/java/org/postgresql/pljava/internal/InstallHelper.java index d8e52825c..ddfa45ee8 100644 --- a/pljava/src/main/java/org/postgresql/pljava/internal/InstallHelper.java +++ b/pljava/src/main/java/org/postgresql/pljava/internal/InstallHelper.java @@ -14,7 +14,8 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; -import java.net.URL; +import java.net.URI; +import java.net.URISyntaxException; import java.net.MalformedURLException; import java.nio.ByteBuffer; import java.nio.CharBuffer; @@ -182,9 +183,10 @@ public static String hello( { try { - new URL("sqlj:x"); // sqlj scheme must exist when reading policy + // sqlj scheme must exist when reading policy + new URI("sqlj", "x", null).toURL(); } - catch ( MalformedURLException e ) + catch ( MalformedURLException | URISyntaxException e ) { throw new SecurityException( "failed to create sqlj: URL scheme needed for security policy", @@ -269,6 +271,7 @@ private static void setPolicyURLs() prevURL = Security.getProperty( "policy.url." + prevIndex); if ( null == prevURL ) { + @SuppressWarnings("deprecation") // Java >= 10: feature() boolean hint = (2 == urlIndex) && 24 <= Runtime.version().major(); @@ -332,6 +335,7 @@ private static void beginEnforcing() throws SQLException } } + @SuppressWarnings("deprecation") // Java >= 10: feature() int major = Runtime.version().major(); if ( 17 <= major ) diff --git a/pljava/src/main/java/org/postgresql/pljava/jdbc/SPIConnection.java b/pljava/src/main/java/org/postgresql/pljava/jdbc/SPIConnection.java index ad1df5c5c..1e2df2b3e 100644 --- a/pljava/src/main/java/org/postgresql/pljava/jdbc/SPIConnection.java +++ b/pljava/src/main/java/org/postgresql/pljava/jdbc/SPIConnection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-2020 Tada AB and other contributors, as listed below. + * Copyright (c) 2004-2025 Tada AB and other contributors, as listed below. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the The BSD 3-Clause License @@ -848,7 +848,9 @@ else if(cls == URL.class && value instanceof String) { try { - return (T)new URL((String)value); + @SuppressWarnings("deprecation") // PL/Java major rev or forever + T result = (T)new URL((String)value); + return result; } catch(MalformedURLException e) { diff --git a/pljava/src/main/java/org/postgresql/pljava/jdbc/SQLInputFromChunk.java b/pljava/src/main/java/org/postgresql/pljava/jdbc/SQLInputFromChunk.java index 1522203f2..eae146187 100644 --- a/pljava/src/main/java/org/postgresql/pljava/jdbc/SQLInputFromChunk.java +++ b/pljava/src/main/java/org/postgresql/pljava/jdbc/SQLInputFromChunk.java @@ -285,7 +285,9 @@ public URL readURL() throws SQLException { try { - return new URL(this.readString()); + @SuppressWarnings("deprecation") //'til PL/Java major rev or forever + URL u = new URL(this.readString()); + return u; } catch( Exception e ) { diff --git a/pljava/src/main/java/org/postgresql/pljava/jdbc/SQLXMLImpl.java b/pljava/src/main/java/org/postgresql/pljava/jdbc/SQLXMLImpl.java index 87f6e60b4..b5724e5f6 100644 --- a/pljava/src/main/java/org/postgresql/pljava/jdbc/SQLXMLImpl.java +++ b/pljava/src/main/java/org/postgresql/pljava/jdbc/SQLXMLImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2024 Tada AB and other contributors, as listed below. + * Copyright (c) 2018-2025 Tada AB and other contributors, as listed below. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the The BSD 3-Clause License @@ -209,6 +209,7 @@ protected SQLXMLImpl(V backing) @Override public void free() throws SQLException { + @SuppressWarnings("unchecked") // javac 24 first to warn here V backing = (V)s_backingVH.getAndSet(this, null); if ( null == backing ) return; @@ -290,6 +291,7 @@ public T setResult(Class resultClass) protected V backingIfNotFreed() throws SQLException { + @SuppressWarnings("unchecked") // javac 24 first to warn here V backing = (V)s_backingVH.getAcquire(this); if ( null == backing ) throw new SQLNonTransientException( @@ -397,6 +399,7 @@ protected String toString(Object o) { if ( null == o ) o = this; + @SuppressWarnings("unchecked") // javac 24 first to warn here V backing = (V)s_backingVH.getAcquire(this); if ( null != backing ) return backing.toString(o); diff --git a/pljava/src/main/java/org/postgresql/pljava/management/Commands.java b/pljava/src/main/java/org/postgresql/pljava/management/Commands.java index 60c4dc39a..84b25e1f9 100644 --- a/pljava/src/main/java/org/postgresql/pljava/management/Commands.java +++ b/pljava/src/main/java/org/postgresql/pljava/management/Commands.java @@ -450,6 +450,7 @@ static void addClassImages(int jarId, String urlString) { try { + @SuppressWarnings("deprecation") // until next PL/Java major rev URL url = new URL(urlString); URLConnection uc = url.openConnection(); uc.setRequestProperty("Accept", diff --git a/pljava/src/main/java/org/postgresql/pljava/sqlj/Loader.java b/pljava/src/main/java/org/postgresql/pljava/sqlj/Loader.java index 539dd527d..fb7723b37 100644 --- a/pljava/src/main/java/org/postgresql/pljava/sqlj/Loader.java +++ b/pljava/src/main/java/org/postgresql/pljava/sqlj/Loader.java @@ -229,6 +229,7 @@ public static ClassLoader getSchemaLoader(Identifier.Simple schema) { while(rs.next()) { + @SuppressWarnings("deprecation") // until PL/Java major rev URL jarUrl = new URL("sqlj:" + rs.getString(2)); CodeSource cs = new CodeSource(jarUrl, (CodeSigner[])null); @@ -353,12 +354,14 @@ private static URL entryURL(int entryId) { try { - return doPrivileged(() -> new URL( + @SuppressWarnings("deprecation") // Java >= 20: URL.of(uri,handler) + URL u = doPrivileged(() -> new URL( "dbf", "localhost", -1, "/" + entryId, EntryStreamHandler.getInstance())); + return u; } catch(MalformedURLException e) { From 78f4c25c67f80bb9ef91557c866e1a6dd0eb50d4 Mon Sep 17 00:00:00 2001 From: Chapman Flack Date: Thu, 20 Mar 2025 11:49:47 -0400 Subject: [PATCH 2/2] Bump DDRProcessor latest_tested to 24 No issues observed in compiling manually (without the Maven directive specifying an earlier --release) on Oracle JDK 24 GA. cd pljava-api/src/main/java /var/tmp/jdk-24/bin/javac -d ../../../target/classes/ \ -Xlint:unchecked -Xlint:-removal --module-version 1.6-SNAPSHOT \ $(find . -name '*.java') cd ../../.. /var/tmp/jdk-24/bin/jar cf target/pljava-api-1.6-SNAPSHOT.jar \ -C target/classes . cd ../pljava/src/main/java /var/tmp/jdk-24/bin/javac --module-version 1.6-SNAPSHOT \ -d ../../../target/classes/ \ -h ../../../target/javah-include \ --module-path ../../../../pljava-api/target/pljava-api-1.6-SNAPSHOT.jar \ --processor-module-path \ ../../../../pljava-api/target/pljava-api-1.6-SNAPSHOT.jar \ -Xlint:unchecked -Xlint:-removal $(find . -name '*.java') cd ../../../ /var/tmp/jdk-24/bin/jar cf target/pljava-1.6-SNAPSHOT.jar \ -C target/classes . cd ../pljava-examples/src/main/java /var/tmp/jdk-24/bin/javac -d ../../../target/classes/ \ --module-path ../../../../pljava-api/target/pljava-api-1.6-SNAPSHOT.jar \ --processor-module-path \ ../../../../pljava-api/target/pljava-api-1.6-SNAPSHOT.jar \ --class-path \ ~/.m2/repository/net/sf/saxon/Saxon-HE/10.9/Saxon-HE-10.9.jar: \ -Xlint:unchecked -Xlint:-removal \ --add-modules org.postgresql.pljava $(find . -name '*.java') cd ../../../target/classes cp -r ../../src/main/resources/* . zip -r ../pljava-examples-1.6-SNAPSHOT.jar * # zip because jar m doesn't preserve order of manifest entries cd ../../../ # with dir of intended pg_config version on PATH: mvn clean install --projects pljava-pgxs,pljava-so,pljava-packaging --- .../postgresql/pljava/annotation/processing/DDRProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pljava-api/src/main/java/org/postgresql/pljava/annotation/processing/DDRProcessor.java b/pljava-api/src/main/java/org/postgresql/pljava/annotation/processing/DDRProcessor.java index 2da7b0bc5..cff138944 100644 --- a/pljava-api/src/main/java/org/postgresql/pljava/annotation/processing/DDRProcessor.java +++ b/pljava-api/src/main/java/org/postgresql/pljava/annotation/processing/DDRProcessor.java @@ -173,7 +173,7 @@ public SourceVersion getSupportedSourceVersion() * Update latest_tested to be the latest Java release on which this * annotation processor has been tested without problems. */ - int latest_tested = 23; + int latest_tested = 24; int ordinal_9 = SourceVersion.RELEASE_9.ordinal(); int ordinal_latest = latest_tested - 9 + ordinal_9;