Minor. Introduce constant JVM_THROWS_ANNOTATION_FQ_NAME
KT-35468
This commit is contained in:
committed by
Ilya Gorbunov
parent
1565fc0211
commit
534ff58d9c
@@ -32,12 +32,12 @@ import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature;
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
||||
import org.jetbrains.kotlin.load.java.SpecialBuiltinMembers;
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.psi.*;
|
||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||
import org.jetbrains.kotlin.resolve.InlineClassesUtilsKt;
|
||||
import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt;
|
||||
import org.jetbrains.kotlin.resolve.calls.util.UnderscoreUtilKt;
|
||||
import org.jetbrains.kotlin.resolve.constants.ArrayValue;
|
||||
import org.jetbrains.kotlin.resolve.constants.ConstantValue;
|
||||
@@ -1118,7 +1118,7 @@ public class FunctionCodegen {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
AnnotationDescriptor annotation = function.getAnnotations().findAnnotation(new FqName("kotlin.jvm.Throws"));
|
||||
AnnotationDescriptor annotation = function.getAnnotations().findAnnotation(AnnotationUtilKt.JVM_THROWS_ANNOTATION_FQ_NAME);
|
||||
if (annotation == null) return Collections.emptyList();
|
||||
|
||||
Collection<ConstantValue<?>> values = annotation.getAllValueArguments().values();
|
||||
|
||||
@@ -42,3 +42,8 @@ fun AnnotationDescriptor.argumentValue(parameterName: String): ConstantValue<*>?
|
||||
DeprecationLevel.ERROR
|
||||
)
|
||||
val JVM_FIELD_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.JvmField")
|
||||
|
||||
// This annotation is declared here in frontend (as opposed to frontend.java) because it's used in AllUnderImportScope
|
||||
// If you wish to add another JVM-related annotation and has/find utility methods, please proceed to jvmAnnotationUtil.kt
|
||||
@JvmField
|
||||
val JVM_THROWS_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.Throws")
|
||||
|
||||
+2
-1
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.load.java.JavaVisibilities
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.annotations.JVM_THROWS_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_SYNTHETIC_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.resolve.jvm.annotations.STRICTFP_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.resolve.jvm.annotations.SYNCHRONIZED_ANNOTATION_FQ_NAME
|
||||
@@ -168,7 +169,7 @@ class FunctionCodegen(
|
||||
) return null
|
||||
|
||||
// @Throws(vararg exceptionClasses: KClass<out Throwable>)
|
||||
val exceptionClasses = function.getAnnotation(FqName("kotlin.jvm.Throws"))?.getValueArgument(0) ?: return null
|
||||
val exceptionClasses = function.getAnnotation(JVM_THROWS_ANNOTATION_FQ_NAME)?.getValueArgument(0) ?: return null
|
||||
return (exceptionClasses as IrVararg).elements.map { exceptionClass ->
|
||||
context.typeMapper.mapType((exceptionClass as IrClassReference).classType).internalName
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.annotations.JVM_THROWS_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getType
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
@@ -64,7 +65,7 @@ class AddThrowsAnnotationIntention : SelfTargetingIntention<KtThrowExpression>(
|
||||
if (annotationEntry == null || annotationEntry.valueArguments.isEmpty()) {
|
||||
annotationEntry?.delete()
|
||||
val whiteSpaceText = if (containingDeclaration is KtPropertyAccessor) " " else "\n"
|
||||
containingDeclaration.addAnnotation(throwsAnnotationFqName, annotationArgumentText, whiteSpaceText)
|
||||
containingDeclaration.addAnnotation(JVM_THROWS_ANNOTATION_FQ_NAME, annotationArgumentText, whiteSpaceText)
|
||||
} else {
|
||||
val factory = KtPsiFactory(element)
|
||||
val argument = annotationEntry.valueArguments.firstOrNull()
|
||||
@@ -91,8 +92,6 @@ class AddThrowsAnnotationIntention : SelfTargetingIntention<KtThrowExpression>(
|
||||
}
|
||||
}
|
||||
|
||||
private val throwsAnnotationFqName = FqName("kotlin.jvm.Throws")
|
||||
|
||||
private fun KtThrowExpression.getContainingDeclaration(): KtDeclaration? {
|
||||
val parent = getParentOfTypesAndPredicate(
|
||||
true,
|
||||
@@ -110,7 +109,7 @@ private fun KtDeclaration.findThrowsAnnotation(context: BindingContext): KtAnnot
|
||||
val annotationEntries = this.annotationEntries + (parent as? KtProperty)?.annotationEntries.orEmpty()
|
||||
return annotationEntries.find {
|
||||
val typeReference = it.typeReference ?: return@find false
|
||||
context[BindingContext.TYPE, typeReference]?.constructor?.declarationDescriptor?.fqNameSafe == throwsAnnotationFqName
|
||||
context[BindingContext.TYPE, typeReference]?.constructor?.declarationDescriptor?.fqNameSafe == JVM_THROWS_ANNOTATION_FQ_NAME
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,4 +130,4 @@ private fun KtPsiFactory.createCollectionLiteral(expressions: List<KtExpression>
|
||||
}
|
||||
appendFixedText(lastExpression)
|
||||
appendFixedText("]")
|
||||
} as KtCollectionLiteralExpression
|
||||
} as KtCollectionLiteralExpression
|
||||
|
||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.nj2k.types.JKNoType
|
||||
import org.jetbrains.kotlin.nj2k.types.JKType
|
||||
import org.jetbrains.kotlin.nj2k.types.JKTypeFactory
|
||||
import org.jetbrains.kotlin.nj2k.types.replaceJavaClassWithKotlinClassType
|
||||
import org.jetbrains.kotlin.resolve.annotations.JVM_THROWS_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
@@ -126,7 +127,7 @@ fun jvmAnnotation(name: String, symbolProvider: JKSymbolProvider) =
|
||||
|
||||
fun throwAnnotation(throws: List<JKType>, symbolProvider: JKSymbolProvider) =
|
||||
JKAnnotation(
|
||||
symbolProvider.provideClassSymbol("kotlin.jvm.Throws"),
|
||||
symbolProvider.provideClassSymbol(JVM_THROWS_ANNOTATION_FQ_NAME.asString()),
|
||||
throws.map {
|
||||
JKAnnotationParameterImpl(
|
||||
JKClassLiteralExpression(JKTypeElement(it), JKClassLiteralExpression.ClassLiteralType.KOTLIN_CLASS)
|
||||
@@ -352,4 +353,4 @@ val JKTreeElement.identifier: JKSymbol?
|
||||
}
|
||||
|
||||
val JKClass.isObjectOrCompanionObject
|
||||
get() = classKind == JKClass.ClassKind.OBJECT || classKind == JKClass.ClassKind.COMPANION
|
||||
get() = classKind == JKClass.ClassKind.OBJECT || classKind == JKClass.ClassKind.COMPANION
|
||||
|
||||
Reference in New Issue
Block a user