Eclipse误解了抛出异常的方面

时间:2012-11-29 08:40:56

标签: java eclipse annotations aspectj

在Eclipse + AJDT中,我实现了一个方法注释来检查授权,如下所示。

注释:

@Retention(RetentionPolicy.RUNTIME)
public @interface Secured {}

方面:

public aspect SecurityCheck {
  pointcut checkSecurity(Secured annotation) : execution(@Secured * *.*(..)) && @annotation(annotation);

  Object around(Secured annotation) throws PermissionException:
    checkSecurity(annotation) {
    ...
    if (...) throw new PermissionException();
    ...
    return proceed(annotation);
  }
}

用法:

@Secured
public void someMethod() {}

注释标记应该应用方面的所有方法。 Aspect检查授权并在失败时抛出PermissionException

但是,由于它是一个经检查的异常,someMethod()需要声明它:

@Secured
public void someMethod() throws PermissionException {}

Eclipse不喜欢这样:someMethod()内部没有任何内容可以抛出PermissionException,所以它会抱怨。我必须做一个解决方法:

@Secured
public void someMethod() throws PermissionException {
  warn();
}

@SuppressWarnings("unused")
public static void warn() throws PermissionException {}

这让Eclipse很开心,而且效果很好。但是,每次只是为了让Eclipse闭嘴而调用warn()是非常难看的。

可以做得更好吗?这是一个简单的Eclipse bug吗?

1 个答案:

答案 0 :(得分:0)

我相信你偶然发现了一个错误(https://bugs.eclipse.org/bugs/show_bug.cgi?id=240608),我相信这个错误没有得到解决。

您是否需要将其作为已检查的例外?