diff --git a/jode/jode/decompiler/ImportHandler.java.in b/jode/jode/decompiler/ImportHandler.java.in index 607d430..94f965f 100644 --- a/jode/jode/decompiler/ImportHandler.java.in +++ b/jode/jode/decompiler/ImportHandler.java.in @@ -132,7 +132,8 @@ public class ImportHandler { } } else { /* Is this a class import with same name? */ - if (importName.endsWith(name)) + if (importName.endsWith(name) + || importName.equals(name.substring(1))) return true; } } @@ -153,18 +154,25 @@ public class ImportHandler { continue; int delim = importName.lastIndexOf("."); - /* Since the imports are sorted, newImports already - * contains the package if it should be imported. - */ - if (newImports.containsKey - (importName.substring(0, delim)+".*")) - continue; - - /* This is a single Class import, that is not - * superseeded by a package import. Mark it for - * importation, but don't put it in newImports, yet. - */ - classImports.add(importName); + if (delim != -1) { + /* Since the imports are sorted, newImports already + * contains the package if it should be imported. + */ + if (newImports.containsKey + (importName.substring(0, delim)+".*")) + continue; + + /* This is a single Class import, that is not + * superseeded by a package import. Mark it for + * importation, but don't put it in newImports, yet. + */ + classImports.add(importName); + } else if (pkg.length() != 0) { + /* This is a Class import from the unnamed + * package. It must always be imported. + */ + newImports.put(importName, dummyVote); + } } else { if (vote.intValue() < importPackageLimit) continue; @@ -181,7 +189,8 @@ public class ImportHandler { while (iter.hasNext()) { /* If there are more than one single class imports with * the same name, exactly the first (in sorted order) will - * be imported. */ + * be imported. + */ String classFQName = (String) iter.next(); if (!conflictsImport(classFQName)) { imports.put(classFQName, dummyVote); @@ -257,34 +266,34 @@ public class ImportHandler { } String name = clazz.getName(); - int pkgdelim = name.lastIndexOf('.'); - if (pkgdelim != -1) { - String pkgName = name.substring(0, pkgdelim); - if (pkgName.equals(pkg)) - return; - - Integer pkgVote = (Integer) imports.get(pkgName+".*"); - if (pkgVote != null - && pkgVote.intValue() >= importPackageLimit) - return; - - Integer i = (Integer) imports.get(name); - if (i == null) { - /* This class wasn't imported before. Mark the whole package - * as used once more. */ - - pkgVote = (pkgVote == null) - ? new Integer(1): new Integer(pkgVote.intValue()+1); - imports.put(pkgName+".*", pkgVote); - i = new Integer(1); - - } else { - if (i.intValue() >= importClassLimit) - return; - i = new Integer(i.intValue()+1); - } - imports.put(name, i); - } + + Integer i = (Integer) imports.get(name); + if (i == null) { + /* This class wasn't imported before. Mark the whole package + * as used once more. */ + + int pkgdelim = name.lastIndexOf('.'); + if (pkgdelim != -1) { + String pkgName = name.substring(0, pkgdelim); + if (pkgName.equals(pkg)) + return; + + Integer pkgVote = (Integer) imports.get(pkgName+".*"); + if (pkgVote != null + && pkgVote.intValue() >= importPackageLimit) + return; + + pkgVote = (pkgVote == null) + ? new Integer(1): new Integer(pkgVote.intValue()+1); + imports.put(pkgName+".*", pkgVote); + } + i = new Integer(1); + } else { + if (i.intValue() >= importClassLimit) + return; + i = new Integer(i.intValue()+1); + } + imports.put(name, i); } public final void useType(Type type) {