The evolution of the programming technologies advances at such pace that developers are having a hard time keeping up with the latest changes. These new opportunities can make our software less prone to errors or run faster, as we discover better solutions for our problems each time. The integrated developer environments need more and more intelligent tools to help us. These usually use complex static analysis to find points of possible improvement and suggest better alternatives.
The points of improvement located by static analysis may be improved with automatic code refactoring techniques. The point of this paper is to get to know it, personalize it and look for new possibilities within its boundaries. With the use of Eclipse technologies, I explore the depths of the Java language and create multiple implementations that take advantage of the newest technologies and help the user convert their code to using them. To manage this task, I have to develop a plugin for the improvements of Java 8 and 9 that can handle new language features, such as try block with resource management, static Collection factories, the Optional class or the new date and time API.
In this process, I will use the Java language, the Eclipse IDE and its closely connected tools and toolkits. I will demonstrate ways of developing Eclipse plug-ins, and present the traversing and manipulating of the abstract syntax tree. I will use these methods to refactor Java code and deliver several Eclipse plugins that can help refactoring your code.
I will also try to provide insight into static code analysis, the way of bug searching without executing the code itself. My tasks include creating these type of analytic tools and providing a list of problems for the user. I have to put a lot of emphasis on the performance of my work, because these analyses are run automatically by the IDE, therefore they should not consume too much resources.
At last, I will unfold the ways to test such plugins and program inspection tools to come full circle. I will provide examples by testing my own modules.