Skip to content

Commit

Permalink
Add some fixes for interpreting KTS as DCL (needs custom Gradle libs)
Browse files Browse the repository at this point in the history
* Identify the software type block using the DCL libs instead of ad-hoc logic

* Recognize `build.gradle.kts` as a document file
  • Loading branch information
h0tk3y committed Oct 15, 2024
1 parent 8d5c4fe commit 15f5991
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,12 @@ private static Pair<File, List<File>> getDeclarativeBuildFiles(BuildController c
.getProjects()
.getAll()
.stream()
.map(p -> new File(p.getProjectDirectory(), "build.gradle.dcl"))
.flatMap(p ->
Stream.of(
new File(p.getProjectDirectory(), "build.gradle.kts"),
new File(p.getProjectDirectory(), "build.gradle.dcl")
)
)
.filter(File::exists).collect(Collectors.toList());
if (declarativeBuildFiles.isEmpty()) {
throw new RuntimeException("No declarative project file found");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,16 @@ import org.gradle.internal.declarativedsl.dom.DocumentNodeContainer
import org.gradle.internal.declarativedsl.dom.DocumentResolution.ElementResolution.SuccessfulElementResolution
import org.gradle.internal.declarativedsl.dom.resolution.DocumentResolutionContainer

val DeclarativeDocument.singleSoftwareTypeNode: ElementNode?
get() = content.filterIsInstance<ElementNode>().singleOrNull()
fun DeclarativeDocument.singleNodeNamed(name: String): ElementNode? =
content.filterIsInstance<ElementNode>().singleOrNull { it.name == name }


fun DocumentNodeContainer.childElementNodes(
resolutionContainer: DocumentResolutionContainer,
function: SchemaFunction
): List<ElementNode> =
content.filterIsInstance<ElementNode>().filter {
val resolution = resolutionContainer.data(it)
content.filterIsInstance<ElementNode>().filter {
val resolution = resolutionContainer.data(it)
(resolution as? SuccessfulElementResolution)?.elementFactoryFunction == function
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import org.gradle.client.ui.theme.spacing
import org.gradle.internal.declarativedsl.dom.data.collectToMap
import org.gradle.internal.declarativedsl.dom.operations.overlay.OverlayNodeOrigin.FromOverlay
import org.gradle.internal.declarativedsl.evaluator.main.AnalysisDocumentUtils.resolvedDocument
import org.gradle.internal.declarativedsl.evaluator.main.AnalysisDocumentUtils.usedSoftwareTypeNames
import org.gradle.internal.declarativedsl.evaluator.runner.stepResultOrPartialResult
import org.gradle.tooling.BuildAction
import org.jetbrains.skiko.Cursor
Expand Down Expand Up @@ -110,11 +111,17 @@ class GetDeclarativeDocuments : GetModelAction.GetCompositeModelAction<ResolvedD

val projectAnalysisSchema = projectEvaluationSchema.analysisSchema

val softwareTypeNode = viewModel.fullModelDom?.document?.singleSoftwareTypeNode
?: run {
Text("No software type")
return
}
val singleSoftwareType =
viewModel.selectedDocumentResult.stepResults.values.singleOrNull()
?.stepResultOrPartialResult?.usedSoftwareTypeNames()
?.singleOrNull()

val softwareTypeNode = singleSoftwareType?.let { softwareType ->
viewModel.fullModelDom?.document?.singleNodeNamed(softwareType)
} ?: run {
Text("No software type")
return
}

val softwareTypeSchema = projectAnalysisSchema.softwareTypeNamed(softwareTypeNode.name)
?: run {
Expand Down

0 comments on commit 15f5991

Please sign in to comment.