private void generateMarkerAndCode() {

        final Messager messager = environment.getMessager();

        final AnnotationTypeDeclaration annoDecl = (AnnotationTypeDeclaration) environment
                .getTypeDeclaration(Cardinal.class.getName());

        final Collection<Declaration> annotatedTypes = environment
                .getDeclarationsAnnotatedWith(annoDecl);

        for (final Declaration decl : annotatedTypes) {
            final Collection<AnnotationMirror> mirrors = decl
                    .getAnnotationMirrors();

            for (final AnnotationMirror mirror : mirrors) {
                final Map<AnnotationTypeElementDeclaration, AnnotationValue> valueMap = mirror
                        .getElementValues();
                final Set<Map.Entry<AnnotationTypeElementDeclaration, AnnotationValue>> valueSet = valueMap
                        .entrySet();

                final Map<String, AnnotationValue> parameterMap = new HashMap<String, AnnotationValue>();

                for (final Map.Entry<AnnotationTypeElementDeclaration, AnnotationValue> annoKeyValue : valueSet) {
                    final String key = annoKeyValue.getKey().getSimpleName();
                    final AnnotationValue value = annoKeyValue.getValue();
                    parameterMap.put(key, value);
                }

                final AnnotationValue valueMin = parameterMap
                        .get(PARAMETER_NAME_MIN);
                final AnnotationValue valueMax = parameterMap
                        .get(PARAMETER_NAME_MAX);

                checkMinValue(messager, mirror, valueMin);
                checkMaxValue(messager, mirror, valueMax);
                checkMinMaxRelation(messager, mirror, valueMin, valueMax);

                if (valueMin != null && valueMax != null) {
                    final int validMinValue = getValidIntegerValue(valueMin);
                    final int validMaxValue = getValidIntegerValue(valueMax);

                    checkTypeName(messager, decl, mirror, validMinValue,
                            validMaxValue);
                    writeFile(validMinValue, validMaxValue);

                }
            }// next annotation

        }

    }