コード例 #1
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
 private void WriteApplicationEventProperty(SourceCodeWriter sourceWriter, EventDefinition definition)
 {
     sourceWriter.WriteLine("public override event {0}EventHandler {0} {{", definition.Name);
     sourceWriter.IncIndent();
     sourceWriter.WriteLine("add {{");
     sourceWriter.IncIndent();
     sourceWriter.WriteLine("if (_{0} == null) {{", ToPascalCase(definition));
     sourceWriter.IncIndent();
     sourceWriter.WriteLine("_forward{0}KeepAlive = Forward{0};", definition.Name);
     sourceWriter.WriteLine("EntryPoints.Set{0}(_forward{0}KeepAlive);", definition.Name);
     sourceWriter.DecIndent();
     sourceWriter.WriteLine("}}");
     //sourceWriter.DecIndent();
     sourceWriter.WriteLine("_{0} += value;", ToPascalCase(definition));
     sourceWriter.DecIndent();
     sourceWriter.WriteLine("}}");
     sourceWriter.WriteLine("remove{{");
     sourceWriter.IncIndent();
     sourceWriter.WriteLine("_{0} -= value;", ToPascalCase(definition));
     sourceWriter.WriteLine("if (_{0} == null) {{", ToPascalCase(definition));
     sourceWriter.IncIndent();
     sourceWriter.WriteLine("EntryPoints.Set{0}(null);", definition.Name);
     sourceWriter.WriteLine("_forward{0}KeepAlive = null;", definition.Name);
     sourceWriter.DecIndent();
     sourceWriter.WriteLine("}}");
     sourceWriter.DecIndent();
     sourceWriter.WriteLine("}}");
     sourceWriter.DecIndent();
     sourceWriter.WriteLine("}}");
 }
コード例 #2
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
        private void WriteApplicationEventHandler(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter, EventDefinition definition)
        {
            sourceWriter.WriteIndent();
            sourceWriter.Write("protected virtual ");
            WriteFunctionSignature(model, sourceWriter, definition.DelegateFunction, "On" + definition.Name);
            sourceWriter.Write(" {{");
            sourceWriter.WriteLine();
            sourceWriter.IncIndent();
            sourceWriter.WriteLine("var handler = _{0};", ToPascalCase(definition));
            sourceWriter.WriteLine("if (handler != null)");
            sourceWriter.IncIndent();
            sourceWriter.WriteIndent();
            sourceWriter.Write("handler(");
            var first = true;

            foreach (var p in definition.DelegateFunction.Parameters)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    sourceWriter.Write(", ");
                }
                sourceWriter.Write("{0}", p.Name);
            }
            sourceWriter.Write(");");
            sourceWriter.WriteLine();
            sourceWriter.DecIndent();
            sourceWriter.DecIndent();
            sourceWriter.WriteLine("}}");
        }
コード例 #3
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
 private void WriteCopyField(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter, string infosrc, string infodest, string fieldName, TypeReference type)
 {
     if (model.IsStruct(type))
     {
         sourceWriter.WriteLine("{0}{1} = {4}(vmid, {2}{3});", infodest, fieldName, infosrc, fieldName,
                                sourceWriter.IsNativeTypes ? "Wrap" : "Unwrap");
     }
     else if (model.IsClass(type))
     {
         sourceWriter.WriteLine("{4}(vmid, {0}{1}, {2}{3});", infosrc, fieldName, infodest, fieldName,
                                sourceWriter.IsNativeTypes ? "CopyWrap" : "CopyUnwrap");
     }
     else if (IsJavaObjectHandle(type))
     {
         sourceWriter.WriteLine("{0}{1} = {4}(vmid, {2}{3});", infodest, fieldName, infosrc, fieldName,
                                sourceWriter.IsNativeTypes ? "Wrap" : "Unwrap");
     }
     else if (type is ArrayTypeReference)
     {
         var elementType          = ((ArrayTypeReference)type).ElementType;
         var elementCountFiedName = ((ArrayTypeReference)type).ElementCountAttribute == null ? null : ((ArrayTypeReference)type).ElementCountAttribute.FieldName;
         sourceWriter.WriteLine("if ({0}{1} != null) {{", infosrc, fieldName);
         sourceWriter.IncIndent();
         if (elementCountFiedName == null)
         {
             sourceWriter.WriteLine("var count = {0}{1}.Length;", infosrc, fieldName);
         }
         else
         {
             sourceWriter.WriteLine("var count = {0}.{1};", infosrc, elementCountFiedName);
         }
         sourceWriter.IsNativeTypes = !sourceWriter.IsNativeTypes;
         sourceWriter.WriteLine("{0}{1} = new {2}[count];", infodest, fieldName, sourceWriter.GetTypeName(elementType));
         sourceWriter.IsNativeTypes = !sourceWriter.IsNativeTypes;
         sourceWriter.WriteLine("for(var i = 0; i < count; i++) {{");
         sourceWriter.IncIndent();
         WriteCopyField(model, sourceWriter, infosrc + fieldName, infodest + fieldName, "[i]", elementType);
         sourceWriter.DecIndent();
         sourceWriter.WriteLine("}}");
         sourceWriter.DecIndent();
         sourceWriter.WriteLine("}}");
     }
     else
     {
         sourceWriter.WriteLine("{0}{1} = {2}{3};", infodest, fieldName, infosrc, fieldName);
     }
 }
コード例 #4
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
        private void WriteApplicationWrapStructFunctions(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter, TypeDefinition definition)
        {
            sourceWriter.WriteIndent();
            sourceWriter.Write("private ");
            sourceWriter.IsNativeTypes = false;
            sourceWriter.WriteType(definition.Name);
            sourceWriter.Write(" Wrap(int vmid, ");
            sourceWriter.IsNativeTypes = true;
            sourceWriter.WriteType(definition.Name);
            sourceWriter.Write(" info)");
            sourceWriter.Write(" {{");
            sourceWriter.WriteLine();
            sourceWriter.IncIndent();
            sourceWriter.IsNativeTypes = false;
            sourceWriter.WriteLine("var result = new {0}();", sourceWriter.GetTypeName(definition.Name));
            sourceWriter.IsNativeTypes = true;
            WriteCopyFields(model, sourceWriter, "info", "result", definition);
            sourceWriter.WriteLine("return result;");
            sourceWriter.DecIndent();
            sourceWriter.WriteLine("}}");
            sourceWriter.WriteLine();

            sourceWriter.WriteIndent();
            sourceWriter.Write("private ");
            sourceWriter.IsNativeTypes = true;
            sourceWriter.WriteType(definition.Name);
            sourceWriter.Write(" Unwrap(int vmid, ");
            sourceWriter.IsNativeTypes = false;
            sourceWriter.WriteType(definition.Name);
            sourceWriter.Write(" info)");
            sourceWriter.Write(" {{");
            sourceWriter.WriteLine();
            sourceWriter.IncIndent();
            sourceWriter.IsNativeTypes = true;
            sourceWriter.WriteLine("var result = new {0}();", sourceWriter.GetTypeName(definition.Name));
            sourceWriter.IsNativeTypes = false;
            WriteCopyFields(model, sourceWriter, "info", "result", definition);
            sourceWriter.WriteLine("return result;");
            sourceWriter.DecIndent();
            sourceWriter.WriteLine("}}");
            sourceWriter.WriteLine();
        }
コード例 #5
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
        private void WriteEntryPointsClass(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter)
        {
            sourceWriter.IsNativeTypes = true;
            sourceWriter.WriteLine("/// <summary>");
            sourceWriter.WriteLine("/// Container of {0} WindowAccessBridge DLL entry points", GetLegacySuffix(sourceWriter));
            sourceWriter.WriteLine("/// </summary>");
            sourceWriter.WriteLine("internal class AccessBridgeEntryPoints{0} {{", GetLegacySuffix(sourceWriter));
            sourceWriter.IncIndent();

            sourceWriter.WriteLine("#region Functions");
            foreach (var function in model.Functions)
            {
                WriteLibraryFunctionProperty(sourceWriter, function);
            }
            sourceWriter.WriteLine("#endregion");
            sourceWriter.WriteLine();

            sourceWriter.WriteLine("#region Event functions");
            foreach (var eventDefinition in model.Events)
            {
                WriteLibraryEventProperty(sourceWriter, eventDefinition);
            }
            sourceWriter.WriteLine("#endregion");
            sourceWriter.WriteLine();

            sourceWriter.WriteLine("#region Function delegate types");
            foreach (var function in model.Functions)
            {
                WriteLibrayrFunctionsDelegate(model, sourceWriter, function);
            }
            sourceWriter.WriteLine("#endregion");
            sourceWriter.WriteLine();

            sourceWriter.WriteLine("#region Event delegate types");
            foreach (var definition in model.Events)
            {
                sourceWriter.WriteLine("[UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Unicode)]");
                WriteDelegateType(model, sourceWriter, definition.DelegateFunction);
            }
            sourceWriter.WriteLine("#endregion");
            sourceWriter.WriteLine();

            sourceWriter.WriteLine("#region Event function delegate types");
            foreach (var eventDefinition in model.Events)
            {
                sourceWriter.WriteLine("[UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Unicode)]");
                WriteLibraryEventDelegateType(sourceWriter, eventDefinition);
            }
            sourceWriter.WriteLine("#endregion");

            sourceWriter.DecIndent();
            sourceWriter.WriteLine("}}");
            sourceWriter.WriteLine();
        }
コード例 #6
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
        private void WriteApplicationCopyClassFunctions(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter, TypeDefinition definition)
        {
            sourceWriter.WriteIndent();
            sourceWriter.Write("private void CopyWrap(int vmid, ");
            sourceWriter.IsNativeTypes = true;
            sourceWriter.WriteType(definition.Name);
            sourceWriter.Write(" infoSrc, ");
            sourceWriter.IsNativeTypes = false;
            sourceWriter.WriteType(definition.Name);
            sourceWriter.Write(" infoDest)");
            sourceWriter.Write(" {{");
            sourceWriter.WriteLine();
            sourceWriter.IncIndent();
            sourceWriter.IsNativeTypes = true;
            WriteCopyFields(model, sourceWriter, "infoSrc", "infoDest", definition);
            sourceWriter.DecIndent();
            sourceWriter.WriteLine("}}");
            sourceWriter.WriteLine();

            sourceWriter.WriteIndent();
            sourceWriter.Write("private void CopyUnwrap(int vmid, ");
            sourceWriter.IsNativeTypes = false;
            sourceWriter.WriteType(definition.Name);
            sourceWriter.Write(" infoSrc, ");
            sourceWriter.IsNativeTypes = true;
            sourceWriter.WriteType(definition.Name);
            sourceWriter.Write(" infoDest)");
            sourceWriter.Write(" {{");
            sourceWriter.WriteLine();
            sourceWriter.IncIndent();
            sourceWriter.IsNativeTypes = false;
            WriteCopyFields(model, sourceWriter, "infoSrc", "infoDest", definition);
            sourceWriter.DecIndent();
            sourceWriter.WriteLine("}}");
            sourceWriter.WriteLine();
        }
コード例 #7
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
 // ReSharper disable once UnusedParameter.Local
 private void WriteEnumMembers(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter, EnumDefinition definition)
 {
     sourceWriter.IncIndent();
     definition.Members.ForEach(x => {
         sourceWriter.WriteIndent();
         sourceWriter.Write("{0}", x.Name);
         if (!string.IsNullOrEmpty(x.Value))
         {
             sourceWriter.Write(" = {0}", x.Value);
         }
         sourceWriter.Write(",");
         sourceWriter.WriteLine();
     });
     sourceWriter.DecIndent();
 }
コード例 #8
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
        private void WriteApplicationFunctionsClass(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter)
        {
            sourceWriter.IsNativeTypes = false;
            sourceWriter.WriteLine("/// <summary>");
            sourceWriter.WriteLine("/// Implementation of <see cref=\"AccessBridgeFunctions\"/> using <code>WindowsAccessBridge DLL</code>", GetLegacySuffix(sourceWriter));
            sourceWriter.WriteLine("/// entry points implemented in <see cref=\"AccessBridgeEntryPoints{0}\"/>", GetLegacySuffix(sourceWriter));
            sourceWriter.WriteLine("/// </summary>");
            sourceWriter.WriteLine("internal partial class AccessBridgeNativeFunctions{0} : AccessBridgeFunctions {{", GetLegacySuffix(sourceWriter));
            sourceWriter.IncIndent();

            sourceWriter.WriteLine();
            sourceWriter.WriteLine("#region Function implementations");
            sourceWriter.WriteLine();
            foreach (var function in model.Functions)
            {
                WriteApplicationFunctionImplementation(model, sourceWriter, function);
            }
            sourceWriter.WriteLine("#endregion");
            sourceWriter.WriteLine();

            sourceWriter.WriteLine("#region Wrap/Unwrap structs");
            sourceWriter.WriteLine();
            foreach (var definition in model.Structs)
            {
                if (model.StructNeedsWrapper(definition))
                {
                    WriteApplicationWrapStructFunctions(model, sourceWriter, definition);
                }
            }
            sourceWriter.WriteLine("#endregion");
            sourceWriter.WriteLine();

            sourceWriter.WriteLine("#region CopyWrap/CopyUnwrap classes");
            sourceWriter.WriteLine();
            foreach (var definition in model.Classes)
            {
                if (model.ClassNeedsWrapper(definition))
                {
                    WriteApplicationCopyClassFunctions(model, sourceWriter, definition);
                }
            }
            sourceWriter.WriteLine("#endregion");
            sourceWriter.WriteLine();

            sourceWriter.DecIndent();
            sourceWriter.WriteLine("}}");
            sourceWriter.WriteLine();
        }
コード例 #9
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
 private void WriteApplicationFunctionsInterface(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter)
 {
     sourceWriter.IsNativeTypes = false;
     sourceWriter.WriteLine("/// <summary>");
     sourceWriter.WriteLine("/// Common (i.e. legacy and non-legacy) abstraction over <code>WindowsAccessBridge DLL</code> functions");
     sourceWriter.WriteLine("/// </summary>");
     sourceWriter.WriteLine("public abstract class AccessBridgeFunctions {{");
     sourceWriter.IncIndent();
     foreach (var function in model.Functions)
     {
         WriteApplicationFunction(model, sourceWriter, function);
     }
     sourceWriter.DecIndent();
     sourceWriter.WriteLine("}}");
     sourceWriter.WriteLine();
 }
コード例 #10
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
 private void WriteApplicationEventsInterface(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter)
 {
     sourceWriter.IsNativeTypes = false;
     sourceWriter.WriteLine("/// <summary>");
     sourceWriter.WriteLine("/// Common (i.e. legacy and non-legacy)  abstraction over <code>WindowsAccessBridge DLL</code> events");
     sourceWriter.WriteLine("/// </summary>");
     sourceWriter.WriteLine("public abstract class AccessBridgeEvents : IDisposable {{");
     sourceWriter.IncIndent();
     foreach (var eventDefinition in model.Events)
     {
         WriteApplicationEvent(sourceWriter, eventDefinition);
     }
     sourceWriter.WriteLine();
     sourceWriter.WriteLine("public abstract void Dispose();");
     sourceWriter.DecIndent();
     sourceWriter.WriteLine("}}");
     sourceWriter.WriteLine();
 }
コード例 #11
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
        private void WriteApplicationEventForwarder(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter, EventDefinition definition)
        {
            sourceWriter.IsNativeTypes = true;
            sourceWriter.WriteIndent();
            sourceWriter.Write("private ");
            WriteFunctionSignature(model, sourceWriter, definition.DelegateFunction, "Forward" + definition.Name);
            sourceWriter.Write(" {{");
            sourceWriter.WriteLine();

            sourceWriter.IsNativeTypes = false;
            sourceWriter.IncIndent();
            sourceWriter.WriteIndent();
            sourceWriter.Write("On{0}(", definition.Name);
            var first = true;

            foreach (var p in definition.DelegateFunction.Parameters)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    sourceWriter.Write(", ");
                }
                if (IsJavaObjectHandle(p.Type))
                {
                    sourceWriter.Write("Wrap(vmid, {0})", p.Name);
                }
                else
                {
                    sourceWriter.Write("{0}", p.Name);
                }
            }
            sourceWriter.Write(");");
            sourceWriter.WriteLine();
            sourceWriter.DecIndent();
            sourceWriter.WriteLine("}}");
        }
コード例 #12
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
        private void WriteApplicationFunctionImplementation(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter, FunctionDefinition definition)
        {
            sourceWriter.WriteIndent();
            sourceWriter.Write("public override ");
            WriteFunctionSignature(model, sourceWriter, definition);
            sourceWriter.Write(" {{");
            sourceWriter.WriteLine();
            sourceWriter.IncIndent();

            //
            // Generate temporary local variables for out/ref parameters.
            //
            var javaOutObjects = definition.Parameters.Where(p => p.IsOut && IsJavaObjectHandle(p.Type)).ToList();
            var javaInObjects  = definition.Parameters.Where(p => !p.IsOut && IsJavaObjectHandle(p.Type)).ToList();

            foreach (var x in javaOutObjects)
            {
                sourceWriter.WriteIndent();
                sourceWriter.IsNativeTypes = true;
                sourceWriter.WriteType(x.Type);
                sourceWriter.IsNativeTypes = false;
                sourceWriter.Write(" {0}Temp;", x.Name);
                sourceWriter.WriteLine();
            }

            var outStructs = definition.Parameters.Where(p => (p.IsOut || p.IsRef || p.IsOutAttribute) && model.IsStruct(p.Type)).ToList();

            foreach (var x in outStructs)
            {
                if (model.TypeReferenceNeedsWrapper(x.Type))
                {
                    sourceWriter.WriteIndent();
                    sourceWriter.IsNativeTypes = true;
                    sourceWriter.WriteType(x.Type);
                    if (x.IsRef)
                    {
                        sourceWriter.Write(" {0}Temp = Unwrap(vmid, {0});", x.Name);
                    }
                    else
                    {
                        sourceWriter.Write(" {0}Temp;", x.Name);
                    }
                    sourceWriter.WriteLine();
                    sourceWriter.IsNativeTypes = false;
                }
            }
            var outClasses = definition.Parameters.Where(p => (p.IsOut || p.IsOutAttribute) && model.IsClass(p.Type)).ToList();

            foreach (var x in outClasses)
            {
                sourceWriter.WriteIndent();
                sourceWriter.IsNativeTypes = true;
                if (model.TypeReferenceNeedsWrapper(x.Type))
                {
                    sourceWriter.WriteType(x.Type);
                    sourceWriter.Write(" {0}Temp = new {1}();", x.Name, sourceWriter.GetTypeName(x.Type));
                }
                else
                {
                    sourceWriter.Write("{0} = new {1}();", x.Name, sourceWriter.GetTypeName(x.Type));
                }
                sourceWriter.WriteLine();
                sourceWriter.IsNativeTypes = false;
            }

            //
            // Generate function call
            //
            sourceWriter.WriteIndent();
            if (!IsVoid(definition.ReturnType))
            {
                sourceWriter.Write("var result = ");
            }
            sourceWriter.Write("EntryPoints.{0}(", definition.Name);
            var first = true;

            foreach (var p in definition.Parameters)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    sourceWriter.Write(", ");
                }
                if (p.IsOut)
                {
                    sourceWriter.Write("out ");
                }
                else if (p.IsRef)
                {
                    sourceWriter.Write("ref ");
                }
                if (IsJavaObjectHandle(p.Type))
                {
                    if (p.IsOut)
                    {
                        sourceWriter.Write("{0}Temp", p.Name);
                    }
                    else
                    {
                        sourceWriter.Write("Unwrap(vmid, {0})", p.Name);
                    }
                }
                else if (outStructs.Contains(p) || outClasses.Contains(p))
                {
                    if (model.TypeReferenceNeedsWrapper(p.Type))
                    {
                        sourceWriter.Write("{0}Temp", p.Name);
                    }
                    else
                    {
                        sourceWriter.Write("{0}", p.Name);
                    }
                }
                else
                {
                    sourceWriter.Write(p.Name);
                }
            }
            sourceWriter.Write(");");
            sourceWriter.WriteLine();

            //
            // Generate code to keep handles alive for GC.
            //
            foreach (var x in javaInObjects)
            {
                sourceWriter.WriteLine("GC.KeepAlive({0});", x.Name);
            }

            //
            // Generate code to copy back temporary local variables to ref/out parameters.
            //
            foreach (var x in javaOutObjects)
            {
                var wrapExpression = string.Format("{0} = Wrap(vmid, {0}Temp)", x.Name);
                if (IsStatusResult(definition.ReturnType))
                {
                    sourceWriter.WriteLine("if (Succeeded(result)) {{");
                    sourceWriter.IncIndent();
                    sourceWriter.WriteLine("{0};", wrapExpression);
                    sourceWriter.DecIndent();
                    sourceWriter.WriteLine("}} else {{");
                    sourceWriter.IncIndent();
                    sourceWriter.IsNativeTypes = true;
                    sourceWriter.WriteLine("{0}Temp = default({1});", x.Name, sourceWriter.GetTypeName(x.Type));
                    sourceWriter.IsNativeTypes = false;
                    sourceWriter.WriteLine("{0};", wrapExpression);
                    sourceWriter.DecIndent();
                    sourceWriter.WriteLine("}}");
                }
                else
                {
                    sourceWriter.WriteLine("{0};", wrapExpression);
                }
            }

            foreach (var x in outStructs)
            {
                if (model.TypeReferenceNeedsWrapper(x.Type))
                {
                    var wrapExpression = string.Format("{0} = Wrap(vmid, {0}Temp)", x.Name);
                    if (IsStatusResult(definition.ReturnType))
                    {
                        sourceWriter.WriteLine("if (Succeeded(result))");
                        sourceWriter.IncIndent();
                        sourceWriter.WriteLine("{0};", wrapExpression);
                        sourceWriter.DecIndent();
                        if (x.IsOut)
                        {
                            sourceWriter.WriteLine("else");
                            sourceWriter.IncIndent();
                            sourceWriter.WriteLine("{0} = default({1});", x.Name, sourceWriter.GetTypeName(x.Type));
                            sourceWriter.DecIndent();
                        }
                    }
                    else
                    {
                        sourceWriter.WriteLine("{0};", wrapExpression);
                    }
                }
            }

            foreach (var x in outClasses)
            {
                if (model.TypeReferenceNeedsWrapper(x.Type))
                {
                    if (x.IsOutAttribute && !sourceWriter.IsNativeTypes)
                    {
                        sourceWriter.WriteLine("{0} = new {1}();", x.Name, sourceWriter.GetTypeName(x.Type));
                    }

                    var wrapExpression = string.Format("CopyWrap(vmid, {0}Temp, {0})", x.Name);
                    if (IsStatusResult(definition.ReturnType))
                    {
                        sourceWriter.WriteLine("if (Succeeded(result))");
                        sourceWriter.IncIndent();
                        sourceWriter.WriteLine("{0};", wrapExpression);
                        sourceWriter.DecIndent();
                        if (x.IsOut)
                        {
                            sourceWriter.WriteLine("else");
                            sourceWriter.IncIndent();
                            sourceWriter.WriteLine("{0} = default({1});", x.Name, sourceWriter.GetTypeName(x.Type));
                            sourceWriter.DecIndent();
                        }
                    }
                    else
                    {
                        sourceWriter.WriteLine("{0};", wrapExpression);
                    }
                }
            }

            if (!IsVoid(definition.ReturnType))
            {
                if (IsJavaObjectHandle(definition.ReturnType))
                {
                    sourceWriter.WriteLine("return Wrap(vmid, result);");
                }
                else if (IsBool(definition.ReturnType))
                {
                    sourceWriter.WriteLine("return ToBool(result);");
                }
                else if (IsStatusResult(definition.ReturnType))
                {
                    sourceWriter.WriteLine("return Succeeded(result);");
                }
                else
                {
                    sourceWriter.WriteLine("return result;");
                }
            }

            sourceWriter.DecIndent();
            sourceWriter.WriteLine("}}");
            sourceWriter.WriteLine();
        }
コード例 #13
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
        private void WriteApplicationEventsClass(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter)
        {
            sourceWriter.IsNativeTypes = false;
            sourceWriter.WriteLine("/// <summary>");
            sourceWriter.WriteLine("/// Implementation of <see cref=\"AccessBridgeEvents\"/> over {0} WindowsAccessBridge entry points", GetLegacySuffix(sourceWriter));
            sourceWriter.WriteLine("/// </summary>");
            sourceWriter.WriteLine("internal partial class AccessBridgeNativeEvents{0} : AccessBridgeEvents {{", GetLegacySuffix(sourceWriter));
            sourceWriter.IncIndent();

            sourceWriter.WriteLine("#region Event fields");
            foreach (var eventDefinition in model.Events)
            {
                WriteApplicationEventField(sourceWriter, eventDefinition);
            }
            sourceWriter.WriteLine("#endregion");
            sourceWriter.WriteLine();

            sourceWriter.WriteLine("#region Native callback keep-alive fields");
            foreach (var eventDefinition in model.Events)
            {
                WriteApplicationEventKeepAliveField(sourceWriter, eventDefinition);
            }
            sourceWriter.WriteLine("#endregion");
            sourceWriter.WriteLine();

            sourceWriter.WriteLine("#region Event properties");
            foreach (var eventDefinition in model.Events)
            {
                WriteApplicationEventProperty(sourceWriter, eventDefinition);
            }
            sourceWriter.WriteLine("#endregion");
            sourceWriter.WriteLine();

            sourceWriter.WriteLine("#region Event handlers");
            foreach (var eventDefinition in model.Events)
            {
                WriteApplicationEventHandler(model, sourceWriter, eventDefinition);
            }
            sourceWriter.WriteLine("#endregion");
            sourceWriter.WriteLine();

            sourceWriter.WriteLine("private void DetachForwarders() {{");
            sourceWriter.IncIndent();
            foreach (var definition in model.Events)
            {
                sourceWriter.WriteLine("EntryPoints.Set{0}(null);", definition.Name);
                sourceWriter.WriteLine("_{0} = null;", ToPascalCase(definition));
                sourceWriter.WriteLine("_forward{0}KeepAlive = null;", definition.Name);
                sourceWriter.WriteLine();
            }
            sourceWriter.DecIndent();
            sourceWriter.WriteLine("}}");
            sourceWriter.WriteLine();

            sourceWriter.WriteLine("#region Event forwarders");
            foreach (var eventDefinition in model.Events)
            {
                WriteApplicationEventForwarder(model, sourceWriter, eventDefinition);
            }
            sourceWriter.WriteLine("#endregion");

            sourceWriter.DecIndent();
            sourceWriter.WriteLine("}}");
            sourceWriter.WriteLine();
        }
コード例 #14
0
ファイル: CodeGen.cs プロジェクト: rafysanchez/AtomationTools
 private void WriteFields(WindowsAccessBridgeModel model, SourceCodeWriter sourceWriter, TypeDefinition definition)
 {
     sourceWriter.IncIndent();
     definition.Fields.ForEach(f => WriteField(model, sourceWriter, definition, f));
     sourceWriter.DecIndent();
 }