Esempio n. 1
0
        private void OrganizeImports(JCompilationUnit unit)
        {
            var imports = new HashSet <ITypeDefinition>();

            foreach (var ce in unit.Declarations)
            {
                foreach (var node in unit.Descendants <JMemberExpression>().ToList())
                {
                    var prevMember = node.PreviousMember as JMemberExpression;
                    if (prevMember != null && prevMember.TypeRef != null)
                    {
                        //cleanup type name when invoking static method on same type
                        if (node.TypeRef != null)
                        {
                            continue;
                        }
                        var typeDef2 = ((JMemberExpression)node.PreviousMember).TypeRef.GetDefinition();
                        if (typeDef2 == null)
                        {
                            continue;
                        }
                        if (typeDef2 == ce.TypeDefinition)
                        {
                            node.PreviousMember = null;
                        }
                        continue;
                    }
                    else if (node.TypeRef != null)
                    {
                        //cleanup type name and add to import
                        var typeDef = node.TypeRef.GetDefinition();
                        if (typeDef == null)
                        {
                            continue;
                        }
                        node.PreviousMember = null;
                        if (typeDef.IsKnownType(KnownTypeCode.Object) || typeDef.Namespace == "java.lang")
                        {
                            continue;
                        }
                        imports.Add(typeDef);
                    }
                }
            }
            var x  = imports.Select(t => t.JAccessStatic()).Where(t => !t.IsWildcardArg()).ToList();
            var xx = x.Select(t => new { Type = t, Code = t.ToJs() }).ToList();

            xx = xx.OrderBy(t => t.Code).Distinct(t => t.Code).ToList();
            foreach (var node in xx)
            {
                unit.Imports.Add(new JImport {
                    Type = node.Type
                });
            }
        }
Esempio n. 2
0
        void ConvertCsToJs()
        {
            TriggerEvent(BeforeConvertCsToJs);
            JsModelImporter = new JModelImporter
            {
                Compiler          = this,
                Project           = Project,
                Log               = Log,
                ExternalMetadata  = CsExternalMetadata,
                AssemblyName      = Args.AssemblyName,
                BeforeExportTypes = byFile =>
                {
                    var list = new List <ITypeDefinition>();
                    foreach (var list2 in byFile.Values)
                    {
                        list.AddRange(list2);
                    }
                    var skFiles = Project.GetNFiles(list);
                    Project.ApplyNavigator(skFiles);
                }
            };
            JsModelImporter.ConfigureJsTypeImporter += new Action <JTypeImporter>(JsModelImporter_ConfigureJsTypeImporter);
            var att = JMeta.GetJsExportAttribute(Project.Compilation.MainAssembly);

            if (att != null)
            {
                JsModelImporter.ExportComments = att.ExportComments;
            }


            JsModelImporter.Process();
            SkJsFiles = new List <JFileWrapper>();
            foreach (var group in JsModelImporter.ExportedTypes.GroupBy(t => GetJFilename(t.Type)))
            {
                var file = new JFileWrapper {
                    JsFile = new JFile {
                        Filename = group.Key
                    }, Compiler = this,
                };
                foreach (var et in group)
                {
                    var unit = new JCompilationUnit {
                        PackageName = et.Type.GetPackageName(), Declarations = { et.ClassDeclaration }
                    };
                    file.JsFile.Units.Add(unit);
                    SkJsFiles.Add(file);
                }
            }

            TriggerEvent(AfterConvertCsToJs);
        }
Esempio n. 3
0
        private void FixMultiStatements(JCompilationUnit unit)
        {
            JNode parent = unit;

            FixMultiStatements(parent);
        }
Esempio n. 4
0
 private void Cleanup(JCompilationUnit unit)
 {
     FixMultiStatements(unit);
     OrganizeImports(unit);
 }