Beispiel #1
0
        public void WriteManagedToJavaWithNoTypes()
        {
            var v = new TypeNameMapGenerator(new string[0], logger: Diagnostic.CreateConsoleLogger());
            var o = new MemoryStream();

            v.WriteManagedToJava(o);
            var a = ToArray(o);

            Assert.AreEqual(52, a.Length);
        }
Beispiel #2
0
        public static void Run(CodeGeneratorOptions options)
        {
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }

            using (var resolver = new DirectoryAssemblyResolver(Diagnostic.CreateConsoleLogger(), loadDebugSymbols: false)) {
                Run(options, resolver);
            }
        }
Beispiel #3
0
        public void WriteManagedToJava()
        {
            var types = SupportDeclarations.GetTestTypeDefinitions();
            var v     = new TypeNameMapGenerator(types, logger: Diagnostic.CreateConsoleLogger());
            var o     = new MemoryStream();

            v.WriteManagedToJava(o);
            var a = ToArray(o);

            Save(a, "__m2j");
            var length = 190;
            var offset = 114;
            var e      =
                "version=1\u0000" +
                $"entry-count={types.Count}\u0000" +
                "entry-len=" + length + "\u0000" +
                "value-offset=" + offset + "\u0000" +
                GetM2JEntryLine(typeof(AbstractClass), "my/AbstractClass", offset, length) +
                GetM2JEntryLine(typeof(AbstractClassInvoker), "my/AbstractClass", offset, length) +
                GetM2JEntryLine(typeof(ActivityName), "activity/Name", offset, length) +
                GetM2JEntryLine(typeof(ApplicationName), "application/Name", offset, length) +
                GetM2JEntryLine(typeof(DefaultName.A.B), "crc64197ae30a36756915/DefaultName_A_B", offset, length) +
                GetM2JEntryLine(typeof(DefaultName.A), "crc64197ae30a36756915/DefaultName_A", offset, length) +
                GetM2JEntryLine(typeof(DefaultName.C.D), "crc64197ae30a36756915/DefaultName_C_D", offset, length) +
                GetM2JEntryLine(typeof(DefaultName), "crc64197ae30a36756915/DefaultName", offset, length) +
                GetM2JEntryLine(typeof(ExampleActivity), "my/ExampleActivity", offset, length) +
                GetM2JEntryLine(typeof(ExampleInstrumentation), "my/ExampleInstrumentation", offset, length) +
                GetM2JEntryLine(typeof(ExampleOuterClass.ExampleInnerClass), "crc64197ae30a36756915/ExampleOuterClass$ExampleOuterClass_ExampleInnerClass", offset, length) +
                GetM2JEntryLine(typeof(ExampleOuterClass), "crc64197ae30a36756915/ExampleOuterClass", offset, length) +
                GetM2JEntryLine(typeof(InstrumentationName), "instrumentation/Name", offset, length) +
                GetM2JEntryLine(typeof(NonStaticOuterClass.NonStaticInnerClass), "register/NonStaticOuterClass$NonStaticInnerClass", offset, length) +
                GetM2JEntryLine(typeof(NonStaticOuterClass), "register/NonStaticOuterClass", offset, length) +
                GetM2JEntryLine(typeof(ProviderName), "provider/Name", offset, length) +
                GetM2JEntryLine(typeof(ReceiverName), "receiver/Name", offset, length) +
                GetM2JEntryLine(typeof(RegisterName.DefaultNestedName), "register/Name_DefaultNestedName", offset, length) +
                GetM2JEntryLine(typeof(RegisterName.OverrideNestedName), "register/Name$Override", offset, length) +
                GetM2JEntryLine(typeof(RegisterName), "register/Name", offset, length) +
                GetM2JEntryLine(typeof(ServiceName), "service/Name", offset, length) +
                "\u0000";
            var ex = Encoding.UTF8.GetBytes(e);

            Save(ex, "__m2j.ex");
            CollectionAssert.AreEqual(ex, a);
        }
Beispiel #4
0
        public static int Main(string [] args)
        {
            var resolver = new DirectoryAssemblyResolver(logger: Diagnostic.CreateConsoleLogger(), loadDebugSymbols: false);

            bool   help       = false;
            string outputPath = null;
            int    verbosity  = 0;

            var options = new OptionSet {
                "Usage: jcw-gen.exe OPTIONS* ASSEMBLY+",
                "",
                "Generates Java Callable Wrappers from specified assemblies.",
                "",
                "Copyright 2016 Xamarin Inc.",
                "",
                "Options:",
                { "L=",
                  "{DIRECTORY} to resolve assemblies from.",
                  v => resolver.SearchDirectories.Add(v) },
                { "o=",
                  "{DIRECTORY} to write Java source code to.",
                  v => outputPath = v },
                { "v:",
                  "Logging verbosity.",
                  (int?v) => verbosity = v.HasValue ? v.Value : verbosity + 1 },
                { "h|help|?",
                  "Show this message and exit",
                  v => help = v != null },
            };
            var cache   = new TypeDefinitionCache();
            var scanner = new JavaTypeScanner(Diagnostic.CreateConsoleLogger(), cache);

            try {
                var assemblies = options.Parse(args);
                if (assemblies.Count == 0 || outputPath == null || help)
                {
                    int r = 0;
                    if (assemblies.Count == 0)
                    {
                        Console.Error.WriteLine("jcw-gen: No assemblies specified.");
                        r = 1;
                    }
                    else if (outputPath == null)
                    {
                        Console.Error.WriteLine("jcw-gen: No output directory specified. Use `jcw-gen -o PATH`.");
                        r = 1;
                    }
                    options.WriteOptionDescriptions(Console.Out);
                    return(r);
                }
                foreach (var assembly in assemblies)
                {
                    resolver.SearchDirectories.Add(Path.GetDirectoryName(assembly));
                    resolver.Load(assembly);
                }
                var types = scanner.GetJavaTypes(assemblies, resolver)
                            .Where(td => !JavaTypeScanner.ShouldSkipJavaCallableWrapperGeneration(td, cache));
                foreach (var type in types)
                {
                    GenerateJavaCallableWrapper(type, outputPath, cache);
                }
                return(0);
            }
            catch (Exception e) {
                Console.Error.Write("jcw-gen: {0}", verbosity > 0 ? e.ToString() : e.Message);
                return(1);
            }
            finally {
                resolver.Dispose();
            }
        }
Beispiel #5
0
        public void WriteJavaToManaged()
        {
            var v = new TypeNameMapGenerator(SupportDeclarations.GetTestTypeDefinitions(), logger: Diagnostic.CreateConsoleLogger());
            var o = new MemoryStream();

            v.WriteJavaToManaged(o);
            var a = ToArray(o);

            Save(a, "__j2m");
            var length = 259;
            var offset = 90;
            var e      =
                "version=1\u0000" +
                "entry-count=18\u0000" +
                "entry-len=" + length + "\u0000" +
                "value-offset=" + offset + "\u0000" +
                GetJ2MEntryLine(typeof(ActivityName), "activity/Name", offset, length) +
                GetJ2MEntryLine(typeof(ApplicationName), "application/Name", offset, length) +
                GetJ2MEntryLine(typeof(InstrumentationName), "instrumentation/Name", offset, length) +
                GetJ2MEntryLine(typeof(DefaultName), "md5fef72cac46d04ae5bdc90af5bb6221ad/DefaultName", offset, length) +
                GetJ2MEntryLine(typeof(DefaultName.A), "md5fef72cac46d04ae5bdc90af5bb6221ad/DefaultName_A", offset, length) +
                GetJ2MEntryLine(typeof(DefaultName.A.B), "md5fef72cac46d04ae5bdc90af5bb6221ad/DefaultName_A_B", offset, length) +
                GetJ2MEntryLine(typeof(DefaultName.C.D), "md5fef72cac46d04ae5bdc90af5bb6221ad/DefaultName_C_D", offset, length) +
                GetJ2MEntryLine(typeof(ExampleOuterClass), "md5fef72cac46d04ae5bdc90af5bb6221ad/ExampleOuterClass", offset, length) +
                GetJ2MEntryLine(typeof(ExampleOuterClass.ExampleInnerClass), "md5fef72cac46d04ae5bdc90af5bb6221ad/ExampleOuterClass$ExampleOuterClass_ExampleInnerClass", offset, length) +
                GetJ2MEntryLine(typeof(AbstractClass), "my/AbstractClass", offset, length) +
                GetJ2MEntryLine(typeof(ProviderName), "provider/Name", offset, length) +
                GetJ2MEntryLine(typeof(ReceiverName), "receiver/Name", offset, length) +
                GetJ2MEntryLine(typeof(RegisterName), "register/Name", offset, length) +
                GetJ2MEntryLine(typeof(RegisterName.OverrideNestedName), "register/Name$Override", offset, length) +
                GetJ2MEntryLine(typeof(RegisterName.DefaultNestedName), "register/Name_DefaultNestedName", offset, length) +
                GetJ2MEntryLine(typeof(NonStaticOuterClass), "register/NonStaticOuterClass", offset, length) +
                GetJ2MEntryLine(typeof(NonStaticOuterClass.NonStaticInnerClass), "register/NonStaticOuterClass$NonStaticInnerClass", offset, length) +
                GetJ2MEntryLine(typeof(ServiceName), "service/Name", offset, length) +
                "\u0000";
            var ex = Encoding.UTF8.GetBytes(e);

            Save(ex, "__j2m.ex");
            CollectionAssert.AreEqual(ex, a);
        }