Skip to content

Commit

Permalink
Remove usage of project.group at task execution time
Browse files Browse the repository at this point in the history
This is required for compatibility with configuration cache.
  • Loading branch information
DennisTsar committed Jul 1, 2024
1 parent cabcb9e commit b56a57e
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,6 @@ fun Project.getSourceFilesWithRoots(platform: TargetPlatform<*>): Sequence<RootA
return project.getFilesWithRoots(platform) { sourceSet -> sourceSet.kotlin }
}

/**
* Using a [Project], get the fully qualified packages name, e.g. ".pages" -> "org.example.pages"
*/
fun Project.prefixQualifiedPackage(relPathMaybe: String): String {
return when {
relPathMaybe.startsWith('.') -> "${project.group}$relPathMaybe"
else -> relPathMaybe
}
}

private fun Project.getDependencyResultsFromConfiguration(configurationName: String): List<ResolvedDependencyResult> {
return configurations[configurationName].incoming.resolutionResult.allDependencies
.mapNotNull { it as? ResolvedDependencyResult }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,13 @@ class KobwebxMarkdownPlugin : Plugin<Project> {
processTask.configure {
resources.set(project.getResourceSources(jsTarget))
pagesPackage.set(kobwebBlock.pagesPackage)
projectGroup.set(project.group)
}
convertTask.configure {
resources.set(project.getResourceSources(jsTarget))
generatedMarkdownDir.set(processTask.map { it.getGenResDir().get() })
pagesPackage.set(kobwebBlock.pagesPackage)
projectGroup.set(project.group)
dependsOnMarkdownArtifact.set(
project.getJsDependencyResults().hasDependencyNamed("com.varabyte.kobwebx:kobwebx-markdown")
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.varabyte.kobweb.common.collect.TypedMap
import com.varabyte.kobweb.common.navigation.Route
import com.varabyte.kobweb.common.text.isSurrounded
import com.varabyte.kobweb.gradle.core.util.Reporter
import com.varabyte.kobweb.gradle.core.util.prefixQualifiedPackage
import com.varabyte.kobweb.project.common.PackageUtils
import com.varabyte.kobwebx.gradle.markdown.ext.kobwebcall.KobwebCall
import com.varabyte.kobwebx.gradle.markdown.ext.kobwebcall.KobwebCallBlock
import com.varabyte.kobwebx.gradle.markdown.ext.kobwebcall.KobwebCallBlockVisitor
Expand Down Expand Up @@ -43,7 +43,6 @@ import org.commonmark.node.StrongEmphasis
import org.commonmark.node.Text
import org.commonmark.node.ThematicBreak
import org.commonmark.renderer.Renderer
import org.gradle.api.Project
import org.gradle.api.provider.Provider
import java.util.*
import kotlin.io.path.Path
Expand All @@ -61,7 +60,6 @@ fun String.yamlStringToKotlinString(): String {
/**
* A markdown renderer that generates a Kobweb source file given an input markdown file.
*
* @property project The Gradle project that owns these markdown files.
* @property markdownNodeGetter A function that can be used to retrieve the AST for a given markdown file. This allows
* avoiding needing to do redundant parsing.
* @property defaultRoot The default root layout to use if not specified in the markdown file. If null, and no root is
Expand All @@ -71,17 +69,18 @@ fun String.yamlStringToKotlinString(): String {
* @property handlers A set of handlers that can be used to customize how different markdown nodes are rendered.
* @property pkg The package that the generated file should be placed in.
* @property funName The name of the page function that will be generated.
* @property projectGroup The group of the project, which is used to resolve package shortcuts
* @property reporter A reporter that can be used to log warnings and errors.
*/
class KotlinRenderer(
private val project: Project,
private val markdownNodeGetter: (path: String) -> Node?,
private val defaultRoot: String?,
private val imports: List<String>,
private val filePath: String,
private val handlers: MarkdownHandlers,
private val pkg: String,
private val funName: String,
private val projectGroup: String,
// If true, we have access to the `MarkdownContext` class and CompositionLocal
private val dependsOnMarkdownArtifact: Boolean,
private val reporter: Reporter,
Expand Down Expand Up @@ -112,7 +111,7 @@ class KotlinRenderer(
appendLine("import com.varabyte.kobwebx.markdown.*")
}
(imports + frontMatterData?.imports.orEmpty()).forEach { importPath ->
appendLine("import ${project.prefixQualifiedPackage(importPath)}")
appendLine("import ${PackageUtils.resolvePackageShortcut(projectGroup, importPath)}")
}

appendLine()
Expand Down Expand Up @@ -396,7 +395,7 @@ class KotlinRenderer(
override fun visit(customNode: CustomNode) {
when (customNode) {
is KobwebCall -> {
output.appendLine("$indent${customNode.toFqn(project)}")
output.appendLine("$indent${customNode.toFqn(projectGroup)}")
}

is TableHead -> visit(customNode)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.varabyte.kobwebx.gradle.markdown.ext.kobwebcall

import com.varabyte.kobweb.gradle.core.util.prefixQualifiedPackage
import com.varabyte.kobweb.project.common.PackageUtils
import org.commonmark.node.CustomNode
import org.gradle.api.Project

/**
* A block which represents a method call to insert into the final output.
Expand All @@ -24,9 +23,9 @@ class KobwebCall(val partiallyQualifiedName: String, var appendBrace: Boolean =
* * `.test` -> `org.example.myproject.test()`
* * `test()` -> `test()`
*/
fun toFqn(project: Project): String {
fun toFqn(projectGroup: String): String {
return buildString {
append(project.prefixQualifiedPackage(partiallyQualifiedName))
append(PackageUtils.resolvePackageShortcut(projectGroup, partiallyQualifiedName))
if (partiallyQualifiedName.last().isLetterOrDigit() && !appendBrace) {
append("()")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.varabyte.kobwebx.gradle.markdown.tasks

import com.varabyte.kobweb.gradle.core.util.LoggingReporter
import com.varabyte.kobweb.gradle.core.util.getBuildScripts
import com.varabyte.kobweb.gradle.core.util.prefixQualifiedPackage
import com.varabyte.kobweb.project.common.PackageUtils
import com.varabyte.kobwebx.gradle.markdown.KotlinRenderer
import com.varabyte.kobwebx.gradle.markdown.MarkdownBlock
import com.varabyte.kobwebx.gradle.markdown.MarkdownFeatures
Expand Down Expand Up @@ -53,8 +53,11 @@ abstract class ConvertMarkdownTask @Inject constructor(markdownBlock: MarkdownBl

@OutputDirectory
fun getGenDir(): Provider<Directory> {
return markdownBlock.getGenJsSrcRoot("convert").zip(pagesPackage) { genRoot, pagesPackage ->
genRoot.dir(project.prefixQualifiedPackage(pagesPackage).replace(".", "/"))
return markdownBlock.getGenJsSrcRoot("convert").flatMap { rootDir ->
val subDir = projectGroup.zip(pagesPackage) { group, pagesPackage ->
PackageUtils.resolvePackageShortcut(group.toString(), pagesPackage).replace(".", "/")
}
rootDir.dir(subDir)
}
}

Expand Down Expand Up @@ -84,14 +87,14 @@ abstract class ConvertMarkdownTask @Inject constructor(markdownBlock: MarkdownBl
val mdPackage = absolutePackageFor(packageParts)
val funName = funNameFor(mdFile)
val ktRenderer = KotlinRenderer(
project,
cache::getRelative,
markdownBlock.defaultRoot.orNull?.takeUnless { it.isBlank() },
markdownBlock.imports.get(),
mdPathRelStr,
markdownHandlers,
mdPackage,
funName,
projectGroup.get().toString(),
dependsOnMarkdownArtifact.get(),
LoggingReporter(logger),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.varabyte.kobwebx.gradle.markdown.tasks
import com.varabyte.kobweb.common.lang.packageConcat
import com.varabyte.kobweb.common.lang.toPackageName
import com.varabyte.kobweb.gradle.core.tasks.KobwebTask
import com.varabyte.kobweb.gradle.core.util.prefixQualifiedPackage
import com.varabyte.kobweb.project.common.PackageUtils
import com.varabyte.kobwebx.gradle.markdown.MarkdownBlock
import org.gradle.api.file.FileTree
import org.gradle.api.file.RelativePath
Expand All @@ -22,12 +22,13 @@ import kotlin.io.path.invariantSeparatorsPathString
abstract class MarkdownTask @Inject constructor(
@get:Internal protected val markdownBlock: MarkdownBlock,
desc: String
) :
KobwebTask(desc) {

) : KobwebTask(desc) {
@get:Input
abstract val pagesPackage: Property<String>

@get:Input
abstract val projectGroup: Property<Any>

private val rootPath get() = Path(markdownBlock.markdownPath.get())

@get:Internal
Expand Down Expand Up @@ -70,7 +71,8 @@ abstract class MarkdownTask @Inject constructor(
}

protected fun absolutePackageFor(packageParts: List<String>): String {
return project.prefixQualifiedPackage(
return PackageUtils.resolvePackageShortcut(
projectGroup.get().toString(),
pagesPackage.get().packageConcat(packageParts.joinToString("."))
)
}
Expand Down

0 comments on commit b56a57e

Please sign in to comment.