public void print_org_emftext_language_aspectbind_patterns_ConstructorPattern(
     org.emftext.language.aspectbind.patterns.ConstructorPattern element,
     String outertab,
     java.io.PrintWriter out) {
   String localtab = outertab;
   // The printCountingMap contains a mapping from feature names to the number of
   // remaining elements that still need to be printed. The map is initialized with
   // the number of elements stored in each structural feature. For lists this is the
   // list size. For non-multiple features it is either 1 (if the feature is set) or
   // 0 (if the feature is null).
   java.util.Map<String, Integer> printCountingMap =
       new java.util.LinkedHashMap<String, Integer>(5);
   Object temp;
   temp =
       element.eGet(
           element
               .eClass()
               .getEStructuralFeature(
                   org.emftext.language.aspectbind.patterns.PatternsPackage
                       .CONSTRUCTOR_PATTERN__COMMENTS));
   printCountingMap.put("comments", temp == null ? 0 : ((java.util.Collection<?>) temp).size());
   temp =
       element.eGet(
           element
               .eClass()
               .getEStructuralFeature(
                   org.emftext.language.aspectbind.patterns.PatternsPackage
                       .CONSTRUCTOR_PATTERN__NAMESPACES));
   printCountingMap.put("namespaces", temp == null ? 0 : ((java.util.Collection<?>) temp).size());
   temp =
       element.eGet(
           element
               .eClass()
               .getEStructuralFeature(
                   org.emftext.language.aspectbind.patterns.PatternsPackage
                       .CONSTRUCTOR_PATTERN__MODIFIERS));
   printCountingMap.put("modifiers", temp == null ? 0 : ((java.util.Collection<?>) temp).size());
   temp =
       element.eGet(
           element
               .eClass()
               .getEStructuralFeature(
                   org.emftext.language.aspectbind.patterns.PatternsPackage
                       .CONSTRUCTOR_PATTERN__DECLARING_TYPE));
   printCountingMap.put("declaringType", temp == null ? 0 : 1);
   temp =
       element.eGet(
           element
               .eClass()
               .getEStructuralFeature(
                   org.emftext.language.aspectbind.patterns.PatternsPackage
                       .CONSTRUCTOR_PATTERN__PARAMETERS));
   printCountingMap.put("parameters", temp == null ? 0 : ((java.util.Collection<?>) temp).size());
   // print collected hidden tokens
   {
     org.eclipse.emf.ecore.EStructuralFeature feature =
         element
             .eClass()
             .getEStructuralFeature(
                 org.emftext.language.aspectbind.patterns.PatternsPackage
                     .CONSTRUCTOR_PATTERN__COMMENTS);
     Object value = element.eGet(feature);
     if (value instanceof java.util.List) {
       for (Object next : (java.util.List<?>) value) {
         out.print(
             tokenResolverFactory
                 .createCollectInTokenResolver("comments")
                 .deResolve(next, feature, element));
       }
     }
   }
   int count;
   boolean iterate = true;
   java.io.StringWriter sWriter = null;
   java.io.PrintWriter out1 = null;
   java.util.Map<String, Integer> printCountingMap1 = null;
   // DEFINITION PART BEGINS (Containment)
   count = printCountingMap.get("modifiers");
   if (count > 0) {
     java.util.List<?> list =
         (java.util.List<?>)
             element.eGet(
                 element
                     .eClass()
                     .getEStructuralFeature(
                         org.emftext.language.aspectbind.patterns.PatternsPackage
                             .CONSTRUCTOR_PATTERN__MODIFIERS));
     int index = list.size() - count;
     if (index < 0) {
       index = 0;
     }
     java.util.ListIterator<?> it = list.listIterator(index);
     while (it.hasNext()) {
       Object o = it.next();
       doPrint((org.eclipse.emf.ecore.EObject) o, out, localtab);
     }
     printCountingMap.put("modifiers", 0);
   }
   // DEFINITION PART BEGINS (Containment)
   count = printCountingMap.get("declaringType");
   if (count > 0) {
     Object o =
         element.eGet(
             element
                 .eClass()
                 .getEStructuralFeature(
                     org.emftext.language.aspectbind.patterns.PatternsPackage
                         .CONSTRUCTOR_PATTERN__DECLARING_TYPE));
     if (o != null) {
       doPrint((org.eclipse.emf.ecore.EObject) o, out, localtab);
     }
     printCountingMap.put("declaringType", count - 1);
   }
   // DEFINITION PART BEGINS (WhiteSpaces)
   // DEFINITION PART BEGINS (CsString)
   out.print(".");
   // DEFINITION PART BEGINS (WhiteSpaces)
   // DEFINITION PART BEGINS (CsString)
   out.print("new");
   // DEFINITION PART BEGINS (WhiteSpaces)
   // DEFINITION PART BEGINS (CsString)
   out.print("(");
   out.print(" ");
   // DEFINITION PART BEGINS (Containment)
   count = printCountingMap.get("parameters");
   if (count > 0) {
     Object o =
         element.eGet(
             element
                 .eClass()
                 .getEStructuralFeature(
                     org.emftext.language.aspectbind.patterns.PatternsPackage
                         .CONSTRUCTOR_PATTERN__PARAMETERS));
     java.util.List<?> list = (java.util.List<?>) o;
     int index = list.size() - count;
     if (index >= 0) {
       o = list.get(index);
     } else {
       o = null;
     }
     if (o != null) {
       doPrint((org.eclipse.emf.ecore.EObject) o, out, localtab);
     }
     printCountingMap.put("parameters", count - 1);
   }
   // DEFINITION PART BEGINS (CompoundDefinition)
   iterate = true;
   while (iterate) {
     sWriter = new java.io.StringWriter();
     out1 = new java.io.PrintWriter(sWriter);
     printCountingMap1 = new java.util.LinkedHashMap<String, Integer>(printCountingMap);
     print_org_emftext_language_aspectbind_patterns_ConstructorPattern_0(
         element, localtab, out1, printCountingMap1);
     if (printCountingMap.equals(printCountingMap1)) {
       iterate = false;
       out1.close();
     } else {
       out1.flush();
       out1.close();
       out.print(sWriter.toString());
       printCountingMap.putAll(printCountingMap1);
     }
   }
   // DEFINITION PART BEGINS (CsString)
   out.print(")");
   out.print(" ");
 }