列出其他项目类方法' s

时间:2018-04-16 09:30:44

标签: java class methods eclipse-plugin workbench

我在访问类方法时遇到问题。我的任务是使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有结构,包含类和方法,但我不知道如何解析它们,并提取方法列表。

1 个答案:

答案 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;
        }
    } `