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); }
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]); }
/// <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); } }
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]); }
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); }