Type annotation in wildcard and class reference types; more tests

This commit is contained in:
Roman Shevchenko
2013-04-05 21:08:12 +02:00
parent 69242b8a27
commit 218fd54bf2
9 changed files with 222 additions and 91 deletions
@@ -0,0 +1,12 @@
// "Cast to 'int'" "true"
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
@Target({TYPE_USE}) @interface TA { String value() default ""; }
class C {
{
Object o = null;
@TA("wtf") <caret>int i = (@TA("wtf") int) o;
}
}
@@ -8,6 +8,6 @@ import static java.lang.annotation.ElementType.*;
class C {
{
Object o = null;
@TA <caret>List<@TA ? extends @TA String> l = (@TA List<? extends @TA String>) o;
@TA List<@TA ? extends @TA String> l = (@TA List<@TA ? extends @TA String>) o;
}
}
@@ -0,0 +1,12 @@
// "Cast to 'int'" "true"
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
@Target({TYPE_USE}) @interface TA { String value() default ""; }
class C {
{
Object o = null;
@TA("wtf") <caret>int i = o;
}
}
@@ -15,34 +15,46 @@
*/
package com.intellij.codeInsight.psi
import com.intellij.psi.*
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.testFramework.LightIdeaTestCase
@SuppressWarnings(["GrUnresolvedAccess"])
class AnnotatedTypeTest extends LightIdeaTestCase {
@SuppressWarnings("GrUnresolvedAccess")
public void testTypeComposition() {
def context = createFile("typeCompositionTest.java", """
PsiFile context = createFile("typeCompositionTest.java", """
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
@interface A { }
@Target({TYPE_USE}) @interface TA { }
@Target({TYPE_USE}) @interface TA { int value() default 42; }
class E1 extends Exception { }
class E2 extends Exception { }
""")
def factory = JavaPsiFacade.getInstance(getProject()).getElementFactory(), psi
PsiElement psi
psi = factory.createStatementFromText("@TA int @TA [] a = null", context)
assertEquals("@TA int @TA []", psi.declaredElements[0].type.presentableText)
psi = javaFacade.elementFactory.createStatementFromText("@A @TA(1) int @TA(2) [] a", context)
assertEquals("@TA(1) int @TA(2) []", psi.declaredElements[0].type.presentableText)
psi = factory.createStatementFromText("@A int @TA [] a = null", context)
assertEquals("int @TA []", psi.declaredElements[0].type.presentableText)
psi = javaFacade.elementFactory.createStatementFromText("try { } catch (@A @TA(1) E1 | @TA(2) E2 e) { }", context)
assertEquals("@TA(1) E1 | @TA(2) E2", psi.catchBlockParameters[0].type.presentableText)
psi = factory.createStatementFromText("try { } catch (@TA E1 | @TA E2 e) { }", context)
assertEquals("@TA E1 | @TA E2", psi.catchBlockParameters[0].type.presentableText)
psi = javaFacade.elementFactory.createStatementFromText("@A @TA(1) String @TA(2) [] f @TA(3) []", context)
assertEquals("@TA(1) String @TA(2) [] @TA(3) []", psi.declaredElements[0].type.presentableText)
psi = factory.createFieldFromText("@TA String @TA [] f @TA []", context)
assertEquals("@TA String @TA [] @TA []", psi.type.presentableText)
psi = javaFacade.elementFactory.createStatementFromText("Class<@TA(1) ?> c", context)
assertEquals("Class<@TA(1) ?>", psi.declaredElements[0].type.presentableText)
psi = javaFacade.elementFactory.createStatementFromText("Class cs = new Class<>()", context)
assertEquals("Class<>", psi.declaredElements[0].initializer.type.presentableText)
psi = javaFacade.elementFactory.createStatementFromText("@A @TA(1) String s", context)
assertEquals("@TA(1) String", psi.declaredElements[0].type.presentableText)
psi = javaFacade.elementFactory.createStatementFromText("@A java.lang.@TA(1) String s", context)
assertEquals("@TA(1) String", psi.declaredElements[0].type.presentableText)
}
}