From f0def9ea66856b233a92986b432e1266df5fee40 Mon Sep 17 00:00:00 2001 From: Lorenzo Addazi Date: Thu, 7 Mar 2024 18:15:54 +0100 Subject: [PATCH] fix: fixes Some reference properties are skipped during the indexing process #68 Signed-off-by: Lorenzo Addazi --- library/build.gradle.kts | 2 +- .../kolasu/languageserver/KolasuServer.kt | 27 ++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/library/build.gradle.kts b/library/build.gradle.kts index 2e93dab..0ea7ae4 100644 --- a/library/build.gradle.kts +++ b/library/build.gradle.kts @@ -13,7 +13,7 @@ repositories { dependencies { implementation("org.jetbrains.kotlin:kotlin-reflect:1.5.21") - implementation("com.strumenta.kolasu:kolasu-core:1.5.31") + implementation("com.strumenta.kolasu:kolasu-core:1.5.45") implementation("org.eclipse.lsp4j:org.eclipse.lsp4j:0.21.1") implementation("org.apache.lucene:lucene-core:9.8.0") } diff --git a/library/src/main/kotlin/com/strumenta/kolasu/languageserver/KolasuServer.kt b/library/src/main/kotlin/com/strumenta/kolasu/languageserver/KolasuServer.kt index 1610c08..58bc385 100644 --- a/library/src/main/kotlin/com/strumenta/kolasu/languageserver/KolasuServer.kt +++ b/library/src/main/kotlin/com/strumenta/kolasu/languageserver/KolasuServer.kt @@ -6,6 +6,7 @@ import com.strumenta.kolasu.model.Point import com.strumenta.kolasu.model.PossiblyNamed import com.strumenta.kolasu.model.ReferenceByName import com.strumenta.kolasu.model.children +import com.strumenta.kolasu.model.kReferenceByNameProperties import com.strumenta.kolasu.parsing.ASTParser import com.strumenta.kolasu.parsing.ParsingResult import com.strumenta.kolasu.traversing.findByPosition @@ -240,15 +241,23 @@ open class KolasuServer(protected open val parser: ASTParser?, prot if (node is PossiblyNamed && node.name != null) { document.add(StringField("name", node.name, Field.Store.YES)) - } else { - val referenceField = node::class.declaredMemberProperties.find { it.returnType.isSubtypeOf(typeOf>()) } - referenceField?.javaField?.let { field -> - field.isAccessible = true - val value = field.get(node) as ReferenceByName<*> - - if (value.referred is Node && uuid[value.referred as Node] != null) { - document.add(StringField("reference", uuid[value.referred as Node], Field.Store.YES)) - } + } + + // handle reference by name properties + node.kReferenceByNameProperties() + .mapNotNull { it.get(node) as? ReferenceByName<*> } + .mapNotNull { it.referred as? Node } + .mapNotNull { uuid[it] } + .map { StringField("reference", it, Field.Store.YES) } + .forEach(document::add) + + val referenceField = node::class.declaredMemberProperties.find { it.returnType.isSubtypeOf(typeOf>()) } + referenceField?.javaField?.let { field -> + field.isAccessible = true + val value = field.get(node) as ReferenceByName<*> + + if (value.referred is Node && uuid[value.referred as Node] != null) { + document.add(StringField("reference", uuid[value.referred as Node], Field.Store.YES)) } }