diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiTypeElementImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiTypeElementImpl.java index 4c837556371a..cc46b4bd5cd0 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiTypeElementImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiTypeElementImpl.java @@ -16,11 +16,13 @@ package com.intellij.psi.impl.source; import com.intellij.lang.ASTNode; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.*; import com.intellij.psi.impl.PsiImplUtil; import com.intellij.psi.impl.source.codeStyle.CodeEditUtil; -import com.intellij.psi.impl.source.tree.*; +import com.intellij.psi.impl.source.tree.CompositePsiElement; +import com.intellij.psi.impl.source.tree.ElementType; +import com.intellij.psi.impl.source.tree.JavaElementType; +import com.intellij.psi.impl.source.tree.TreeElement; import com.intellij.psi.scope.PsiScopeProcessor; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; @@ -36,8 +38,6 @@ import org.jetbrains.annotations.Nullable; import java.util.List; public class PsiTypeElementImpl extends CompositePsiElement implements PsiTypeElement { - private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.PsiTypeElementImpl"); - private volatile PsiType myCachedType = null; @SuppressWarnings({"UnusedDeclaration"}) @@ -120,22 +120,16 @@ public class PsiTypeElementImpl extends CompositePsiElement implements PsiTypeEl if (PsiUtil.isJavaToken(child, JavaTokenType.QUEST)) { assert type == null : this; - PsiElement next = PsiTreeUtil.skipSiblingsForward(child, PsiComment.class, PsiWhiteSpace.class); - if (next == null) { - type = PsiWildcardType.createUnbounded(getManager()); + PsiElement boundKind = PsiTreeUtil.skipSiblingsForward(child, PsiComment.class, PsiWhiteSpace.class); + PsiElement boundType = PsiTreeUtil.skipSiblingsForward(boundKind, PsiComment.class, PsiWhiteSpace.class); + if (PsiUtil.isJavaToken(boundKind, JavaTokenType.EXTENDS_KEYWORD) && boundType instanceof PsiTypeElement) { + type = PsiWildcardType.createExtends(getManager(), ((PsiTypeElement)boundType).getType()); + } + else if (PsiUtil.isJavaToken(boundKind, JavaTokenType.SUPER_KEYWORD) && boundType instanceof PsiTypeElement) { + type = PsiWildcardType.createSuper(getManager(), ((PsiTypeElement)boundType).getType()); } else { - PsiElement bound = PsiTreeUtil.skipSiblingsForward(next, PsiComment.class, PsiWhiteSpace.class); - if (PsiUtil.isJavaToken(next, JavaTokenType.EXTENDS_KEYWORD) && bound instanceof PsiTypeElement) { - type = PsiWildcardType.createExtends(getManager(), ((PsiTypeElement)bound).getType()); - } - else if (PsiUtil.isJavaToken(next, JavaTokenType.SUPER_KEYWORD) && bound instanceof PsiTypeElement) { - type = PsiWildcardType.createSuper(getManager(), ((PsiTypeElement)bound).getType()); - } - else { - LOG.error("next=" + next + " bound=" + bound + ": " + this); - type = PsiWildcardType.createUnbounded(getManager()); - } + type = PsiWildcardType.createUnbounded(getManager()); } PsiAnnotation[] array = ContainerUtil.copyAndClear(annotations, PsiAnnotation.ARRAY_FACTORY, true); type = ((PsiWildcardType)type).annotate(array); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/psi/AnnotatedTypeTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/psi/AnnotatedTypeTest.groovy index cbaa56d3ec94..f186f9e8f5c8 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/psi/AnnotatedTypeTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/psi/AnnotatedTypeTest.groovy @@ -19,7 +19,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.testFramework.LightIdeaTestCase -@SuppressWarnings(["GrUnresolvedAccess"]) +@SuppressWarnings(["GrUnresolvedAccess", "GroovyAssignabilityCheck"]) class AnnotatedTypeTest extends LightIdeaTestCase { public void testTypeComposition() { @@ -55,6 +55,9 @@ class E2 extends Exception { } psi = javaFacade.elementFactory.createStatementFromText("@A java.lang.@TA(1) String s", context) assertEquals("@TA(1) String", psi.declaredElements[0].type.presentableText) + + psi = javaFacade.elementFactory.createStatementFromText("Collection s", context) + assertEquals("Collection", psi.declaredElements[0].type.presentableText) } }