Skip to content

Commit

Permalink
Matching method/constructor calls on the individual parts
Browse files Browse the repository at this point in the history
  • Loading branch information
Strum355 committed Nov 29, 2020
1 parent 82722b5 commit 1d40071
Showing 1 changed file with 27 additions and 4 deletions.
31 changes: 27 additions & 4 deletions src/main/kotlin/lsifjava/ExternalDocs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,34 @@ class ExternalDocs(private val docPaths: List<Path>) {
private lateinit var classDecl: ClassTree

override fun visitMethod(node: MethodTree, p: Unit?): ExternalHoverMeta? {
(node as JCMethodDecl).sym ?: return null

if(node.sym.toString() == element.toString()) {
if(element !is Symbol.MethodSymbol) return null

if(element.owner.simpleName.toString() != classDecl.simpleName.toString())
return null

if(element.name.toString() != node.name.toString()) return null

if(element.name.toString() != "<init>" &&
element.returnType.toString() != node.returnType.toString()) return null

val paramsEqual = element.params.size == node.parameters.size &&
element.params.foldIndexed(true) { i, acc, sym ->
val paramType = (node.parameters[i] as JCVariableDecl).vartype
val defTypeName = when(paramType) {
is JCPrimitiveTypeTree -> paramType.toString()
is JCTypeApply -> paramType.clazz.toString()
is JCIdent -> paramType.toString()
else -> {
println("param type wasn't JCPrimitiveTypeTree|JCTypeApply|JCIdent, but ${paramType::class.java}")
return null
}
}
acc && sym.type.tsym.simpleName.toString() == defTypeName
}

if(paramsEqual) {
val doc = docs.getDocComment(currentPath) ?: return null
return ExternalHoverMeta(doc, node)
return ExternalHoverMeta(doc.trim(), node)
}

return null
Expand Down

0 comments on commit 1d40071

Please sign in to comment.