Example #1
0
        public static List <JavaClass> Import(List <TypeDefinition> cilTypes)
        {
            if (_Where != null)
            {
                throw new InvalidOperationException();
            }

            _Where       = new JavaException.Where();
            JavaClasses  = new List <JavaClass>();
            GenericStack = new GenericStack();

            foreach (var cilType in cilTypes)
            {
                if (cilType.HasCustomAttribute("Discard"))
                {
                    continue; // if decorated with [java.attr.Discard], don't export to java
                }
                if (cilType.FullName == "<PrivateImplementationDetails>")
                {
                    continue; // discard the private class for array initializers
                }
                Where.Push($"assembly {cilType.Module.FileName}");

                TypeBuilder.BuildJavaClass(cilType, null);

                Where.Pop();
            }

            _Where = null;
            return(JavaClasses);
        }
Example #2
0
    public DotNetImporter(ModuleDefinition _module)
    {
        module       = _module;
        typeMap      = new Dictionary <string, TypeReference>();
        typeUse      = new HashSet <TypeReference>();
        funcIfcNames = new HashSet <string>();
        funcIfcTypes = new HashSet <TypeDefinition>();

        var typeSystem = module.TypeSystem;

        typeMap["./" + TypeCode.Empty]   = typeSystem.Void;
        typeMap["./" + TypeCode.Boolean] = typeSystem.Boolean;
        typeMap["./" + TypeCode.Byte]    = typeSystem.Byte;
        typeMap["./" + TypeCode.SByte]   = typeSystem.SByte;
        typeMap["./" + TypeCode.Char]    = typeSystem.Char;
        typeMap["./" + TypeCode.Int16]   = typeSystem.Int16;
        typeMap["./" + TypeCode.Int32]   = typeSystem.Int32;
        typeMap["./" + TypeCode.Int64]   = typeSystem.Int64;
        typeMap["./" + TypeCode.UInt16]  = typeSystem.UInt16;
        typeMap["./" + TypeCode.UInt32]  = typeSystem.UInt32;
        typeMap["./" + TypeCode.UInt64]  = typeSystem.UInt64;
        typeMap["./" + TypeCode.Single]  = typeSystem.Single;
        typeMap["./" + TypeCode.Double]  = typeSystem.Double;
        typeMap["java.lang.Object"]      = typeSystem.Object;
        typeMap["java.lang.String"]      = typeSystem.String;

        systemException = new TypeReference(
            "System", "Exception", module, typeSystem.CoreLibrary);

        methodRefNotImplementedException = new MethodReference(
            ".ctor", typeSystem.Void,
            new TypeReference(
                "System", "NotImplementedException",
                module, typeSystem.CoreLibrary));
        methodRefNotImplementedException.HasThis = true;

        Where = new JavaException.Where();
        Where.Push($"assembly '{module.Assembly.Name.Name}'");

        ImportCilTypes(module.Types);
    }