All Downloads are FREE. Search and download functionalities are using the official Maven repository.

foundry.gradle.dependencies.DependencyDelegate.kt Maven / Gradle / Ivy

/*
 * Copyright (C) 2022 Slack Technologies, LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package foundry.gradle.dependencies

import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty

@Suppress("TopLevelPropertyNaming") // Why is this a problem in detect? It's a static final constant
private val UNINITIALIZED_VALUE = Any()

internal infix fun DependencyDelegate.withComments(comments: String?): DependencyDelegate {
  return copy(comments = comments)
}

internal infix fun DependencyDelegate.noBom(comments: String?): DependencyDelegate {
  return copy(isBomManaged = false, comments = comments)
}

internal data class DependencyDelegate(
  private val group: String,
  private val artifact: String?,
  private val comments: String? = null,
  private val ext: String? = null,
  private val gradleProperty: String? = null,
  private val isBomManaged: Boolean = false,
) : ReadOnlyProperty {

  private var _definitionRef: Any = UNINITIALIZED_VALUE

  override fun getValue(thisRef: DependencyCollection, property: KProperty<*>): Any {
    return getOrCreateDef(property).coordinates
  }

  @Synchronized
  fun getOrCreateDef(property: KProperty<*>): DependencyDef {
    if (_definitionRef === UNINITIALIZED_VALUE) {
      val resolvedArtifact = artifact ?: property.name
      val gradleProperty = gradleProperty ?: computeVersionGradleProperty(resolvedArtifact)
      _definitionRef =
        DependencyDef(
          group = group,
          artifact = resolvedArtifact,
          comments = comments,
          ext = ext,
          gradleProperty = gradleProperty,
          isBomManaged = isBomManaged,
        )
    }
    return _definitionRef as DependencyDef
  }

  private fun computeVersionGradleProperty(resolvedArtifact: String): String {
    return "${DependencyCollection.GRADLE_PROPERTY_PREFIX}$resolvedArtifact"
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy