PsiType (PsiAnnotationMemberValue value) { PsiType type = null; if (value instanceof PsiExpression) { type = ((PsiExpression)value).getType(); } else if (value instanceof PsiArrayInitializerMemberValue) { final PsiAnnotationMemberValue[] initializers = ((PsiArrayInitializerMemberValue)value).getInitializers(); PsiType currentType = null; for (PsiAnnotationMemberValue initializer : initializers) { if (initializer instanceof PsiArrayInitializerMemberValue) return null; if (!(initializer instanceof PsiExpression)) return null; final PsiType psiType = ((PsiExpression)initializer).getType(); if (psiType != null) { if (currentType == null) { currentType = psiType; } else { if (!TypeConversionUtil.isAssignable(currentType, psiType)) { if (TypeConversionUtil.isAssignable(psiType, currentType)) { currentType = psiType; } else { return null; } } } } } if (currentType != null) { type = currentType.createArrayType(); } } if (type != null && type.accept(AnnotationsHighlightUtil.AnnotationReturnTypeVisitor.INSTANCE).booleanValue()) { return type; } return null; }