2016-12-07 7 views
3

Ich möchte ein Plugin für Intellij IDEA erstellen. Ich muss eine Aktion hinzufügen (AnAction), die eine class in Kotlin (nicht Java) in einem benutzerdefinierten package erstellen wird. Ich habe zwei Fragen:Intellij IDEA Plugin-Entwicklung. Aktion "create kotlin class"

  • Wie erstellt man Dateien mit der gewünschten Erweiterung?
  • Oder wie erstellt man eine Datei mit Kotlinclass (aus einer bestimmten Basisklasse) in einem benutzerdefinierten package?

Antwort

2

Eine Möglichkeit, dies zu tun ist PsiFileFactory.createFileFromText() zu verwenden, um eine In-Memory-Kotlin-Datei zu erstellen und diese Datei dann als Parameter an PsiDirectory.add() zu übergeben es auf das Dateisystem zu speichern.

1

Obwohl Yoles Antwort richtig ist, würde ich gerne mehr Details über die PsiDirectory Klasse von mistery sehen.

//get directory by VirtualFile 
PsiDirectory directory = PsiManager.getInstance(project).findDirectory((getKotlinSourceDir(project)) 

Erhalten Kotlin Quelle dir:

private VirtualFile getKotlinSourceDir(Project project) { 
    return project.getBaseDir().findChild("src").findChild("main").findChild("kotlin"); 
} 

Und als Sie Verzeichnisse erstellen:

//someDirectoryName it is simple name 
//(i.e if you post "com.some.package" - it does not create com/some/package folder) 
PsiDirectory newDirectory = psiDirectory.createSubdirectory(someDirectoryName); 
+0

Bitte verwenden Sie keine PsiDirectoryFactory.createDirectory(); Es ist nicht dazu gedacht, von Plugin-Code verwendet zu werden. Der richtige Weg, um ein Verzeichnis für eine virtuelle Datei zu erhalten, ist PsiManager.findDirectory(). – yole

+0

Ok. Aber warum? Was ist falsch an dieser Methode? –

+0

Es überspringt viele Prüfungen und gibt immer eine neue PsiDirectory-Instanz statt der vorhandenen zurück. Könnten Sie bitte Ihre Antwort bearbeiten, um Verwirrung zu vermeiden, und die Erwähnung dieser Methode vollständig entfernen? Vielen Dank! – yole