How to write an own dependency plugin for a Java project
Hi Community,
I want to write an own plugin that finds the dependencies and usages for a Java Class in a project. The problem here is that I don't know where to start.
I tried to find the references of a file through a PsiJavaFile and its fields, but I can't access the Javafile that represents the type of a reference.
My goal of this plugin is to select unit tests that have dependencies to a modified Javafile. I want to find the classes for which I need to run JUnit tests so I don't need to run all tests in the project.
I need to do this because of my bachelor thesis.
Greetings
Markus
I want to write an own plugin that finds the dependencies and usages for a Java Class in a project. The problem here is that I don't know where to start.
I tried to find the references of a file through a PsiJavaFile and its fields, but I can't access the Javafile that represents the type of a reference.
My goal of this plugin is to select unit tests that have dependencies to a modified Javafile. I want to find the classes for which I need to run JUnit tests so I don't need to run all tests in the project.
I need to do this because of my bachelor thesis.
Greetings
Markus
Please sign in to leave a comment.
Hi Markus,
Have you seen the JavaPsiFacade class? For example, you can obtain an instance of the class with JavaPsiFacade.getInstance(project).
It has a lot of useful methods you can make use of :)
Alan
Edit - Definitely check out http://confluence.jetbrains.com/display/IDEADEV/PSI+Cookbook - it has a lot of pointers for the common usecases
Thank you for your answer Alan it helped a lot,
now I get the dependencies of a class, but if I want to get the corresponding JUnit test I need to find the usages of a class as well.
Markus
Edit - I read the PSI Cookbook and found the ReferencesSearch.search()entry but i don't know how to use it
Have you tried calling the method?
Seriously, this is a very simple API. What exactly is unclear about how to use it?
Hi Dmitry,
my mistake was that I tried to search for a PsiJavaFile and not for a class element in it.
I have another question.
Is there any way to trigger a maven or gradle task from the plugin
or access the cmd and execute a command?
Markus
Hi Markus,
I'm not entirely sure how to do this currently;
But within IntelliJ there are the concept of services (http://confluence.jetbrains.com/display/IDEADEV/IntelliJ+IDEA+Plugin+Structure#IntelliJIDEAPluginStructure-PluginServices) which allows a plugin component to be loaded on demand.
And I can also see from the Maven plugin.xml file that it exposes some services (https://github.com/JetBrains/intellij-community/blob/master/plugins/maven/src/main/resources/META-INF/plugin.xml)
That might be worth checking out.
On a side note, it would have been good to raise a separate post for this question; as it would aid people in the future who try searching for a similiar question :)
Alan
Hi Alan,
Thank you for your answer and for the advice.
I opened http://devnet.jetbrains.com/thread/445589?tstart=0
Markus