void (@NotNull PsiClass psiClass, @NotNull PsiAnnotation psiAnnotation, @NotNull List<? super PsiElement> target, @Nullable String nameHint) { SuperBuilderHandler builderHandler = getBuilderHandler(); final String builderClassName = builderHandler.getBuilderClassName(psiClass); final PsiClass builderBaseClass = psiClass.findInnerClassByName(builderClassName, false); if (null != builderBaseClass) { final PsiClassType psiTypeBaseWithGenerics = SuperBuilderHandler.getTypeWithWildcardsForSuperBuilderTypeParameters(builderBaseClass); builderHandler.createBuilderBasedConstructor(psiClass, builderBaseClass, psiAnnotation, psiTypeBaseWithGenerics) .ifPresent(target::add); // skip generation of builder methods, if class is abstract if (!psiClass.hasModifierProperty(PsiModifier.ABSTRACT)) { final String builderImplClassName = builderHandler.getBuilderImplClassName(psiClass); final PsiClass builderImplClass = psiClass.findInnerClassByName(builderImplClassName, false); if (null != builderImplClass) { builderHandler.createBuilderMethodIfNecessary(psiClass, builderBaseClass, builderImplClass, psiAnnotation, psiTypeBaseWithGenerics) .ifPresent(target::add); SuperBuilderHandler.createToBuilderMethodIfNecessary(psiClass, builderBaseClass, builderImplClass, psiAnnotation, psiTypeBaseWithGenerics) .ifPresent(target::add); } } } }