Skip to content

Commit d80de6c

Browse files
Fix Psi types
Picked from kotlin-community-tools/kotlin-language-server#8 Co-authored-by: Alexandros Alexiou <[email protected]>
1 parent bc5a1e6 commit d80de6c

File tree

4 files changed

+16
-27
lines changed

4 files changed

+16
-27
lines changed

detekt_baseline.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<SmellBaseline>
33
<ManuallySuppressedIssues></ManuallySuppressedIssues>
44
<CurrentIssues>
5-
<ID>ComplexCondition:SemanticTokens.kt$element is KtVariableDeclaration &amp;&amp; (!element.isVar() || element.hasModifier(KtTokens.CONST_KEYWORD)) || element is KtParameter</ID>
5+
<ID>ComplexCondition:SemanticTokens.kt$element is KtVariableDeclaration &amp;&amp; (!element.isVar || element.hasModifier(KtTokens.CONST_KEYWORD)) || element is KtParameter</ID>
66
<ID>CyclomaticComplexMethod:Completions.kt$private fun elementCompletions(file: CompiledFile, cursor: Int, surroundingElement: KtElement): Sequence&lt;DeclarationDescriptor&gt;</ID>
77
<ID>CyclomaticComplexMethod:Completions.kt$private fun indexCompletionItems(file: CompiledFile, cursor: Int, element: KtElement?, index: SymbolIndex, partial: String): Sequence&lt;CompletionItem&gt;</ID>
88
<ID>CyclomaticComplexMethod:GoToDefinition.kt$fun goToDefinition( file: CompiledFile, cursor: Int, classContentProvider: ClassContentProvider, tempDir: TemporaryDirectory, config: ExternalSourcesConfiguration, cp: CompilerClassPath ): Location?</ID>

server/src/main/kotlin/org/javacs/kt/semantictokens/SemanticTokens.kt

+8-16
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,16 @@ import org.jetbrains.kotlin.psi.KtFunction
2020
import org.jetbrains.kotlin.psi.KtModifierListOwner
2121
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
2222
import org.jetbrains.kotlin.psi.KtVariableDeclaration
23-
import org.jetbrains.kotlin.psi.KtNamedDeclaration
2423
import org.jetbrains.kotlin.psi.KtProperty
2524
import org.jetbrains.kotlin.psi.KtParameter
2625
import org.jetbrains.kotlin.psi.KtEnumEntry
27-
import org.jetbrains.kotlin.psi.KtStringTemplateEntry
28-
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
2926
import org.jetbrains.kotlin.psi.KtSimpleNameStringTemplateEntry
30-
import org.jetbrains.kotlin.psi.KtBlockStringTemplateEntry
31-
import org.jetbrains.kotlin.psi.KtEscapeStringTemplateEntry
3227
import org.jetbrains.kotlin.resolve.BindingContext
3328
import com.intellij.psi.PsiElement
3429
import com.intellij.psi.PsiNameIdentifierOwner
3530
import com.intellij.psi.PsiLiteralExpression
36-
import com.intellij.psi.PsiType
3731
import com.intellij.openapi.util.TextRange
32+
import com.intellij.psi.PsiTypes
3833

3934
enum class SemanticTokenType(val typeName: String) {
4035
KEYWORD(SemanticTokenTypes.Keyword),
@@ -62,8 +57,8 @@ enum class SemanticTokenModifier(val modifierName: String) {
6257
}
6358

6459
val semanticTokensLegend = SemanticTokensLegend(
65-
SemanticTokenType.values().map { it.typeName },
66-
SemanticTokenModifier.values().map { it.modifierName }
60+
SemanticTokenType.entries.map { it.typeName },
61+
SemanticTokenModifier.entries.map { it.modifierName }
6762
)
6863

6964
data class SemanticToken(val range: Range, val type: SemanticTokenType, val modifiers: Set<SemanticTokenModifier> = setOf())
@@ -119,7 +114,7 @@ private fun elementTokens(element: PsiElement, bindingContext: BindingContext, r
119114
// TODO: Ideally we would like to cut-off subtrees outside our range, but this doesn't quite seem to work
120115
// .preOrderTraversal { elem -> textRange?.let { it.contains(elem.textRange) } ?: true }
121116
.preOrderTraversal()
122-
.filter { elem -> textRange?.let { it.contains(elem.textRange) } ?: true }
117+
.filter { elem -> textRange?.contains(elem.textRange) ?: true }
123118
.mapNotNull { elementToken(it, bindingContext) }
124119
}
125120

@@ -129,7 +124,6 @@ private fun elementToken(element: PsiElement, bindingContext: BindingContext): S
129124

130125
return when (element) {
131126
// References (variables, types, functions, ...)
132-
133127
is KtNameReferenceExpression -> {
134128
val target = bindingContext[BindingContext.REFERENCE_TARGET, element]
135129
val tokenType = when (target) {
@@ -158,7 +152,6 @@ private fun elementToken(element: PsiElement, bindingContext: BindingContext): S
158152
}
159153

160154
// Declarations (variables, types, functions, ...)
161-
162155
is PsiNameIdentifierOwner -> {
163156
val tokenType = when (element) {
164157
is KtParameter -> SemanticTokenType.PARAMETER
@@ -172,7 +165,7 @@ private fun elementToken(element: PsiElement, bindingContext: BindingContext): S
172165
val identifierRange = element.nameIdentifier?.let { range(file.text, it.textRange) } ?: return null
173166
val modifiers = mutableSetOf(SemanticTokenModifier.DECLARATION)
174167

175-
if (element is KtVariableDeclaration && (!element.isVar() || element.hasModifier(KtTokens.CONST_KEYWORD)) || element is KtParameter) {
168+
if (element is KtVariableDeclaration && (!element.isVar || element.hasModifier(KtTokens.CONST_KEYWORD)) || element is KtParameter) {
176169
modifiers.add(SemanticTokenModifier.READONLY)
177170
}
178171

@@ -186,14 +179,13 @@ private fun elementToken(element: PsiElement, bindingContext: BindingContext): S
186179
}
187180

188181
// Literals and string interpolations
189-
190182
is KtSimpleNameStringTemplateEntry ->
191183
SemanticToken(elementRange, SemanticTokenType.INTERPOLATION_ENTRY)
192184
is PsiLiteralExpression -> {
193185
val tokenType = when (element.type) {
194-
PsiType.INT, PsiType.LONG, PsiType.DOUBLE -> SemanticTokenType.NUMBER
195-
PsiType.CHAR -> SemanticTokenType.STRING
196-
PsiType.BOOLEAN, PsiType.NULL -> SemanticTokenType.KEYWORD
186+
PsiTypes.intType(), PsiTypes.longType(), PsiTypes.doubleType() -> SemanticTokenType.NUMBER
187+
PsiTypes.charType() -> SemanticTokenType.STRING
188+
PsiTypes.booleanType(), PsiTypes.nullType() -> SemanticTokenType.KEYWORD
197189
else -> return null
198190
}
199191
SemanticToken(elementRange, tokenType)

server/src/test/kotlin/org/javacs/kt/OneFilePerformance.kt

+5-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.javacs.kt
22

33
import org.javacs.kt.util.LoggingMessageCollector
4-
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
54
import org.jetbrains.kotlin.cli.jvm.compiler.CliBindingTrace
65
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
76
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
@@ -15,7 +14,6 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
1514
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
1615
import org.jetbrains.kotlin.psi.KtElement
1716
import org.jetbrains.kotlin.psi.KtFile
18-
import org.jetbrains.kotlin.psi.KtPsiFactory
1917
import org.jetbrains.kotlin.resolve.BindingTraceContext
2018
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer
2119
import org.jetbrains.kotlin.resolve.TopDownAnalysisMode
@@ -33,17 +31,16 @@ import java.nio.charset.StandardCharsets
3331
class OneFilePerformance {
3432
@State(Scope.Thread)
3533
class ReusableParts : Closeable {
36-
internal var config = CompilerConfiguration()
34+
private var config = CompilerConfiguration()
3735
init {
3836
config.put(CommonConfigurationKeys.MODULE_NAME, JvmProtoBufUtil.DEFAULT_MODULE_NAME)
39-
config.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, LoggingMessageCollector)
37+
config.put(CommonConfigurationKeys.MESSAGE_COLLECTOR_KEY, LoggingMessageCollector)
4038
}
41-
internal val disposable = Disposer.newDisposable()
42-
internal var env = KotlinCoreEnvironment.createForProduction(
39+
private val disposable = Disposer.newDisposable()
40+
private var env = KotlinCoreEnvironment.createForProduction(
4341
disposable, config, EnvironmentConfigFiles.JVM_CONFIG_FILES
4442
)
45-
internal var parser = KtPsiFactory(env.project)
46-
internal var fileSystem = VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL)
43+
private var fileSystem = VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL)
4744
internal var bigFile = openFile("/kotlinCompilerPerformance/BigFile.kt")
4845

4946
internal fun openFile(resourcePath: String?): KtFile {

server/src/test/kotlin/org/javacs/kt/OverrideMemberTest.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ class OverrideMemberTest : SingleFileTestFixture("overridemember", "OverrideMemb
114114
"override fun isInterrupted(): Boolean { }",
115115
"override fun countStackFrames(): Int { }",
116116
"override fun getContextClassLoader(): ClassLoader { }",
117-
"override fun setContextClassLoader(cl: ClassLoader) { }",
117+
"override fun setContextClassLoader(p0: ClassLoader) { }",
118118
"override fun getStackTrace(): (Array<(StackTraceElement..StackTraceElement?)>..Array<out (StackTraceElement..StackTraceElement?)>) { }",
119119
"override fun getId(): Long { }",
120120
"override fun getState(): State { }",
@@ -133,7 +133,7 @@ class OverrideMemberTest : SingleFileTestFixture("overridemember", "OverrideMemb
133133
padding + "override fun isInterrupted(): Boolean { }",
134134
padding + "override fun countStackFrames(): Int { }",
135135
padding + "override fun getContextClassLoader(): ClassLoader { }",
136-
padding + "override fun setContextClassLoader(cl: ClassLoader) { }",
136+
padding + "override fun setContextClassLoader(p0: ClassLoader) { }",
137137
padding + "override fun getStackTrace(): (Array<(StackTraceElement..StackTraceElement?)>..Array<out (StackTraceElement..StackTraceElement?)>) { }",
138138
padding + "override fun getId(): Long { }",
139139
padding + "override fun getState(): State { }",

0 commit comments

Comments
 (0)