Skip to content

Commit 03c5137

Browse files
committed
Some more cleanup around source JAR URIs
1 parent 10838fc commit 03c5137

File tree

4 files changed

+21
-29
lines changed

4 files changed

+21
-29
lines changed

server/src/main/kotlin/org/javacs/kt/URIContentProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class URIContentProvider(
1717
) {
1818
fun contentOf(uri: URI): String = when (uri.scheme) {
1919
"file" -> Paths.get(uri).toFile().readText()
20-
"kls" -> uri.toKlsURI()?.let { jarClassContentProvider.contentOf(it, it.source).second }
20+
"kls" -> uri.toKlsURI()?.let { jarClassContentProvider.contentOf(it).second }
2121
?: throw KotlinLSException("Could not find ${uri}")
2222
else -> throw KotlinLSException("Unrecognized scheme ${uri.scheme}")
2323
}

server/src/main/kotlin/org/javacs/kt/definition/GoToDefinition.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ fun goToDefinition(
4848
val sourceURI = getSourceURI(rawClassURI, compilerClassPath)
4949
val actualClassURI = sourceURI ?: rawClassURI
5050
parseURI(actualClassURI).toKlsURI()?.let { klsURI ->
51-
val (klsSourceURI, content) = jarClassContentProvider.contentOf(klsURI, sourceURI != null)
51+
val (klsSourceURI, content) = jarClassContentProvider.contentOf(klsURI)
5252

5353
if (config.useKlsScheme) {
5454
// Defer decompilation until a jarClassContents request is sent

server/src/main/kotlin/org/javacs/kt/externalsources/JarClassContentProvider.kt

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,17 @@ class JarClassContentProvider(
3333
* contents.
3434
* If the file is inside a source JAR, the source code is returned as is.
3535
*/
36-
public fun contentOf(uri: KlsURI, source: Boolean): Pair<KlsURI, String> {
36+
public fun contentOf(uri: KlsURI): Pair<KlsURI, String> {
3737
val key = uri.toString()
3838
val (contents, extension) = cachedContents[key] ?: run {
3939
LOG.info("Finding contents of {}", describeURI(uri.fileUri))
40-
tryReadContentOf(uri, source)
41-
?: tryReadContentOf(uri.withFileExtension("class"), source)
42-
?: tryReadContentOf(uri.withFileExtension("java"), source)
43-
?: tryReadContentOf(uri.withFileExtension("kt"), source)
40+
tryReadContentOf(uri)
41+
?: tryReadContentOf(uri.withFileExtension("class"))
42+
?: tryReadContentOf(uri.withFileExtension("java"))
43+
?: tryReadContentOf(uri.withFileExtension("kt"))
4444
?: throw KotlinLSException("Could not find $uri")
45-
}.also {
46-
cachedContents[key] = Pair(it.first, it.second)
47-
}
48-
val sourceURI = uri.withFileExtension(extension).withSource(source)
45+
}.also { cachedContents[key] = it }
46+
val sourceURI = uri.withFileExtension(extension)
4947
return Pair(sourceURI, contents)
5048
}
5149

@@ -55,17 +53,16 @@ class JarClassContentProvider(
5553
javaCode
5654
}
5755

58-
private fun tryReadContentOf(uri: KlsURI, source: Boolean): Pair<String, String>? = try {
59-
val actualUri = uri.withoutQuery()
60-
when (actualUri.fileExtension) {
61-
"class" -> Pair(actualUri.extractToTemporaryFile(tempDir)
56+
private fun tryReadContentOf(uri: KlsURI): Pair<String, String>? = try {
57+
when (uri.fileExtension) {
58+
"class" -> Pair(uri.extractToTemporaryFile(tempDir)
6259
.let(decompiler::decompileClass)
6360
.let { Files.newInputStream(it) }
6461
.bufferedReader()
6562
.use(BufferedReader::readText)
6663
.let(this::convertToKotlinIfNeeded), if (config.autoConvertToKotlin) "kt" else "java")
67-
"java" -> if (source) Pair(actualUri.readContents(), "java") else Pair(convertToKotlinIfNeeded(actualUri.readContents()), "kt")
68-
else -> Pair(actualUri.readContents(), "kt") // e.g. for Kotlin source files
64+
"java" -> if (uri.source) Pair(uri.readContents(), "java") else Pair(convertToKotlinIfNeeded(uri.readContents()), "kt")
65+
else -> Pair(uri.readContents(), "kt") // e.g. for Kotlin source files
6966
}
7067
} catch (e: FileNotFoundException) { null }
7168
}

server/src/main/kotlin/org/javacs/kt/externalsources/KlsURI.kt

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@ fun URI.toKlsURI(): KlsURI? = when (scheme) {
2828
* which case the file will directly be used without invoking the decompiler.
2929
*/
3030
data class KlsURI(val fileUri: URI, val query: Map<QueryParam, Any>) {
31-
32-
/**
33-
* Possible KLS URI query parameters
34-
*/
31+
/** Possible KLS URI query parameters. */
3532
enum class QueryParam(val parameterName: String) {
3633
SOURCE("source");
3734

@@ -44,8 +41,6 @@ data class KlsURI(val fileUri: URI, val query: Map<QueryParam, Any>) {
4441
}
4542
}
4643

47-
constructor(uri: URI) : this(parseKlsURIFileURI(uri), parseKlsURIQuery(uri))
48-
4944
val fileName: String
5045
get() = fileUri.toString().substringAfterLast("/")
5146
val fileExtension: String?
@@ -59,10 +54,12 @@ data class KlsURI(val fileUri: URI, val query: Map<QueryParam, Any>) {
5954
val isCompiled: Boolean
6055
get() = fileExtension == "class"
6156

57+
constructor(uri: URI) : this(parseKlsURIFileURI(uri), parseKlsURIQuery(uri))
58+
6259
fun withFileExtension(newExtension: String): KlsURI {
63-
val (parentURI, fileName) = uri.toString().partitionAroundLast("/")
64-
val newURI = "$parentURI${fileName.split(".").first()}.$newExtension"
65-
return KlsURI(URI(newURI), query)
60+
val (parentUri, fileName) = fileUri.toString().partitionAroundLast("/")
61+
val newUri = URI("$parentUri${fileName.split(".").first()}.$newExtension")
62+
return KlsURI(newUri, query)
6663
}
6764

6865
fun withSource(source: Boolean): KlsURI {
@@ -72,9 +69,7 @@ data class KlsURI(val fileUri: URI, val query: Map<QueryParam, Any>) {
7269
return KlsURI(fileUri, newQuery)
7370
}
7471

75-
fun withoutQuery(): KlsURI {
76-
return KlsURI(fileUri, mapOf())
77-
}
72+
fun withoutQuery(): KlsURI = KlsURI(fileUri, mapOf())
7873

7974
fun toFileURI(): URI = URI(uri.schemeSpecificPart)
8075

0 commit comments

Comments
 (0)