com.squareup.kotlinpoet.metadata.specs.MethodData.kt Maven / Gradle / Ivy
package com.squareup.kotlinpoet.metadata.specs
import com.squareup.kotlinpoet.AnnotationSpec
import com.squareup.kotlinpoet.AnnotationSpec.UseSiteTarget
import com.squareup.kotlinpoet.TypeName
import com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview
import com.squareup.kotlinpoet.metadata.specs.internal.ClassInspectorUtil
/**
 * Represents relevant information on a method used for [ClassInspector]. Should only be
 * associated with methods of a [ClassData] or [PropertyData].
 *
 * @param annotations declared annotations on this method.
 * @property parameterAnnotations a mapping of parameter indices to annotations on them.
 * @property isSynthetic indicates if this method is synthetic or not.
 * @property jvmModifiers set of [JvmMethodModifiers][JvmMethodModifier] on this method.
 * @property isOverride indicates if this method overrides one in a supertype.
 * @property exceptions list of exceptions thrown by this method.
 */
@KotlinPoetMetadataPreview
data class MethodData(
  private val annotations: List,
  val parameterAnnotations: Map>,
  val isSynthetic: Boolean,
  val jvmModifiers: Set,
  val isOverride: Boolean,
  val exceptions: List
) {
  /**
   * A collection of all annotations on this method, including any derived from [jvmModifiers],
   * [isSynthetic], and [exceptions].
   *
   * @param useSiteTarget an optional [UseSiteTarget] that all annotations on this method should
   *        use.
   */
  fun allAnnotations(useSiteTarget: UseSiteTarget? = null): Collection {
    return ClassInspectorUtil.createAnnotations(
        useSiteTarget) {
      addAll(annotations)
      if (isSynthetic) {
        add(ClassInspectorUtil.JVM_SYNTHETIC_SPEC)
      }
      addAll(jvmModifiers.map { it.annotationSpec() })
      exceptions.takeIf { it.isNotEmpty() }
          ?.let {
            add(ClassInspectorUtil.createThrowsSpec(it, useSiteTarget))
          }
    }
  }
  companion object {
    val SYNTHETIC = MethodData(
        annotations = emptyList(),
        parameterAnnotations = emptyMap(),
        isSynthetic = true,
        jvmModifiers = emptySet(),
        isOverride = false,
        exceptions = emptyList()
    )
    val EMPTY = MethodData(
        annotations = emptyList(),
        parameterAnnotations = emptyMap(),
        isSynthetic = false,
        jvmModifiers = emptySet(),
        isOverride = false,
        exceptions = emptyList()
    )
  }
}
         © 2015 - 2025 Weber Informatics LLC | Privacy Policy