diff options
author | vmishenev <vad-mishenev@yandex.ru> | 2021-11-12 13:55:11 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-12 13:55:11 +0300 |
commit | 0303fa827f9fea9c11fefbce1045536183ccd688 (patch) | |
tree | 59b94b76abeb6d7949694e02b51e1c4ba2a0fda8 | |
parent | 4a1b8a981389a0459284ba62aa5d00cc0d44e454 (diff) | |
download | dokka-0303fa827f9fea9c11fefbce1045536183ccd688.tar.gz dokka-0303fa827f9fea9c11fefbce1045536183ccd688.tar.bz2 dokka-0303fa827f9fea9c11fefbce1045536183ccd688.zip |
Store checked exceptions into `ExtraProperties` (#2222)
-rw-r--r-- | core/api/core.api | 20 | ||||
-rw-r--r-- | core/src/main/kotlin/model/documentableProperties.kt | 10 | ||||
-rw-r--r-- | plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt | 7 | ||||
-rw-r--r-- | plugins/base/src/test/kotlin/model/JavaTest.kt | 21 |
4 files changed, 56 insertions, 2 deletions
diff --git a/core/api/core.api b/core/api/core.api index 24f103d7..96fe317a 100644 --- a/core/api/core.api +++ b/core/api/core.api @@ -732,6 +732,26 @@ public abstract interface class org/jetbrains/dokka/model/Callable : org/jetbrai public abstract fun getReceiver ()Lorg/jetbrains/dokka/model/DParameter; } +public final class org/jetbrains/dokka/model/CheckedExceptions : org/jetbrains/dokka/model/properties/ExtraProperty, org/jetbrains/dokka/model/properties/ExtraProperty$Key { + public static final field Companion Lorg/jetbrains/dokka/model/CheckedExceptions$Companion; + public fun <init> (Ljava/util/Map;)V + public final fun component1 ()Ljava/util/Map; + public final fun copy (Ljava/util/Map;)Lorg/jetbrains/dokka/model/CheckedExceptions; + public static synthetic fun copy$default (Lorg/jetbrains/dokka/model/CheckedExceptions;Ljava/util/Map;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/CheckedExceptions; + public fun equals (Ljava/lang/Object;)Z + public final fun getExceptions ()Ljava/util/Map; + public fun getKey ()Lorg/jetbrains/dokka/model/properties/ExtraProperty$Key; + public fun hashCode ()I + public synthetic fun mergeStrategyFor (Ljava/lang/Object;Ljava/lang/Object;)Lorg/jetbrains/dokka/model/properties/MergeStrategy; + public fun mergeStrategyFor (Lorg/jetbrains/dokka/model/ObviousMember;Lorg/jetbrains/dokka/model/ObviousMember;)Lorg/jetbrains/dokka/model/properties/MergeStrategy; + public fun toString ()Ljava/lang/String; +} + +public final class org/jetbrains/dokka/model/CheckedExceptions$Companion : org/jetbrains/dokka/model/properties/ExtraProperty$Key { + public synthetic fun mergeStrategyFor (Ljava/lang/Object;Ljava/lang/Object;)Lorg/jetbrains/dokka/model/properties/MergeStrategy; + public fun mergeStrategyFor (Lorg/jetbrains/dokka/model/CheckedExceptions;Lorg/jetbrains/dokka/model/CheckedExceptions;)Lorg/jetbrains/dokka/model/properties/MergeStrategy$Replace; +} + public abstract interface class org/jetbrains/dokka/model/ClassKind { } diff --git a/core/src/main/kotlin/model/documentableProperties.kt b/core/src/main/kotlin/model/documentableProperties.kt index 90ab3053..87f40bd6 100644 --- a/core/src/main/kotlin/model/documentableProperties.kt +++ b/core/src/main/kotlin/model/documentableProperties.kt @@ -37,4 +37,12 @@ data class ExceptionInSupertypes(val exceptions: SourceSetDependent<List<TypeCon object ObviousMember : ExtraProperty<Documentable>, ExtraProperty.Key<Documentable, ObviousMember> { override val key: ExtraProperty.Key<Documentable, *> = this -}
\ No newline at end of file +} + +data class CheckedExceptions(val exceptions: SourceSetDependent<List<DRI>>) : ExtraProperty<Documentable>, ExtraProperty.Key<Documentable, ObviousMember> { + companion object : ExtraProperty.Key<Documentable, CheckedExceptions> { + override fun mergeStrategyFor(left: CheckedExceptions, right: CheckedExceptions) = + MergeStrategy.Replace(CheckedExceptions(left.exceptions + right.exceptions)) + } + override val key: ExtraProperty.Key<Documentable, *> = CheckedExceptions +} diff --git a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt index 878d5973..e7028ef0 100644 --- a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt @@ -56,6 +56,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getChildOfType import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance +import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty import org.jetbrains.kotlin.utils.addToStdlib.safeAs import java.io.File @@ -403,12 +404,16 @@ class DefaultPsiToDocumentableTranslator( (psi.annotations.toList() .toListOfAnnotations() + it.toListOfAnnotations()).toSourceSetDependent() .toAnnotations(), - ObviousMember.takeIf { inheritedFrom != null && inheritedFrom.isObvious } + ObviousMember.takeIf { inheritedFrom != null && inheritedFrom.isObvious }, + psi.throwsList.toDriList().takeIf { it.isNotEmpty() } + ?.let { CheckedExceptions(it.toSourceSetDependent()) } ) } ) } + private fun PsiReferenceList.toDriList() = referenceElements.mapNotNull { it?.resolve()?.let { DRI.from(it) } } + private fun PsiModifierListOwner.additionalExtras() = listOfNotNull( ExtraModifiers.JavaOnlyModifiers.Static.takeIf { hasModifier(JvmModifier.STATIC) }, ExtraModifiers.JavaOnlyModifiers.Native.takeIf { hasModifier(JvmModifier.NATIVE) }, diff --git a/plugins/base/src/test/kotlin/model/JavaTest.kt b/plugins/base/src/test/kotlin/model/JavaTest.kt index 991b48ef..e473b352 100644 --- a/plugins/base/src/test/kotlin/model/JavaTest.kt +++ b/plugins/base/src/test/kotlin/model/JavaTest.kt @@ -251,6 +251,27 @@ class JavaTest : AbstractModelTest("/src/main/kotlin/java/Test.java", "java") { } @Test + fun throwsList() { + inlineModelTest( + """ + |class C { + | public void foo() throws java.io.IOException, ArithmeticException {} + |} + """, configuration = configuration + ) { + with((this / "java" / "C" / "foo").cast<DFunction>()) { + with(extra[CheckedExceptions]?.exceptions?.entries?.single()?.value.assertNotNull("CheckedExceptions")) { + this counts 2 + first().packageName equals "java.io" + first().classNames equals "IOException" + get(1).packageName equals "java.lang" + get(1).classNames equals "ArithmeticException" + } + } + } + } + + @Test fun annotatedAnnotation() { inlineModelTest( """ |