void (@NotNull TransformationContext context) { PsiAnnotation annotation = PsiImplUtil.getAnnotation(context.getCodeClass(), BUILDER_FQN); if (!isApplicable(annotation, EXTERNAL_STRATEGY_NAME)) return; final PsiClass constructedClass = GrAnnotationUtil.inferClassAttribute(annotation, "forClass"); if (constructedClass == null || "groovy.transform.Undefined.CLASS".equals(constructedClass.getQualifiedName())) return; boolean includeSuper = isIncludeSuperProperties(annotation); if (constructedClass instanceof GrTypeDefinition) { PsiField[] fields = getFields((GrTypeDefinition)constructedClass, includeSuper, context); for (PsiField field : fields) { context.addMethod(DefaultBuilderStrategySupport.createFieldSetter(context.getCodeClass(), field, annotation, context)); } } else { Collection<PsiMethod> properties = PropertyUtilBase.getAllProperties(constructedClass, true, false, includeSuper).values(); for (PsiMethod setter : properties) { final PsiMethod builderSetter = createFieldSetter(context, setter, annotation); if (builderSetter != null) context.addMethod(builderSetter); } } context.addMethod(createBuildMethod(annotation, createType(constructedClass))); }