我是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如何参考代码进行删除线的任何解释也很受欢迎。
答案 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());
}
}
}