2014-12-28 7 views
1

Я использую AJDT 2.2.4, который построен на AspectJ 1.81.AspectJ и Map <String, Object> Array

Рассмотрим этот простой аспект:

@Aspect 
public class SampleAspect { 
    @Before("@annotation(logMe)") 
    public void beforeAdvice(JoinPoint joinPoint, LogMe logMe) { 
     System.out.println("Before the method"); 
    } 
} 

распечатать текст перед LogMe аннотацию, которая:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface LogMe {} 

Теперь я применяю эту аннотацию к какой-то метод, как:

public class DummyClass { 
    @LogMe 
    public void doSomething() { 
     SampleUtil sampleUtil = new SampleUtil(); 
     //pass null for simplicity ! 
     sampleUtil.sampleMethod(null); 
     System.out.println("Do Something"); 
    } 
} 

Образец образца

public class SampleUtil {  
    public void sampleMethod(
     Map<String, Object>[] mapArray){ 
    } 
} 

Я получаю это предупреждение:

can not resolve this member: 
void foo.SampleUtil.sampleMethod(java.util.Map[]) [Xlint:unresolvableMember] 

Если изменить параметр sampleMethod к чему-то другому, как Map<String, Object> aMap ошибка будет идти.

Зачем мне это предупреждение?!

+1

FYI: Вы не можете назвать метод консультаций 'before'. Это зарезервированное ключевое слово в AspectJ, Eclipse покажет странное сообщение об ошибке. Я отредактирую ваш вопрос и переименую его в 'beforeAdvice'. Я также немного упрощу код аспекта, сохраняя эту проблему воспроизводимой. – kriegaex

ответ

0

Это предупреждение означает, что он не может найти foo.SampleUtil на входе. Inpath похож на путь к классам и используется для определения того, с чем переплетены аспекты.

Я предполагаю, что foo.SampleUtil находится в другом проекте, и это означает, что вам нужно явно добавить проект в свой inpath.

Поскольку вы используете AJDT внутри Eclipse, вы можете перейти на страницу свойств аспектного проекта и выбрать вкладку пути AspectJ. Выберите Inpath и добавьте другой проект.

+0

файлы находятся в одном проекте. Предоставляет ли AJDT любой файл журнала, возможно, я могу просмотреть его и опубликовать здесь, чтобы помочь. Также, как я упоминал, когда я меняю ** java.util.Map [] ** на ** java.util.Map ** предупреждение разрешено. –

+0

Это похоже на ошибку компилятора. Кажется, что код работает так, как ожидалось, но предупреждение выплевывается. Можете ли вы преобразовать свой аспект в аспект стиля кода? т.е. удалить аннотации и использовать 'aspect' вместо' class'. В общем стиле кода stylej лучше работает. Я попробовал это сам и больше не вижу ошибки. Кроме того, если у вас есть время, я бы посоветовал поднять ошибку в аспекте bugzilla: http://bugs.eclipse.org. –

+2

FYI, я воспроизвел проблему и создал [bug ticket] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=456357). – kriegaex