public void parseOption(final Bindings b, final ErlangProjectProperties result) {
   try {
     String _atom = b.getAtom("Tag");
     boolean _matched = false;
     if (!_matched) {
       if (Objects.equal(_atom, "i")) {
         _matched = true;
         Collection<IPath> _includeDirs = result.getIncludeDirs();
         final List<IPath> incs = new ArrayList<IPath>(_includeDirs);
         String _string = b.getString("Arg");
         final Path inc = new Path(_string);
         boolean _contains = incs.contains(inc);
         boolean _not = (!_contains);
         if (_not) {
           incs.add(inc);
         }
         result.setIncludeDirs(incs);
       }
     }
   } catch (Throwable _e) {
     throw Exceptions.sneakyThrow(_e);
   }
 }
 @Override
 public void describeTo(final Description description) {
   description.appendText("is same as ").appendText(item.toString());
 }
 public ErlangProjectProperties decodeConfig(final String config) {
   ErlangProjectProperties _xblockexpression = null;
   {
     final ErlangProjectProperties result = new ErlangProjectProperties();
     Path _path = new Path("ebin");
     result.setOutputDir(_path);
     result.setSourceDirs();
     IErlangEngine _instance = ErlangEngine.getInstance();
     SimpleParserService _simpleParserService = _instance.getSimpleParserService();
     final List<OtpErlangObject> content = _simpleParserService.parse(config);
     boolean _isEmpty = content.isEmpty();
     if (_isEmpty) {
       return result;
     }
     final Procedure1<OtpErlangObject> _function =
         new Procedure1<OtpErlangObject>() {
           public void apply(final OtpErlangObject erl_opts) {
             try {
               final Bindings bindings = ErlUtils.match("{Src,Opts}", erl_opts);
               boolean _tripleNotEquals = (bindings != null);
               if (_tripleNotEquals) {
                 final String src = bindings.getAtom("Src");
                 String _xifexpression = null;
                 boolean _contains = src.contains("/");
                 if (_contains) {
                   String[] _split = src.split("/");
                   _xifexpression =
                       IterableExtensions.<String>head(
                           ((Iterable<String>) Conversions.doWrapArray(_split)));
                 } else {
                   _xifexpression = "src";
                 }
                 final String path = _xifexpression;
                 Collection<IPath> _sourceDirs = result.getSourceDirs();
                 final ArrayList<IPath> sd = new ArrayList<IPath>(_sourceDirs);
                 Path _path = new Path(path);
                 sd.add(_path);
                 result.setSourceDirs(sd);
                 final Collection<OtpErlangObject> opts = bindings.getList("Opts");
                 boolean _tripleNotEquals_1 = (opts != null);
                 if (_tripleNotEquals_1) {
                   final Procedure1<OtpErlangObject> _function =
                       new Procedure1<OtpErlangObject>() {
                         public void apply(final OtpErlangObject opt) {
                           try {
                             final Bindings b = ErlUtils.match("{Tag,Arg}", opt);
                             boolean _tripleNotEquals = (b != null);
                             if (_tripleNotEquals) {
                               EmakeConfigurationSerializer.this.parseOption(b, result);
                             }
                           } catch (Throwable _e) {
                             throw Exceptions.sneakyThrow(_e);
                           }
                         }
                       };
                   IterableExtensions.<OtpErlangObject>forEach(opts, _function);
                 }
               }
             } catch (Throwable _e) {
               throw Exceptions.sneakyThrow(_e);
             }
           }
         };
     IterableExtensions.<OtpErlangObject>forEach(content, _function);
     _xblockexpression = result;
   }
   return _xblockexpression;
 }
 @Override
 public boolean matches(final Object other) {
   return item.equals(other);
 }