У меня проблема с доступом к методам класса. Моя задача - сделать плагин 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 имеет структуру, содержащую класс и методы, но я не знаю, как их анализировать и извлекать список методов.




Вам нужно написать 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;
}
} `
Не могли бы вы объяснить это более конкретно?