Skip to content

Commit 4daa67c

Browse files
committed
Fix list property support for settings
1 parent d1abd3c commit 4daa67c

File tree

3 files changed

+46
-7
lines changed

3 files changed

+46
-7
lines changed

lsp/src/main/kotlin/org/gradle/declarative/lsp/extension/AnalysisSchemaExtensions.kt

+23-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package org.gradle.declarative.lsp.extension
22

3-
import org.gradle.declarative.dsl.schema.*
3+
import org.gradle.declarative.dsl.schema.AnalysisSchema
4+
import org.gradle.declarative.dsl.schema.DataClass
5+
import org.gradle.declarative.dsl.schema.DataTopLevelFunction
6+
import org.gradle.declarative.dsl.schema.DataType
7+
import org.gradle.declarative.dsl.schema.DataTypeRef
8+
import org.gradle.declarative.dsl.schema.EnumClass
9+
import org.gradle.declarative.dsl.schema.FqName
410
import org.gradle.internal.declarativedsl.analysis.DefaultAnalysisSchema
511
import org.gradle.internal.declarativedsl.analysis.DefaultDataClass
612
import org.gradle.internal.declarativedsl.analysis.DefaultEnumClass
@@ -73,7 +79,7 @@ else {
7379
enumTypes.first().javaTypeName,
7480
enumTypes.flatMap { it.entryNames }.distinct()
7581
)
76-
82+
7783
schemas.flatMap { it.dataClassTypesByFqName.values }.groupBy { it.name }
7884
.mapValues { (_, dataClasses) ->
7985
when {
@@ -95,8 +101,20 @@ else {
95101

96102
val newExternalFunctionsByFqName = run {
97103
val mergedResult = mutableMapOf<FqName, DataTopLevelFunction>()
98-
schemas.forEach {
99-
mergedResult.putAll(it.externalFunctionsByFqName)
104+
schemas.forEach { schema ->
105+
mergedResult.putAll(schema.externalFunctionsByFqName)
106+
}
107+
mergedResult
108+
}
109+
110+
val genericInstantiationsByFqName = run {
111+
val mergedResult = mutableMapOf<FqName, Map<List<DataType.ParameterizedTypeInstance.TypeArgument>, DataType.ClassDataType>>()
112+
schemas.forEach { schema ->
113+
schema.genericInstantiationsByFqName.forEach { instantiation ->
114+
mergedResult.merge(instantiation.key, instantiation.value) { oldVal, newVal ->
115+
oldVal + newVal // TODO: is this correct?
116+
}
117+
}
100118
}
101119
mergedResult
102120
}
@@ -105,7 +123,7 @@ else {
105123
newTopLevelReceiver,
106124
dataClassesByFqName,
107125
emptyMap(),
108-
emptyMap(),
126+
genericInstantiationsByFqName,
109127
newExternalFunctionsByFqName,
110128
emptyMap(),
111129
emptySet()

lsp/src/test/kotlin/org/gradle/declarative/lsp/service/AbstractDeclarativeTextDocumentServiceTest.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ abstract class AbstractDeclarativeTextDocumentServiceTest {
9393

9494
@Suppress("LongMethod")
9595
private fun setupGradleBuild(dir: File): DeclarativeResourcesModel {
96-
val androidEcosystemPluginVersion = "0.1.40"
96+
val androidEcosystemPluginVersion = "0.1.41"
9797
settingsFile.writeText(
9898
"""
9999
pluginManagement {
@@ -156,6 +156,7 @@ abstract class AbstractDeclarativeTextDocumentServiceTest {
156156
enabled = true
157157
}
158158
}
159+
debug { }
159160
}
160161
}
161162
}

lsp/src/test/kotlin/org/gradle/declarative/lsp/service/DeclarativeTextDocumentServiceForSettingsScriptsTest.kt

+21-1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,26 @@ class DeclarativeTextDocumentServiceForSettingsScriptsTest: AbstractDeclarativeT
7373
)
7474
}
7575

76-
// TODO: test for list properties
76+
@Test
77+
fun `code completion inside block with list properties`() {
78+
openFile(script())
79+
80+
assertEquals(
81+
" debug { }",
82+
script().readLines()[60]
83+
)
84+
85+
assertCompletion(
86+
script(), 60, 21, """
87+
|baselineProfile { this: BaselineProfile } --> baselineProfile {${'\n'}|${'\t'}${'$'}0${'\n'}|}
88+
|defaultProguardFiles = listOf(vararg elements: ProguardFile) --> defaultProguardFiles = listOf(${'$'}1)${'$'}0
89+
|dependencies { this: AndroidLibraryDependencies } --> dependencies {${'\n'}|${'\t'}${'$'}0${'\n'}|}
90+
|minify { this: Minify } --> minify {${'\n'}|${'\t'}${'$'}0${'\n'}|}
91+
|proguardFile(arg0: String) --> proguardFile("${'$'}{1}")${'$'}0
92+
|proguardFiles = listOf(vararg elements: ProguardFile) --> proguardFiles = listOf(${'$'}1)${'$'}0
93+
""".trimMargin()
94+
)
95+
// TODO: why is the name for the parameter in the "proguardFile(String)" function not "name" as in the source?
96+
}
7797

7898
}

0 commit comments

Comments
 (0)