Java Eclipse插件:创建一个树视图,显示所有不推荐的方法

Java Eclipse插件:创建一个树视图,显示所有不推荐的方法,java,eclipse,treeview,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

我是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如何参照代码删除删除线的任何解释,我们也非常感谢。

这可能会对您有所帮助

获取所有不推荐的方法:这里我使用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());
            }
        }
    }
Method[]methods=java.util.Date.class.getMethods();
for(int i=0;i
我是这样计算出来的:

       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);
                    }
                }
            }
        }
for(Map.Entry:treeMap
.entrySet()){
如果(!entry.getValue().isEmpty()){
LibraryModel LibraryModel=新的LibraryModel(entry.getKey());
root.addLibrary(libraryModel);
for(Map.Entry方法文件输入:输入
.getValue().entrySet()){
MethodModel MethodModel=新的MethodModel(
methodToFileEntry.getKey());
libraryModel.addMethod(methodModel);
for(字符串文件名:methodToFileEntry.getValue()){
FileModel FileModel=新的FileModel(文件名,文件名);
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);
                    }

                }
            }
for(MethodInvocation方法:visitor.getMethods()){
if(方法.resolveMethodBinding().isDeprecated()){
对于(IANotationBinding iab:method.resolveMethodBinding()
.getAnnotations()){
对于(IMemberValuePairBinding ivab:iab.GetAllMemberValuePairPairPairPairBinding()){
System.out.println(ivab.getKey());
System.out.println(ivab.getValue());
}
}
字符串deprecatedMethod=method.getName().toString();
字符串文件名=parse.getJavaElement().getResource()
.getName();
字符串packageName=method.resolveMethodBinding()
.getDeclaringClass().getQualifiedName();
字符串库=findLibrary(packageName);
if(treeMap.get(library.isEmpty)()
||treeMap.get(库).get(不推荐的方法)
.isEmpty()){
Map innerMap=新的HashMap();
Set fileNames=new HashSet();
添加(文件名);
put(不推荐的方法,文件名);
treeMap.put(库、内部映射);
}否则{
映射innerMap=treeMap
.获取(图书馆);
get(deprecatedMethod).add(文件名);
}
}
}

这成功地为我提供了所需的树。

Eclipse正在使用JDT。谢谢,我正在使用JDT,目前进展顺利。谢谢您的回答。我用另一种方法解决了这个问题,但太忙了,没有时间发布我的解决方案。