Skip to content

Commit

Permalink
Build the project schema model before the configuration phase (gradle…
Browse files Browse the repository at this point in the history
  • Loading branch information
jbartok committed May 15, 2024
2 parents bc39c72 + 4e5476d commit 86a0620
Show file tree
Hide file tree
Showing 8 changed files with 24 additions and 77 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@

package org.gradle.internal.declarativedsl.evaluator

import org.gradle.internal.declarativedsl.serialization.SchemaSerialization
import org.gradle.api.Project
import org.gradle.api.initialization.Settings
import org.gradle.declarative.dsl.schema.AnalysisSchema
import org.gradle.internal.declarativedsl.evaluationSchema.EvaluationSchema
import org.gradle.internal.declarativedsl.evaluationSchema.InterpretationSequence
import org.gradle.internal.declarativedsl.evaluationSchema.InterpretationSequenceStep
import org.gradle.internal.declarativedsl.serialization.SchemaSerialization
import java.io.File


Expand All @@ -33,7 +33,6 @@ import java.io.File
internal
class StoringInterpretationSchemaBuilder(
private val schemaBuilder: InterpretationSchemaBuilder,
private val declarativeSchemaRegistry: DeclarativeSchemaRegistry
) : InterpretationSchemaBuilder {
override fun getEvaluationSchemaForScript(targetInstance: Any, scriptContext: RestrictedScriptContext): InterpretationSchemaBuildingResult =
addSerializationToSteps(targetInstance, schemaBuilder.getEvaluationSchemaForScript(targetInstance, scriptContext))
Expand All @@ -56,8 +55,6 @@ class StoringInterpretationSchemaBuilder(
val file = schemaFile(targetInstance, identifier)
file.parentFile.mkdirs()
file.writeText(SchemaSerialization.schemaToJsonString(analysisSchema))

declarativeSchemaRegistry.storeSchema(targetInstance, identifier, analysisSchema)
}

private
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ fun projectInterpretationSequence(
) = InterpretationSequence(listOf(SimpleInterpretationSequenceStep("project") { projectEvaluationSchema(softwareTypeRegistry) }))


private
fun projectEvaluationSchema(
softwareTypeRegistry: SoftwareTypeRegistry
): EvaluationSchema {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@
package org.gradle.internal.declarativedsl.provider

import org.gradle.internal.declarativedsl.evaluator.DeclarativeKotlinScriptEvaluator
import org.gradle.internal.declarativedsl.evaluator.DeclarativeSchemaRegistry
import org.gradle.internal.declarativedsl.evaluator.DefaultDeclarativeKotlinScriptEvaluator
import org.gradle.internal.declarativedsl.evaluator.DefaultDeclarativeSchemaRegistry
import org.gradle.internal.declarativedsl.evaluator.DefaultInterpretationSchemaBuilder
import org.gradle.internal.declarativedsl.evaluator.StoringInterpretationSchemaBuilder
import org.gradle.internal.service.ServiceRegistration
Expand All @@ -39,13 +37,9 @@ object BuildServices {

@Suppress("unused")
fun createDeclarativeKotlinScriptEvaluator(
softwareTypeRegistry: SoftwareTypeRegistry,
schemaRegistry: DeclarativeSchemaRegistry
softwareTypeRegistry: SoftwareTypeRegistry
): DeclarativeKotlinScriptEvaluator {
val schemaBuilder = StoringInterpretationSchemaBuilder(DefaultInterpretationSchemaBuilder(softwareTypeRegistry), schemaRegistry)
val schemaBuilder = StoringInterpretationSchemaBuilder(DefaultInterpretationSchemaBuilder(softwareTypeRegistry))
return DefaultDeclarativeKotlinScriptEvaluator(schemaBuilder)
}

@Suppress("unused")
fun createSchemaRegistry(): DeclarativeSchemaRegistry = DefaultDeclarativeSchemaRegistry()
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ description = "Declarative DSL Tooling Builders for IDEs"

dependencies {
api(project(":base-services"))
api(project(":core"))
api(project(":core-api"))
api(project(":declarative-dsl-provider"))

api(libs.futureKotlin("stdlib"))

implementation(project(":core"))
implementation(project(":declarative-dsl-provider"))
implementation(project(":declarative-dsl-tooling-models"))

crossVersionTestDistributionRuntimeOnly(project(":distributions-basics"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ class DeclarativeDslToolingModelsCrossVersionTest extends ToolingApiSpecificatio
settingsFile.delete() //we are using a declarative settings file
}

def 'can obtain model containing project schema'() {
def 'can obtain model containing project schema, even in the presence of errors in project scripts'() {
given:
file("settings.gradle.dcl") << """
rootProject.name = "test"
include(":a")
include(":b")
"""

file("a/build.gradle.dcl") << ""
file("a/build.gradle.dcl") << " !%@ unpassable crappy crap"

file("b/build.gradle.dcl") << ""

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,27 @@ package org.gradle.declarative.dsl.tooling.builders
import org.gradle.api.Project
import org.gradle.declarative.dsl.schema.AnalysisSchema
import org.gradle.declarative.dsl.tooling.models.DeclarativeSchemaModel
import org.gradle.internal.declarativedsl.evaluator.DeclarativeSchemaRegistry
import org.gradle.internal.build.BuildState
import org.gradle.internal.declarativedsl.project.projectEvaluationSchema
import org.gradle.plugin.software.internal.SoftwareTypeRegistry
import org.gradle.tooling.provider.model.ToolingModelBuilder
import org.gradle.tooling.provider.model.internal.BuildScopeModelBuilder
import java.io.Serializable


class DeclarativeSchemaModelBuilder(private val registry: DeclarativeSchemaRegistry) : ToolingModelBuilder {
class DeclarativeSchemaModelBuilder(private val softwareTypeRegistry: SoftwareTypeRegistry) : ToolingModelBuilder, BuildScopeModelBuilder {

override fun create(target: BuildState?): Any {
val schema = projectEvaluationSchema(softwareTypeRegistry).analysisSchema
return DefaultDeclarativeSchemaModel(schema)
}

override fun canBuild(modelName: String): Boolean =
modelName == "org.gradle.declarative.dsl.tooling.models.DeclarativeSchemaModel"

override fun buildAll(modelName: String, project: Project): Any =
DefaultDeclarativeSchemaModel(registry.projectSchema())
override fun buildAll(modelName: String, project: Project): Any {
error("Model should be built before the configuration phase")
}
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
package org.gradle.declarative.dsl.tooling.builders.internal

import org.gradle.declarative.dsl.tooling.builders.DeclarativeSchemaModelBuilder
import org.gradle.internal.declarativedsl.evaluator.DeclarativeSchemaRegistry
import org.gradle.internal.service.ServiceRegistration
import org.gradle.internal.service.scopes.AbstractPluginServiceRegistry
import org.gradle.plugin.software.internal.SoftwareTypeRegistry
import org.gradle.tooling.provider.model.internal.BuildScopeToolingModelBuilderRegistryAction


Expand All @@ -35,9 +35,9 @@ internal
object BuildScopeToolingServices {

@Suppress("unused")
fun createIdeBuildScopeToolingModelBuilderRegistryAction(declarativeSchemaRegistry: DeclarativeSchemaRegistry): BuildScopeToolingModelBuilderRegistryAction {
fun createIdeBuildScopeToolingModelBuilderRegistryAction(softwareTypeRegistry: SoftwareTypeRegistry): BuildScopeToolingModelBuilderRegistryAction {
return BuildScopeToolingModelBuilderRegistryAction {
it.register(DeclarativeSchemaModelBuilder(declarativeSchemaRegistry))
it.register(DeclarativeSchemaModelBuilder(softwareTypeRegistry))
}
}
}

0 comments on commit 86a0620

Please sign in to comment.