public Optional<ClassName> copierClassFor(MemberModel memberModel) {
        if (canCopyReference(memberModel)) {
            return Optional.empty();
        }
        if (canUseStandardCopier(memberModel)) {
            return Optional.of(ClassName.get(StandardMemberCopier.class));
        }
        // FIXME: Ugly hack, but some services (Health) have shapes with names
        // that differ only in the casing of the first letter, and generating
        // classes for them breaks on case insensitive filesystems...
        String shapeName = memberModel.getC2jShape();
        if (shapeName.substring(0, 1).toLowerCase(Locale.ENGLISH).equals(shapeName.substring(0, 1))) {
            shapeName = "_" + shapeName;
        }
        return Optional.of(poetExtensions.getModelClass(shapeName + "Copier"));
    }
public Optional<ClassName> copierClassFor(MemberModel memberModel) {
        if (canCopyReference(memberModel)) {
            return Optional.empty();
        }
        if (canUseStandardCopier(memberModel)) {
            return Optional.of(ClassName.get(StandardMemberCopier.class));
        }
       
       
       
        String shapeName = memberModel.getC2jShape();
        if (shapeName.substring(0, 1).toLowerCase(Locale.ENGLISH).equals(shapeName.substring(0, 1))) {
            shapeName = "_" + shapeName;
        }
        return Optional.of(poetExtensions.getModelClass(shapeName + "Copier"));
    }
public optional<classname> copierclassfor(membermodel membermodel) { if (cancopyreference(membermodel)) { return optional.empty(); } if (canusestandardcopier(membermodel)) { return optional.of(classname.get(standardmembercopier.class)); } string shapename = membermodel.getc2jshape(); if (shapename.substring(0, 1).tolowercase(locale.english).equals(shapename.substring(0, 1))) { shapename = "_" + shapename; } return optional.of(poetextensions.getmodelclass(shapename + "copier")); }