diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiTemplateExpressionImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiTemplateExpressionImpl.java
index 5e7c1d988449..c0e6683865e9 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiTemplateExpressionImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiTemplateExpressionImpl.java
@@ -124,7 +124,7 @@ public final class PsiTemplateExpressionImpl extends ExpressionPsiElement implem
for (PsiClassType classType : PsiTypesUtil.getClassTypeComponents(type)) {
PsiType substituted = PsiUtil.substituteTypeParameter(classType, CommonClassNames.JAVA_LANG_STRING_TEMPLATE_PROCESSOR, 0, false);
if (substituted != null) {
- return substituted;
+ return PsiUtil.captureToplevelWildcards(substituted, this);
}
}
return null;
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingStringTemplates/StringTemplates.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingStringTemplates/StringTemplates.java
index 21ce37f40948..682b1ff1dd2e 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingStringTemplates/StringTemplates.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingStringTemplates/StringTemplates.java
@@ -104,6 +104,13 @@ class X {
public static void testCapturedWilcard(StringTemplate.Processor, ?> str) {
Object s = str."";
}
+
+ void testCapturedWildcard2() {
+ StringTemplate.Processor, RuntimeException> processor = null;
+ Object o = processor."""
+ """."""
+ """;
+ }
public static void noNewlineAfterTextBlockOpeningQuotes() {
System.out.println(STR."""\{}""");