Java Eclipse插件:创建一个树视图,显示所有不推荐的方法
我是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
-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,目前进展顺利。谢谢您的回答。我用另一种方法解决了这个问题,但太忙了,没有时间发布我的解决方案。