Automatically remove explicit package declarations with import statements in Java

前端 未结 8 1046
不思量自难忘°
不思量自难忘° 2021-01-07 19:46

I have a project created by others that includes thousands of class files and has the package names explicitly typed out for every reference to any of their classes. It look

相关标签:
8条回答
  • 2021-01-07 19:51

    I had the same problem with axis generated files, and I wrote a small groovy script to do this. I doesn't do everything (you have to use organize imports in eclipse after you run it), and I haven't tested it very well, so use it carefully. It's also limited to lowercase package names and camel-cased class names, but it may be a good starting point

    def replaceExplicitPackageNamesInFile(File javaFile){
     eol = org.codehaus.groovy.tools.Utilities.eol()
    
     newFile = ""
     explicitImportExpr = /([^\w])(([a-z0-9]+\.)+)([A-Z][a-zA-Z0-9]+)/
     imports = ""
     javaFile.eachLine { 
      line = it.replaceAll(explicitImportExpr, {
       Object [] match ->
       imports += "import ${match[2]+match[-1]};${eol}"
       match[1]+match[-1]
      })
      newFile += line+"${eol}" 
     }
     newFile2 = ""
     newFile.eachLine { line ->
      newFile2 +=
       line.replaceAll(/(^\s*package.*$)/, {
        Object [] match ->
        match[0] + eol + imports
       } ) + eol
     }
     javaFile.setText(newFile2)
    }
    
    def replaceExplicitPackageNamesInDir(File dir){
     dir.eachFileRecurse {
      if (it.isFile() && it.name ==~ /.*\.java\z/){
       println "Processing ${it.absolutePath - dir.absolutePath}"
       replaceExplicitPackageNamesInFile(it)
      }
     }
    }
    
    0 讨论(0)
  • 2021-01-07 19:51

    You probably need to replace all javax.swing.. Then do organize imports.

    0 讨论(0)
  • 2021-01-07 19:59

    I have been able to remove all explicit package names in interfaces by running the sed command below on target files, then by reorganize imports in eclipse:

    sed -e 's/java\.[^ ]*\.//g;s/com\.[^ ]*\.//g'
    
    0 讨论(0)
  • 2021-01-07 20:00

    This thread says:

    select the package explorer view, right click on your project, choose source then organise imports. Bobs your uncle - all unwanted imports are removed

    To make it better formatted:

    Right click project > Source > Organize imports

    Now, what remains, is to find a way to strip the fully-qualified names from the code. You may think of some regular expression. Take a look at this library - it seems helpful. This article should also be useful.

    0 讨论(0)
  • 2021-01-07 20:00

    I use an Eclipse plugin by Michael Ernst that does what you want. It converts references such as java.util.Collection to Collection with the addition of an import java.util.Collection; at the top of the file.

    It is effectively the same thing as using "Source -> Add Import" for a fully-qualified reference except that it lets you do it for an entire .java file at once.

    Even better, it lets you batch-process all the .java files you have selected in the Package Explorer. Simply right-click on the selection and select "Source -> Clean qualified Type Declarations" form the contextual menu.

    Eclipse update site: http://cqtp.sourceforge.net/eclipse/

    0 讨论(0)
  • 2021-01-07 20:04

    IntelliJ Idea has tools to do this on a per-file basis. You can probably also do it in bulk, but I don't know how.

    Try out a 30 day evaluation and you'll probably be pleased by more than the import cleanup features.

    0 讨论(0)
提交回复
热议问题