From bbacf3c8b12b957c0def3f924ac281a00ad473eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Wed, 25 Jan 2023 01:41:56 -0300 Subject: [PATCH] Avoid NPEs during type inference - Since annotated primitives are now stand-alone instances, ensure they share the supertypes for the unnanotated version, otherwise, NPEs occur during inference. --- .../sourceforge/pmd/lang/java/types/JPrimitiveType.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/types/JPrimitiveType.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/types/JPrimitiveType.java index ad230ed769..a062b42469 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/types/JPrimitiveType.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/types/JPrimitiveType.java @@ -42,6 +42,11 @@ public final class JPrimitiveType implements JTypeMirror { this.box = new BoxedPrimitive(ts, boxType, this, typeAnnots); // not erased } + private JPrimitiveType(JPrimitiveType pType, PSet typeAnnots) { + this(pType.ts, pType.kind, pType.type, pType.box.getSymbol(), typeAnnots); + this.superTypes = pType.superTypes; // Shared instance + } + @Override public PSet getTypeAnnotations() { return typeAnnots; @@ -52,7 +57,7 @@ public final class JPrimitiveType implements JTypeMirror { if (newTypeAnnots.isEmpty() && this.typeAnnots.isEmpty()) { return this; } - return new JPrimitiveType(ts, kind, type, box.getSymbol(), newTypeAnnots); + return new JPrimitiveType(this, newTypeAnnots); } @Override