aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvmishenev <vad-mishenev@yandex.ru>2021-11-12 13:55:11 +0300
committerGitHub <noreply@github.com>2021-11-12 13:55:11 +0300
commit0303fa827f9fea9c11fefbce1045536183ccd688 (patch)
tree59b94b76abeb6d7949694e02b51e1c4ba2a0fda8
parent4a1b8a981389a0459284ba62aa5d00cc0d44e454 (diff)
downloaddokka-0303fa827f9fea9c11fefbce1045536183ccd688.tar.gz
dokka-0303fa827f9fea9c11fefbce1045536183ccd688.tar.bz2
dokka-0303fa827f9fea9c11fefbce1045536183ccd688.zip
Store checked exceptions into `ExtraProperties` (#2222)
-rw-r--r--core/api/core.api20
-rw-r--r--core/src/main/kotlin/model/documentableProperties.kt10
-rw-r--r--plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt7
-rw-r--r--plugins/base/src/test/kotlin/model/JavaTest.kt21
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(
"""