Eclipse插件:创建一个显示所有已弃用方法的树视图

时间:2014-11-21 01:17:14

标签: java eclipse treeview

我是Eclipse插件开发的新手,我正在尝试实现一个树视图,显示当前/所选项目中使用的所有已弃用的方法。

它应该是这样的:

-jdom
--- method1
-------file1 that uses this method
-------file2 that uses this method
--- method2
-------file1 that uses this method
--- method3
-------file1 that uses this method
-log4j
----method1
-------file1 that uses this method
--- method2
--- method3

Eclipse有这个非常好的功能,可以通过方法告诉您正在使用的API已被弃用。

有没有办法可以获得所有弃用方法的完整列表?我确信这可以是Eclipse可以做的事情。

关于Eclipse如何参考代码进行删除线的任何解释也很受欢迎。

2 个答案:

答案 0 :(得分:2)

我用这种方式解决了这个问题:

       for (Map.Entry<String, Map<String, Set<String>>> entry : treeMap
                .entrySet()) {
            if (!entry.getValue().isEmpty()) {
                LibraryModel libraryModel = new LibraryModel(entry.getKey());
                root.addLibrary(libraryModel);
                for (Map.Entry<String, Set<String>> methodToFileEntry : entry
                        .getValue().entrySet()) {
                    MethodModel methodModel = new MethodModel(
                            methodToFileEntry.getKey());
                    libraryModel.addMethod(methodModel);
                    for (String fileName : methodToFileEntry.getValue()) {
                        FileModel fileModel = new FileModel(fileName, fileName);
                        methodModel.addFile(fileModel);
                    }
                }
            }
        }

HashMap存储我从访问AST

获得的信息
          for (MethodInvocation method : visitor.getMethods()) {
                if (method.resolveMethodBinding().isDeprecated()) {
                    for (IAnnotationBinding iab: method.resolveMethodBinding()
                            .getAnnotations()) {
                        for (IMemberValuePairBinding ivab: iab.getAllMemberValuePairs()) {
                            System.out.println(ivab.getKey());
                            System.out.println(ivab.getValue());
                        }
                    }
                    String deprecatedMethod = method.getName().toString();
                    String fileName = parse.getJavaElement().getResource()
                            .getName();
                    String packageName = method.resolveMethodBinding()
                            .getDeclaringClass().getQualifiedName();
                    String library = findLibrary(packageName);
                    if (treeMap.get(library).isEmpty()
                            || treeMap.get(library).get(deprecatedMethod)
                                    .isEmpty()) {
                        Map<String, Set<String>> innerMap = new HashMap<String, Set<String>>();
                        Set<String> fileNames = new HashSet<String>();
                        fileNames.add(fileName);
                        innerMap.put(deprecatedMethod, fileNames);
                        treeMap.put(library, innerMap);
                    } else {
                        Map<String, Set<String>> innerMap = treeMap
                                .get(library);
                        innerMap.get(deprecatedMethod).add(fileName);
                    }

                }
            }

这成功地给了我所需的树。

答案 1 :(得分:0)

这可能对您有所帮助

获取所有弃用的方法:这里我使用的是java.util.Date类

Method[] methods = java.util.Date.class.getMethods();
    for (int i = 0; i < methods.length; i++) {
        java.lang.annotation.Annotation annotations[] = methods[i]
                .getAnnotations();

        for (int j = 0; j < annotations.length; j++) {
            if (annotations[j] instanceof Deprecated) {
                System.out.println("Deprecated method Name : "
                        + methods[i].getName());
            }
        }
    }