How to share the File Templates via IntelliJ IDEA plugin
Answered
Unfortunately, I did not find some manuals how to share the file templates via IntelliJ IDEA plugin.
I know there are other people which has troubles with it too (for example, here: https://stackoverflow.com/q/51187319/4818123).
The source code of the Julia language plugin reccomended in mentioned above topics does not obeys to
recommended project structure of IntelliJ IDEA plugin (the file templates are in `res/fileTemplates/` directory - I suppose is should be below `src/main/resources`).
Please teach me how to share the file templates via my plugin.
Please sign in to leave a comment.
Hi Tokugawa,
For File Templates, please take a look at how the example plugins implement
com.intellij.fileTemplateGroup
extension:We will cover it in docs soon.
Karol Lewandowski,
Thank you for the anwer!
I checked some packages, but unfortunately, there are a lot of various methodologies.
I am feeling uncofortable copying these code without understanding what I doing.
May I ask you to share the code example (I suppose, it will be one-line code) of the correct file template declaration inside `<extensions defaultExtensionNs="com.intellij">` of src/main/resources/META-INF/plugin.xml for the file src/main/resources/fileTemplates/example.xml? I suppose, it will be something like
Hi Takeshi,
It's not the file template that should be referenced but FileTemplateGroupDescriptorFactory implementation. Also, you used the wrong EP name, it's "fileTemplateGroup", not "fileTemplate". See this example (randomly taken from https://jb.gg/ipe):
Karol Lewandowski
Dear mr. Lewandowski,
thank you for the answer.
I checked the references which you suggested.
What I did not understand is how FileTemplateFactory.kt referes to Template Application.java.ft, Template AucApiClass.java.ft, etc. In FileTemplateFactory.kt actually MainActivity.java, Manifest.xml and 2 more files which does not present in resources/fileTemplates has been mentioned.
Would you please to teach me how to associate the FileTemplateFactory.kt with below my own 4 files?
Hi Takeshi,
Let's do it for a single template = "Layout (Yamato Daiwa Frontend).pug"
Now you should see your template in Editor | File and Code Templates.
New action in New group:
Provide name:
And the file is created:
Karol Lewandowski
Dear mr. Lewandowski,
thank you for the detailed explantions.
I believe it will work.
I'll report once check above sequence of actions to finally actually close this ticket.
Hi Takeshi,
We've just published new articles on File and Code Templates:
https://plugins.jetbrains.com/docs/intellij/file-and-code-templates.html
It should clarify the topic, and if it does not, please let us know.
Karol Lewandowski
Dear mr. Lewandowski,
thank you for the answers and documentation.
I have carefully studied both your answer and documetantion, but I am very sorry about I still have some questions.
About template groups
In
does "group" mean the groups in "Other" tab of "File -> Settings -> Editor -> File and Code Templates"? If so maybe I should my templates below existing "Web" group?
I hope I'll understand what to do with related (child) template Layout (Yamato Daiwa Frontend).pug.child.0.styl.kt once will be answered to above question. Currently from the documentation I knew that it is currently not possible to keep this template as child in relation to Layout (Yamato Daiwa Frontend).pug.kt inside plugin).
The lack of Kotlin examples in documentation
The MavenFileTemplateGroupFactory has been written by Java. May I ask you to add the Kotlin example to documentation?
I am sorry about I have no expirence with Kotlin, the great creation of your company, but because the plugin template has been suggested with Kotlin logic, I will not migrate my plugins to familiar for me Java. But I faces with next problems:
1. How I can use icons.OpenapiIcons.RepositoryLibraryLogo; in Kotlin?
2. How I can solve Cannot access 'java.lang.Object' which is a supertype of 'com.github.tokugawatakeshi.temp.TestFileTemplateGroupFactory. Check your module classpath for missing or conflicting dependencies error in factory class?
About code listing in steps 4 and 5
1. Where "Test Template" from line 2 and "Creates file from Test Template" will be used/displayed?
2. Why we need to impelemnt `getActionName` method?
3. On what "action.id" referes?
4. Is "NewGroup" static value, not the value for exmaple?
I am very sorry about lot of question.
I believe it will be the good feedback for your documetantion.
Hi Takeshi,
About template groups:
You are correct about the "Other" tab. Groups should be created separately for each plugin/technology, so you can't add it to the existing one.
The lack of Kotlin examples in docs:
We rely on existing implementations and we choose the ones that explain the mechanisms best. You can copy this Java file and convert to Kotlin in IDE: https://www.jetbrains.com/help/idea/get-started-with-kotlin.html#b13357a
1. Sorry, I have no idea what are you referring to.
2. Check File | Project Structure... | Project | SDK - maybe you have JRE selected, but it should be JDK. Try e.g. corretto-11 if available or some other JDK.
About code listing:
I suggest relying on documentation more, as I wasn't 100% right about everything in my answer. Please read it carefully and check mentioned examples for better understanding.
1. It's an action name displayed on menus/buttons.
2. Because it is an abstract method and you have to implement it. You can customize it based on the parameters.
3. Action ID is just an ID that you can use to reference your action in other places, e.g., when you want to add existing action to multiple groups/places in IDE. See https://plugins.jetbrains.com/docs/intellij/basic-action-system.html for more information.
4. Yes.
Also, please keep this topic focused on file templates. If anything else comes up, please create a new topic (search for potential existing answers before you do it).