Skip to content

Commit a3a13d0

Browse files
author
Ernald Nicolas
committed
Touchups
1 parent a951863 commit a3a13d0

File tree

8 files changed

+78
-82
lines changed

8 files changed

+78
-82
lines changed

semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/AnalyzerCheckers.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.sourcegraph.semanticdb_kotlinc
22

3-
import org.jetbrains.kotlin.KtSourceFile
3+
import java.nio.file.Files
44
import java.nio.file.Path
5+
import java.nio.file.Paths
56
import kotlin.contracts.ExperimentalContracts
7+
import org.jetbrains.kotlin.KtSourceFile
68
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
79
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
810
import org.jetbrains.kotlin.fir.FirSession
@@ -35,8 +37,6 @@ import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
3537
import org.jetbrains.kotlin.psi.KtDeclaration
3638
import org.jetbrains.kotlin.resolve.checkers.DeclarationChecker
3739
import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext
38-
import java.nio.file.Files
39-
import java.nio.file.Paths
4040

4141
class AnalyzerCheckers(session: FirSession) : FirAdditionalCheckersExtension(session) {
4242
companion object {
@@ -122,7 +122,9 @@ class AnalyzerCheckers(session: FirSession) : FirAdditionalCheckersExtension(ses
122122
val relative = sourceRoot.relativize(normalizedPath)
123123
val filename = relative.fileName.toString() + ".semanticdb"
124124
val semanticdbOutPath =
125-
session.diTransformerService.targetroot
125+
session
126+
.diTransformerService
127+
.targetroot
126128
.resolve("META-INF")
127129
.resolve("semanticdb")
128130
.resolve(relative)
@@ -279,7 +281,7 @@ class AnalyzerCheckers(session: FirSession) : FirAdditionalCheckersExtension(ses
279281
}
280282
}
281283

282-
//private fun FirElement.findKtFile(): KtSourceFile? = source?.psi?.containingFile as? KtSourceFile
284+
// private fun FirElement.findKtFile(): KtSourceFile? = source?.psi?.containingFile as? KtSourceFile
283285

284286
/*
285287
KtObjectDeclaration -> FirRegularClassChecker

semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/AnalyzerRegistrar.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.sourcegraph.semanticdb_kotlinc
22

3-
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
43
import kotlin.contracts.ExperimentalContracts
4+
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
55
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
66
import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
77
import org.jetbrains.kotlin.config.CompilerConfiguration
@@ -28,10 +28,11 @@ class AnalyzerRegistrar(private val callback: (Semanticdb.TextDocument) -> Unit
2828
sourceroot = configuration[KEY_SOURCES]!!,
2929
targetroot = configuration[KEY_TARGET]!!,
3030
callback = callback))
31-
IrGenerationExtension.registerExtension(PostAnalysisExtension(
32-
sourceRoot = configuration[KEY_SOURCES]!!,
33-
targetRoot = configuration[KEY_TARGET]!!,
34-
callback = callback))
31+
IrGenerationExtension.registerExtension(
32+
PostAnalysisExtension(
33+
sourceRoot = configuration[KEY_SOURCES]!!,
34+
targetRoot = configuration[KEY_TARGET]!!,
35+
callback = callback))
3536
}
3637

3738
override val supportsK2: Boolean

semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/LineMap.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.sourcegraph.semanticdb_kotlinc
22

33
import org.jetbrains.kotlin.KtSourceElement
44
import org.jetbrains.kotlin.com.intellij.navigation.NavigationItem
5-
import org.jetbrains.kotlin.com.intellij.psi.PsiElement
65
import org.jetbrains.kotlin.fir.declarations.FirFile
76
import org.jetbrains.kotlin.psi.KtPropertyAccessor
87
import org.jetbrains.kotlin.text

semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/PostAnalysisExtension.kt

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
package com.sourcegraph.semanticdb_kotlinc
22

3-
import org.jetbrains.kotlin.KtSourceFile
4-
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
5-
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
6-
import org.jetbrains.kotlin.fir.FirSession
7-
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
83
import java.nio.file.Files
94
import java.nio.file.Path
105
import java.nio.file.Paths
116
import kotlin.contracts.ExperimentalContracts
7+
import org.jetbrains.kotlin.KtSourceFile
8+
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
9+
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
10+
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
1211

1312
class PostAnalysisExtension(
1413
private val sourceRoot: Path,
1514
private val targetRoot: Path,
16-
private val callback: (Semanticdb.TextDocument) -> Unit): IrGenerationExtension {
15+
private val callback: (Semanticdb.TextDocument) -> Unit
16+
) : IrGenerationExtension {
1717
@OptIn(ExperimentalContracts::class)
1818
override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) {
1919
println("Ernald - generate - count:${AnalyzerCheckers.visitors.size}")
@@ -30,20 +30,21 @@ class PostAnalysisExtension(
3030
callback(document)
3131
println("Ernald - callback6")
3232
}
33-
// AnalyzerCheckers.visitors.forEach { (ktSourceFile, visitor) -> {
34-
// println("Ernald - callback1")
35-
// val document = visitor.build()
36-
// println("Ernald - callback2")
37-
// semanticdbOutPathForFile(ktSourceFile)?.apply {
38-
// println("Ernald - callback3")
39-
// Files.write(this, TextDocuments { addDocuments(document) }.toByteArray())
40-
// println("Ernald - callback4")
41-
// }
42-
// println("Ernald - callback5")
43-
// callback(document)
44-
// println("Ernald - callback6")
45-
// }
46-
// }
33+
// AnalyzerCheckers.visitors.forEach { (ktSourceFile, visitor) -> {
34+
// println("Ernald - callback1")
35+
// val document = visitor.build()
36+
// println("Ernald - callback2")
37+
// semanticdbOutPathForFile(ktSourceFile)?.apply {
38+
// println("Ernald - callback3")
39+
// Files.write(this, TextDocuments { addDocuments(document)
40+
// }.toByteArray())
41+
// println("Ernald - callback4")
42+
// }
43+
// println("Ernald - callback5")
44+
// callback(document)
45+
// println("Ernald - callback6")
46+
// }
47+
// }
4748
}
4849

4950
private fun semanticdbOutPathForFile(file: KtSourceFile): Path? {

semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/SemanticdbTextDocumentBuilder.kt

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
package com.sourcegraph.semanticdb_kotlinc
22

33
import com.sourcegraph.semanticdb_kotlinc.Semanticdb.SymbolOccurrence.Role
4-
import org.jetbrains.kotlin.KtLightSourceElement
5-
import org.jetbrains.kotlin.KtNodeTypes
6-
import org.jetbrains.kotlin.KtSourceElement
7-
import org.jetbrains.kotlin.KtSourceFile
8-
import org.jetbrains.kotlin.com.intellij.lang.LighterASTNode
94
import java.lang.IllegalArgumentException
105
import java.lang.StringBuilder
116
import java.nio.file.Path
127
import java.nio.file.Paths
138
import java.security.MessageDigest
149
import kotlin.contracts.ExperimentalContracts
15-
import kotlin.text.Charsets.UTF_8
10+
import org.jetbrains.kotlin.KtLightSourceElement
11+
import org.jetbrains.kotlin.KtSourceElement
12+
import org.jetbrains.kotlin.KtSourceFile
13+
import org.jetbrains.kotlin.com.intellij.lang.LighterASTNode
1614
import org.jetbrains.kotlin.com.intellij.lang.java.JavaLanguage
1715
import org.jetbrains.kotlin.com.intellij.navigation.NavigationItem
1816
import org.jetbrains.kotlin.com.intellij.openapi.util.Ref
@@ -25,7 +23,6 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
2523
import org.jetbrains.kotlin.fir.declarations.utils.isOverride
2624
import org.jetbrains.kotlin.fir.psi
2725
import org.jetbrains.kotlin.fir.render
28-
import org.jetbrains.kotlin.fir.renderWithType
2926
import org.jetbrains.kotlin.fir.resolve.toSymbol
3027
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
3128
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
@@ -38,10 +35,6 @@ import org.jetbrains.kotlin.fir.types.coneTypeSafe
3835
import org.jetbrains.kotlin.idea.KotlinLanguage
3936
import org.jetbrains.kotlin.lexer.KtTokens
4037
import org.jetbrains.kotlin.psi
41-
import org.jetbrains.kotlin.psi.KtConstructor
42-
import org.jetbrains.kotlin.psi.KtDeclaration
43-
import org.jetbrains.kotlin.psi.KtFile
44-
import org.jetbrains.kotlin.psi.KtPrimaryConstructor
4538
import org.jetbrains.kotlin.psi.KtPropertyAccessor
4639
import org.jetbrains.kotlin.text
4740

@@ -73,13 +66,14 @@ class SemanticdbTextDocumentBuilder(
7366
element: KtSourceElement,
7467
role: Role
7568
) {
76-
symbolOccurrence(symbol, element, role)?.let {
77-
if(!occurrences.contains(it)) {
69+
symbolOccurrence(symbol, element, role)?.let {
70+
if (!occurrences.contains(it)) {
7871
occurrences.add(it)
7972
}
8073
}
8174
val symbolInformation = symbolInformation(firBasedSymbol, symbol, element)
82-
if (role == Role.DEFINITION && !symbols.contains(symbolInformation)) symbols.add(symbolInformation)
75+
if (role == Role.DEFINITION && !symbols.contains(symbolInformation))
76+
symbols.add(symbolInformation)
8377
}
8478

8579
private val isIgnoredSuperClass =
@@ -170,8 +164,7 @@ class SemanticdbTextDocumentBuilder(
170164
when (element.psi?.language ?: KotlinLanguage.INSTANCE) {
171165
is KotlinLanguage -> Semanticdb.Language.KOTLIN
172166
is JavaLanguage -> Semanticdb.Language.JAVA
173-
else ->
174-
throw IllegalArgumentException("unexpected language")
167+
else -> throw IllegalArgumentException("unexpected language")
175168
}
176169
}
177170
}
@@ -209,27 +202,35 @@ class SemanticdbTextDocumentBuilder(
209202
}
210203

211204
private fun semanticdbMD5(): String =
212-
MessageDigest.getInstance("MD5").digest(file.getContentsAsStream().readBytes()).joinToString("") {
213-
"%02X".format(it)
214-
}
205+
MessageDigest.getInstance("MD5")
206+
.digest(file.getContentsAsStream().readBytes())
207+
.joinToString("") { "%02X".format(it) }
215208

216-
private fun semanticdbDocumentation(element: FirElement, source: KtSourceElement): Semanticdb.Documentation =
217-
Documentation {
209+
private fun semanticdbDocumentation(
210+
element: FirElement,
211+
source: KtSourceElement
212+
): Semanticdb.Documentation = Documentation {
218213
format = Semanticdb.Documentation.Format.MARKDOWN
219214
val renderOutput = element.render()
220215
val kdoc = getKDocFromKtLightSourceElement(source as? KtLightSourceElement) ?: ""
221216
message = "```\n$renderOutput\n```\n${stripKDocAsterisks(kdoc)}"
222217
}
223218

224-
private fun getKDocFromKtLightSourceElement(lightSourceElement: KtLightSourceElement?): String? {
219+
private fun getKDocFromKtLightSourceElement(
220+
lightSourceElement: KtLightSourceElement?
221+
): String? {
225222
if (lightSourceElement == null) return null
226223
val tree = lightSourceElement.treeStructure // FlyweightCapableTreeStructure<LighterASTNode>
227-
val node = lightSourceElement.lighterASTNode // LighterASTNode, the root of the element's structure
224+
val node =
225+
lightSourceElement.lighterASTNode // LighterASTNode, the root of the element's structure
228226
return findKDoc(tree, node)
229227
}
230228

231229
// Helper function to find the KDoc node in the AST
232-
private fun findKDoc(tree: FlyweightCapableTreeStructure<LighterASTNode>, node: LighterASTNode): String? {
230+
private fun findKDoc(
231+
tree: FlyweightCapableTreeStructure<LighterASTNode>,
232+
node: LighterASTNode
233+
): String? {
233234
// Recursively traverse the light tree to find a DOC_COMMENT node
234235
val kidsRef = Ref<Array<LighterASTNode?>>()
235236
tree.getChildren(node, kidsRef)

semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/SemanticdbVisitor.kt

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package com.sourcegraph.semanticdb_kotlinc
22

33
import com.sourcegraph.semanticdb_kotlinc.Semanticdb.SymbolOccurrence.Role
4-
import org.jetbrains.kotlin.KtSourceElement
5-
import org.jetbrains.kotlin.KtSourceFile
64
import java.nio.file.Path
75
import kotlin.contracts.ExperimentalContracts
8-
import org.jetbrains.kotlin.com.intellij.psi.PsiElement
6+
import org.jetbrains.kotlin.KtSourceElement
7+
import org.jetbrains.kotlin.KtSourceFile
98
import org.jetbrains.kotlin.fir.declarations.FirClass
109
import org.jetbrains.kotlin.fir.declarations.FirConstructor
11-
import org.jetbrains.kotlin.fir.declarations.FirFile
1210
import org.jetbrains.kotlin.fir.declarations.FirFunction
1311
import org.jetbrains.kotlin.fir.declarations.FirProperty
1412
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
@@ -18,7 +16,6 @@ import org.jetbrains.kotlin.fir.declarations.FirValueParameter
1816
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
1917
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
2018
import org.jetbrains.kotlin.psi.*
21-
import org.jetbrains.kotlin.psi.psiUtil.containingClass
2219

2320
@ExperimentalContracts
2421
class SemanticdbVisitor(
@@ -60,18 +57,11 @@ class SemanticdbVisitor(
6057
fun visitPrimaryConstructor(firConstructor: FirConstructor, source: KtSourceElement) {
6158
// if the constructor is not denoted by the 'constructor' keyword, we want to link it to the
6259
// class ident
63-
cache[firConstructor.symbol]
64-
.with(firConstructor.symbol)
65-
.emitAll(source, Role.DEFINITION)
60+
cache[firConstructor.symbol].with(firConstructor.symbol).emitAll(source, Role.DEFINITION)
6661
}
6762

68-
fun visitSecondaryConstructor(
69-
firConstructor: FirConstructor,
70-
source: KtSourceElement
71-
) {
72-
cache[firConstructor.symbol]
73-
.with(firConstructor.symbol)
74-
.emitAll(source, Role.DEFINITION)
63+
fun visitSecondaryConstructor(firConstructor: FirConstructor, source: KtSourceElement) {
64+
cache[firConstructor.symbol].with(firConstructor.symbol).emitAll(source, Role.DEFINITION)
7565
}
7666

7767
fun visitNamedFunction(firFunction: FirFunction, source: KtSourceElement) {
@@ -96,10 +86,7 @@ class SemanticdbVisitor(
9686
cache[firTypeAlias.symbol].with(firTypeAlias.symbol).emitAll(source, Role.DEFINITION)
9787
}
9888

99-
fun visitPropertyAccessor(
100-
firPropertyAccessor: FirPropertyAccessor,
101-
source: KtSourceElement
102-
) {
89+
fun visitPropertyAccessor(firPropertyAccessor: FirPropertyAccessor, source: KtSourceElement) {
10390
cache[firPropertyAccessor.symbol]
10491
.with(firPropertyAccessor.symbol)
10592
.emitAll(source, Role.DEFINITION)

semanticdb-kotlinc/src/main/kotlin/com/sourcegraph/semanticdb_kotlinc/SymbolsCache.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,10 @@ import kotlin.contracts.contract
99
import org.jetbrains.kotlin.descriptors.*
1010
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.isLocalMember
1111
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol
12-
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingSymbol
1312
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
1413
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
1514
import org.jetbrains.kotlin.fir.declarations.FirFunction
1615
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
17-
import org.jetbrains.kotlin.fir.declarations.utils.isSynthetic
1816
import org.jetbrains.kotlin.fir.declarations.utils.nameOrSpecialName
1917
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
2018
import org.jetbrains.kotlin.fir.resolve.providers.getContainingFile
@@ -72,7 +70,7 @@ class GlobalSymbolsCache(testing: Boolean = false) : Iterable<Symbol> {
7270
if (symbol is FirPropertySymbol) {
7371
if (symbol.fir.getter?.origin is FirDeclarationOrigin.Synthetic)
7472
emitSymbols(symbol.fir.getter!!.symbol, locals)
75-
if (symbol.fir.getter?.origin is FirDeclarationOrigin.Synthetic)
73+
if (symbol.fir.setter?.origin is FirDeclarationOrigin.Synthetic)
7674
emitSymbols(symbol.fir.setter!!.symbol, locals)
7775
}
7876
}
@@ -134,7 +132,14 @@ class GlobalSymbolsCache(testing: Boolean = false) : Iterable<Symbol> {
134132
@OptIn(SymbolInternals::class)
135133
private fun getParentSymbol(symbol: FirBasedSymbol<*>): FirBasedSymbol<*>? {
136134
val session = symbol.fir.moduleData.session
137-
return symbol.getContainingClassSymbol(session)?: (symbol as? FirBasedSymbol<*>)?.let { session.firProvider.getContainingFile(it)?.symbol }
135+
return symbol.getContainingClassSymbol(session)
136+
?: (symbol as? FirBasedSymbol<*>)?.let {
137+
try {
138+
session.firProvider.getContainingFile(it)?.symbol
139+
} catch (ex: IllegalStateException) {
140+
null
141+
}
142+
}
138143
}
139144

140145
/**

semanticdb-kotlinc/src/test/kotlin/com/sourcegraph/semanticdb_kotlinc/test/AnalyzerTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,11 @@ import org.intellij.lang.annotations.Language
2222
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
2323
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
2424
import org.jetbrains.kotlin.com.intellij.openapi.Disposable
25-
import org.jetbrains.kotlin.com.intellij.openapi.util.Disposer
2625
import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
2726
import org.jetbrains.kotlin.config.CompilerConfiguration
2827
import org.jetbrains.kotlin.config.JVMConfigurationKeys
2928
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
3029
import org.jetbrains.kotlin.config.languageVersionSettings
31-
import org.jetbrains.kotlin.psi.KtPsiFactory
3230
import org.junit.jupiter.api.io.TempDir
3331

3432
@OptIn(ExperimentalCompilerApi::class)
@@ -52,7 +50,8 @@ class AnalyzerTest {
5250
val result =
5351
KotlinCompilation()
5452
.apply {
55-
// sources = listOf(SourceFile.kotlin(source.name, source.text))
53+
// sources = listOf(SourceFile.kotlin(source.name,
54+
// source.text))
5655
sources = listOf(source)
5756
compilerPluginRegistrars = listOf(AnalyzerRegistrar { document = it })
5857
verbose = true
@@ -116,7 +115,8 @@ class AnalyzerTest {
116115
documentation =
117116
Documentation {
118117
format = Semanticdb.Documentation.Format.MARKDOWN
119-
message = "```\npublic constructor(): R|sample/Banana| {\n super<R|kotlin/Any|>()\n}\n\n```\n"
118+
message =
119+
"```\npublic constructor(): R|sample/Banana| {\n super<R|kotlin/Any|>()\n}\n\n```\n"
120120
}
121121
},
122122
SymbolInformation {

0 commit comments

Comments
 (0)