Перечисление других методов класса проекта

У меня проблема с доступом к методам класса. Моя задача - сделать плагин 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;
}

Основная проблема: не знаю, как получить доступ к этому классу как к классу. Он обращается к нему как к единице компиляции. Из-за этого при вызове Коллекция getMethods (Класс clazz) я не получаю никакого списка методов. Так я пытался это назвать

    Class<?> clazz1 = firstElement.getClass();
    Collection<Method> found1 = new ArrayList<Method>();
    found1 = getMethods(clazz1);

Возвращаемое значение - []. Есть идеи, что делать?

Извините за ненормативную лексику и длинные объяснения, я новичок в java, только начал.

Обновлено: Забыл добавить, это то, что я получаю в переменной firstElement после вызова 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 имеет структуру, содержащую класс и методы, но я не знаю, как их анализировать и извлекать список методов.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
56
1

Ответы 1

Вам нужно написать Methodvisitor и "посетить" все методы в 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;
        }
    } `

Не могли бы вы объяснить это более конкретно?

squlerr 16.04.2018 13:06

Другие вопросы по теме