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);
   }
 }
Exemplo n.º 3
0
 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));
     }
   }
 }