Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I automatically refactor an entire java project and rename uppercase method parameters to lowercase?

I'm working in a java project where a big part of the code was written with a formatting style that I don't like (and is also non standard), namely all method parameters are in uppercase (and also all local variables).

On IntellJ I am able to use "Analyze -> Inspect Code" and actually find all occurrences of uppercase method parameters (over 1000).

To fix one occurrence I can do "refactor > rename parameter" and it works fine (let's assume there is no overlapping).

Is there a way to automagically doing this refactor (e.g: rename method parameter starting with uppercase to same name starting with lowercase)?

like image 693
krico Avatar asked Oct 01 '10 12:10

krico


2 Answers

Use a Source Parser

I think what you need to do is use a source code parser like javaparser to do this.

For every java source file, parse it to a CompilationUnit, create a Visitor, probably using ModifierVisitorAdapter as base class, and override (at least) visit(MethodDeclaration, arg). Then write the changed CompilationUnit to a new File and do a diff afterwards.

I would advise against changing the original source file, but creating a shadow file tree may me a good idea (e.g. old file: src/main/java/com/mycompany/MyClass.java, new file src/main/refactored/com/mycompany/MyClass.java, that way you can diff the entire directories).

like image 74
Sean Patrick Floyd Avatar answered Oct 14 '22 20:10

Sean Patrick Floyd


I'd advise that you think about a few things before you do anything:

  1. If this is a team effort, inform your team.
  2. If this is for an employer, inform your boss.
  3. If this is checked into a version control system, realize that you'll have diffs coming out the wazoo.
  4. If it's not checked into a version control system, check it in.
  5. Take a backup before you make any changes.
  6. See if you have some tests to check before & after behavior hasn't changed.

This is a dangerous refactoring. Be careful.

like image 29
duffymo Avatar answered Oct 14 '22 20:10

duffymo