From a74580f6d2fe033f0cec34c09760240a36de7bb0 Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Tue, 17 Feb 2026 09:47:15 +0100 Subject: [PATCH] [GITHUB-9193] Resolve erroneous types in diamond-base new class expressions. --- .../java/completion/JavaCompletionTask.java | 3 +++ .../JavaCompletionTaskTest/1.8/diamond1.pass | 2 ++ .../JavaCompletionTask18FeaturesTest.java | 15 +++++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/1.8/diamond1.pass diff --git a/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java b/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java index 7cf25ed54e07..e77e03eae5bd 100644 --- a/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java +++ b/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java @@ -2218,6 +2218,9 @@ private void insideNewClass(Env env) throws IOException { case GTGTGT: controller = env.getController(); TypeMirror tm = controller.getTrees().getTypeMirror(new TreePath(path, nc.getIdentifier())); + if (tm.getKind() == TypeKind.ERROR) { + tm = env.getController().getTrees().getOriginalType((ErrorType) tm); + } addMembers(env, tm, ((DeclaredType) tm).asElement(), EnumSet.of(CONSTRUCTOR), null, false, false, false, true, addSwitchItemDefault); break; } diff --git a/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/1.8/diamond1.pass b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/1.8/diamond1.pass new file mode 100644 index 000000000000..488d6ffd6f56 --- /dev/null +++ b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/1.8/diamond1.pass @@ -0,0 +1,2 @@ +public Test(T value) +public Test(String name, T value) diff --git a/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask18FeaturesTest.java b/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask18FeaturesTest.java index d36656a73820..0f3077788a61 100644 --- a/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask18FeaturesTest.java +++ b/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask18FeaturesTest.java @@ -346,6 +346,21 @@ public void testEffectivellyFinal() throws Exception { performTest("Final", 1125, "var", "effectivellyFinal.pass", "1.8"); } + public void testDiamond1() throws Exception { + performTest("Empty", 808, + """ + package test; + public class Test { + public static class Test { + public Test(T value) { } + public Test(String name, T value) { } + } + private static void test() { + new Test<> + """, + "diamond1.pass", "1.8"); + } + static { JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = true; }