2017-11-22 2 views
1

Ich habe diese sehr einfache Intellij Idee Plugin, die einige Referenzausdrücke faltet erstellt. Es funktioniert hervorragend für Java-Dateien, aber es funktioniert nicht für Kotlin.Make Intellij Idee Plugin arbeiten mit Kotlin-Dateien

Hier ist die Quelle: https://github.com/nodes-android/nstack-translation-folding.
Ich werde hier sind die wichtigen Teile:
plugin.xml

</idea-plugin> 
    <depends>com.intellij.modules.all</depends> 

    <application-components> 
     <component> 
      <implementation-class>com.nodes.folding.TranslationFoldingBuilder</implementation-class> 
     </component> 
    </application-components> 

    <extensions defaultExtensionNs="com.intellij"> 
     <lang.foldingBuilder language="JAVA" implementationClass="com.nodes.folding.TranslationFoldingBuilder"/> 
    </extensions> 

</idea-plugin> 

TranslationFoldingBuilder.kt

class TranslationFoldingBuilder : FoldingBuilderEx() { 

    override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean): Array<FoldingDescriptor> { 
     if (root !is PsiJavaFile) { 
      return FoldingDescriptor.EMPTY 
     } 

     val descriptors = ArrayList<FoldingDescriptor>() 
     // Get all the reference expressions in this Java file 
     val referenceExpressions = PsiTreeUtil.findChildrenOfType(root, PsiReferenceExpression::class.java) 

     // Some logic 

     return descriptors.toTypedArray() 
    } 
} 

Mein Problem ist, dass für Kotlin Dateien die buildFoldRegions() wird überhaupt nicht aufgerufen.

+0

Hat du versuchst, 'language = "KOTLIN"' zu spezifizieren? – Argb32

+0

Ich habe es versucht. Es funktioniert nicht. – vovahost

Antwort

0

Natürlich wird es nicht für Kotlin arbeiten, wie Ihr

if (root! Ist PsiJavaFile) { return FoldingDescriptor.EMPTY }

Für Kotlin Dateien, die Datei org.jetbrains.kotlin.psi.KtFile Beispiel, anstatt PsiJavaFile


Updat e:

  1. Sie müssen Plugin hinzufügen Kotlin als die Abhängigkeit Ihres Plugins in plugin.xml
  2. Die psi api Kotlin ist nicht dasselbe wie Java (Sie sind verschiedene Sprachen). Sie brauchen eine andere Klasse zu schreiben (aber einige können gleich sein, ich kopieren Sie einfach Ihre Ursprungskodemuster und bearbeiten, so gibt es einige doppelte in meiner kt Implementierung ist.

Sie meine begehen https://github.com/aristotll/nstack-translation-folding/commit/45286e6ec10d3b50defe25d55f8fbd8f122a148b hier sehen kann.

+0

Vielen Dank für deine Antwort, aber das Kotlin-Paket wurde nicht in 'org.jetbrains' gefunden. Muss ich es in' importieren plugin.xml' oder vielleicht an einer anderen Stelle? Ich habe versucht, diese 'if'-Prüfung zu entfernen, aber es funktioniert sowieso nicht für Kotlin-Dateien. Die 'buildFoldRegions()' wird überhaupt nicht aufgerufen. Dies ist das Hauptproblem Sie haben irgendwelche Vorschläge? – vovahost

+0

Ich habe eine Prämie zu diesem que hinzugefügt stion. – vovahost

+0

@vovahost Ich habe meine Antwort aktualisiert. – aristotll