Skip to content

Commit 847dee3

Browse files
author
Henry Fraser
authored
Merge branch 'fwcd:main' into main
2 parents c464055 + 7be5ca3 commit 847dee3

File tree

8 files changed

+92
-11
lines changed

8 files changed

+92
-11
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
projectVersion=1.3.2
2-
kotlinVersion=1.6.10
2+
kotlinVersion=1.8.10
33
exposedVersion=0.37.3
44
lsp4jVersion=0.15.0
55
javaVersion=11

server/src/main/kotlin/org/javacs/kt/compiler/Compiler.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
@file:OptIn(ExperimentalCompilerApi::class)
2+
@file:Suppress("DEPRECATION")
3+
14
package org.javacs.kt.compiler
25

36
import com.intellij.lang.Language
@@ -67,6 +70,8 @@ import org.jetbrains.kotlin.cli.jvm.compiler.CliBindingTrace
6770
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
6871
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
6972
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
73+
import org.jetbrains.kotlin.cli.jvm.config.configureJdkClasspathRoots
74+
import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
7075
import org.jetbrains.kotlin.config.*
7176
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
7277
import org.jetbrains.kotlin.samWithReceiver.CliSamWithReceiverComponentContributor
@@ -111,6 +116,9 @@ private class CompilationEnvironment(
111116
add(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, ScriptingCompilerConfigurationComponentRegistrar())
112117
put(JVMConfigurationKeys.USE_PSI_CLASS_FILES_READING, true)
113118

119+
// configure jvm runtime classpaths
120+
configureJdkClasspathRoots()
121+
114122
addJvmClasspathRoots(classPath.map { it.toFile() })
115123
addJavaSourceRoots(javaSourcePath.map { it.toFile() })
116124

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,13 @@ import org.jetbrains.kotlin.builtins.isFunctionType
99
import org.jetbrains.kotlin.renderer.ClassifierNamePolicy
1010
import org.jetbrains.kotlin.renderer.DescriptorRenderer
1111
import org.jetbrains.kotlin.renderer.ParameterNameRenderingPolicy
12-
import org.jetbrains.kotlin.types.ErrorUtils
13-
import org.jetbrains.kotlin.types.UnresolvedType
1412

1513
val DECL_RENDERER = DescriptorRenderer.withOptions {
1614
withDefinedIn = false
1715
modifiers = emptySet()
1816
classifierNamePolicy = ClassifierNamePolicy.SHORT
1917
parameterNameRenderingPolicy = ParameterNameRenderingPolicy.ONLY_NON_SYNTHESIZED
20-
typeNormalizer = {
21-
when (it) {
22-
is UnresolvedType -> ErrorUtils.createErrorTypeWithCustomDebugName(it.presentableName)
23-
else -> it
24-
}
25-
}
18+
typeNormalizer = { it -> it }
2619
}
2720

2821
private val GOOD_IDENTIFIER = Regex("[a-zA-Z]\\w*")

server/src/main/kotlin/org/javacs/kt/hover/Hovers.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.javacs.kt.completion.DECL_RENDERER
2020
import org.javacs.kt.position.position
2121
import org.javacs.kt.util.findParent
2222
import org.javacs.kt.signaturehelp.getDocString
23+
import org.jetbrains.kotlin.utils.IDEAPluginsCompatibilityAPI
2324

2425
fun hoverAt(file: CompiledFile, cursor: Int): Hover? {
2526
val (ref, target) = file.referenceAtPoint(cursor) ?: return typeHoverAt(file, cursor)
@@ -67,6 +68,7 @@ private fun renderJavaDoc(text: String): String {
6768
}.joinToString("\n")
6869
}
6970

71+
@OptIn(IDEAPluginsCompatibilityAPI::class)
7072
private fun renderTypeOf(element: KtExpression, bindingContext: BindingContext): String? {
7173
if (element is KtCallableDeclaration) {
7274
val descriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, element]

server/src/main/kotlin/org/javacs/kt/imports/Imports.kt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package org.javacs.kt.imports
33
import org.eclipse.lsp4j.Position
44
import org.eclipse.lsp4j.Range
55
import org.eclipse.lsp4j.TextEdit
6+
import org.jetbrains.kotlin.lexer.KtKeywordToken
7+
import org.jetbrains.kotlin.lexer.KtTokens
68
import org.jetbrains.kotlin.name.FqName
79
import org.jetbrains.kotlin.psi.*
810
import org.javacs.kt.position.location
@@ -15,7 +17,7 @@ fun getImportTextEditEntry(parsedFile: KtFile, fqName: FqName): TextEdit {
1517

1618
val pos = findImportInsertionPosition(parsedFile, fqName)
1719
val prefix = if (importedNames.isEmpty()) "\n\n" else "\n"
18-
return TextEdit(Range(pos, pos), "${prefix}import ${fqName}")
20+
return TextEdit(Range(pos, pos), "${prefix}import ${backtickBultins(fqName)}")
1921
}
2022

2123
/** Finds a good insertion position for a new import of the given fully-qualified name. */
@@ -36,3 +38,25 @@ private fun matchingPrefixLength(left: FqName, right: FqName): Int =
3638
left.pathSegments().asSequence().zip(right.pathSegments().asSequence())
3739
.takeWhile { it.first == it.second }
3840
.count()
41+
42+
private fun backtickBultins(fqName: FqName): String {
43+
val builtInKeywords = (KtTokens.SOFT_KEYWORDS.getTypes() + KtTokens.KEYWORDS.getTypes())
44+
.asSequence()
45+
.mapNotNull { (it as? KtKeywordToken)?.value }
46+
var result = fqName.asString()
47+
for (builtin in builtInKeywords) {
48+
if (result.contains(builtin)) {
49+
// need to go through each part to handle words
50+
// that are part of other words (e.g, as and class)
51+
result = result.split('.').map {
52+
if (builtin == it) {
53+
"`$builtin`"
54+
} else {
55+
it
56+
}
57+
}.joinToString(".")
58+
}
59+
}
60+
61+
return result
62+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package org.javacs.kt
2+
3+
import org.javacs.kt.imports.getImportTextEditEntry
4+
import org.jetbrains.kotlin.name.FqName
5+
import org.hamcrest.Matchers.*
6+
import org.junit.Assert.assertThat
7+
import org.junit.Test
8+
9+
class ImportTextEditTest : SingleFileTestFixture("imports", "Simple.kt") {
10+
11+
@Test
12+
fun `should return normal import name`() {
13+
val ktFile = languageServer.sourcePath.parsedFile(workspaceRoot.resolve(file).toUri())
14+
val importName = FqName("org.jetbrains.kotlin.name.FqName")
15+
val result = getImportTextEditEntry(ktFile, importName)
16+
17+
assertThat(result.range, equalTo(range(1, 23, 1, 23)))
18+
assertThat(result.newText, equalTo("\n\nimport org.jetbrains.kotlin.name.FqName"))
19+
}
20+
21+
@Test
22+
fun `should wrap -class- in backticks`() {
23+
val ktFile = languageServer.sourcePath.parsedFile(workspaceRoot.resolve(file).toUri())
24+
val importName = FqName("com.class.myMethod")
25+
val result = getImportTextEditEntry(ktFile, importName)
26+
27+
assertThat(result.range, equalTo(range(1, 23, 1, 23)))
28+
assertThat(result.newText, equalTo("\n\nimport com.`class`.myMethod"))
29+
}
30+
31+
@Test
32+
fun `should wrap -fun- in backticks`() {
33+
val ktFile = languageServer.sourcePath.parsedFile(workspaceRoot.resolve(file).toUri())
34+
val importName = FqName("com.fun.myMethod")
35+
val result = getImportTextEditEntry(ktFile, importName)
36+
37+
assertThat(result.range, equalTo(range(1, 23, 1, 23)))
38+
assertThat(result.newText, equalTo("\n\nimport com.`fun`.myMethod"))
39+
}
40+
41+
@Test
42+
fun `should wrap multiple built in keywords in backticks`() {
43+
val ktFile = languageServer.sourcePath.parsedFile(workspaceRoot.resolve(file).toUri())
44+
val importName = FqName("fun.class.someother.package.method.var.val")
45+
val result = getImportTextEditEntry(ktFile, importName)
46+
47+
assertThat(result.range, equalTo(range(1, 23, 1, 23)))
48+
assertThat(result.newText, equalTo("\n\nimport `fun`.`class`.someother.`package`.method.`var`.`val`"))
49+
}
50+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import org.jetbrains.kotlin.psi.KtPsiFactory
1919
import org.jetbrains.kotlin.resolve.BindingTraceContext
2020
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer
2121
import org.jetbrains.kotlin.resolve.TopDownAnalysisMode
22-
import org.jetbrains.kotlin.resolve.calls.callUtil.getParentResolvedCall
2322
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfoFactory
23+
import org.jetbrains.kotlin.resolve.calls.util.getParentResolvedCall
2424
import org.junit.Test
2525
import org.openjdk.jmh.annotations.*
2626
import org.openjdk.jmh.runner.Runner
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package test.mypackage
2+
3+
4+
val something = 1

0 commit comments

Comments
 (0)