public static boolean removeImport( String originalPackage, final Declaration dec, Tree.CompilationUnit cu, TextChange tc, Set<String> packages) { boolean foundOriginal = false; Tree.ImportList il = cu.getImportList(); for (Tree.Import imp : il.getImports()) { Referenceable model = imp.getImportPath().getModel(); if (model != null) { if (model.getNameAsString().equals(originalPackage)) { Tree.ImportMemberOrTypeList imtl = imp.getImportMemberOrTypeList(); if (imtl != null) { List<ImportMemberOrType> imts = imtl.getImportMemberOrTypes(); for (int j = 0; j < imts.size(); j++) { Tree.ImportMemberOrType imt = imts.get(j); Declaration d = imt.getDeclarationModel(); if (d != null && d.equals(dec)) { int offset; int length; if (j > 0) { offset = getNodeEndOffset(imts.get(j - 1)); length = getNodeEndOffset(imt) - offset; } else if (j < imts.size() - 1) { offset = getNodeStartOffset(imt); length = getNodeStartOffset(imts.get(j + 1)) - offset; } else { if (packages.contains(originalPackage)) { // we're adding to this import statement, // so don't delete the whole import offset = getNodeStartOffset(imt); length = getNodeLength(imt); } else { offset = getNodeStartOffset(imp); length = getNodeLength(imp); } } tc.addEdit(new DeleteEdit(offset, length)); foundOriginal = true; break; // TODO: return the alias! } } } break; } } } return foundOriginal; }
private static void addImport( String targetPackage, Declaration dec, Tree.CompilationUnit cu, TextChange tc) { String name = dec.getName(); String delim = getDefaultLineDelimiter(getDocument(tc)); String indent = getDefaultIndent(); boolean foundMoved = false; Tree.ImportList il = cu.getImportList(); for (Tree.Import i : il.getImports()) { Referenceable model = i.getImportPath().getModel(); if (model != null) { if (model.getNameAsString().equals(targetPackage)) { Tree.ImportMemberOrTypeList imtl = i.getImportMemberOrTypeList(); if (imtl != null) { String addition; int offset; List<Tree.ImportMemberOrType> imts = imtl.getImportMemberOrTypes(); if (imts.isEmpty()) { offset = getNodeStartOffset(imtl) + 1; addition = delim + indent + name; int len = getNodeLength(imtl); if (len == 2) { addition += delim; } } else { offset = getNodeEndOffset(imts.get(imts.size() - 1)); addition = "," + delim + indent + name; } // TODO: the alias! tc.addEdit(new InsertEdit(offset, addition)); foundMoved = true; } break; } } } if (!foundMoved) { String text = "import " + targetPackage + " {" + delim + indent + name + delim + "}" + delim; tc.addEdit(new InsertEdit(0, text)); } }