Хорошо, поэтому в плагине, над которым я работаю, мне нужно получить значение параметров, переданных в аннотацию. Мне было предоставлено решение на канале # idea-users freenode, поскольку я должен был передать PsiAnnotationMemberValue в PsiLiteral и вызвать getValue(). И хотя это сработало для примитивов и для таких вещей, как Strings, теперь я пытаюсь получить пользовательское значение enum. И когда я попытался сделать это, мой код бросил ClassCastException со следующим сообщением об ошибке:Плагин разработки IntelliJ, получающий фактический объект от PsiAnnotationMemberValue
java.lang.ClassCastException: com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl cannot be cast to com.intellij.psi.PsiLiteral
Код:
@Override
public boolean eventIgnoresCancelled(PsiMethod method) {
PsiLiteral literal = null;
for (PsiAnnotation annotation : method.getModifierList().getAnnotations()) {
if(annotation.getQualifiedName().contains("IsCancelled")) {
literal = ((PsiLiteral) annotation.findAttributeValue("value"));
}
}
if(literal == null || literal.getValue() == null) {
return false;
}
Object tristateValue = literal.getValue();
try {
String name = (String) tristateValue.getClass().getMethod("name").invoke(tristateValue);
return name.equalsIgnoreCase("TRUE") || name.equalsIgnoreCase("UNDEFINED");
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
}
return false;
}
Отправьте свой код. – Shriram