申し訳ありませんが、私が取り組んでいるプラグインでは、注釈に渡されるパラメータの値を取得する必要があります。 PsiAnnotationMemberValueをPsiLiteralにキャストし、getValue()を呼び出す必要があるという#idea-users freenodeチャネルの解決策を得ました。これはプリミティブやStringsのようなものでは機能しましたが、現在はカスタムのenum値を取得しようとしています。私はそれを行うことを試みたときに、私のコードは次のエラーメッセージでClassCastExceptionが投げた:PsiAnnotationMemberValueから実際のオブジェクトを取得するIntelliJプラグイン開発
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