diff --git a/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/evaluator/DeclarativeSchemaRegistry.kt b/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/evaluator/DeclarativeSchemaRegistry.kt deleted file mode 100644 index 3bdd926fd551..000000000000 --- a/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/evaluator/DeclarativeSchemaRegistry.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2024 the original author or authors. - * - * 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 - * - * http://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 org.gradle.internal.declarativedsl.evaluator - -import org.gradle.api.Project -import org.gradle.declarative.dsl.schema.AnalysisSchema -import org.gradle.internal.declarativedsl.analysis.DefaultAnalysisSchema - - -interface DeclarativeSchemaRegistry { - - fun storeSchema(target: Any, identifier: String, schema: AnalysisSchema) - - fun projectSchema(): AnalysisSchema -} - - -internal -class DefaultDeclarativeSchemaRegistry : DeclarativeSchemaRegistry { - - private - val schemas: MutableMap, AnalysisSchema> = mutableMapOf() - - override fun storeSchema(target: Any, identifier: String, schema: AnalysisSchema) { - schemas[target to identifier] = schema - } - - override fun projectSchema(): AnalysisSchema { - schemas.forEach { - val target = it.key.first - val identifier = it.key.second - if (target is Project && identifier == "project") { - val schema = it.value - return schema - } - } - return DefaultAnalysisSchema.Empty - } -} diff --git a/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/evaluator/StoringInterpretationSchemaBuilder.kt b/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/evaluator/StoringInterpretationSchemaBuilder.kt index 3830bb43c3a9..67fbe9dcbd28 100644 --- a/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/evaluator/StoringInterpretationSchemaBuilder.kt +++ b/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/evaluator/StoringInterpretationSchemaBuilder.kt @@ -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 @@ -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)) @@ -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 diff --git a/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/project/ProjectSchema.kt b/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/project/ProjectSchema.kt index a77f12ed81ea..a69bf2d7bb1e 100644 --- a/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/project/ProjectSchema.kt +++ b/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/project/ProjectSchema.kt @@ -31,7 +31,6 @@ fun projectInterpretationSequence( ) = InterpretationSequence(listOf(SimpleInterpretationSequenceStep("project") { projectEvaluationSchema(softwareTypeRegistry) })) -private fun projectEvaluationSchema( softwareTypeRegistry: SoftwareTypeRegistry ): EvaluationSchema { diff --git a/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/provider/DeclarativeDslServiceRegistry.kt b/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/provider/DeclarativeDslServiceRegistry.kt index 42f5b8d8990c..e9554587ddbd 100644 --- a/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/provider/DeclarativeDslServiceRegistry.kt +++ b/platforms/core-configuration/declarative-dsl-provider/src/main/kotlin/org/gradle/internal/declarativedsl/provider/DeclarativeDslServiceRegistry.kt @@ -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 @@ -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() } diff --git a/platforms/core-configuration/declarative-dsl-tooling-builders/build.gradle.kts b/platforms/core-configuration/declarative-dsl-tooling-builders/build.gradle.kts index cf670c1f4084..3aa25b1646ac 100644 --- a/platforms/core-configuration/declarative-dsl-tooling-builders/build.gradle.kts +++ b/platforms/core-configuration/declarative-dsl-tooling-builders/build.gradle.kts @@ -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")) diff --git a/platforms/core-configuration/declarative-dsl-tooling-builders/src/crossVersionTest/groovy/org/gradle/declarative/dsl/tooling/builders/r89/DeclarativeDslToolingModelsCrossVersionTest.groovy b/platforms/core-configuration/declarative-dsl-tooling-builders/src/crossVersionTest/groovy/org/gradle/declarative/dsl/tooling/builders/r89/DeclarativeDslToolingModelsCrossVersionTest.groovy index 356d171798ef..0792c4978204 100644 --- a/platforms/core-configuration/declarative-dsl-tooling-builders/src/crossVersionTest/groovy/org/gradle/declarative/dsl/tooling/builders/r89/DeclarativeDslToolingModelsCrossVersionTest.groovy +++ b/platforms/core-configuration/declarative-dsl-tooling-builders/src/crossVersionTest/groovy/org/gradle/declarative/dsl/tooling/builders/r89/DeclarativeDslToolingModelsCrossVersionTest.groovy @@ -31,7 +31,7 @@ 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" @@ -39,7 +39,7 @@ class DeclarativeDslToolingModelsCrossVersionTest extends ToolingApiSpecificatio include(":b") """ - file("a/build.gradle.dcl") << "" + file("a/build.gradle.dcl") << " !%@ unpassable crappy crap" file("b/build.gradle.dcl") << "" diff --git a/platforms/core-configuration/declarative-dsl-tooling-builders/src/main/kotlin/org/gradle/declarative/dsl/tooling/builders/DeclarativeSchemaModelBuilder.kt b/platforms/core-configuration/declarative-dsl-tooling-builders/src/main/kotlin/org/gradle/declarative/dsl/tooling/builders/DeclarativeSchemaModelBuilder.kt index 4e6cd931f3fb..ed51414fcba5 100644 --- a/platforms/core-configuration/declarative-dsl-tooling-builders/src/main/kotlin/org/gradle/declarative/dsl/tooling/builders/DeclarativeSchemaModelBuilder.kt +++ b/platforms/core-configuration/declarative-dsl-tooling-builders/src/main/kotlin/org/gradle/declarative/dsl/tooling/builders/DeclarativeSchemaModelBuilder.kt @@ -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") + } } diff --git a/platforms/core-configuration/declarative-dsl-tooling-builders/src/main/kotlin/org/gradle/declarative/dsl/tooling/builders/internal/ToolingModelServices.kt b/platforms/core-configuration/declarative-dsl-tooling-builders/src/main/kotlin/org/gradle/declarative/dsl/tooling/builders/internal/ToolingModelServices.kt index 3520a07495ca..d04a99fa8f74 100644 --- a/platforms/core-configuration/declarative-dsl-tooling-builders/src/main/kotlin/org/gradle/declarative/dsl/tooling/builders/internal/ToolingModelServices.kt +++ b/platforms/core-configuration/declarative-dsl-tooling-builders/src/main/kotlin/org/gradle/declarative/dsl/tooling/builders/internal/ToolingModelServices.kt @@ -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 @@ -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)) } } }