decodeMetacharacters (newVar);
    private void handleVariable (Line         line,                                 URL          url,                                 ParseContext parseContext)        throws ConfigurationException    {        char[] s = line.buffer.toString().toCharArray();        int    iSep;        for (iSep = 0; iSep < s.length; iSep++)        {            if ((s[iSep] == ':') || (s[iSep] == '='))                break;        }        if (iSep == s.length)        {            throw new ConfigurationException (Package.BUNDLE_NAME,                                              "Configuration.missingAssignOp",                                              "{0}, line {1}: Missing \"=\" "                                            + "or \":\" for variable "                                            + "definition.",                                              new Object[]                                              {                                                  url.toExternalForm(),                                                  String.valueOf (line.number)                                              });        }        if (iSep == 0)        {            throw new ConfigurationException (Package.BUNDLE_NAME,                                              "Configuration.noVariablName",                                              "{0}, line {1}: Missing "                                            + "variable name for variable "                                            + "definition.",                                              new Object[]                                              {                                                  url.toExternalForm(),                                                  String.valueOf (line.number)                                              });        }        int i = 0;        int j = iSep - 1;        while (Character.isWhitespace (s[i]))            i++;        while (Character.isWhitespace (s[j]))            j--;        if (i > j)        {            throw new ConfigurationException (Package.BUNDLE_NAME,                                              "Configuration.noVariablName",                                              "{0}, line {1}: Missing "                                            + "variable name for variable "                                            + "definition.",                                              new Object[]                                              {                                                  url.toExternalForm(),                                                  String.valueOf (line.number)                                              });        }        String varName = new String (s, i, j - i + 1);        if (varName.length() == 0)        {            throw new ConfigurationException (Package.BUNDLE_NAME,                                              "Configuration.noVariablName",                                              "{0}, line {1}: Missing "                                            + "variable name for variable "                                            + "definition.",                                              new Object[]                                              {                                                  url.toExternalForm(),                                                  String.valueOf (line.number)                                              });        }        checkVariableName (varName);        i = skipWhitespace (s, iSep + 1);        j = s.length - i;        Section currentSection = parseContext.currentSection;        String value = new String (s, i, j);        Variable existing = currentSection.getVariable (varName);        if (existing != null)        {            throw new ConfigurationException                              (Package.BUNDLE_NAME,                               "Configuration.duplicateVar",                               "{0}, line {1}: Section \"{2}\" has a "                             + "duplicate definition for variable "                             + "\"{3}\". The first instance was defined "                             + "on line {4}.",                               new Object[]                               {                                   url.toExternalForm(),                                   String.valueOf (line.number),                                   currentSection.getName(),                                   varName,                                   String.valueOf (existing.lineWhereDefined())                               });        }        Variable newVar = currentSection.addVariable (varName,                                                      value,                                                      line.number);        // Expand the metacharacters and variable references in the variable.        try        {            newVar.segmentValue();            VariableSubstituter sub = new UnixShellVariableSubstituter();            substituteVariables (newVar, sub, false);            decodeMetacharacters (newVar);            newVar.reassembleCookedValueFromSegments();        }        catch (VariableSubstitutionException ex)        {            throw new ConfigurationException (ex.getMessage());        }    }