diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java
index 25535e2..8570b6c 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java
@@ -30,14 +30,17 @@
 
 import com.google.common.base.MoreObjects;
 
+import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype
         .YangDataTypes.BINARY;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS;
 import static org.onosproject.yangutils.translator.tojava.javamodel
         .AttributesJavaDataType.getJavaImportClass;
 import static org.onosproject.yangutils.translator.tojava.javamodel
         .AttributesJavaDataType.getJavaImportPackage;
-import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
 import static org.onosproject.yangutils.utils.UtilConstants.COLLECTION_IMPORTS;
+import static org.onosproject.yangutils.utils.UtilConstants.REGEX_IMPORTS;
+import static org.onosproject.yangutils.utils.UtilConstants.PATTERN;
 
 /**
  * Represents the information about individual imports in the generated file.
@@ -215,6 +218,9 @@
         if (referredTypesAttrInfo.getAttributeType().getDataType() == BINARY) {
             qualifiedInfoOfFromString.setClassInfo(BASE64);
             qualifiedInfoOfFromString.setPkgInfo(COLLECTION_IMPORTS);
+        } else if (referredTypesAttrInfo.getAttributeType().getDataType() == BITS) {
+            qualifiedInfoOfFromString.setClassInfo(PATTERN);
+            qualifiedInfoOfFromString.setPkgInfo(REGEX_IMPORTS);
         } else {
             qualifiedInfoOfFromString.setClassInfo(
                     getJavaImportClass(referredTypesAttrInfo.getAttributeType(),
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
index eae26fd..a9ce9b4 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
@@ -18,6 +18,8 @@
 
 import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
 import org.onosproject.yangutils.datamodel.YangAugmentableNode;
+import org.onosproject.yangutils.datamodel.YangBit;
+import org.onosproject.yangutils.datamodel.YangBits;
 import org.onosproject.yangutils.datamodel.YangCase;
 import org.onosproject.yangutils.datamodel.YangChoice;
 import org.onosproject.yangutils.datamodel.YangDerivedInfo;
@@ -44,6 +46,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import static java.util.Collections.sort;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
@@ -152,39 +155,52 @@
 import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
 import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
 import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getTypeFiles;
+import static org.onosproject.yangutils.utils.UtilConstants.ADD;
 import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
 import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE;
 import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
 import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
 import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
 import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
 import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_PARAMETER_FUNCTION_CALL;
 import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS;
+import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_CLASS;
 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
+import static org.onosproject.yangutils.utils.UtilConstants.GET;
 import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
+import static org.onosproject.yangutils.utils.UtilConstants.IF;
 import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
 import static org.onosproject.yangutils.utils.UtilConstants.INT;
 import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
 import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
 import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
 import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
 import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
+import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
 import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
 import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
 import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
 import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
 import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
+import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
 import static org.onosproject.yangutils.utils.UtilConstants.TO;
+import static org.onosproject.yangutils.utils.UtilConstants.TRIM_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
 import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
@@ -837,6 +853,8 @@
             String attributeName = attr.getAttributeName();
             String bitsToStringMethod =
                     getOverRideString() + methodSig +
+                            getToStringForBits(attr.getAttributeName(),
+                                                   (YangBits) type.getDataTypeExtendedInfo()) +
                             getReturnString(attributeName, EIGHT_SPACE_INDENTATION) +
                             PERIOD + TO + STRING_DATA_TYPE + openClose +
                             methodClose;
@@ -1327,4 +1345,38 @@
                 holder.getListOfLeafList() != null &&
                         !holder.getListOfLeafList().isEmpty();
     }
+
+    /**
+     * Generates toString code for bits.
+     *
+     * @param attributeName generated variable for bits
+     * @param yangBits parsed yang bits
+     * @return generated toString code for bits.
+     */
+    private static String getToStringForBits(String attributeName, YangBits yangBits) {
+        String lines = EIGHT_SPACE_INDENTATION + STRING_DATA_TYPE + SPACE + TMP_VAL + SPACE + EQUAL + SPACE +
+                QUOTES + QUOTES + SEMI_COLON + NEW_LINE;
+        Integer key;
+        YangBit bit;
+        String bitName;
+        for (Map.Entry<Integer, YangBit> entry : yangBits.getBitPositionMap().entrySet()) {
+            key = entry.getKey();
+            bit = entry.getValue();
+            if (bit == null) {
+                return null;
+            }
+
+            bitName = bit.getBitName();
+            // Add if condition to check bit position
+            lines += EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + attributeName +
+                    PERIOD + GET + OPEN_PARENTHESIS + key + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS +
+                    SPACE + OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION + TMP_VAL + SPACE +
+                    ADD + EQUAL + SPACE + QUOTES + bitName + SPACE + QUOTES + SEMI_COLON + NEW_LINE +
+                    EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
+        }
+
+        lines += EIGHT_SPACE_INDENTATION + TMP_VAL + PERIOD + TRIM_STRING + EMPTY_PARAMETER_FUNCTION_CALL +
+                SEMI_COLON + NEW_LINE;
+        return lines;
+    }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
index 682cbdc..c43e41d 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
@@ -17,6 +17,8 @@
 package org.onosproject.yangutils.translator.tojava.utils;
 
 import org.onosproject.yangutils.datamodel.YangAtomicPath;
+import org.onosproject.yangutils.datamodel.YangBit;
+import org.onosproject.yangutils.datamodel.YangBits;
 import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
 import org.onosproject.yangutils.datamodel.YangEnum;
 import org.onosproject.yangutils.datamodel.YangEnumeration;
@@ -29,6 +31,7 @@
 
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
@@ -90,6 +93,8 @@
 import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
 import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
+import static org.onosproject.yangutils.utils.UtilConstants.ELSE_IF;
+import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_PARAMETER_FUNCTION_CALL;
 import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
 import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
@@ -131,11 +136,13 @@
 import static org.onosproject.yangutils.utils.UtilConstants.OTHER;
 import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
 import static org.onosproject.yangutils.utils.UtilConstants.PARSE_INT;
+import static org.onosproject.yangutils.utils.UtilConstants.PATTERN;
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
 import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
 import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
 import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
 import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
+import static org.onosproject.yangutils.utils.UtilConstants.QUOTE_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
 import static org.onosproject.yangutils.utils.UtilConstants.REPLACE_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
@@ -161,6 +168,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.TRIM_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
 import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.VALIDATE_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
 import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF_SET;
@@ -194,6 +202,8 @@
 public final class MethodsGenerator {
     private static final String BITS_STRING_ARRAY_VAR = "bitsTemp";
     private static final String BIT_TEMP_VAR = "bitTemp";
+    private static final String BIT_NAMES_VAR = "bitNames";
+    private static final String BIT_NAME_VAR = "bitName";
 
     /**
      * Creates an instance of method generator.
@@ -783,7 +793,7 @@
         return EIGHT_SPACE_INDENTATION + StringGenerator.getTrySubString() +
                 StringGenerator.getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
                 getParsedSubString(attr, fromAttr) +
-                StringGenerator.getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
+                StringGenerator.getNewLineAndSpace(FOUR_SPACE_INDENTATION) +
                 StringGenerator.getReturnOfSubString() +
                 StringGenerator.getNewLineAndSpace(EIGHT_SPACE_INDENTATION) +
                 StringGenerator.getCatchSubString() +
@@ -806,81 +816,8 @@
                 .getDataType();
         switch (types) {
             case BITS:
-                String lines =
-                        targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE +
-                                NEW + SPACE + targetDataType + OPEN_PARENTHESIS +
-                                CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE;
-                builder.append(lines);
-            /*
-             *"            valInString = valInString.replace("{", " ");\n";
-             */
-                lines = TWELVE_SPACE_INDENTATION + FROM_STRING_PARAM_NAME + SPACE +
-                        EQUAL + SPACE + FROM_STRING_PARAM_NAME + PERIOD +
-                        REPLACE_STRING + OPEN_PARENTHESIS + SINGLE_QUOTE +
-                        OPEN_CURLY_BRACKET + SINGLE_QUOTE + COMMA + SPACE +
-                        SINGLE_QUOTE + SPACE + SINGLE_QUOTE + CLOSE_PARENTHESIS +
-                        SEMI_COLON + NEW_LINE;
-                builder.append(lines);
-            /*
-             *"            valInString = valInString.replace({, " ");\n";
-             */
-                lines = TWELVE_SPACE_INDENTATION + FROM_STRING_PARAM_NAME + SPACE +
-                        EQUAL + SPACE + FROM_STRING_PARAM_NAME + PERIOD +
-                        REPLACE_STRING + OPEN_PARENTHESIS + SINGLE_QUOTE +
-                        CLOSE_CURLY_BRACKET + SINGLE_QUOTE + COMMA + SPACE +
-                        SINGLE_QUOTE + SPACE + SINGLE_QUOTE + CLOSE_PARENTHESIS +
-                        SEMI_COLON + NEW_LINE;
-                builder.append(lines);
-            /*
-             *"            valInString = valInString.trim();\n"
-             */
-                lines = TWELVE_SPACE_INDENTATION + FROM_STRING_PARAM_NAME + SPACE +
-                        EQUAL + SPACE + FROM_STRING_PARAM_NAME + PERIOD +
-                        TRIM_STRING + OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
-                        SEMI_COLON + NEW_LINE;
-                builder.append(lines);
-            /*
-             *"            String[] bitsTemp = valInString.split(",", 0);\n"
-             */
-                lines = TWELVE_SPACE_INDENTATION + STRING_DATA_TYPE +
-                        SQUARE_BRACKETS + SPACE + BITS_STRING_ARRAY_VAR + SPACE +
-                        EQUAL + SPACE + FROM_STRING_PARAM_NAME + PERIOD +
-                        SPLIT_STRING + OPEN_PARENTHESIS + QUOTES + COMMA + QUOTES +
-                        COMMA + SPACE + ZERO + CLOSE_PARENTHESIS + SEMI_COLON +
-                        NEW_LINE;
-                builder.append(lines);
-            /*
-             *"            for (String bitTemp : bitsTemp) {\n"
-             */
-                lines = TWELVE_SPACE_INDENTATION + FOR + SPACE + OPEN_PARENTHESIS +
-                        STRING_DATA_TYPE + SPACE + BIT_TEMP_VAR + SPACE + COLON +
-                        SPACE + BITS_STRING_ARRAY_VAR + CLOSE_PARENTHESIS + SPACE +
-                        OPEN_CURLY_BRACKET + NEW_LINE;
-                builder.append(lines);
-            /*
-             *"                bitTemp = bitTemp.trim();\n"
-             */
-                lines = SIXTEEN_SPACE_INDENTATION + BIT_TEMP_VAR + SPACE + EQUAL +
-                        SPACE + BIT_TEMP_VAR + PERIOD + TRIM_STRING +
-                        OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
-                        SEMI_COLON + NEW_LINE;
-                builder.append(lines);
-            /*
-             *"                tmpVal.set(Integer.parseInt(bitTemp));\n"
-             */
-                lines = SIXTEEN_SPACE_INDENTATION + TMP_VAL + PERIOD +
-                        SET_METHOD_PREFIX + OPEN_PARENTHESIS + INTEGER_WRAPPER +
-                        PERIOD + PARSE_INT + OPEN_PARENTHESIS + BIT_TEMP_VAR +
-                        CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLON +
-                        NEW_LINE;
-                builder.append(lines);
-            /*
-             *"            }\n"
-             */
-                lines = TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
-                        NEW_LINE;
-                builder.append(lines);
-                return builder.toString();
+                return getFromStringForBits(attr, (YangBits) fromStringAttr.getAttributeType()
+                    .getDataTypeExtendedInfo());
             case BINARY:
                 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE +
                         BASE64 + PERIOD + GET_DECODER + OPEN_PARENTHESIS +
@@ -1663,4 +1600,60 @@
                 "        return this;\n" +
                 "    }\n";
     }
+
+    /**
+     * Generates fromString code for bits.
+     *
+     * @param attr attribute information
+     * @param yangBits parsed yang bits
+     * @return generated fromString code for bits.
+     */
+    private static String getFromStringForBits(JavaAttributeInfo attr, YangBits yangBits) {
+        String targetDataType = getReturnType(attr);
+        String key;
+        YangBit bit;
+        // Split the input string and check each bit name falls in configured yang file
+        String lines = targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE + NEW + SPACE + targetDataType +
+                OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE +
+                TWELVE_SPACE_INDENTATION + STRING_DATA_TYPE + SQUARE_BRACKETS + SPACE + BIT_NAMES_VAR + SPACE +
+                EQUAL + SPACE + FROM_STRING_PARAM_NAME + PERIOD + TRIM_STRING + EMPTY_PARAMETER_FUNCTION_CALL +
+                PERIOD + SPLIT_STRING + OPEN_PARENTHESIS + PATTERN + PERIOD + QUOTE_STRING +
+                OPEN_PARENTHESIS +  QUOTES + SPACE + QUOTES + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLON +
+                NEW_LINE +
+                TWELVE_SPACE_INDENTATION + FOR + SPACE + OPEN_PARENTHESIS + STRING_DATA_TYPE + SPACE + BIT_NAME_VAR +
+                SPACE + COLON + SPACE + BIT_NAMES_VAR + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+        boolean firstIf = true;
+        String ifCondition = IF;
+        for (Map.Entry<String, YangBit> entry : yangBits.getBitNameMap().entrySet()) {
+            key = entry.getKey();
+            bit = entry.getValue();
+            if (bit == null) {
+                return null;
+            }
+            if (firstIf) {
+                lines += SIXTEEN_SPACE_INDENTATION;
+            }
+            // Add condition checking for bit name
+            lines += ifCondition + SPACE + OPEN_PARENTHESIS + BIT_NAME_VAR + PERIOD +
+                    EQUALS_STRING + OPEN_PARENTHESIS + QUOTES + key + QUOTES + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS +
+                    SPACE + OPEN_CURLY_BRACKET + NEW_LINE +
+                    TWENTY_SPACE_INDENTATION + TMP_VAL + PERIOD + SET_METHOD_PREFIX + OPEN_PARENTHESIS +
+                    bit.getPosition() + CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE + SIXTEEN_SPACE_INDENTATION +
+                    CLOSE_CURLY_BRACKET;
+            if (firstIf) {
+                ifCondition = SPACE + ELSE_IF;
+                firstIf = false;
+            }
+        }
+
+        if (!firstIf) {
+            // This means at least one if condition is added in code generation
+            // Now add else condition for validation
+            lines += SPACE + ELSE + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + TWENTY_SPACE_INDENTATION + RETURN +
+                    SPACE + NULL + SEMI_COLON + NEW_LINE + SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET;
+        }
+
+        lines += NEW_LINE + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
+        return lines;
+    }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java b/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
index 2dca607..c098e20 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
@@ -644,6 +644,16 @@
     public static final String SPLIT_STRING = "split";
 
     /**
+     * Static attribute for Pattern.
+     */
+    public static final String PATTERN = "Pattern";
+
+    /**
+     * Static attribute for Quote.
+     */
+    public static final String QUOTE_STRING = "quote";
+
+    /**
      * Static attribute for from syntax.
      */
     public static final String FROM_STRING_METHOD_NAME = "fromString";
@@ -689,6 +699,11 @@
     public static final String IF = "if";
 
     /**
+     * Static attribute for else-if.
+     */
+    public static final String ELSE_IF = "else if";
+
+    /**
      * Static attribute for of.
      */
     public static final String OF = "of";
@@ -1359,6 +1374,11 @@
     public static final String COLLECTION_IMPORTS = "java.util";
 
     /**
+     * Static attribute for regex.
+     */
+    public static final String REGEX_IMPORTS = "java.util.regex";
+
+    /**
      * Static attribute for map.
      */
     public static final String MAP = "Map";
