private static List<Tree.ImportMemberOrType> getUsedImportElements( List<Tree.Import> imports, List<Declaration> unused, boolean hasWildcard) { List<Tree.ImportMemberOrType> list = new ArrayList<Tree.ImportMemberOrType>(); for (Tree.Import ti : imports) { for (Tree.ImportMemberOrType imt : ti.getImportMemberOrTypeList().getImportMemberOrTypes()) { Declaration dm = imt.getDeclarationModel(); if (dm != null && !hasRealErrors(imt.getIdentifier()) && !hasRealErrors(imt)) { if (unused.contains(dm)) { if (imt.getImportMemberOrTypeList() != null) { for (Tree.ImportMemberOrType nimt : imt.getImportMemberOrTypeList().getImportMemberOrTypes()) { Declaration ndm = nimt.getDeclarationModel(); if (ndm != null && !hasRealErrors(nimt.getIdentifier()) && !hasRealErrors(nimt)) { if (!unused.contains(ndm)) { list.add(imt); break; } } } } } else { if (!hasWildcard || imt.getAlias() != null || imt.getImportMemberOrTypeList() != null) { list.add(imt); } } } } } return list; }
private static void appendImportElements( String packageName, List<Tree.ImportMemberOrType> elements, List<Declaration> unused, List<Declaration> proposed, boolean hasWildcard, StringBuilder builder) { for (Tree.ImportMemberOrType i : elements) { if (i.getDeclarationModel() != null && i.getIdentifier().getErrors().isEmpty() && i.getErrors().isEmpty()) { if (!i.getImportModel().getAlias().equals(i.getDeclarationModel().getName())) { builder.append(i.getImportModel().getAlias()).append("="); } builder.append(i.getDeclarationModel().getName()); appendNestedImportElements(i, unused, builder); builder.append(", "); } } for (Declaration d : proposed) { if (d.getUnit().getPackage().getNameAsString().equals(packageName)) { builder.append(d.getName()).append(", "); } } if (hasWildcard) { builder.append("..."); } else { builder.setLength(builder.length() - 2); } }
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 appendNestedImportElements( Tree.ImportMemberOrType imt, List<Declaration> unused, StringBuilder builder) { if (imt.getImportMemberOrTypeList() != null) { builder.append(" { "); boolean found = false; for (Tree.ImportMemberOrType nimt : imt.getImportMemberOrTypeList().getImportMemberOrTypes()) { if (nimt.getDeclarationModel() != null && nimt.getIdentifier().getErrors().isEmpty() && nimt.getErrors().isEmpty()) { if (!unused.contains(nimt.getDeclarationModel())) { found = true; if (!nimt.getImportModel().getAlias().equals(nimt.getDeclarationModel().getName())) { builder.append(nimt.getImportModel().getAlias()).append("="); } builder.append(nimt.getDeclarationModel().getName()).append(", "); } } } if (found) builder.setLength(builder.length() - 2); builder.append(" }"); if (!found) builder.setLength(builder.length() - 5); } }
static void addRemoveAliasProposal( Tree.ImportMemberOrType imt, Collection<ICompletionProposal> proposals, IFile file, CeylonEditor editor) { if (imt != null) { Declaration dec = imt.getDeclarationModel(); Tree.CompilationUnit upToDateAndTypechecked = editor.getParseController().getTypecheckedRootNode(); if (dec != null && imt.getAlias() != null && upToDateAndTypechecked != null) { TextFileChange change = new TextFileChange("Remove Alias", file); change.setEdit(new MultiTextEdit()); Tree.Identifier aid = imt.getAlias().getIdentifier(); change.addEdit( new DeleteEdit( aid.getStartIndex(), imt.getIdentifier().getStartIndex() - aid.getStartIndex())); upToDateAndTypechecked.visit(new AliasRemovalVisitor(dec, change, aid)); proposals.add(new RemoveAliasProposal(file, dec, change)); } } }