boolean (@NotNull final PsiType qualifierType, @NotNull PsiScopeProcessor processor, @NotNull final PsiElement place, @NotNull ResolveState state) { if (isInAnnotation(place)) return true; final PsiClass aClass = PsiUtil.resolveClassInClassTypeOnly(qualifierType); if (aClass == null) return true; if (aClass.getLanguage() != GroovyLanguage.INSTANCE) return true; final PsiModifierList modifierList = aClass.getModifierList(); if (modifierList == null) return true; List<PsiClass> mixins = new ArrayList<>(); for (PsiAnnotation annotation : getAllMixins(modifierList)) { final PsiAnnotationMemberValue value = annotation.findAttributeValue("value"); if (value instanceof GrAnnotationArrayInitializer) { final GrAnnotationMemberValue[] initializers = ((GrAnnotationArrayInitializer)value).getInitializers(); for (GrAnnotationMemberValue initializer : initializers) { addMixin(initializer, mixins); } } else if (value instanceof GrExpression) { addMixin((GrExpression)value, mixins); } } final MixinProcessor delegate = new MixinProcessor(processor, qualifierType, place); for (PsiClass mixin : mixins) { if (!mixin.processDeclarations(delegate, state, null, place)) { return false; } } return true; }