From dd814b6e38a777cb0988fba81522fd14462e22a7 Mon Sep 17 00:00:00 2001 From: Davis Rollman Date: Tue, 7 Apr 2026 00:59:44 -0400 Subject: [PATCH 1/4] Fix javac warnings in core and plugins --- common.gradle | 5 +- .../java/com/jme3/effect/ParticleEmitter.java | 1 + .../jme3/environment/EnvironmentCamera.java | 4 +- .../environment/EnvironmentProbeControl.java | 1 + .../src/main/java/com/jme3/renderer/Caps.java | 6 +- .../java/com/jme3/renderer/RenderContext.java | 11 +++- .../java/com/jme3/renderer/RenderManager.java | 31 +++++----- .../main/java/com/jme3/renderer/ViewPort.java | 7 ++- .../com/jme3/renderer/opengl/GLRenderer.java | 33 +++++------ .../renderer/pipeline/ForwardPipeline.java | 2 +- .../jme3/renderer/pipeline/NullPipeline.java | 2 +- .../jme3/scene/debug/SkeletonDebugger.java | 2 +- .../scene/debug/SkeletonInterBoneWire.java | 2 +- .../shader/bufferobject/BufferObject.java | 10 +--- .../java/com/jme3/system/NullRenderer.java | 1 + .../main/java/com/jme3/texture/Texture2D.java | 2 + .../main/java/com/jme3/texture/Texture3D.java | 4 +- .../java/com/jme3/texture/TextureArray.java | 2 + .../java/com/jme3/texture/TextureCubeMap.java | 2 + .../src/main/java/com/jme3/util/IntMap.java | 56 ++++++++++--------- .../main/java/com/jme3/util/NativeObject.java | 1 + .../util/struct/StructStd140BufferObject.java | 2 +- .../com/jme3/system/AWTComponentRenderer.java | 6 +- .../com/jme3/system/AWTFrameProcessor.java | 4 +- .../message/ClientRegistrationMessage.java | 4 +- .../network/message/DisconnectMessage.java | 4 +- .../com/jme3/plugins/gson/GsonObject.java | 4 +- .../gltf/TextureTransformExtensionLoader.java | 10 ++-- 28 files changed, 120 insertions(+), 99 deletions(-) diff --git a/common.gradle b/common.gradle index 042d88e3b5..2e8254531f 100644 --- a/common.gradle +++ b/common.gradle @@ -21,8 +21,9 @@ java { } tasks.withType(JavaCompile) { // compile-time options: - //options.compilerArgs << '-Xlint:deprecation' // to show deprecation warnings + options.compilerArgs << '-Xlint:deprecation' options.compilerArgs << '-Xlint:unchecked' + options.compilerArgs << '-Xlint:-options' options.encoding = 'UTF-8' if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_1_10)) { options.release = 8 @@ -227,4 +228,4 @@ tasks.withType(Checkstyle) { html.required.set(true) } include("**/com/jme3/renderer/**/*.java") -} \ No newline at end of file +} diff --git a/jme3-core/src/main/java/com/jme3/effect/ParticleEmitter.java b/jme3-core/src/main/java/com/jme3/effect/ParticleEmitter.java index 338894bbdf..9e6cf2ae29 100644 --- a/jme3-core/src/main/java/com/jme3/effect/ParticleEmitter.java +++ b/jme3-core/src/main/java/com/jme3/effect/ParticleEmitter.java @@ -187,6 +187,7 @@ public ParticleEmitter clone(boolean cloneMaterial) { * The old clone() method that did not use the new Cloner utility. */ @Override + @Deprecated public ParticleEmitter oldClone(boolean cloneMaterial) { ParticleEmitter clone = (ParticleEmitter) super.clone(cloneMaterial); clone.shape = shape.deepClone(); diff --git a/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java b/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java index 2f8ee78d9b..32fd4528dd 100644 --- a/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java +++ b/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java @@ -306,7 +306,7 @@ protected void initialize(Application app) { viewports[i] = createOffViewPort("EnvView" + i, cameras[i]); framebuffers[i] = createOffScreenFrameBuffer(size, viewports[i]); textures[i] = new Texture2D(size, size, imageFormat); - framebuffers[i].setColorTexture(textures[i]); + framebuffers[i].addColorTarget(FrameBuffer.FrameBufferTarget.newTarget(textures[i])); } } @@ -386,7 +386,7 @@ protected ViewPort createOffViewPort(final String name, final Camera offCamera) protected FrameBuffer createOffScreenFrameBuffer(int mapSize, ViewPort offView) { // create offscreen framebuffer final FrameBuffer offBuffer = new FrameBuffer(mapSize, mapSize, 1); - offBuffer.setDepthBuffer(Image.Format.Depth); + offBuffer.setDepthTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.Depth)); offView.setOutputFrameBuffer(offBuffer); return offBuffer; } diff --git a/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java b/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java index 6f07fd1c1c..3efab7227e 100644 --- a/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java +++ b/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java @@ -186,6 +186,7 @@ public static void untagGlobal(Spatial s) { } @Override + @Deprecated public Control cloneForSpatial(Spatial spatial) { throw new UnsupportedOperationException(); } diff --git a/jme3-core/src/main/java/com/jme3/renderer/Caps.java b/jme3-core/src/main/java/com/jme3/renderer/Caps.java index 647d44a9a6..6a3fd0798a 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Caps.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Caps.java @@ -550,7 +550,7 @@ public static boolean supports(Collection caps, FrameBuffer fb) { return false; } - RenderBuffer depthBuf = fb.getDepthBuffer(); + RenderBuffer depthBuf = fb.getDepthTarget(); if (depthBuf != null) { Format depthFmt = depthBuf.getFormat(); if (!depthFmt.isDepthFormat()) { @@ -567,8 +567,8 @@ public static boolean supports(Collection caps, FrameBuffer fb) { } } } - for (int i = 0; i < fb.getNumColorBuffers(); i++) { - if (!supportsColorBuffer(caps, fb.getColorBuffer(i))) { + for (int i = 0; i < fb.getNumColorTargets(); i++) { + if (!supportsColorBuffer(caps, fb.getColorTarget(i))) { return false; } } diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java index ea6088afb9..3aec9bbfb9 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java @@ -45,6 +45,11 @@ * internally to reduce state changes. NOTE: This class is specific to OpenGL. */ public class RenderContext { + private static WeakReference[] newWeakReferenceArray(int size) { + WeakReference[] refs = (WeakReference[]) new WeakReference[size]; + return refs; + } + /** * Number of texture units that JME supports. */ @@ -260,7 +265,7 @@ public class RenderContext { * @see Renderer#setTexture(int, com.jme3.texture.Texture) */ public final WeakReference boundTextures[] - = new WeakReference[maxTextureUnits]; + = newWeakReferenceArray(maxTextureUnits); /** @@ -269,7 +274,7 @@ public class RenderContext { * @see Renderer#setUniformBufferObject(int, com.jme3.shader.BufferObject) * @see Renderer#setShaderStorageBufferObject(int, com.jme3.shader.BufferObject) */ - public final WeakReference[] boundBO = new WeakReference[maxBufferObjectUnits]; + public final WeakReference[] boundBO = newWeakReferenceArray(maxBufferObjectUnits); /** * IDList for texture units. @@ -326,7 +331,7 @@ public class RenderContext { * Vertex attribs currently bound and enabled. If a slot is null, then * it is disabled. */ - public final WeakReference[] boundAttribs = new WeakReference[16]; + public final WeakReference[] boundAttribs = newWeakReferenceArray(16); /** * IDList for vertex attributes. diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java index a554bcfa47..bcfbbddca0 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java @@ -111,7 +111,7 @@ public class RenderManager { private final HashMap, PipelineContext> contexts = new HashMap<>(); private final LinkedList usedContexts = new LinkedList<>(); private final LinkedList> usedPipelines = new LinkedList<>(); - private RenderPipeline defaultPipeline = new ForwardPipeline(); + private RenderPipeline defaultPipeline = new ForwardPipeline(); private Camera prevCam = null; private Material forcedMaterial = null; private String forcedTechnique = null; @@ -1382,19 +1382,22 @@ public void applyViewPort(ViewPort vp) { * @param vp View port to render * @param tpf Time per frame value */ - public void renderViewPort(ViewPort vp, float tpf) { - if (!vp.isEnabled()) { - return; - } - RenderPipeline pipeline = vp.getPipeline(); - if (pipeline == null) { - pipeline = defaultPipeline; - } - - PipelineContext context = pipeline.fetchPipelineContext(this); - if (context == null) { - throw new NullPointerException("Failed to fetch pipeline context."); - } + public void renderViewPort(ViewPort vp, float tpf) { + if (!vp.isEnabled()) { + return; + } + RenderPipeline pipeline = vp.getPipeline(); + if (pipeline == null) { + pipeline = defaultPipeline; + } + renderViewPort(vp, tpf, pipeline); + } + + private void renderViewPort(ViewPort vp, float tpf, RenderPipeline pipeline) { + T context = pipeline.fetchPipelineContext(this); + if (context == null) { + throw new NullPointerException("Failed to fetch pipeline context."); + } if (!context.startViewPortRender(this, vp)) { usedContexts.add(context); } diff --git a/jme3-core/src/main/java/com/jme3/renderer/ViewPort.java b/jme3-core/src/main/java/com/jme3/renderer/ViewPort.java index f256405276..f7572e3e3b 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/ViewPort.java +++ b/jme3-core/src/main/java/com/jme3/renderer/ViewPort.java @@ -32,6 +32,7 @@ package com.jme3.renderer; import com.jme3.renderer.pipeline.RenderPipeline; +import com.jme3.renderer.pipeline.PipelineContext; import com.jme3.math.ColorRGBA; import com.jme3.post.SceneProcessor; import com.jme3.renderer.queue.RenderQueue; @@ -88,7 +89,7 @@ public class ViewPort { /** * Dedicated pipeline. */ - protected RenderPipeline pipeline; + protected RenderPipeline pipeline; /** * FrameBuffer for output. */ @@ -440,7 +441,7 @@ public boolean isEnabled() { * * @param pipeline pipeline, or null to use render manager's pipeline */ - public void setPipeline(RenderPipeline pipeline) { + public void setPipeline(RenderPipeline pipeline) { this.pipeline = pipeline; } @@ -449,7 +450,7 @@ public void setPipeline(RenderPipeline pipeline) { * * @return */ - public RenderPipeline getPipeline() { + public RenderPipeline getPipeline() { return pipeline; } diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index f4ae6fe0e1..41359e0ba2 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -1811,6 +1811,7 @@ public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst) { } @Override + @Deprecated public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyDepth) { copyFrameBuffer(src, dst, true, copyDepth); } @@ -2047,7 +2048,7 @@ private void bindFrameBuffer(FrameBuffer fb) { } public void updateFrameBuffer(FrameBuffer fb) { - if (fb.getNumColorBuffers() == 0 && fb.getDepthBuffer() == null) { + if (fb.getNumColorTargets() == 0 && fb.getDepthTarget() == null) { throw new IllegalArgumentException("The framebuffer: " + fb + "\nDoesn't have any color/depth buffers"); } @@ -2063,13 +2064,13 @@ public void updateFrameBuffer(FrameBuffer fb) { bindFrameBuffer(fb); - FrameBuffer.RenderBuffer depthBuf = fb.getDepthBuffer(); + FrameBuffer.RenderBuffer depthBuf = fb.getDepthTarget(); if (depthBuf != null) { updateFrameBufferAttachment(fb, depthBuf); } - for (int i = 0; i < fb.getNumColorBuffers(); i++) { - FrameBuffer.RenderBuffer colorBuf = fb.getColorBuffer(i); + for (int i = 0; i < fb.getNumColorTargets(); i++) { + FrameBuffer.RenderBuffer colorBuf = fb.getColorTarget(i); updateFrameBufferAttachment(fb, colorBuf); } @@ -2130,13 +2131,13 @@ public void setReadDrawBuffers(FrameBuffer fb) { if (fb != null) { - if (fb.getNumColorBuffers() == 0) { + if (fb.getNumColorTargets() == 0) { // make sure to select NONE as draw buf // no color buffer attached. gl2.glDrawBuffer(GL.GL_NONE); gl2.glReadBuffer(GL.GL_NONE); } else { - if (fb.getNumColorBuffers() > limits.get(Limits.FrameBufferAttachments)) { + if (fb.getNumColorTargets() > limits.get(Limits.FrameBufferAttachments)) { throw new RendererException("Framebuffer has more color " + "attachments than are supported" + " by the video hardware!"); @@ -2146,21 +2147,21 @@ public void setReadDrawBuffers(FrameBuffer fb) { throw new RendererException("Multiple render targets " + " are not supported by the video hardware"); } - if (fb.getNumColorBuffers() > limits.get(Limits.FrameBufferMrtAttachments)) { + if (fb.getNumColorTargets() > limits.get(Limits.FrameBufferMrtAttachments)) { throw new RendererException("Framebuffer has more" + " multi targets than are supported" + " by the video hardware!"); } intBuf16.clear(); - for (int i = 0; i < fb.getNumColorBuffers(); i++) { + for (int i = 0; i < fb.getNumColorTargets(); i++) { intBuf16.put(GLFbo.GL_COLOR_ATTACHMENT0_EXT + i); } intBuf16.flip(); glext.glDrawBuffers(intBuf16); } else { - RenderBuffer rb = fb.getColorBuffer(fb.getTargetIndex()); + RenderBuffer rb = fb.getColorTarget(fb.getTargetIndex()); // select this draw buffer gl2.glDrawBuffer(GLFbo.GL_COLOR_ATTACHMENT0_EXT + rb.getSlot()); // select this read buffer @@ -2190,8 +2191,8 @@ public void setFrameBuffer(FrameBuffer fb) { // generate mipmaps for last FB if needed if (context.boundFB != null && (context.boundFB.getMipMapsGenerationHint()!=null?context.boundFB.getMipMapsGenerationHint():generateMipmapsForFramebuffers)) { - for (int i = 0; i < context.boundFB.getNumColorBuffers(); i++) { - RenderBuffer rb = context.boundFB.getColorBuffer(i); + for (int i = 0; i < context.boundFB.getNumColorTargets(); i++) { + RenderBuffer rb = context.boundFB.getColorTarget(i); Texture tex = rb.getTexture(); if (tex != null && tex.getMinFilter().usesMipMapLevels()) { try { @@ -2239,7 +2240,7 @@ public void readFrameBuffer(FrameBuffer fb, ByteBuffer byteBuf) { private void readFrameBufferWithGLFormat(FrameBuffer fb, ByteBuffer byteBuf, int glFormat, int dataType) { if (fb != null) { - RenderBuffer rb = fb.getColorBuffer(); + RenderBuffer rb = fb.getColorTarget(); if (rb == null) { throw new IllegalArgumentException("Specified framebuffer" + " does not have a colorbuffer"); @@ -2274,11 +2275,11 @@ public void deleteFrameBuffer(FrameBuffer fb) { context.boundFBO = 0; } - if (fb.getDepthBuffer() != null) { - deleteRenderBuffer(fb, fb.getDepthBuffer()); + if (fb.getDepthTarget() != null) { + deleteRenderBuffer(fb, fb.getDepthTarget()); } - if (fb.getColorBuffer() != null) { - deleteRenderBuffer(fb, fb.getColorBuffer()); + if (fb.getColorTarget() != null) { + deleteRenderBuffer(fb, fb.getColorTarget()); } intBuf1.put(0, fb.getId()); diff --git a/jme3-core/src/main/java/com/jme3/renderer/pipeline/ForwardPipeline.java b/jme3-core/src/main/java/com/jme3/renderer/pipeline/ForwardPipeline.java index 2f02ab3e82..96850bd182 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/pipeline/ForwardPipeline.java +++ b/jme3-core/src/main/java/com/jme3/renderer/pipeline/ForwardPipeline.java @@ -46,7 +46,7 @@ * * @author codex */ -public class ForwardPipeline implements RenderPipeline { +public class ForwardPipeline implements RenderPipeline { private boolean rendered = false; diff --git a/jme3-core/src/main/java/com/jme3/renderer/pipeline/NullPipeline.java b/jme3-core/src/main/java/com/jme3/renderer/pipeline/NullPipeline.java index b104e5bd5d..bee0e4a56a 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/pipeline/NullPipeline.java +++ b/jme3-core/src/main/java/com/jme3/renderer/pipeline/NullPipeline.java @@ -12,7 +12,7 @@ * * @author codex */ -public class NullPipeline implements RenderPipeline { +public class NullPipeline implements RenderPipeline { private boolean rendered = false; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java index f8f450ab47..1b5e912a78 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java @@ -159,4 +159,4 @@ private T getMesh(String suffix) { return null; } -} \ No newline at end of file +} diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java index 6db686bed8..5c4ea5b11a 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java @@ -55,7 +55,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class SkeletonInterBoneWire extends Mesh { +public class SkeletonInterBoneWire extends Mesh { private static final int POINT_AMOUNT = 10; /** The amount of connections between bones. */ private int connectionsAmount; diff --git a/jme3-core/src/main/java/com/jme3/shader/bufferobject/BufferObject.java b/jme3-core/src/main/java/com/jme3/shader/bufferobject/BufferObject.java index cb7a87b89d..6b28805bcc 100644 --- a/jme3-core/src/main/java/com/jme3/shader/bufferobject/BufferObject.java +++ b/jme3-core/src/main/java/com/jme3/shader/bufferobject/BufferObject.java @@ -100,7 +100,6 @@ public static enum NatureHint { private AccessHint accessHint = AccessHint.Dynamic; private NatureHint natureHint = NatureHint.Draw; - private transient WeakReference weakRef; private transient int binding = -1; protected transient DirtyRegionsIterator dirtyRegionsIterator; @@ -294,11 +293,6 @@ public void setBinding(final int binding) { this.binding = binding; } - public WeakReference getWeakRef() { - if (weakRef == null) weakRef = new WeakReference(this); - return weakRef; - } - public AccessHint getAccessHint() { return accessHint; } @@ -341,7 +335,8 @@ public void read(JmeImporter im) throws IOException { InputCapsule ic = im.getCapsule(this); accessHint = AccessHint.values()[ic.readInt("accessHint", 0)]; natureHint = NatureHint.values()[ic.readInt("natureHint", 0)]; - regions.addAll(ic.readSavableArrayList("regions", null)); + ArrayList loadedRegions = ic.readSavableArrayList("regions", null); + regions.addAll(loadedRegions); data = ic.readByteBuffer("data", null); setUpdateNeeded(true); } @@ -350,7 +345,6 @@ public void read(JmeImporter im) throws IOException { public BufferObject clone() { BufferObject clone = (BufferObject) super.clone(); clone.binding = -1; - clone.weakRef = null; clone.data = BufferUtils.clone(data); clone.regions = new ArrayList(); assert clone.regions != regions; diff --git a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java index f220c50b98..162f347206 100644 --- a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java +++ b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java @@ -145,6 +145,7 @@ public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst) { } @Override + @Deprecated public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyDepth) { } diff --git a/jme3-core/src/main/java/com/jme3/texture/Texture2D.java b/jme3-core/src/main/java/com/jme3/texture/Texture2D.java index ab633aed49..7bdc55bec8 100644 --- a/jme3-core/src/main/java/com/jme3/texture/Texture2D.java +++ b/jme3-core/src/main/java/com/jme3/texture/Texture2D.java @@ -97,6 +97,7 @@ public Texture2D(int width, int height, int numSamples, Image.Format format){ } @Override + @Deprecated public Texture createSimpleClone() { Texture2D clone = new Texture2D(); createSimpleClone(clone); @@ -104,6 +105,7 @@ public Texture createSimpleClone() { } @Override + @Deprecated public Texture createSimpleClone(Texture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); diff --git a/jme3-core/src/main/java/com/jme3/texture/Texture3D.java b/jme3-core/src/main/java/com/jme3/texture/Texture3D.java index bb12a858dd..6052ea35ff 100644 --- a/jme3-core/src/main/java/com/jme3/texture/Texture3D.java +++ b/jme3-core/src/main/java/com/jme3/texture/Texture3D.java @@ -100,6 +100,7 @@ public Texture3D(int width, int height, int depth, int numSamples, Image.Format } @Override + @Deprecated public Texture createSimpleClone() { Texture3D clone = new Texture3D(); createSimpleClone(clone); @@ -107,6 +108,7 @@ public Texture createSimpleClone() { } @Override + @Deprecated public Texture createSimpleClone(Texture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); @@ -226,4 +228,4 @@ public void read(JmeImporter importer) throws IOException { wrapT = capsule.readEnum("wrapT", WrapMode.class, WrapMode.EdgeClamp); wrapR = capsule.readEnum("wrapR", WrapMode.class, WrapMode.EdgeClamp); } -} \ No newline at end of file +} diff --git a/jme3-core/src/main/java/com/jme3/texture/TextureArray.java b/jme3-core/src/main/java/com/jme3/texture/TextureArray.java index e839399c33..644e094f70 100644 --- a/jme3-core/src/main/java/com/jme3/texture/TextureArray.java +++ b/jme3-core/src/main/java/com/jme3/texture/TextureArray.java @@ -99,6 +99,7 @@ public TextureArray(List images) { } @Override + @Deprecated public Texture createSimpleClone() { TextureArray clone = new TextureArray(); createSimpleClone(clone); @@ -106,6 +107,7 @@ public Texture createSimpleClone() { } @Override + @Deprecated public Texture createSimpleClone(Texture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); diff --git a/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java b/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java index 40e6c037c3..e867e49d5e 100644 --- a/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java +++ b/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java @@ -94,11 +94,13 @@ private static Image createEmptyLayeredImage(int width, int height, } @Override + @Deprecated public Texture createSimpleClone() { return createSimpleClone(new TextureCubeMap()); } @Override + @Deprecated public Texture createSimpleClone(Texture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); diff --git a/jme3-core/src/main/java/com/jme3/util/IntMap.java b/jme3-core/src/main/java/com/jme3/util/IntMap.java index 198b380dd8..15a6dafd3a 100644 --- a/jme3-core/src/main/java/com/jme3/util/IntMap.java +++ b/jme3-core/src/main/java/com/jme3/util/IntMap.java @@ -47,7 +47,7 @@ */ public final class IntMap implements Iterable>, Cloneable, JmeCloneable { - private Entry[] table; + private Entry[] table; private final float loadFactor; private int size, mask, capacity, threshold; @@ -75,7 +75,7 @@ public IntMap(int initialCapacity, float loadFactor) { } this.loadFactor = loadFactor; this.threshold = (int) (capacity * loadFactor); - this.table = new Entry[capacity]; + this.table = newTable(capacity); this.mask = capacity - 1; } @@ -117,9 +117,9 @@ public void cloneFields(Cloner cloner, Object original) { } public boolean containsValue(Object value) { - Entry[] table = this.table; + Entry[] table = this.table; for (int i = table.length; i-- > 0;){ - for (Entry e = table[i]; e != null; e = e.next){ + for (Entry e = table[i]; e != null; e = e.next){ if (e.value.equals(value)){ return true; } @@ -130,7 +130,7 @@ public boolean containsValue(Object value) { public boolean containsKey(int key) { int index = ((int) key) & mask; - for (Entry e = table[index]; e != null; e = e.next){ + for (Entry e = table[index]; e != null; e = e.next){ if (e.key == key){ return true; } @@ -141,9 +141,9 @@ public boolean containsKey(int key) { @SuppressWarnings("unchecked") public T get(int key) { int index = key & mask; - for (Entry e = table[index]; e != null; e = e.next){ + for (Entry e = table[index]; e != null; e = e.next){ if (e.key == key){ - return (T) e.value; + return e.value; } } return null; @@ -153,27 +153,27 @@ public T get(int key) { public T put(int key, T value) { int index = key & mask; // Check if key already exists. - for (Entry e = table[index]; e != null; e = e.next){ + for (Entry e = table[index]; e != null; e = e.next){ if (e.key != key){ continue; } - Object oldValue = e.value; + T oldValue = e.value; e.value = value; - return (T) oldValue; + return oldValue; } table[index] = new Entry(key, value, table[index]); if (size++ >= threshold){ // Rehash. int newCapacity = 2 * capacity; - Entry[] newTable = new Entry[newCapacity]; - Entry[] src = table; + Entry[] newTable = newTable(newCapacity); + Entry[] src = table; int bucketMask = newCapacity - 1; for (int j = 0; j < src.length; j++){ - Entry e = src[j]; + Entry e = src[j]; if (e != null){ src[j] = null; do{ - Entry next = e.next; + Entry next = e.next; index = e.key & bucketMask; e.next = newTable[index]; newTable[index] = e; @@ -192,10 +192,10 @@ public T put(int key, T value) { @SuppressWarnings("unchecked") public T remove(int key) { int index = key & mask; - Entry prev = table[index]; - Entry e = prev; + Entry prev = table[index]; + Entry e = prev; while (e != null){ - Entry next = e.next; + Entry next = e.next; if (e.key == key){ size--; if (prev == e){ @@ -203,7 +203,7 @@ public T remove(int key) { }else{ prev.next = next; } - return (T) e.value; + return e.value; } prev = e; e = next; @@ -216,7 +216,7 @@ public int size() { } public void clear() { - Entry[] table = this.table; + Entry[] table = this.table; for (int index = table.length; --index >= 0;) { table[index] = null; } @@ -235,7 +235,7 @@ final class IntMapIterator implements Iterator> { /** * Current entry. */ - private Entry cur; + private Entry cur; /** * Entry in the table @@ -262,13 +262,12 @@ public boolean hasNext() { } @Override - @SuppressWarnings("unchecked") - public Entry next() { + public Entry next() { if (el >= size) throw new NoSuchElementException("No more elements!"); if (cur != null) { - Entry e = cur; + Entry e = cur; cur = cur.next; el++; return e; @@ -286,7 +285,7 @@ public Entry next() { cur = table[++idx]; } while (cur == null); - Entry e = cur; + Entry e = cur; cur = cur.next; el ++; @@ -298,13 +297,18 @@ public void remove() { } } + private static Entry[] newTable(int size) { + Entry[] table = (Entry[]) new Entry[size]; + return table; + } + public static final class Entry implements Cloneable, JmeCloneable { final int key; T value; - Entry next; + Entry next; - Entry(int k, T v, Entry n) { + Entry(int k, T v, Entry n) { key = k; value = v; next = n; diff --git a/jme3-core/src/main/java/com/jme3/util/NativeObject.java b/jme3-core/src/main/java/com/jme3/util/NativeObject.java index 44ec3ad947..914b821829 100644 --- a/jme3-core/src/main/java/com/jme3/util/NativeObject.java +++ b/jme3-core/src/main/java/com/jme3/util/NativeObject.java @@ -167,6 +167,7 @@ protected NativeObject clone() { obj.objectManager = null; obj.id = INVALID_ID; obj.updateNeeded = true; + obj.weakRef = null; return obj; } catch (CloneNotSupportedException ex) { throw new AssertionError(); diff --git a/jme3-core/src/main/java/com/jme3/util/struct/StructStd140BufferObject.java b/jme3-core/src/main/java/com/jme3/util/struct/StructStd140BufferObject.java index 4529239865..0aafd66848 100644 --- a/jme3-core/src/main/java/com/jme3/util/struct/StructStd140BufferObject.java +++ b/jme3-core/src/main/java/com/jme3/util/struct/StructStd140BufferObject.java @@ -120,7 +120,7 @@ public void read(JmeImporter im) throws IOException { try { String rootClass = ic.readString("rootClass", null); if (rootClass == null) throw new Exception("rootClass is undefined"); - Class rootStructClass = (Class) Class.forName(rootClass); + Class rootStructClass = Class.forName(rootClass).asSubclass(Struct.class); Struct rootStruct = rootStructClass.newInstance(); loadLayout(rootStruct); } catch (Exception e) { diff --git a/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java b/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java index bfb0e85e31..93c03e13d5 100644 --- a/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java +++ b/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java @@ -186,8 +186,8 @@ public AWTComponentRenderer(Component destination, TransferMode transferMode, Fr this.frameBuffer = frameBuffer; } else { this.frameBuffer = new FrameBuffer(width, height, 1); - this.frameBuffer.setDepthBuffer(Image.Format.Depth); - this.frameBuffer.setColorBuffer(Image.Format.RGBA8); + this.frameBuffer.setDepthTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.Depth)); + this.frameBuffer.addColorTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.RGBA8)); this.frameBuffer.setSrgb(true); } @@ -388,4 +388,4 @@ public void dispose() { frameState.compareAndSet(DISPOSING_STATE, DISPOSED_STATE); imageState.compareAndSet(DISPOSING_STATE, DISPOSED_STATE); } -} \ No newline at end of file +} diff --git a/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java b/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java index 111e856973..541dad9e3d 100644 --- a/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java +++ b/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java @@ -620,8 +620,8 @@ protected void reshapeCurrentViewPort(int width, int height) { if (found) { FrameBuffer frameBuffer = new FrameBuffer(width, height, 1); - frameBuffer.setDepthBuffer(Image.Format.Depth); - frameBuffer.setColorBuffer(Image.Format.RGBA8); + frameBuffer.setDepthTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.Depth)); + frameBuffer.addColorTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.RGBA8)); frameBuffer.setSrgb(true); viewPort.setOutputFrameBuffer(frameBuffer); diff --git a/jme3-networking/src/main/java/com/jme3/network/message/ClientRegistrationMessage.java b/jme3-networking/src/main/java/com/jme3/network/message/ClientRegistrationMessage.java index 50272e9deb..dcad1c5b8d 100644 --- a/jme3-networking/src/main/java/com/jme3/network/message/ClientRegistrationMessage.java +++ b/jme3-networking/src/main/java/com/jme3/network/message/ClientRegistrationMessage.java @@ -93,7 +93,7 @@ public String toString() { public static class ClientRegistrationSerializer extends Serializer { @Override - public ClientRegistrationMessage readObject( ByteBuffer data, Class c ) throws IOException { + public T readObject(ByteBuffer data, Class c) throws IOException { // Read the null/non-null marker if (data.get() == 0x0) @@ -105,7 +105,7 @@ public ClientRegistrationMessage readObject( ByteBuffer data, Class c ) throws I msg.id = data.getLong(); msg.version = data.getInt(); - return msg; + return c.cast(msg); } @Override diff --git a/jme3-networking/src/main/java/com/jme3/network/message/DisconnectMessage.java b/jme3-networking/src/main/java/com/jme3/network/message/DisconnectMessage.java index 29f732768c..07695a21ea 100644 --- a/jme3-networking/src/main/java/com/jme3/network/message/DisconnectMessage.java +++ b/jme3-networking/src/main/java/com/jme3/network/message/DisconnectMessage.java @@ -85,7 +85,7 @@ public String toString() { public static class DisconnectSerializer extends Serializer { @Override - public DisconnectMessage readObject( ByteBuffer data, Class c ) throws IOException { + public T readObject(ByteBuffer data, Class c) throws IOException { // Read the null/non-null marker if (data.get() == 0x0) @@ -96,7 +96,7 @@ public DisconnectMessage readObject( ByteBuffer data, Class c ) throws IOExcepti msg.reason = StringSerializer.readString(data); msg.type = StringSerializer.readString(data); - return msg; + return c.cast(msg); } @Override diff --git a/jme3-plugins-json-gson/src/main/java/com/jme3/plugins/gson/GsonObject.java b/jme3-plugins-json-gson/src/main/java/com/jme3/plugins/gson/GsonObject.java index 8aadbfb182..af91f34e7e 100644 --- a/jme3-plugins-json-gson/src/main/java/com/jme3/plugins/gson/GsonObject.java +++ b/jme3-plugins-json-gson/src/main/java/com/jme3/plugins/gson/GsonObject.java @@ -78,7 +78,7 @@ public JsonElement get(String string) { @Override public Entry[] entrySet() { Set> entrySet = obj().entrySet(); - Entry[] entries = new Entry[entrySet.size()]; + Entry[] entries = (Entry[]) new Entry[entrySet.size()]; int i = 0; for (Entry entry : entrySet) { @@ -110,4 +110,4 @@ public JsonPrimitive getAsJsonPrimitive(String string) { com.google.gson.JsonPrimitive el= obj().getAsJsonPrimitive(string); return isNull(el) ? null : new GsonPrimitive(el); } -} \ No newline at end of file +} diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java index aff6fbdcf1..6334b994e2 100644 --- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java +++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java @@ -129,11 +129,11 @@ public Object handleExtension(GltfLoader loader, String parentName, JsonElement } if (jsonObject.has("texCoord")) { texCoord = jsonObject.get("texCoord").getAsInt(); // it overrides the parent's texCoord value - } - Matrix3f transform = translation.mult(rotation).mult(scale); - Mesh meshLast = loader.fetchFromCache("textureTransformData", 0, Mesh.class); - Map transformMap = loader.fetchFromCache("textureTransformData", 1, HashMap.class); - if (mesh != meshLast || (transformMap != null && transformMap.get(texCoord) == null)) { + } + Matrix3f transform = translation.mult(rotation).mult(scale); + Mesh meshLast = loader.fetchFromCache("textureTransformData", 0, Mesh.class); + Map transformMap = loader.fetchFromCache("textureTransformData", 1, HashMap.class); + if (mesh != meshLast || (transformMap != null && transformMap.get(texCoord) == null)) { // at this point, we're processing a new mesh or the same mesh as before but for a different UV set if (mesh != meshLast) { // it's a new mesh loader.addToCache("textureTransformData", 0, mesh, 2); From cd68f25c6dbf65798a64a2ff1f30eafddaffd58f Mon Sep 17 00:00:00 2001 From: Davis Rollman Date: Tue, 7 Apr 2026 20:53:53 -0400 Subject: [PATCH 2/4] Fix Gradle DSL deprecation warnings --- build.gradle | 6 +++--- common.gradle | 30 +++++++++++++++--------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/build.gradle b/build.gradle index 7976b3d6ff..c6b5ece50c 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { mavenCentral() google() maven { - url "https://plugins.gradle.org/m2/" + url = "https://plugins.gradle.org/m2/" } } dependencies { @@ -121,7 +121,7 @@ task copyLibs(type: Copy){ } task dist(dependsOn: [':jme3-examples:dist', 'mergedJavadoc']){ - description 'Creates a jME3 examples distribution with all jme3 binaries, sources, javadoc and external libraries under ./dist' + description = 'Creates a jME3 examples distribution with all jme3 binaries, sources, javadoc and external libraries under ./dist' } def mergedJavadocSubprojects = [ @@ -242,4 +242,4 @@ if (skipPrebuildLibraries != "true" && buildNativeProjects != "true") { assemble.dependsOn extractPrebuiltNatives } -} \ No newline at end of file +} diff --git a/common.gradle b/common.gradle index 2e8254531f..c27b061802 100644 --- a/common.gradle +++ b/common.gradle @@ -93,26 +93,26 @@ task javadocJar(type: Jar, dependsOn: javadoc, description: 'Creates a jar from } ext.pomConfig = { - name POM_NAME - description POM_DESCRIPTION - url POM_URL - inceptionYear POM_INCEPTION_YEAR + name = POM_NAME + description = POM_DESCRIPTION + url = POM_URL + inceptionYear = POM_INCEPTION_YEAR scm { - url POM_SCM_URL - connection POM_SCM_CONNECTION - developerConnection POM_SCM_DEVELOPER_CONNECTION + url = POM_SCM_URL + connection = POM_SCM_CONNECTION + developerConnection = POM_SCM_DEVELOPER_CONNECTION } licenses { license { - name POM_LICENSE_NAME - url POM_LICENSE_URL - distribution POM_LICENSE_DISTRIBUTION + name = POM_LICENSE_NAME + url = POM_LICENSE_URL + distribution = POM_LICENSE_DISTRIBUTION } } developers { developer { - name 'jMonkeyEngine Team' - id 'jMonkeyEngine' + name = 'jMonkeyEngine Team' + id = 'jMonkeyEngine' } } } @@ -155,7 +155,7 @@ publishing { } url = POM_URL } - version project.version + version = project.version } } @@ -210,8 +210,8 @@ tasks.withType(Sign) { } checkstyle { - toolVersion libs.versions.checkstyle.get() - configFile file("${gradle.rootProject.rootDir}/config/checkstyle/checkstyle.xml") + toolVersion = libs.versions.checkstyle.get() + configFile = file("${gradle.rootProject.rootDir}/config/checkstyle/checkstyle.xml") } checkstyleMain { From 05092909c058964bd1624174f02a1750d8657b94 Mon Sep 17 00:00:00 2001 From: Davis Rollman Date: Tue, 7 Apr 2026 20:54:15 -0400 Subject: [PATCH 3/4] Reduce Android deprecation warnings --- .../src/main/java/com/jme3/app/AndroidHarness.java | 11 +++++++---- .../java/com/jme3/app/AndroidHarnessFragment.java | 5 +++-- .../com/jme3/system/android/JmeAndroidSystem.java | 1 + .../java/com/jme3/system/android/OGLESContext.java | 4 ++-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/jme3-android/src/main/java/com/jme3/app/AndroidHarness.java b/jme3-android/src/main/java/com/jme3/app/AndroidHarness.java index 66d5abc0a9..c3cd0955b2 100644 --- a/jme3-android/src/main/java/com/jme3/app/AndroidHarness.java +++ b/jme3-android/src/main/java/com/jme3/app/AndroidHarness.java @@ -5,6 +5,7 @@ import android.content.DialogInterface; import android.graphics.drawable.Drawable; import android.graphics.drawable.NinePatchDrawable; +import android.graphics.Point; import android.opengl.GLSurfaceView; import android.os.Bundle; import android.util.Log; @@ -216,7 +217,9 @@ public void onCreate(Bundle savedInstanceState) { //TODO try to find a better way to get a hand on the resolution WindowManager wind = this.getWindowManager(); Display disp = wind.getDefaultDisplay(); - Log.d("AndroidHarness", "Resolution from Window, width:" + disp.getWidth() + ", height: " + disp.getHeight()); + Point displaySize = new Point(); + disp.getSize(displaySize); + Log.d("AndroidHarness", "Resolution from Window, width:" + displaySize.x + ", height: " + displaySize.y); // Create Settings logger.log(Level.FINE, "Creating settings"); @@ -232,7 +235,7 @@ public void onCreate(Bundle savedInstanceState) { settings.setSamples(eglSamples); settings.setStencilBits(eglStencilBits); - settings.setResolution(disp.getWidth(), disp.getHeight()); + settings.setResolution(displaySize.x, displaySize.y); settings.setAudioRenderer(audioRendererType); settings.setFrameRate(frameRate); @@ -410,9 +413,9 @@ public void layoutDisplay() { frameLayout = new FrameLayout(this); splashImageView = new ImageView(this); - Drawable drawable = this.getResources().getDrawable(splashPicID); + Drawable drawable = splashImageView.getContext().getDrawable(splashPicID); if (drawable instanceof NinePatchDrawable) { - splashImageView.setBackgroundDrawable(drawable); + splashImageView.setBackground(drawable); } else { splashImageView.setImageResource(splashPicID); } diff --git a/jme3-android/src/main/java/com/jme3/app/AndroidHarnessFragment.java b/jme3-android/src/main/java/com/jme3/app/AndroidHarnessFragment.java index 11de175389..aaab02d5ff 100644 --- a/jme3-android/src/main/java/com/jme3/app/AndroidHarnessFragment.java +++ b/jme3-android/src/main/java/com/jme3/app/AndroidHarnessFragment.java @@ -70,6 +70,7 @@ * * @author iwgeric */ +@SuppressWarnings("deprecation") public class AndroidHarnessFragment extends Fragment implements TouchListener, DialogInterface.OnClickListener, View.OnLayoutChangeListener, SystemListener { private static final Logger logger = Logger.getLogger(AndroidHarnessFragment.class.getName()); @@ -494,9 +495,9 @@ public void createLayout() { if (splashPicID != 0) { splashImageView = new ImageView(getActivity()); - Drawable drawable = getResources().getDrawable(splashPicID); + Drawable drawable = splashImageView.getContext().getDrawable(splashPicID); if (drawable instanceof NinePatchDrawable) { - splashImageView.setBackgroundDrawable(drawable); + splashImageView.setBackground(drawable); } else { splashImageView.setImageResource(splashPicID); } diff --git a/jme3-android/src/main/java/com/jme3/system/android/JmeAndroidSystem.java b/jme3-android/src/main/java/com/jme3/system/android/JmeAndroidSystem.java index 226f7ff6dd..20eac3c555 100644 --- a/jme3-android/src/main/java/com/jme3/system/android/JmeAndroidSystem.java +++ b/jme3-android/src/main/java/com/jme3/system/android/JmeAndroidSystem.java @@ -75,6 +75,7 @@ public void writeImageFile(OutputStream outStream, String format, ByteBuffer ima @Override + @SuppressWarnings("deprecation") public JmeContext newContext(AppSettings settings, Type contextType) { if (settings.getAudioRenderer() == null) { audioRendererType = null; diff --git a/jme3-android/src/main/java/com/jme3/system/android/OGLESContext.java b/jme3-android/src/main/java/com/jme3/system/android/OGLESContext.java index 4acb4aa66f..073bd6945a 100644 --- a/jme3-android/src/main/java/com/jme3/system/android/OGLESContext.java +++ b/jme3-android/src/main/java/com/jme3/system/android/OGLESContext.java @@ -493,8 +493,8 @@ public void requestDialog( public void run() { final FrameLayout layoutTextDialogInput = new FrameLayout(view.getContext()); final EditText editTextDialogInput = new EditText(view.getContext()); - editTextDialogInput.setWidth(LayoutParams.FILL_PARENT); - editTextDialogInput.setHeight(LayoutParams.FILL_PARENT); + editTextDialogInput.setWidth(LayoutParams.MATCH_PARENT); + editTextDialogInput.setHeight(LayoutParams.MATCH_PARENT); editTextDialogInput.setPadding(20, 20, 20, 20); editTextDialogInput.setGravity(Gravity.FILL_HORIZONTAL); //editTextDialogInput.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); From 7d9f7bc22fc872b224f1f0f5b409bbcf6a5ea2aa Mon Sep 17 00:00:00 2001 From: Davis Rollman Date: Tue, 7 Apr 2026 20:54:43 -0400 Subject: [PATCH 4/4] Replace deprecated Mockito matcher import --- .../src/test/java/com/jme3/material/plugins/J3MLoaderTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java b/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java index 7126d94fa8..dcd1f3a7f6 100644 --- a/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java +++ b/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java @@ -19,7 +19,7 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; import static org.junit.Assert.*; import static org.mockito.Mockito.when;