我在访问类方法时遇到问题。我的任务是使eclipse插件获取所选文件(来自另一个项目),类名和列出类方法。我想出了如何获得课程名称,但我不知道如何以课程的形式访问该课程(Class<?>)。这就是我所拥有的
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
String className = "";
Object firstElement;
ISelectionService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
IStructuredSelection structured = (IStructuredSelection) service.getSelection();
/* Getting first element of selected structure (path and workspace)*/
firstElement = structured.getFirstElement();
IResource resource = (IResource) Platform.getAdapterManager().getAdapter(firstElement, IResource.class);
/* Extracting class name from selected object */
className = resource.getName();
}
现在我已经提取了类名,我试图获得该类方法。这是我用来获取类方法的方法
public static Collection<Method> getMethods(Class<?> clazz) {
Collection<Method> found = new ArrayList<Method>();
while (clazz != null) {
for (Method m1 : clazz.getDeclaredMethods()) {
boolean overridden = false;
for (Method m2 : found) {
if (m2.getName().equals(m1.getName())
&& Arrays.deepEquals(m1.getParameterTypes(), m2.getParameterTypes())) {
overridden = true;
break;
}
}
if (!overridden)
found.add(m1);
}
clazz = clazz.getSuperclass();
}
return found;
}
主要问题:不知道如何以班级的形式访问此课程。它将其作为编译单元进行访问。因此,当调用 Collection getMethods(Class clazz)时,我不会获得任何方法列表。这就是我尝试调用它的方式
Class<?> clazz1 = firstElement.getClass();
Collection<Method> found1 = new ArrayList<Method>();
found1 = getMethods(clazz1);
返回值为[]。任何想法该怎么做?
对不起,语言不好,解释很长,我刚刚开始使用java的新手。
编辑: 忘记添加,这是我得到的&#34; firstElement&#34;调用structured.getFirstElement()
后的变量[Working copy] Test.java [in org.eclipse.testing [in src [in TestingProject]]]
package org.eclipse.testing
class Test
int myInt
Test()
int someInt()
static String someString()
所以我看到它,firstElement有结构,包含类和方法,但我不知道如何解析它们,并提取方法列表。
答案 0 :(得分:0)
你需要写一个Methodvisitor并且&#34;访问&#34; CompilationUnit中的所有方法,如下所示:
import org.eclipse.jdt.core.dom.*;
ICompilationUnit unit = ...;
MethodVisitor visitor = createMethodVisitor(unit);
public class MethodVisitor extends ASTVisitor {
List<MethodDeclaration> methods = new ArrayList<MethodDeclaration>();
@Override
public boolean visit(MethodDeclaration node) {
node.getName();
return super.visit(node);
}
public List<MethodDeclaration> getMethods() {
return methods;
}
} `