Skip to content

Commit 92b791e

Browse files
committed
Store symbol visibilities in index
1 parent c5fcacb commit 92b791e

File tree

4 files changed

+71
-5
lines changed

4 files changed

+71
-5
lines changed

server/src/main/kotlin/org/javacs/kt/completion/Completions.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ private fun indexCompletionItems(parsedFile: KtFile, index: SymbolIndex, partial
101101
Symbol.Kind.ENUM_MEMBER -> CompletionItemKind.EnumMember
102102
Symbol.Kind.CONSTRUCTOR -> CompletionItemKind.Constructor
103103
Symbol.Kind.FIELD -> CompletionItemKind.Field
104+
Symbol.Kind.UNKNOWN -> CompletionItemKind.Text
104105
}
105106
detail = "(import from ${it.fqName.parent()})"
106107
val pos = findImportInsertionPosition(parsedFile, it.fqName)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.javacs.kt.index
2+
3+
import org.jetbrains.kotlin.descriptors.*
4+
5+
object ExtractSymbolVisibility : DeclarationDescriptorVisitor<Symbol.Visibility, Unit> {
6+
private fun convert(visibility: DescriptorVisibility): Symbol.Visibility = when (visibility.delegate) {
7+
Visibilities.PrivateToThis -> Symbol.Visibility.PRIAVTE_TO_THIS
8+
Visibilities.Private -> Symbol.Visibility.PRIVATE
9+
Visibilities.Internal -> Symbol.Visibility.INTERNAL
10+
Visibilities.Protected -> Symbol.Visibility.PROTECTED
11+
Visibilities.Public -> Symbol.Visibility.PUBLIC
12+
else -> Symbol.Visibility.UNKNOWN
13+
}
14+
15+
override fun visitPropertySetterDescriptor(desc: PropertySetterDescriptor, nothing: Unit?) = convert(desc.visibility)
16+
17+
override fun visitConstructorDescriptor(desc: ConstructorDescriptor, nothing: Unit?) = convert(desc.visibility)
18+
19+
override fun visitReceiverParameterDescriptor(desc: ReceiverParameterDescriptor, nothing: Unit?) = convert(desc.visibility)
20+
21+
override fun visitPackageViewDescriptor(desc: PackageViewDescriptor, nothing: Unit?) = Symbol.Visibility.PUBLIC
22+
23+
override fun visitFunctionDescriptor(desc: FunctionDescriptor, nothing: Unit?) = convert(desc.visibility)
24+
25+
override fun visitModuleDeclaration(desc: ModuleDescriptor, nothing: Unit?) = Symbol.Visibility.PUBLIC
26+
27+
override fun visitClassDescriptor(desc: ClassDescriptor, nothing: Unit?) = convert(desc.visibility)
28+
29+
override fun visitPackageFragmentDescriptor(desc: PackageFragmentDescriptor, nothing: Unit?) = Symbol.Visibility.PUBLIC
30+
31+
override fun visitValueParameterDescriptor(desc: ValueParameterDescriptor, nothing: Unit?) = convert(desc.visibility)
32+
33+
override fun visitTypeParameterDescriptor(desc: TypeParameterDescriptor, nothing: Unit?) = Symbol.Visibility.PUBLIC
34+
35+
override fun visitScriptDescriptor(desc: ScriptDescriptor, nothing: Unit?) = convert(desc.visibility)
36+
37+
override fun visitTypeAliasDescriptor(desc: TypeAliasDescriptor, nothing: Unit?) = convert(desc.visibility)
38+
39+
override fun visitPropertyGetterDescriptor(desc: PropertyGetterDescriptor, nothing: Unit?) = convert(desc.visibility)
40+
41+
override fun visitVariableDescriptor(desc: VariableDescriptor, nothing: Unit?) = convert(desc.visibility)
42+
43+
override fun visitPropertyDescriptor(desc: PropertyDescriptor, nothing: Unit?) = convert(desc.visibility)
44+
}

server/src/main/kotlin/org/javacs/kt/index/Symbol.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import org.jetbrains.kotlin.name.FqName
55
data class Symbol(
66
// TODO: Store location (e.g. using a URI)
77
val fqName: FqName,
8-
val kind: Kind
8+
val kind: Kind,
9+
val visibility: Visibility
910
) {
1011
enum class Kind(val rawValue: Int) {
1112
CLASS(0),
@@ -16,10 +17,24 @@ data class Symbol(
1617
ENUM(5),
1718
ENUM_MEMBER(6),
1819
CONSTRUCTOR(7),
19-
FIELD(8);
20+
FIELD(8),
21+
UNKNOWN(9);
2022

2123
companion object {
22-
fun fromRaw(rawValue: Int) = Kind.values().first { it.rawValue == rawValue }
24+
fun fromRaw(rawValue: Int) = Kind.values().firstOrNull { it.rawValue == rawValue } ?: Kind.UNKNOWN
25+
}
26+
}
27+
28+
enum class Visibility(val rawValue: Int) {
29+
PRIAVTE_TO_THIS(0),
30+
PRIVATE(1),
31+
INTERNAL(2),
32+
PROTECTED(3),
33+
PUBLIC(4),
34+
UNKNOWN(5);
35+
36+
companion object {
37+
fun fromRaw(rawValue: Int) = Visibility.values().firstOrNull { it.rawValue == rawValue } ?: Visibility.UNKNOWN
2338
}
2439
}
2540
}

server/src/main/kotlin/org/javacs/kt/index/SymbolIndex.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ import org.jetbrains.exposed.sql.insert
1616

1717
private object Symbols : Table() {
1818
val fqName = varchar("fqname", length = 255).primaryKey()
19-
val shortName = varchar("shortname", length = 127)
19+
val shortName = varchar("shortname", length = 80)
2020
val kind = integer("kind")
21+
val visibility = integer("visibility")
2122
}
2223

2324
/**
@@ -64,6 +65,7 @@ class SymbolIndex {
6465
it[fqName] = fqn.toString()
6566
it[shortName] = fqn.shortName().toString()
6667
it[kind] = descriptor.accept(ExtractSymbolKind, Unit).rawValue
68+
it[visibility] = descriptor.accept(ExtractSymbolVisibility, Unit).rawValue
6769
}
6870
}
6971
}
@@ -85,7 +87,11 @@ class SymbolIndex {
8587
Symbols
8688
.select { Symbols.shortName.like("$prefix%") }
8789
.limit(limit)
88-
.map { Symbol(FqName(it[Symbols.fqName]), Symbol.Kind.fromRaw(it[Symbols.kind])) }
90+
.map { Symbol(
91+
fqName = FqName(it[Symbols.fqName]),
92+
kind = Symbol.Kind.fromRaw(it[Symbols.kind]),
93+
visibility = Symbol.Visibility.fromRaw(it[Symbols.visibility])
94+
) }
8995
}
9096

9197
private fun allDescriptors(module: ModuleDescriptor): Collection<DeclarationDescriptor> = allPackages(module)

0 commit comments

Comments
 (0)