Support annotations on type parameters in stub builder

This commit is contained in:
Denis Zharkov
2016-01-20 18:46:22 +03:00
parent d7e035fd9b
commit 32755a269c
3 changed files with 35 additions and 2 deletions
@@ -240,7 +240,15 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) {
if (typeParameterProto.reified) {
modifiers.add(KtTokens.REIFIED_KEYWORD)
}
createModifierListStub(typeParameterStub, modifiers)
val modifierList = createModifierListStub(typeParameterStub, modifiers)
val annotations = c.components.annotationLoader.loadTypeParameterAnnotations(typeParameterProto, c.nameResolver)
if (annotations.isNotEmpty()) {
createAnnotationStubs(
annotations,
modifierList ?: createEmptyModifierListStub(typeParameterStub))
}
}
private fun Type.isDefaultUpperBound(): Boolean {
@@ -3,6 +3,8 @@
protected @a fun f() {
}
inline fun <reified @a T, @a F> inlineFun() { }
private fun annotationWithVararg(@a vararg i: Int) {}
@b(E.E1) private val c: Int = 1
@@ -29,7 +31,7 @@
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FUNCTION,
AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER,
AnnotationTarget.TYPE, AnnotationTarget.CLASS)
AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.TYPE_PARAMETER)
annotation class a
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS,
@@ -151,6 +151,29 @@ PsiJetFileStubImpl[package=]
USER_TYPE:[isAbsoluteInRootPackage=false]
REFERENCE_EXPRESSION:[referencedName=kotlin]
REFERENCE_EXPRESSION:[referencedName=Unit]
FUN:[fqName=Annotations.inlineFun, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=true, isExtension=false, isTopLevel=false, name=inlineFun]
MODIFIER_LIST:[public final inline]
TYPE_PARAMETER_LIST:
TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T]
MODIFIER_LIST:[reified]
ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a]
CONSTRUCTOR_CALLEE:
TYPE_REFERENCE:
USER_TYPE:[isAbsoluteInRootPackage=false]
REFERENCE_EXPRESSION:[referencedName=a]
TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=F]
MODIFIER_LIST:[]
ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a]
CONSTRUCTOR_CALLEE:
TYPE_REFERENCE:
USER_TYPE:[isAbsoluteInRootPackage=false]
REFERENCE_EXPRESSION:[referencedName=a]
VALUE_PARAMETER_LIST:
TYPE_REFERENCE:
USER_TYPE:[isAbsoluteInRootPackage=false]
USER_TYPE:[isAbsoluteInRootPackage=false]
REFERENCE_EXPRESSION:[referencedName=kotlin]
REFERENCE_EXPRESSION:[referencedName=Unit]
FUN:[fqName=Annotations.types, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=types]
MODIFIER_LIST:[public final]
VALUE_PARAMETER_LIST: