From eafd66854b14d649e64caddda5ef837aa512970f Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 2 Aug 2024 13:56:53 +0200 Subject: [PATCH] [java-stubs] TypeInfo: fix annotation parsing for multi-parameter generic types (IDEA-356112) GitOrigin-RevId: 154294caab47747e81b80de26ca1bffd919fce98 --- .../src/com/intellij/psi/impl/cache/TypeInfo.java | 6 +++--- .../testSrc/com/intellij/psi/impl/cache/TypeInfoTest.java | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java b/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java index ac44474e4d4c..076bbfbc5ec1 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java @@ -491,12 +491,12 @@ public /*sealed*/ abstract class TypeInfo { else if (refTokenType == JavaElementType.REFERENCE_PARAMETER_LIST) { List subTypes = LightTreeUtil.getChildrenOfType(tree, refChild, JavaElementType.TYPE); if (!subTypes.isEmpty()) { - byte[] newPrefix = Arrays.copyOf(prefix, prefix.length + 2); - newPrefix[prefix.length] = TypeAnnotationContainer.Collector.TYPE_ARGUMENT; for (int i = 0; i < subTypes.size(); i++) { - newPrefix[prefix.length + 1] = (byte)i; TypeInfo componentInfo = info.genericComponent(i); if (componentInfo != null) { + byte[] newPrefix = Arrays.copyOf(prefix, prefix.length + 2); + newPrefix[prefix.length] = TypeAnnotationContainer.Collector.TYPE_ARGUMENT; + newPrefix[prefix.length + 1] = (byte)i; collectAnnotations(componentInfo, collector, tree, subTypes.get(i), newPrefix); } } diff --git a/java/java-tests/testSrc/com/intellij/psi/impl/cache/TypeInfoTest.java b/java/java-tests/testSrc/com/intellij/psi/impl/cache/TypeInfoTest.java index 72fb50415a28..7ce6aca88a9d 100644 --- a/java/java-tests/testSrc/com/intellij/psi/impl/cache/TypeInfoTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/impl/cache/TypeInfoTest.java @@ -72,6 +72,10 @@ public class TypeInfoTest extends LightJavaCodeInsightFixtureTestCase { public void testGenericNested() { doTest("X1<@A2 X2>.@A4 X4<@A5 X5,@A6 X6 @A7 []>"); } + + public void testGenericNested2() { + doTest("List1"); + } private void doTest(String typeText) { String javaFile = "class X { " + typeText + " x; }\n" + USED_CLASSES;