public ServiceContext ServiceFromLean(Service service)
        {
            var name = MangleJavaTypeName(service.Name);
            var javaType = typeRegistry.FindType(defaultNamespace, name);

            var javaParents = new HashSet<string>();

            var serviceContext = new ServiceContext(name, javaType.Package, javaType.SimpleName, javaParents);

            //javaParents.Add("java.io.Serializable");

            return serviceContext;
        }
        public ServiceContext ServiceFromTrip(Service service)
        {
            var name = MangleCSharpTypeName(service.Name);
            var csharpType = typeRegistry.FindType(defaultNamespace, name);

            var csharpParents = new HashSet<string>();

            var serviceContext = new ServiceContext(name, csharpType.TypeNamespace, csharpType.TypeName, csharpParents);
            if (generatorConfig.ContainsTweak(GeneratorTweak.ADD_DISPOSABLE_INTERFACE))
            {
                csharpParents.Add("IDisposable");
                //serviceContext.AddMethod(DISPOSE_METHOD_CONTEXT);
            }

            return serviceContext;
        }
        public void Visit(Service service)
        {
            sb.Append("Service ").Append(service.Name);
            sb.AppendLine(" {");

            foreach (var method in service.Methods)
            {
                Visit(method);
                sb.AppendLine();
            }
            sb.AppendLine("}");
        }
        public void Visit(Service service)
        {
            var serviceContext = contextGenerator.ServiceFromLean(service);

            foreach (var method in service.Methods)
            {
                var methodContext = contextGenerator.MethodFromLean(method);
                serviceContext.AddMethod(methodContext);
            }

            Render(serviceContext, "service");
        }
 public void Visit(Service service)
 {
     throw new NotImplementedException();
 }
        public static List<Definition> BuildDefinitions(ParseTreeNodeList definitionNodes)
        {
            var definitions = new List<Definition>();
            foreach (var definitionNode in definitionNodes)
            {
                var definitionChildNode = definitionNode.ChildNodes[0];
                if (definitionChildNode.Term.Name == IdlGrammar.NTNAME_TENUM)
                {
                    var enumId = definitionChildNode.ChildNodes[0].Token.Text;
                    var enumFields = new List<IntegerEnumField>();
                    int nextDefaultEnumValue = 0; // trip enumerations start at zero by default
                    foreach (var enumFieldNode in definitionChildNode.ChildNodes[1].ChildNodes)
                    {
                        var enumFeildId = enumFieldNode.ChildNodes[0].Token.Text;
                        IntegerEnumField enumField = null;
                        if (enumFieldNode.ChildNodes.Count > 1 && 
                            enumFieldNode.ChildNodes[1].ChildNodes != null && 
                            enumFieldNode.ChildNodes[1].ChildNodes.Count > 0) // has enum value
                        {
                            var valueText = enumFieldNode.ChildNodes[1].ChildNodes[0].Token.Text;
                            int enumValue = int.Parse(valueText);
                            enumField = new IntegerEnumField(enumFeildId, enumValue, nextDefaultEnumValue);
                            nextDefaultEnumValue = ++enumValue;
                        }
                        else
                        {
                            enumField = new IntegerEnumField(enumFeildId, null, nextDefaultEnumValue);
                            ++nextDefaultEnumValue;
                        }
                        enumFields.Add(enumField);
                    }
                    var integerEnum = new IntegerEnum(enumId, enumFields);
                    definitions.Add(integerEnum);
                }
                else if (definitionChildNode.Term.Name == IdlGrammar.NTNAME_TSTRUCT)
                {
                    var name = definitionChildNode.ChildNodes[0].Token.Text;
                    var tripFields = BuildTripFields(definitionChildNode.ChildNodes[1], name);

                    var tripStruct = new Struct(name, tripFields);
                    definitions.Add(tripStruct);
                }
                else if (definitionChildNode.Term.Name == IdlGrammar.NTNAME_TSERVICE)
                {
                    var name = definitionChildNode.ChildNodes[0].Token.Text;
                    List<TripMethod> methods = new List<TripMethod>();

                    var firstChild = definitionChildNode.ChildNodes[1];
                    if (firstChild.Term.Name == IdlGrammar.NTNAME_FUNCTIONS)
                    {
                        methods = BuildTripMethods(definitionChildNode.ChildNodes[1]);
                    }
                    var service = new Service(name, methods);
                    definitions.Add(service);
                }
            }


            return definitions;
        }