Exemple #1
0
        public static void ConvertCurrentWorkspaceToDesignScriptAndSave(string filePathBase, DynamoModel currentDynamoModel)
        {
            try
            {
                var workspace = currentDynamoModel.CurrentWorkspace;

                var libCore         = currentDynamoModel.EngineController.LibraryServices.LibraryManagementCore;
                var libraryServices = new LibraryCustomizationServices(currentDynamoModel.PathManager);
                var nameProvider    = new NamingProvider(libCore, libraryServices);
                var controller      = currentDynamoModel.EngineController;
                var resolver        = currentDynamoModel.CurrentWorkspace.ElementResolver;
                var namingProvider  = new NamingProvider(controller.LibraryServices.LibraryManagementCore, libraryServices);

                var result = NodeToCodeCompiler.NodeToCode(libCore, workspace.Nodes, workspace.Nodes, namingProvider);
                NodeToCodeCompiler.ReplaceWithShortestQualifiedName(
                    controller.LibraryServices.LibraryManagementCore.ClassTable, result.AstNodes, resolver);
                var codegen = new ProtoCore.CodeGenDS(result.AstNodes);
                var ds      = codegen.GenerateCode();

                var dsPath = filePathBase + ".ds";
                if (File.Exists(dsPath))
                {
                    File.Delete(dsPath);
                }
                File.WriteAllText(dsPath, ds);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                Assert.Inconclusive("The current workspace could not be converted to Design Script.");
            }
        }
        private void ConvertNodesToCodeImpl(ConvertNodesToCodeCommand command)
        {
            var libServices    = new LibraryCustomizationServices(pathManager);
            var namingProvider = new NamingProvider(EngineController.LibraryServices.LibraryManagementCore, libServices);

            CurrentWorkspace.ConvertNodesToCodeInternal(EngineController, namingProvider);

            CurrentWorkspace.HasUnsavedChanges = true;
        }
        public void CanLoadValidLibraryCustomization()
        {
            var fn = Path.Combine(TestDirectory, @"core/library/ProtoGeometry.dll");

            var c = LibraryCustomizationServices.GetForAssembly(fn, pathManager: null);

            Assert.NotNull(c);

            var cat = c.GetNamespaceCategory("Autodesk.DesignScript.Geometry");

            Assert.AreEqual("Geometry", cat);
        }
Exemple #4
0
        internal IconWarehouse GetForAssembly(string assemblyPath)
        {
            var libraryCustomization = LibraryCustomizationServices.GetForAssembly(assemblyPath);

            if (libraryCustomization == null)
            {
                return(null);
            }

            var assembly = libraryCustomization.Assembly;

            if (!warehouses.ContainsKey(assembly))
            {
                warehouses[assembly] = new IconWarehouse(assembly);
            }

            return(warehouses[assembly]);
        }
Exemple #5
0
        /// <summary>
        /// Gets the stream for the given icon resource
        /// </summary>
        /// <param name="icon">Icon Url</param>
        /// <param name="extension">Returns the extension to describe the type of resource.</param>
        /// <returns>A valid Stream if the icon resource found successfully else null.</returns>
        private Stream GetIconStream(IconUrl icon, out string extension)
        {
            extension = "png";

            var path = Path.GetFullPath(icon.Path); //Get full path if it's a relative path.
            var libraryCustomization = LibraryCustomizationServices.GetForAssembly(path, pathManager, true);

            if (libraryCustomization == null)
            {
                return(null);
            }

            var assembly = libraryCustomization.ResourceAssembly;

            if (assembly == null)
            {
                return(null);
            }

            // "Name" can be "Some.Assembly.Name.customization" with multiple dots,
            // we are interested in removal of the "customization" part and the middle dots.
            var temp         = assembly.GetName().Name.Split('.');
            var assemblyName = String.Join("", temp.Take(temp.Length - 1));
            var rm           = new ResourceManager(assemblyName + imagesSuffix, assembly);

            using (var image = (Bitmap)rm.GetObject(icon.Name))
            {
                if (image == null)
                {
                    return(null);
                }

                var stream = new MemoryStream();
                image.Save(stream, ImageFormat.Png);

                return(stream);
            }
        }
Exemple #6
0
        internal IconWarehouse GetForAssembly(string assemblyPath, bool useAdditionalPaths = true)
        {
            var libraryCustomization = LibraryCustomizationServices.GetForAssembly(assemblyPath, pathManager, useAdditionalPaths);

            if (libraryCustomization == null)
            {
                return(null);
            }

            var assembly = libraryCustomization.ResourceAssembly;

            if (assembly == null)
            {
                return(null);
            }

            if (!warehouses.ContainsKey(assembly))
            {
                warehouses[assembly] = new IconWarehouse(assembly);
            }

            return(warehouses[assembly]);
        }
Exemple #7
0
        private static List <FunctionDescriptor> GetFunctionDescriptorsFromDll(PathManager pathManager, Assembly asm)
        {
            var mscorelib   = typeof(object).Assembly.GetName().Name;
            var descriptors = new List <FunctionDescriptor>();

            string extension = System.IO.Path.GetExtension(asm.Location).ToLower();

            if (extension != ".dll" && extension != ".exe")
            {
                return(new List <FunctionDescriptor>());
            }

            // Getting ZT imports from CLRModuleTypes
            var dllModule = new CLRDLLModule(asm.GetName().Name, asm);

            //TODO if this does not work replace with simpler method to generate types in module.
            dllModule.ImportCodeBlock("", "", new CodeBlockNode());
            List <CLRModuleType> moduleTypes = CLRModuleType.GetTypes((CLRModuleType mtype) => { return(mtype.Module == dllModule); });

            var customizationFile = LibraryCustomizationServices.GetForAssembly(asm.Location, pathManager);

            foreach (var t in moduleTypes)
            {
                try
                {
                    var descriptorCount = 0;
                    var className       = t.ClassNode.ClassName;
                    var externalLib     = t.ClassNode.ExternLibName;
                    var classIsHidden   = t.ClassNode.ClassAttributes?.HiddenInLibrary ?? false;

                    Program.VerboseControlLog($"considering members in type: {externalLib} {className }");

                    // For some reason mscorelib sometimes gets passed to here, so filtering it away.
                    if (t.CLRType.Assembly.GetName().Name == mscorelib ||
                        classIsHidden)
                    {
                        continue;
                    }

                    var ctorNodesAllCount = t.ClassNode.Procedures
                                            .OfType <ConstructorDefinitionNode>().Count();

                    var functionNodesAllCount = t.ClassNode.Procedures
                                                .OfType <FunctionDefinitionNode>().Count();

                    Program.VerboseControlLog($"considering {ctorNodesAllCount} constructors, and {functionNodesAllCount} functions from {className}");

                    var ctorNodesFiltered = t.ClassNode.Procedures
                                            .OfType <ConstructorDefinitionNode>()
                                            .Where(c => c.Access == ProtoCore.CompilerDefinitions.AccessModifier.Public &&
                                                   c.MethodAttributes != null ?
                                                   !c.MethodAttributes.IsObsolete && !c.MethodAttributes.HiddenInLibrary :
                                                   true)
                                            .Cast <AssociativeNode>();

                    var functionNodesFiltered = t.ClassNode.Procedures
                                                .OfType <FunctionDefinitionNode>()
                                                .Where(f => !f.MethodAttributes.HiddenInLibrary &&
                                                       !f.MethodAttributes.IsObsolete &&
                                                       f.Name != "_Dispose")
                                                .Cast <AssociativeNode>();

                    var associativeNodes = ctorNodesFiltered.Union(functionNodesFiltered);

                    foreach (var node in associativeNodes)
                    {
                        if (TryGetFunctionDescriptor(node, asm.Location, className, out FunctionDescriptor des))
                        {
                            descriptorCount++;
                            descriptors.Add(des);
                        }
                    }
                    Program.VerboseControlLog($"found {descriptorCount} function descriptors from {className}");
                }
                catch (Exception e)
                {
                    CommandHandler.LogExceptionToConsole(e);
                    continue;
                }
            }

            return(descriptors);
        }