예제 #1
0
        static void GenerateJavaCallableWrapper(TypeDefinition type, string outputPath)
        {
            var generator = new JavaCallableWrapperGenerator(type, log: Console.WriteLine)
            {
            };

            generator.Generate(outputPath);
        }
예제 #2
0
        public static bool CreateJavaSources(TaskLoggingHelper log, IEnumerable <TypeDefinition> javaTypes, string outputPath,
                                             string applicationJavaClass, string androidSdkPlatform, bool useSharedRuntime, bool generateOnCreateOverrides, bool hasExportReference)
        {
            string monoInit = GetMonoInitSource(androidSdkPlatform, useSharedRuntime);

            bool ok = true;

            using (var memoryStream = new MemoryStream())
                using (var writer = new StreamWriter(memoryStream)) {
                    foreach (var t in javaTypes)
                    {
                        //Reset for reuse
                        memoryStream.SetLength(0);

                        try {
                            var jti = new JavaCallableWrapperGenerator(t, log.LogWarning)
                            {
                                GenerateOnCreateOverrides = generateOnCreateOverrides,
                                ApplicationJavaClass      = applicationJavaClass,
                                MonoRuntimeInitialization = monoInit,
                            };

                            jti.Generate(writer);
                            writer.Flush();

                            var path = jti.GetDestinationPath(outputPath);
                            MonoAndroidHelper.CopyIfStreamChanged(memoryStream, path);
                            if (jti.HasExport && !hasExportReference)
                            {
                                Diagnostic.Error(4210, "You need to add a reference to Mono.Android.Export.dll when you use ExportAttribute or ExportFieldAttribute.");
                            }
                        } catch (XamarinAndroidException xae) {
                            ok = false;
                            log.LogError(
                                subcategory: "",
                                errorCode: "XA" + xae.Code,
                                helpKeyword: string.Empty,
                                file: xae.SourceFile,
                                lineNumber: xae.SourceLine,
                                columnNumber: 0,
                                endLineNumber: 0,
                                endColumnNumber: 0,
                                message: xae.MessageWithoutCode,
                                messageArgs: new object [0]
                                );
                        } catch (Exception ex) {
                            ok = false;
                            Diagnostic.Error(4209, "Failed to create JavaTypeInfo for class: {0} due to {1}", t.FullName, ex);
                        }
                    }
                }
            return(ok);
        }
예제 #3
0
        static string Generate(Type type, string applicationJavaClass = null)
        {
            var td = SupportDeclarations.GetTypeDefinition(type);
            var g  = new JavaCallableWrapperGenerator(td, null)
            {
                ApplicationJavaClass = applicationJavaClass,
            };
            var o = new StringWriter();

            g.Generate("__o");
            g.Generate(o);
            return(o.ToString());
        }
예제 #4
0
        static void GenerateJavaCallableWrapper(TypeDefinition type, string outputPath, TypeDefinitionCache cache)
        {
            if (type.IsInterface)
            {
                return;
            }

            var generator = new JavaCallableWrapperGenerator(type, log: Console.WriteLine, cache)
            {
            };

            generator.Generate(outputPath);
        }
        static string Generate(Type type, string applicationJavaClass = null)
        {
            var td = SupportDeclarations.GetTypeDefinition(type);
            var g  = new JavaCallableWrapperGenerator(td, null)
            {
                ApplicationJavaClass = applicationJavaClass,
            };
            var o   = new StringWriter();
            var dir = Path.GetDirectoryName(typeof(JavaCallableWrapperGeneratorTests).Assembly.Location);

            g.Generate(Path.Combine(dir, "__o"));
            g.Generate(o);
            return(o.ToString());
        }
예제 #6
0
        static string Generate(Type type, string applicationJavaClass = null, string monoRuntimeInit = null)
        {
            var td = SupportDeclarations.GetTypeDefinition(type);
            var g  = new JavaCallableWrapperGenerator(td, log: null, cache: null)
            {
                ApplicationJavaClass      = applicationJavaClass,
                GenerateOnCreateOverrides = true,
                MonoRuntimeInitialization = monoRuntimeInit,
            };
            var o   = new StringWriter();
            var dir = Path.GetDirectoryName(typeof(JavaCallableWrapperGeneratorTests).Assembly.Location);

            g.Generate(Path.Combine(dir, "__o"));
            g.Generate(o);
            return(o.ToString());
        }
예제 #7
0
        static void GenerateJavaSource(TaskLoggingHelper log, TypeDefinition t, string outputPath, bool useSharedRuntime, bool generateOnCreateOverrides, bool hasExportReference)
        {
            try {
                var jti = new JavaCallableWrapperGenerator (t, log.LogWarning) {
                    UseSharedRuntime = useSharedRuntime,
                    GenerateOnCreateOverrides = generateOnCreateOverrides,
                };

                jti.Generate (outputPath);
                if (jti.HasExport && !hasExportReference)
                    Diagnostic.Error (4210, "You need to add a reference to Mono.Android.Export.dll when you use ExportAttribute or ExportFieldAttribute.");
            } catch (Exception ex) {
                if (ex is XamarinAndroidException)
                    throw;
                Diagnostic.Error (4209, "Failed to create JavaTypeInfo for class: {0} due to {1}", t.FullName, ex);
            }
        }
예제 #8
0
        static void GenerateJavaSource(TaskLoggingHelper log, TypeDefinition t, string outputPath, bool useSharedRuntime, bool generateOnCreateOverrides, bool hasExportReference)
        {
            try {
                var jti = new JavaCallableWrapperGenerator(t, log.LogWarning)
                {
                    UseSharedRuntime          = useSharedRuntime,
                    GenerateOnCreateOverrides = generateOnCreateOverrides,
                };

                jti.Generate(outputPath);
                if (jti.HasExport && !hasExportReference)
                {
                    Diagnostic.Error(4210, "You need to add a reference to Mono.Android.Export.dll when you use ExportAttribute or ExportFieldAttribute.");
                }
            } catch (Exception ex) {
                if (ex is XamarinAndroidException)
                {
                    throw;
                }
                Diagnostic.Error(4209, "Failed to create JavaTypeInfo for class: {0} due to {1}", t.FullName, ex);
            }
        }
예제 #9
0
        bool CreateJavaSources(IEnumerable <TypeDefinition> javaTypes, TypeDefinitionCache cache)
        {
            string outputPath                = Path.Combine(OutputDirectory, "src");
            string monoInit                  = GetMonoInitSource(AndroidSdkPlatform);
            bool   hasExportReference        = ResolvedAssemblies.Any(assembly => Path.GetFileName(assembly.ItemSpec) == "Mono.Android.Export.dll");
            bool   generateOnCreateOverrides = int.Parse(AndroidSdkPlatform) <= 10;

            bool ok = true;

            foreach (var t in javaTypes)
            {
                using (var writer = MemoryStreamPool.Shared.CreateStreamWriter()) {
                    try {
                        var jti = new JavaCallableWrapperGenerator(t, Log.LogWarning, cache)
                        {
                            GenerateOnCreateOverrides = generateOnCreateOverrides,
                            ApplicationJavaClass      = ApplicationJavaClass,
                            MonoRuntimeInitialization = monoInit,
                        };

                        jti.Generate(writer);
                        writer.Flush();

                        var path = jti.GetDestinationPath(outputPath);
                        MonoAndroidHelper.CopyIfStreamChanged(writer.BaseStream, path);
                        if (jti.HasExport && !hasExportReference)
                        {
                            Diagnostic.Error(4210, Properties.Resources.XA4210);
                        }
                    } catch (XamarinAndroidException xae) {
                        ok = false;
                        Log.LogError(
                            subcategory: "",
                            errorCode: "XA" + xae.Code,
                            helpKeyword: string.Empty,
                            file: xae.SourceFile,
                            lineNumber: xae.SourceLine,
                            columnNumber: 0,
                            endLineNumber: 0,
                            endColumnNumber: 0,
                            message: xae.MessageWithoutCode,
                            messageArgs: new object [0]
                            );
                    } catch (DirectoryNotFoundException ex) {
                        ok = false;
                        if (OS.IsWindows)
                        {
                            Diagnostic.Error(5301, Properties.Resources.XA5301, t.FullName, ex);
                        }
                        else
                        {
                            Diagnostic.Error(4209, Properties.Resources.XA4209, t.FullName, ex);
                        }
                    } catch (Exception ex) {
                        ok = false;
                        Diagnostic.Error(4209, Properties.Resources.XA4209, t.FullName, ex);
                    }
                }
            }
            return(ok);
        }