无法将方法注释检索到Jar文件中

时间:2015-09-30 06:47:58

标签: java eclipse-plugin annotations cucumber-jvm

我尝试检索Cucumber注释以制作内容辅助插件。但我不知道为什么我的代码不起作用。 reflexion api为method.getDeclaredAnnotations()返回null。

public List<String> getStepDefinition() throws ClassNotFoundException, IOException {
        String location = Platform.getPreferencesService().
                  getString("myPref", "jarLocation", null, null);
        if(location != null) {
            File f = new File(location);
            URL url = f.toURI().toURL();  
            URL[] urls = new URL[]{url};
            URLClassLoader cl = new URLClassLoader(urls);

            Class<?> clazz = cl.loadClass("myStepDefinitionFile");
            Method[] methods = clazz.getDeclaredMethods();
            for (Method method : methods) {
                if(method.isAnnotationPresent(Soit.class)) {
                    Soit annotation = method.getAnnotation(Soit.class);
                    annotation.value();
                }
            }
            cl.close();
        }
        return null;
    }

在调试模式下,我看到找到了类,我可以列出所有方法。但我无法列出方法注释。反思api找不到它们。

这是Soit.class

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@StepDefAnnotation
@Documented
public @interface Soit {
    /**
     * @return a regular expression
     */
    String value();

    /**
     * @return max amount of milliseconds this is allowed to run for. 0 (default) means no restriction.
     */
    long timeout() default 0;
}

这是用它注释的方法:

@Override
    @Soit("^ok$")
    public void ok() {
        this.driver.ok();
    }

0 个答案:

没有答案