public Assembly getCachedCompiledAssembly_MD5(string key)
 {
     if (CachedCompiledAssemblies.hasKey(key))
     {
         var cachedAssembly = CachedCompiledAssemblies[key];
         if (cachedAssembly.fileExists())
         {
             "found cached compiled assembly: {0}".info(cachedAssembly);
             return(cachedAssembly.assembly());
         }
     }
     return(null);
 }
示例#2
0
        public void TestDictionary()
        {
            Dictionary <string, int> d = new Dictionary <string, int>()
            {
                { "cat", 2 },
                { "dog", 1 },
            };

            Assert.AreEqual(new string[] { "cat", "dog" }, d.Keys);
            Assert.AreEqual(new int[] { 2, 1 }, d.Values);
            Assert.AreEqual(new string[] { "cat", "dog" }, d.keys());
            Assert.AreEqual(new int[] { 2, 1 }, d.values());
            Assert.AreEqual("System.Collections.Generic.Dictionary`2[System.String,System.Int32]", d.ToString());
            Assert.AreEqual("{cat: 2, dog: 1}", d.to_s());
            Assert.AreEqual("{}", new Dictionary <string, int>()
            {
            }.to_s());

            Assert.AreEqual(true, d.hasKey("dog"));
            Assert.AreEqual(false, d.hasKey("apple"));

            Assert.AreEqual(1, d.fetch("dog"));
            Assert.AreEqual(1, d["dog"]);
            Assert.AreEqual(null, d.fetch("apple"));

            Assert.AreEqual(2, d.Count);

            d.store("horse", 5);
            Assert.AreEqual("{cat: 2, dog: 1, horse: 5}", d.to_s());
            Assert.AreEqual(3, d.Count);

            d.delete("apple");
            Assert.AreEqual("{cat: 2, dog: 1, horse: 5}", d.to_s());

            d.delete("cat");
            Assert.AreEqual("{dog: 1, horse: 5}", d.to_s());
            Assert.AreEqual(2, d.Count);

            Dictionary <string, int> e = new Dictionary <string, int>()
            {
                { "cow", 7 },
            };

            d.merge(e);
            Assert.AreEqual("{cow: 7, dog: 1, horse: 5}", d.to_s());
            Assert.AreEqual(3, d.Count);

            d.clear();
            Assert.AreEqual(0, d.Count);
        }
        public static string findScriptOnLocalScriptFolder(string file)
        {
            if (file.contains("/", @"\"))       // currenlty relative paths are not supported
            {
                return("");
            }

            //string defaultLocalScriptsFolder = @"C:\O2\O2Scripts_Database\_Scripts";

            if (LocalScriptFileMappings.hasKey(file))
            {
                return(LocalScriptFileMappings[file]);
            }
            var mappedFilePath = "";

            var filesToSearch = PublicDI.config.LocalScriptsFolder.files(true, "*.cs");

            filesToSearch.add(PublicDI.config.LocalScriptsFolder.files(true, "*.o2"));
            foreach (var localScriptFile in filesToSearch)
            {
                if (localScriptFile.fileName().ToLower().StartsWith(file.ToLower()))
                //if (fileToResolve.lower() == localScriptFile.fileName().lower())
                {
                    PublicDI.log.debug("in CompileEngine, file reference '{0}' was mapped to local O2 Script file '{1}'", file, localScriptFile);
                    mappedFilePath = localScriptFile;
                    break;
                }
            }
            if (mappedFilePath.valid())
            {
                LocalScriptFileMappings.add(file, mappedFilePath);
            }
            return(mappedFilePath);
        }
示例#4
0
        public static TreeNode jint_Show_Statements <T>(this TreeNode treeNode, Statement statement, bool addChildStatements)
            where T : Statement
        {
            treeNode.clear();
            var nodesAdded = new Dictionary <string, TreeNode>();

            foreach (var childStatement in statement.statements <T>(true))
            {
                var codeReference = childStatement.firstSourceCodeReference(true);
                var nodeText      = childStatement.str();
                if (nodeText.valid())
                {
                    if (codeReference.isNull())
                    {
                        nodeText += "   (no source code mapping)";
                    }

                    if (nodesAdded.hasKey(nodeText).isFalse())
                    {
                        nodesAdded.add(nodeText, treeNode.add_Node(nodeText, codeReference));
                    }

                    var newNode = nodesAdded[nodeText].add_Node(nodeText, codeReference);
                    if (addChildStatements)
                    {
                        newNode.jint_Show_AstTree(childStatement);
                    }
                }
            }
            return(treeNode);
        }
        public static Dictionary <Guid, guidanceExplorer> addGuidanceExplorerObject(this Dictionary <Guid, guidanceExplorer> guidanceExplorers, guidanceExplorer _guidanceExplorer)
        {
            if (_guidanceExplorer.notNull())
            {
                try
                {
                    var libraryGuid = _guidanceExplorer.library.name.guid();

                    //check if the name is already there
                    foreach (guidanceExplorer guidanceExplorer in guidanceExplorers.Values)
                    {
                        if (guidanceExplorer.library.caption == _guidanceExplorer.library.caption)
                        {
                            "[addGuidanceExplorerObject]: Skipping load due to duplicate Library name '{0}' was in both library {1} and {2}".error(guidanceExplorer.library.caption, guidanceExplorer.library.name, _guidanceExplorer.library.name);
                            return(guidanceExplorers);
                        }
                    }
                    //check if the guid is already there
                    if (guidanceExplorers.hasKey(libraryGuid))
                    {
                        "[addGuidanceExplorerObject]: for {0} , duplicate LibraryID detected, assiging a new Library Id: {0}".error(_guidanceExplorer.library.caption, libraryGuid);
                        libraryGuid = Guid.NewGuid();
                        _guidanceExplorer.library.name = libraryGuid.str();
                        "[addGuidanceExplorerObject]: new ID for library {0} is now {1}".error(_guidanceExplorer.library.caption, libraryGuid);
                        _guidanceExplorer.xmlDB_Save_GuidanceExplorer(TM_Xml_Database.Current, false);
                    }
                    guidanceExplorers.Add(libraryGuid, _guidanceExplorer);
                }
                catch                //(Exception ex)
                {
                    "[addGuidanceExplorerObject] error importing guidanceExplorer: {0}".error(_guidanceExplorer);
                }
            }
            return(guidanceExplorers);
        }
        public static Dictionary <string, string> toStringDictionary(this string targetString, string rowSeparator, string keySeparator)
        {
            var stringDictionary = new Dictionary <string, string>();

            try
            {
                foreach (var row in targetString.split(rowSeparator))
                {
                    if (row.valid())
                    {
                        var splittedRow = row.split(keySeparator);
                        if (splittedRow.size() != 2)
                        {
                            "[toStringDictionary] splittedRow was not 2: {0}".error(row);
                        }
                        else
                        {
                            if (stringDictionary.hasKey(splittedRow[0]))
                            {
                                "[toStringDictionary] key already existed in the collection: {0}".error(splittedRow[0]);
                            }
                            else
                            {
                                stringDictionary.Add(splittedRow[0], splittedRow[1]);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                "[toStringDictionary] {0}".error(ex.Message);
            }
            return(stringDictionary);
        }
 public static Dictionary <T, T1> add <T, T1>(this Dictionary <T, T1> dictionary, T key, T1 value)
 {
     try
     {
         if (dictionary.isNull())
         {
             "[Dictionary<T, T1> add] dictionary object was null".error();
         }
         else
         {
             lock (dictionary)
             {
                 if (dictionary.hasKey(key))
                 {
                     dictionary[key] = value;
                 }
                 else
                 {
                     dictionary.Add(key, value);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         ex.log("[in Dictionary<T, T1> .add) key = {0}  , value = {1}".format(key, value));
     }
     return(dictionary);
 }
示例#8
0
        public static Dictionary <string, string> processTrivia(string trivia)
        {
            var result = new Dictionary <string, string> {
            };

            if (trivia != null && trivia != "")
            {
                var regex = new RegExp("(?:\\n|^)\\s*(?://|#|/\\*\\*?)\\s*@([A-Za-z0-9_.-]+) ?((?!\\n|\\*/|$).+)?");
                while (true)
                {
                    var match = regex.exec(trivia);
                    if (match == null)
                    {
                        break;
                    }
                    if (result.hasKey(match.get(1)))
                    {
                        // @php $result[$match[1]] .= "\n" . $match[2];
                        // @python result[match[1]] += "\n" + match[2]
                        // @csharp result[match[1]] += "\n" + match[2];
                        // @java result.put(match[1], result.get(match[1]) + "\n" + match[2]);
                        result[match[1]] += "\n" + match[2];
                    }
                    else
                    {
                        result.set(match.get(1), (match.get(2) ?? "") == "" ? "true" : match.get(2) ?? "");
                    }
                }
            }
            return(result);
        }
        public void Test_getFolders()
        {
            //var guidanceExplorers = TM_Xml_Database.loadGuidanceExplorerObjects();
            var libraryId = TM_Xml_Database.GuidanceExplorers_XmlFormat.Keys.first();
            var guidanceExplorerFolders = TM_Xml_Database.GuidanceExplorers_XmlFormat[libraryId].library.libraryStructure.folder;
            Assert.That(guidanceExplorerFolders.size() > 0,"guidanceExplorerFolders was empty");

            var tmFolders = tmXmlDatabase.tmFolders(libraryId);
            Assert.IsNotNull(tmFolders,"folders");
            Assert.That(tmFolders.size() > 0,"folders was empty");
            //show.info(guidanceExplorerFolders);
            //show.info(tmFolders);
            var mappedById = new Dictionary<Guid,Folder_V3>();

            foreach(var tmFolder in tmFolders)
                mappedById.Add(tmFolder.folderId, tmFolder);

            //Add checks for sub folders
            foreach(var folder in guidanceExplorerFolders)
            {
                Assert.That(mappedById.hasKey(folder.folderId.guid()), "mappedById didn't have key: {0}".format(folder.folderId));
                var tmFolder = mappedById[folder.folderId.guid()];
                Assert.That(tmFolder.name == folder.caption);
                Assert.That(tmFolder.libraryId == libraryId, "libraryId");
            }
        }
示例#10
0
        public void Test_getFolders()
        {
            //var guidanceExplorers = TM_Xml_Database.loadGuidanceExplorerObjects();
            var libraryId = TM_Xml_Database.GuidanceExplorers_XmlFormat.Keys.first();
            var guidanceExplorerFolders = TM_Xml_Database.GuidanceExplorers_XmlFormat[libraryId].library.libraryStructure.folder;

            Assert.That(guidanceExplorerFolders.size() > 0, "guidanceExplorerFolders was empty");

            var tmFolders = tmXmlDatabase.tmFolders(libraryId);

            Assert.IsNotNull(tmFolders, "folders");
            Assert.That(tmFolders.size() > 0, "folders was empty");
            //show.info(guidanceExplorerFolders);
            //show.info(tmFolders);
            var mappedById = new Dictionary <Guid, Folder_V3>();

            foreach (var tmFolder in tmFolders)
            {
                mappedById.Add(tmFolder.folderId, tmFolder);
            }

            //Add checks for sub folders
            foreach (var folder in guidanceExplorerFolders)
            {
                Assert.That(mappedById.hasKey(folder.folderId.guid()), "mappedById didn't have key: {0}".format(folder.folderId));
                var tmFolder = mappedById[folder.folderId.guid()];
                Assert.That(tmFolder.name == folder.caption);
                Assert.That(tmFolder.libraryId == libraryId, "libraryId");
            }
        }
 public static Dictionary<string, string> queryParameters_Indexed_ByName(this Uri uri)
 {
     var queryParameters = new Dictionary<string,string>();
     if (uri.notNull())
     {
         var query = uri.Query;
         if (query.starts("?"))
             query = query.removeFirstChar();
         foreach(var parameter in query.split("&"))
             if (parameter.valid())
             {
                 var splitParameter = parameter.split("=");
                 if (splitParameter.size()==2)
                     if (queryParameters.hasKey(splitParameter[0]))
                     {
                         "duplicate parameter key in property '{0}', adding extra parameter in a new line".info(splitParameter[0]);
                         queryParameters.add(splitParameter[0], queryParameters[splitParameter[0]].line() + splitParameter[1]);
                     }
                     else
                         queryParameters.add(splitParameter[0], splitParameter[1]);
                 else
                     "Something's wrong with the parameter value, there should only be one = in there: '{0}' ".info(parameter);
             }
     }
     return queryParameters;
 }
 public override object this[string key]
 {
     get
     {
         return((sessionData.hasKey(key)) ? sessionData[key] :  null);
     }
     set { sessionData[key] = value; }
 }
 public static Color treeNodeColor(this string signature, Dictionary <string, Java_Method> methods_bySignature)
 {
     return(methods_bySignature.hasKey(signature)
                                         ? methods_bySignature[signature].IsAbstract
                                                         ? Color.DarkBlue
                                                         : Color.DarkGreen
                                         : Color.DarkRed);
 }
示例#14
0
 public static Dictionary <T, T1> delete <T, T1>(this Dictionary <T, T1> dictionary, T key)
 {
     if (dictionary.hasKey(key))
     {
         dictionary.Remove(key);
     }
     return(dictionary);
 }
示例#15
0
 public static T1 get <T, T1>(this Dictionary <T, T1> dictionary, T key)
 {
     if (dictionary.hasKey(key))
     {
         return(dictionary[key]);
     }
     return(default(T1));
 }
示例#16
0
        public static Dictionary <T, List <T1> > add <T, T1>(this Dictionary <T, List <T1> > dictionary, T key, T1 value)
        {
            if (dictionary.hasKey(key).isFalse())
            {
                dictionary[key] = new List <T1>();
            }

            dictionary[key].Add(value);
            return(dictionary);
        }
示例#17
0
 public static Dictionary <T, T1> add <T, T1>(this Dictionary <T, T1> dictionary, T key, T1 value)
 {
     if (dictionary.hasKey(key))
     {
         dictionary[key] = value;
     }
     else
     {
         dictionary.Add(key, value);
     }
     return(dictionary);
 }
        public static Dictionary <string, string> toDictionary(this Items items)
        {
            var dictionary = new Dictionary <string, string>();

            foreach (var item in items)
            {
                if (dictionary.hasKey(item.Key))
                {
                    "alert: in Items.toDictionary there was a duplicate key value for {0}, the original value ('{1}') will be overritten with '{2}')".debug(item.Key, dictionary[item.Key], item.Value);
                }
                dictionary.add(item.Key, item.Value);
            }
            return(dictionary);
        }
        public static Method_CallMapping add_Method(this Dictionary <string, Method_CallMapping> callMappings, string signature)
        {
            //return existing ones
            if (callMappings.hasKey(signature))
            {
                return(callMappings[signature]);
            }

            //or create it
            var callMapping = signature.callMapping();

            callMappings.Add(signature, callMapping);
            return(callMapping);
        }
示例#20
0
        //we need to do this because the IKVMC doesn't have a option to get both fields and source code references at the same time
        public static Java_Class map_LineNumbers(this Java_Class javaClass, object classFileWithLineNumbers)
        {
            var methodsWithLineNumbers = ((IEnumerable)classFileWithLineNumbers.prop("Methods"));
            var currentMethodId        = 0;

            foreach (var methodWithLineNumbers in methodsWithLineNumbers)
            {
                var javaMethod = javaClass.Methods[currentMethodId];
                var lineNumberTableAttributes = (IEnumerable)methodWithLineNumbers.prop("LineNumberTableAttribute");
                if (lineNumberTableAttributes.notNull())
                {
                    foreach (var lineNumberTableAttribute in lineNumberTableAttributes)
                    {
                        javaMethod.LineNumbers.Add(new LineNumber {
                            Line_Number = lineNumberTableAttribute.field("line_number").str().toInt(),
                            Start_Pc    = lineNumberTableAttribute.field("start_pc").str().toInt()
                        });
                    }

                    var mapppedLineNumbers = new Dictionary <int, int>();
                    foreach (var lineNumber in javaMethod.LineNumbers)
                    {
                        mapppedLineNumbers.Add(lineNumber.Start_Pc, lineNumber.Line_Number);
                    }
                    var lastLineNumber = 0;
                    foreach (var instruction in javaMethod.Instructions)
                    {
                        if (mapppedLineNumbers.hasKey(instruction.Pc))
                        {
                            instruction.Line_Number = mapppedLineNumbers[instruction.Pc];
                            lastLineNumber          = instruction.Line_Number;
                        }
                        else
                        {
                            instruction.Line_Number = lastLineNumber;
                        }
                    }
                }
                currentMethodId++;
            }
            return(javaClass);
        }
        public static TreeNode add_Implements(this TreeNode treeNode, Method_CallMapping callMapping, Dictionary <string, Method_CallMapping> callMappings, Dictionary <string, Java_Method> methods_bySignature, bool showStubTreeNode)
        {
            if (callMapping.Implements.size() == 0)
            {
                return(treeNode);
            }
            var implementsNode = (showStubTreeNode)
                                                                                ? treeNode.add_Node("Implements").color(Color.Gray)
                                                                                : treeNode;

            implementsNode.add_Nodes(callMapping.Implements
                                     .OrderBy((implements) => implements.Signature)
                                     .Where((implements) => callMappings.hasKey(implements.Signature)),
                                     (implements) => implements.Signature,
                                     (implements) => callMappings[implements.Signature],
                                     (implements) => true,                                     //callMappings.hasMapping_ImplementedBy(implementedBy.Signature),
                                     (implements) => implements.Signature.treeNodeColor(methods_bySignature));

            return(treeNode);
        }
        public static List <Java_Method> implementations(this Java_Method method, Dictionary <string, List <Java_Class> > classesImplementations)
        {
            var implementations = new List <Java_Method>();

            if (classesImplementations.hasKey(method.ClassName))
            {
                foreach (var _class in classesImplementations[method.ClassName])
                {
                    foreach (var implementationMethod in _class.Methods)
                    {
                        if (method.SimpleSignature == implementationMethod.SimpleSignature)
                        {
                            implementations.Add(implementationMethod);
                            break;
                        }
                    }
                }
            }
            return(implementations);
        }
        public static TreeNode add_IsCalledBy(this TreeNode treeNode, Method_CallMapping callMapping, Dictionary <string, Method_CallMapping> callMappings, Dictionary <string, Java_Method> methods_bySignature, bool showStubTreeNode)
        {
            if (callMapping.IsCalledBy.size() == 0)
            {
                return(treeNode);
            }

            //var isCalledByLocations = treeNode.add_Node("_IsCalledBy_Locations");
            var locations = new List <MethodCall_Location>();

            foreach (var isCalledBy in callMapping.IsCalledBy)
            {
                foreach (var atLocation in isCalledBy.AtLocations)
                {
                    atLocation.Signature = isCalledBy.Signature;                                // did this so that we don't have to store/serialize the Signature here
                    locations.Add(atLocation);
                }
            }
            locations = locations.OrderBy((atLocation) => atLocation.Pc)
                        .OrderBy((atLocation) => atLocation.Signature).toList();

            //isCalledByLocations.add_Nodes(locations);

            var isCalledByToNode = (showStubTreeNode)
                                                                                ? treeNode.add_Node("IsCalledBy").color(Color.Gray)
                                                                                : treeNode;

            isCalledByToNode.add_Node("_IsCalledBy_Locations").color(Color.Gray)
            .add_Nodes(locations);

            isCalledByToNode.add_Nodes(callMapping.IsCalledBy
                                       .OrderBy((calledBy) => calledBy.Signature)
                                       .Where((calledBy) => callMappings.hasKey(calledBy.Signature)),
                                       (calledBy) => calledBy.Signature,
                                       (calledBy) => callMappings[calledBy.Signature],
                                       (calledBy) => true,                                     //callMappings.hasMapping_IsCalledBy(calledBy.Signature),
                                       (calledBy) => methods_bySignature.hasKey(calledBy.Signature)
                                                                                                                ? Color.DarkGreen
                                                                                                                : Color.DarkRed);
            return(treeNode);
        }
示例#24
0
        public static GitData_Repository map_File_Commits(this GitData_Repository gitDataRepository)
        {
            var mappedSha1s = new List <string>();
            var nGit        = gitDataRepository.nGit;
            var results     = new List <string>();
            var mappedFiles = new Dictionary <string, GitData_File>();

            foreach (var file in gitDataRepository.files())
            {
                mappedFiles.Add(file.FilePath, file);
            }

            foreach (var commit in nGit.commits())
            {
                Action <TreeWalk> onTreeWalk =
                    (treeWalk) =>
                {
                    if (mappedFiles.hasKey(treeWalk.PathString))
                    {
                        var mappedSha1 = "{0}:{1}".format(treeWalk.GetObjectId(0).sha1(), mappedFiles[treeWalk.PathString].Sha1);
                        if (mappedSha1s.contains(mappedSha1))
                        {
                            return;
                        }
                        var fileCommit = new GitData_File_Commit
                        {
                            File_Sha1   = treeWalk.GetObjectId(0).sha1(),
                            Commit_Sha1 = commit.sha1(),
                            Author      = commit.author_Name(),
                            When        = commit.when().toFileTimeUtc()
                        };
                        mappedFiles[treeWalk.PathString].Commits.add(fileCommit);
                        mappedSha1s.add(mappedSha1);
                        //mappedSha1.add(file.Sha1);
                    }
                };
                nGit.files(commit.sha1(), onTreeWalk);
            }
            return(gitDataRepository);
        }
        public static Dictionary<Guid, guidanceExplorer> addGuidanceExplorerObject(this TM_FileStorage tmFileStorage, Dictionary<Guid, guidanceExplorer> guidanceExplorers, guidanceExplorer newGuidanceExplorer, string xmlFile)
        {
            if (newGuidanceExplorer.notNull())
            {
                try
                {
                    var libraryGuid = newGuidanceExplorer.library.name.guid();

                    //check if the name is already there
                    foreach(guidanceExplorer guidanceExplorer in guidanceExplorers.Values)
                    {
                        if (guidanceExplorer.library.caption == newGuidanceExplorer.library.caption)
                        {
                            "[addGuidanceExplorerObject]: Skipping load due to duplicate Library name '{0}' was in both library {1} and {2}".error(guidanceExplorer.library.caption, guidanceExplorer.library.name,  newGuidanceExplorer.library.name);
                            return guidanceExplorers;
                        }
                    }
                    //check if the guid is already there
                    if (guidanceExplorers.hasKey(libraryGuid))
                    {
                        "[addGuidanceExplorerObject]: for {0} , duplicate LibraryID detected, assiging a new Library Id: {0}".error(newGuidanceExplorer.library.caption, libraryGuid);
                        libraryGuid = Guid.NewGuid();
                        newGuidanceExplorer.library.name = libraryGuid.str();
                        "[addGuidanceExplorerObject]: new ID for library {0} is now {1}".error(newGuidanceExplorer.library.caption, libraryGuid);
                        newGuidanceExplorer.xmlDB_Save_GuidanceExplorer(TM_Xml_Database.Current);//, false);
                    }
                    tmFileStorage.GuidanceExplorers_Paths.add(newGuidanceExplorer, xmlFile); // add this mapping so that we can find it base on name
                    guidanceExplorers.Add(libraryGuid, newGuidanceExplorer);

                }
                catch//(Exception ex)
                {
                    "[addGuidanceExplorerObject] error importing guidanceExplorer: {0}".error(newGuidanceExplorer);
                }
            }
            return guidanceExplorers;
        }
        public static Dictionary <string, string> queryParameters_Indexed_ByName(this Uri uri)
        {
            var queryParameters = new Dictionary <string, string>();

            if (uri.notNull())
            {
                var query = uri.Query;
                if (query.starts("?"))
                {
                    query = query.removeFirstChar();
                }
                foreach (var parameter in query.split("&"))
                {
                    if (parameter.valid())
                    {
                        var splitParameter = parameter.split("=");
                        if (splitParameter.size() == 2)
                        {
                            if (queryParameters.hasKey(splitParameter[0]))
                            {
                                "duplicate parameter key in property '{0}', adding extra parameter in a new line".info(splitParameter[0]);
                                queryParameters.add(splitParameter[0], queryParameters[splitParameter[0]].line() + splitParameter[1]);
                            }
                            else
                            {
                                queryParameters.add(splitParameter[0], splitParameter[1]);
                            }
                        }
                        else
                        {
                            "Something's wrong with the parameter value, there should only be one = in there: '{0}' ".info(parameter);
                        }
                    }
                }
            }
            return(queryParameters);
        }
        public static Dictionary <Guid, guidanceExplorer> addGuidanceExplorerObject(this TM_FileStorage tmFileStorage, Dictionary <Guid, guidanceExplorer> guidanceExplorers, guidanceExplorer newGuidanceExplorer, string xmlFile)
        {
            if (newGuidanceExplorer.notNull())
            {
                try
                {
                    var libraryGuid = newGuidanceExplorer.library.name.guid();

                    //check if the name is already there
                    foreach (guidanceExplorer guidanceExplorer in guidanceExplorers.Values)
                    {
                        if (guidanceExplorer.library.caption == newGuidanceExplorer.library.caption)
                        {
                            "[addGuidanceExplorerObject]: Skipping load due to duplicate Library name '{0}' was in both library {1} and {2}".error(guidanceExplorer.library.caption, guidanceExplorer.library.name, newGuidanceExplorer.library.name);
                            return(guidanceExplorers);
                        }
                    }
                    //check if the guid is already there
                    if (guidanceExplorers.hasKey(libraryGuid))
                    {
                        "[addGuidanceExplorerObject]: for {0} , duplicate LibraryID detected, assiging a new Library Id: {0}".error(newGuidanceExplorer.library.caption, libraryGuid);
                        libraryGuid = Guid.NewGuid();
                        newGuidanceExplorer.library.name = libraryGuid.str();
                        "[addGuidanceExplorerObject]: new ID for library {0} is now {1}".error(newGuidanceExplorer.library.caption, libraryGuid);
                        newGuidanceExplorer.xmlDB_Save_GuidanceExplorer(TM_Xml_Database.Current); //, false);
                    }
                    tmFileStorage.GuidanceExplorers_Paths.add(newGuidanceExplorer, xmlFile);      // add this mapping so that we can find it base on name
                    guidanceExplorers.Add(libraryGuid, newGuidanceExplorer);
                }
                catch//(Exception ex)
                {
                    "[addGuidanceExplorerObject] error importing guidanceExplorer: {0}".error(newGuidanceExplorer);
                }
            }
            return(guidanceExplorers);
        }
示例#28
0
        public static Action <string> viewJavaMappings(this Control control, API_IKVMC_Java_Metadata javaMappings)
        {
            control.clear();
            Dictionary <string, Java_Class>         classes_bySignature = null;
            Dictionary <string, Java_Method>        methods_bySignature = null;
            Dictionary <string, List <Java_Class> > classes_MappedTo_Implementations = null;

            var    showFullClassNames      = false;
            var    openSourceCodeReference = false;
            var    classFilter             = "";
            Action refresh = null;
            API_IKVMC_Java_Metadata currentJavaMetaData = null;
            var treeView    = control.add_TreeView_with_PropertyGrid();
            var codeEditor  = control.insert_Right().add_SourceCodeEditor();
            var configPanel = control.insert_Below(40, "Config");

            treeView.insert_Above(20).add_TextBox("Class Filter", "")
            .onEnter((text) => {
                classFilter = text;
                refresh();
            });

            configPanel.add_CheckBox("Show Full Class names", 0, 0,
                                     (value) => {
                showFullClassNames = value;
                treeView.collapse();
            }).autoSize()
            .append_Control <CheckBox>().set_Text("Open SourceCode Reference")
            .autoSize()
            .onChecked((value) => openSourceCodeReference = value)
            .check();
            //BeforeExpand Events
            Action <TreeNode, List <Java_Class> > add_Classes =
                (treeNode, classes) => {
                treeNode.add_Nodes(classes.Where((_class) => classFilter.inValid() || _class.Signature.regEx(classFilter))
                                   .OrderBy((_class) => _class.Name),
                                   (_class) => (showFullClassNames)
                                                                                                                                                        ? _class.Signature
                                                                                                                                                        : _class.Name,
                                   (_class) => true,
                                   (_class) => (_class.IsInterface)
                                                                                                                                                        ? Color.DarkRed
                                                                                                                                                        : Color.DarkOrange);
            };

            treeView.beforeExpand <API_IKVMC_Java_Metadata>(
                (treeNode, javaMetadata) => {
                add_Classes(treeNode, javaMetadata.Classes);
            });

            treeView.beforeExpand <Java_Class>(
                (treeNode, _class) => {
                if (classes_MappedTo_Implementations.hasKey(_class.Signature))
                {
                    add_Classes(treeNode.add_Node("_Implementations"),
                                classes_MappedTo_Implementations[_class.Signature]);
                }


                treeNode.add_ConstantsPool(_class)
                .add_Annotations(true, _class.Annotations);
                treeNode.add_Nodes(_class.Methods.OrderBy((item) => item.Name),
                                   (method) => method.str(),
                                   (method) => method.IsAbstract.isFalse(),
                                   (method) => (method.IsAbstract)
                                                                                                                                                        ? Color.DarkRed
                                                                                                                                                        : Color.DarkBlue);
            });

            treeView.beforeExpand <Java_Method>(
                (treeNode, method) => {
                treeNode.add_ConstantsPool(method, classes_bySignature[method.ClassName])
                .add_Annotations(true, method.Annotations)
                .add_Variables(method);

                treeNode.add_Node("_Instructions")
                .add_Instructions(method, classes_bySignature[method.ClassName]);
            });

            treeView.beforeExpand <object[]>(
                (treeNode, annotations) => {
                treeNode.add_Annotations(false, annotations);
            });

            treeView.beforeExpand <List <ConstantPool> >(
                (treeNode, constantsPool) => {
                treeNode.add_Nodes(constantsPool.OrderBy((item) => item.str()),
                                   (constant) => constant.str(),
                                   (constant) => false,
                                   (constant) => methods_bySignature.hasKey(constant.Value)
                                                                                                                                                        ? Color.Green
                                                                                                                                                        : Color.Sienna);
            });
            //AfterSelect Events

            treeView.afterSelect <Java_Class>(
                (_class) => {
                if (openSourceCodeReference)
                {
                    codeEditor.showInCodeEditor(classes_bySignature[_class.Signature], _class.Methods.first());
                    treeView.focus();
                }
            });

            treeView.afterSelect <Java_Method>(
                (method) => {
                if (openSourceCodeReference)
                {
                    codeEditor.showInCodeEditor(classes_bySignature[method.ClassName], method);
                    treeView.focus();
                }
            });

            treeView.afterSelect <Java_Instruction>(
                (instruction) => {
                if (openSourceCodeReference)
                {
                    codeEditor.gotoLine(instruction.Line_Number, 4);
                    treeView.focus();
                }
            });
            treeView.afterSelect <ConstantPool>(
                (constantPool) => {
                if (methods_bySignature.hasKey(constantPool.Value))
                {
                    var method = methods_bySignature[constantPool.Value];
                    codeEditor.showInCodeEditor(classes_bySignature[method.ClassName], method);
                    treeView.focus();
                }
            });
            //Other events

            refresh = () => {
                if (currentJavaMetaData.notNull())
                {
                    treeView.clear();
                    classes_bySignature = currentJavaMetaData.classes_IndexedBySignature();
                    methods_bySignature = currentJavaMetaData.methods_IndexedBySignature();
                    classes_MappedTo_Implementations = currentJavaMetaData.classes_MappedTo_Implementations();
                    treeView.add_Node(currentJavaMetaData.str(), currentJavaMetaData, true);
                    treeView.nodes().first().expand();
                    //treeView.focus();
                }
                else
                {
                    treeView.add_Node("Drop Jar/Zip or class file to view its contents");
                }
            };

            Action <API_IKVMC_Java_Metadata> loadJavaMappings =
                (_javaMappings) => {
                currentJavaMetaData = _javaMappings;
                refresh();
            };

            Action <string> loadFile =
                (file) => {
                treeView.azure();
                O2Thread.mtaThread(
                    () => {
                    if (file.extension(".xml"))
                    {
                        loadJavaMappings(file.load <API_IKVMC_Java_Metadata>());
                    }
                    else
                    {
                        loadJavaMappings(new API_IKVMC().create_JavaMetadata(file));
                    }
                    treeView.white();
                });
            };

            treeView.onDrop(loadFile);

            loadJavaMappings(javaMappings);

            return(loadFile);
        }
示例#29
0
        [WebMethod(EnableSession = true)]   public JsTree JsTreeWithFoldersAndGuidanceItems()
        {
            // ReSharper disable JoinDeclarationAndInitializer
            var jsTree = new JsTree();
            Func <Guid, List <Folder_V3>, JsTreeNode, List <Guid> >  mapFolders = null;
            Func <Guid, Guid, List <Guid>, JsTreeNode, List <Guid> > mapViews;
            // ReSharper restore JoinDeclarationAndInitializer

            //precalculate for performance reasons
            var allViews = new Dictionary <Guid, View_V3>();

            foreach (var view in GetViews())
            {
                if (allViews.hasKey(view.viewId))
                {
                    "[getFolderStructure_Library] duplicate viewID: {0} from Library {0}".format(view.viewId, view.libraryId);  // this should be moved into a TM Library health check
                }
                else
                {
                    allViews.Add(view.viewId, view);
                }
            }

            mapViews = (libraryId, folderId, viewIds, targetNode) =>
            {
                var viewsId = new List <Guid>();
                foreach (var viewId in viewIds)
                {
                    var view = allViews[viewId];    //GetViewById(viewId.str());

                    var viewNodeText = view.viewId.str();
                    var viewNode     = targetNode.add_Node(view.caption, viewNodeText);
                    //viewNode.state = "closed";   // views don't need this
                    viewNode.data.icon = "/Images/ViewIcon.png";
                    viewsId.add(view.viewId);
                }
                return(viewsId);
            };

            mapFolders = (libraryId, folders, targetNode) =>
            {
                var folderViewsId = new List <Guid>();
                foreach (var folder in folders)
                {
                    var subFolderViewsId = new List <Guid>();
                    var folderId         = folder.folderId;
                    var folderNode       = targetNode.add_Node(folder.name);
                    folderNode.state     = "closed";
                    folderNode.data.icon = "/Images/FolderIcon.png";
                    // ReSharper disable AccessToModifiedClosure
                    // ReSharper disable PossibleNullReferenceException
                    subFolderViewsId.AddRange(mapFolders(libraryId, folder.subFolders, folderNode));
                    // ReSharper restore PossibleNullReferenceException
                    // ReSharper restore AccessToModifiedClosure
                    var viewIds = (from view in folder.views
                                   select view.viewId).toList();
                    subFolderViewsId.AddRange(mapViews(libraryId, folderId, viewIds, folderNode));

                    folderNode.attr.id = folderId.str();
                    folderViewsId.AddRange(subFolderViewsId);
                }
                return(folderViewsId);
            };
            var sessionLibraryId = GetCurrentSessionLibrary();

            var libraries = (sessionLibraryId == Guid.Empty)
                                ? tmXmlDatabase.tmLibraries()
                                : tmXmlDatabase.tmLibrary(sessionLibraryId).wrapOnList();

            foreach (var library in libraries)
            {
                var libraryNode = jsTree.add_Node(library.Caption);
                //var mappedFolders = new Dictionary<string, List<Folder_V3>>();
                mapFolders(library.Id, GetFolders(library.Id), libraryNode);
                mapViews(library.Id, Guid.Empty, GetViewsInLibraryRoot(library.Id).guids(), libraryNode);
                //libraryNode.state = "open";
                libraryNode.state     = "closed";
                libraryNode.data.icon = "/Images/SingleLibrary.png";

                var libraryNodeText = library.Id.str();

                libraryNode.attr.id = libraryNodeText;
            }
            return(jsTree);
        }
        public static GitData_Repository map_File_Commits(this GitData_Repository gitDataRepository)
        {
            var mappedSha1s = new List<string>();
            var nGit = gitDataRepository.nGit;
            var results = new List<string>();
            var mappedFiles = new Dictionary<string, GitData_File>();
            foreach(var file in gitDataRepository.files())
                mappedFiles.Add(file.FilePath, file);

            foreach(var commit in nGit.commits())
            {
                Action<TreeWalk> onTreeWalk =
                    (treeWalk)=>
                        {
                            if (mappedFiles.hasKey(treeWalk.PathString))
                            {
                                var mappedSha1 = "{0}:{1}".format(treeWalk.GetObjectId(0).sha1(),mappedFiles[treeWalk.PathString].Sha1);
                                if (mappedSha1s.contains(mappedSha1))
                                    return;
                                var fileCommit = new GitData_File_Commit
                                    {
                                        File_Sha1    = treeWalk.GetObjectId(0).sha1(),
                                        Commit_Sha1  = commit.sha1(),
                                        Author       = commit.author_Name(),
                                        When         = commit.when().toFileTimeUtc()
                                    };
                                mappedFiles[treeWalk.PathString].Commits.add(fileCommit);
                                mappedSha1s.add(mappedSha1);
                                //mappedSha1.add(file.Sha1);
                            }
                        };
                nGit.files(commit.sha1(), onTreeWalk);
            }
            return gitDataRepository;
        }
        public static Library_V3 getFolderStructure_Library(this TM_WebServices tmWebServices, Guid libraryId, TM_GUI_Objects guiObjects)
        {
            // ReSharper disable AccessToModifiedClosure
            //pre-create this mapping since the view retrieval was a massive performance bottle neck
            var allViews = new Dictionary<Guid, View_V3>();
            foreach(var view in tmWebServices.GetViews())
                if (allViews.hasKey(view.viewId))
                    "[getFolderStructure_Library] duplicate viewID: {0} from Library {0}".format(view.viewId, view.libraryId);  // this should be moved into a TM Library health check
                else
                    allViews.Add(view.viewId, view);

            Action<Folder_V3> mapFolderViews =  null;

            Func<List<Guid>, List<View_V3>> mapViews =
                (viewGuids) =>
                            {
                                var views = new List<View_V3>();

                                foreach(var viewGuid in viewGuids)
                                {
                                    var view = 	allViews[viewGuid];

                                    /*// compress view.guidanceItems using guiObjects
                                    view.guidanceItems_Indexes = (from guid in view.guidanceItems
                                                                  select guiObjects.get_Index(guid.str()).str()).toList()
                                                                  .join(",").remove(" ");
                                    view.guidanceItems.Clear();*/
                                    views.add(view);
                                }
                                return views;
                            };
            // ReSharper disable PossibleNullReferenceException
            // ReSharper disable ImplicitlyCapturedClosure
            mapFolderViews =
                (folder) => {
                                 var mappedViews = mapViews(folder.views.guids());
                                 folder.views.Clear();
                                 folder.views.add(mappedViews);
                                 foreach(var subFolder in folder.subFolders)
                                    mapFolderViews(subFolder);
                            };
            Action<List<Folder_V3>, List<Folder_V3>> mapFolders = (folders, parentFolder) =>
                {
                    foreach(var folder in folders)
                    {
                        parentFolder.add(folder);
                        mapFolderViews(folder);
                    }
                };
            Func<Guid,string, Library_V3> mapLibrary =
                (library_Id, libraryName)=> {
                                        var libraryV3 = new Library_V3
                                            {
                                                        libraryId = library_Id,
                                                        name = libraryName
                                                    };
                                        mapFolders(tmWebServices.GetFolders(library_Id), libraryV3.subFolders);
                                        libraryV3.views.add(mapViews(tmWebServices.GetViewsInLibraryRoot(libraryId).guids()));
                                        libraryV3.guidanceItems = tmWebServices.getGuidanceItemsIds_NotInViews(library_Id);
                                        return libraryV3;
                                    };

            Func<Guid,Library_V3> getLibrary_TreeStructure =
                (id)=>{
                                var tmLibrary = tmWebServices.GetLibraryById(id);
                                if (tmLibrary.isNull())
                                {
                                    "[in getLibraryFolderStructure] could not find library with id: {0}".error(id);
                                    return null;
                                }
                                return mapLibrary(id, tmLibrary.caption);
                            };
            return getLibrary_TreeStructure(libraryId);
            // ReSharper restore PossibleNullReferenceException
            // ReSharper restore ImplicitlyCapturedClosure
            // ReSharper restore AccessToModifiedClosure
        }
        public static Library_V3 getFolderStructure_Library(this TM_WebServices tmWebServices, Guid libraryId, TM_GUI_Objects guiObjects)
        {
            // ReSharper disable AccessToModifiedClosure
            //pre-create this mapping since the view retrieval was a massive performance bottle neck
            var allViews = new Dictionary <Guid, View_V3>();

            foreach (var view in tmWebServices.GetViews())
            {
                if (allViews.hasKey(view.viewId))
                {
                    "[getFolderStructure_Library] duplicate viewID: {0} from Library {0}".format(view.viewId, view.libraryId);              // this should be moved into a TM Library health check
                }
                else
                {
                    allViews.Add(view.viewId, view);
                }
            }

            Action <Folder_V3> mapFolderViews = null;

            Func <List <Guid>, List <View_V3> > mapViews =
                (viewGuids) =>
            {
                var views = new List <View_V3>();

                foreach (var viewGuid in viewGuids)
                {
                    var view = allViews[viewGuid];

                    /*// compress view.guidanceItems using guiObjects
                     * view.guidanceItems_Indexes = (from guid in view.guidanceItems
                     *                                                    select guiObjects.get_Index(guid.str()).str()).toList()
                     *                                                        .join(",").remove(" ");
                     * view.guidanceItems.Clear();*/
                    views.add(view);
                }
                return(views);
            };

            // ReSharper disable PossibleNullReferenceException
            // ReSharper disable ImplicitlyCapturedClosure
            mapFolderViews =
                (folder) => {
                var mappedViews = mapViews(folder.views.guids());
                folder.views.Clear();
                folder.views.add(mappedViews);
                foreach (var subFolder in folder.subFolders)
                {
                    mapFolderViews(subFolder);
                }
            };
            Action <List <Folder_V3>, List <Folder_V3> > mapFolders = (folders, parentFolder) =>
            {
                foreach (var folder in folders)
                {
                    parentFolder.add(folder);
                    mapFolderViews(folder);
                }
            };
            Func <Guid, string, Library_V3> mapLibrary =
                (library_Id, libraryName) => {
                var libraryV3 = new Library_V3
                {
                    libraryId = library_Id,
                    name      = libraryName
                };
                mapFolders(tmWebServices.GetFolders(library_Id), libraryV3.subFolders);
                libraryV3.views.add(mapViews(tmWebServices.GetViewsInLibraryRoot(libraryId).guids()));
                libraryV3.guidanceItems = tmWebServices.getGuidanceItemsIds_NotInViews(library_Id);
                return(libraryV3);
            };

            Func <Guid, Library_V3> getLibrary_TreeStructure =
                (id) => {
                var tmLibrary = tmWebServices.GetLibraryById(id);
                if (tmLibrary.isNull())
                {
                    "[in getLibraryFolderStructure] could not find library with id: {0}".error(id);
                    return(null);
                }
                return(mapLibrary(id, tmLibrary.caption));
            };

            return(getLibrary_TreeStructure(libraryId));
            // ReSharper restore PossibleNullReferenceException
            // ReSharper restore ImplicitlyCapturedClosure
            // ReSharper restore AccessToModifiedClosure
        }
        public static Assembly loadAssemblyAndAllItsDependencies(this string pathToAssemblyToLoad)
        {
            var referencesFolder = pathToAssemblyToLoad.directoryName();
            var referencesFiles  = referencesFolder.files(true, "*.dll", "*.exe");

            Func <string, string> resolveAssemblyName =
                (name) => {
                if (name.starts("System"))
                {
                    return(name);
                }
                if (name.isAssemblyName())
                {
                    name = name.assembly_Name();
                }

                var resolvedPath = referencesFiles.find_File_in_List(name, name + ".dll", name + ".exe");

                if (resolvedPath.fileExists())
                {
                    //"**** Found match:{0}".info(resolvedPath);
                    return(resolvedPath);
                }

                //"**** Couldn't match:{0}".error(resolvedPath);
                return(null);
            };


            var loadedAssemblies = new Dictionary <string, Assembly>();
            // ReSharper disable ImplicitlyCapturedClosure
            // ReSharper disable AccessToModifiedClosure
            Action <Assembly>       loadReferencedAssemblies = (assembly) => { };
            Func <string, Assembly> loadAssembly             = null;

            loadAssembly =
                (assemblyPathOrName) => {
                if (loadedAssemblies.hasKey(assemblyPathOrName))
                {
                    return(loadedAssemblies[assemblyPathOrName]);
                }
                var assembly = assemblyPathOrName.resolveAssembly(resolveAssemblyName);
                if (assembly.notNull())
                {
                    loadedAssemblies.add(assemblyPathOrName, assembly);
                    loadReferencedAssemblies(assembly);
                    if (assembly.Location.valid().isFalse())
                    {
                        loadAssembly(assembly.FullName.assembly_Name());
                        loadAssembly(assembly.ManifestModule.Name != "<Unknown>"
                                                                     ? assembly.ManifestModule.Name
                                                                     : assembly.ManifestModule.ScopeName);
                    }
                    //loadAssembly(assembly.ManifestModule.Name);
                }
                return(assembly);
            };

            loadReferencedAssemblies =
                (assembly) => {
                var referencedAssemblies = assembly.referencedAssemblies();
                foreach (var referencedAssembly in referencedAssemblies)
                {
                    var assemblyName = referencedAssembly.str();
                    if (loadAssembly(assemblyName).isNull())
                    {
                        "COULD NOT LOAD Referenced Assembly: {0}".error(assemblyName);
                    }
                }
            };
            // ReSharper restore ImplicitlyCapturedClosure
            // ReSharper restore AccessToModifiedClosure
            var mainAssembly = loadAssembly(pathToAssemblyToLoad);

            "[loadAssemblyAndAllItsDependencies] there were {0} references loaded/mapped from '{1}'".info(loadedAssemblies.size(), pathToAssemblyToLoad);
            //show.info(loadedAssemblies);

            return(mainAssembly);
        }
示例#34
0
		public static Color treeNodeColor(this string signature, Dictionary<string, Java_Method> methods_bySignature)
		{
			return methods_bySignature.hasKey(signature) 
		   				? methods_bySignature[signature].IsAbstract
		   						? Color.DarkBlue 
		   						: Color.DarkGreen
		   				: Color.DarkRed;
		}
示例#35
0
		public static TreeNode add_Implements(this TreeNode treeNode, Method_CallMapping callMapping, Dictionary<string, Method_CallMapping> callMappings , Dictionary<string, Java_Method> methods_bySignature , bool showStubTreeNode)		
		{			
			if (callMapping.Implements.size()==0)
				return treeNode;
			var implementsNode = (showStubTreeNode) 
										? treeNode.add_Node("Implements").color(Color.Gray)
										: treeNode;	
			
			implementsNode.add_Nodes(callMapping.Implements
											 	.OrderBy((implements)=>implements.Signature)
											 	.Where((implements)=>callMappings.hasKey(implements.Signature)),
									 (implements) => implements.Signature,
									 (implements) => callMappings[implements.Signature],
									 (implements) => true, //callMappings.hasMapping_ImplementedBy(implementedBy.Signature), 
									 (implements) => implements.Signature.treeNodeColor(methods_bySignature));
										   						
			return treeNode;
		}
示例#36
0
		public static TreeNode add_IsCalledBy(this TreeNode treeNode, Method_CallMapping callMapping, Dictionary<string, Method_CallMapping> callMappings , Dictionary<string, Java_Method> methods_bySignature , bool showStubTreeNode)		
		{			
			if (callMapping.IsCalledBy.size()==0)
				return treeNode;

			//var isCalledByLocations = treeNode.add_Node("_IsCalledBy_Locations");																		
			var locations = new List<MethodCall_Location>();
			foreach(var isCalledBy in callMapping.IsCalledBy)
				foreach(var atLocation in isCalledBy.AtLocations)				
				{
					atLocation.Signature = isCalledBy.Signature;		// did this so that we don't have to store/serialize the Signature here
					locations.Add(atLocation);					
				}
			locations = locations.OrderBy((atLocation)=>atLocation.Pc)
								 .OrderBy((atLocation)=>atLocation.Signature).toList();	
			
			//isCalledByLocations.add_Nodes(locations);
		
			var isCalledByToNode = (showStubTreeNode) 
										? treeNode.add_Node("IsCalledBy").color(Color.Gray)
										: treeNode;
			
			isCalledByToNode.add_Node("_IsCalledBy_Locations").color(Color.Gray)
							.add_Nodes(locations);
			
			isCalledByToNode.add_Nodes(callMapping.IsCalledBy
												  .OrderBy((calledBy)=>calledBy.Signature)
												  .Where((calledBy)=>callMappings.hasKey(calledBy.Signature)),
									   (calledBy) => calledBy.Signature,
									   (calledBy) => callMappings[calledBy.Signature],
									   (calledBy) => true, //callMappings.hasMapping_IsCalledBy(calledBy.Signature), 
									   (calledBy) => methods_bySignature.hasKey(calledBy.Signature) 
										   				? Color.DarkGreen
										   				: Color.DarkRed);
			return treeNode;
		}
        public JsTree JsTreeWithFoldersAndGuidanceItems()
        {
            // ReSharper disable JoinDeclarationAndInitializer
            var jsTree = new JsTree();
            Func<Guid, List<Folder_V3>, JsTreeNode, List<Guid>> mapFolders = null;
            Func<Guid, Guid, List<Guid>, JsTreeNode, List<Guid>> mapViews;
            // ReSharper restore JoinDeclarationAndInitializer

            //precalculate for performance reasons
            var allViews = new Dictionary<Guid, View_V3>();
            foreach(var view in GetViews())
                if (allViews.hasKey(view.viewId))
                    "[getFolderStructure_Library] duplicate viewID: {0} from Library {0}".format(view.viewId, view.libraryId);  // this should be moved into a TM Library health check
                else
                    allViews.Add(view.viewId, view);

            mapViews = (libraryId, folderId, viewIds, targetNode) =>
                {
                    var viewsId = new List<Guid>();
                    foreach(var viewId in viewIds)
                    {
                        var view = allViews[viewId];//GetViewById(viewId.str());

                        var viewNodeText =  view.viewId.str();
                        var viewNode = targetNode.add_Node(view.caption, viewNodeText);
                        //viewNode.state = "closed";   // views don't need this
                        viewNode.data.icon = "/Images/ViewIcon.png";
                        viewsId.add(view.viewId);
                    }
                    return viewsId;
                };

            mapFolders = (libraryId, folders, targetNode)=>
                {
                    var folderViewsId = new List<Guid>();
                    foreach(var folder in folders)
                    {
                        var subFolderViewsId  = new List<Guid>();
                        var folderId = folder.folderId;
                        var folderNode = targetNode.add_Node(folder.name);
                        folderNode.state = "closed";
                        folderNode.data.icon = "/Images/FolderIcon.png";
                        // ReSharper disable AccessToModifiedClosure
                        // ReSharper disable PossibleNullReferenceException
                        subFolderViewsId.AddRange(mapFolders(libraryId, folder.subFolders, folderNode));
                        // ReSharper restore PossibleNullReferenceException
                        // ReSharper restore AccessToModifiedClosure
                        var viewIds = (from view in folder.views
                                       select view.viewId).toList();
                        subFolderViewsId.AddRange(mapViews(libraryId, folderId, viewIds, folderNode));

                        folderNode.attr.id = folderId.str();
                        folderViewsId.AddRange(subFolderViewsId);
                    }
                    return folderViewsId;

                };
            var sessionLibraryId = GetCurrentSessionLibrary();

            var libraries = (sessionLibraryId == Guid.Empty)
                                ? tmXmlDatabase.tmLibraries()
                                : tmXmlDatabase.tmLibrary(sessionLibraryId).wrapOnList();

            foreach(var library in libraries)
            {
                var libraryNode =jsTree.add_Node(library.Caption);
                //var mappedFolders = new Dictionary<string, List<Folder_V3>>();
                mapFolders(library.Id, GetFolders(library.Id), libraryNode);
                mapViews(library.Id, Guid.Empty, GetViewsInLibraryRoot(library.Id).guids(), libraryNode);
                //libraryNode.state = "open";
                libraryNode.state = "closed";
                libraryNode.data.icon = "/Images/SingleLibrary.png";

                var libraryNodeText = library.Id.str();

                libraryNode.attr.id = libraryNodeText;

            }
            return jsTree;
        }
        public static Assembly loadAssemblyAndAllItsDependencies(this string pathToAssemblyToLoad)
        {
            var referencesFolder = pathToAssemblyToLoad.directoryName();
            var referencesFiles = referencesFolder.files(true,"*.dll", "*.exe");

            Func<string,string> resolveAssemblyName =
                (name)=>{
                            if (name.starts("System"))
                                return name;
                            if (name.isAssemblyName())
                                name = name.assembly_Name();

                            var resolvedPath = referencesFiles.find_File_in_List(name, name+ ".dll", name+ ".exe");

                            if(resolvedPath.fileExists())
                            {
                                //"**** Found match:{0}".info(resolvedPath);
                                return resolvedPath;
                            }

                            //"**** Couldn't match:{0}".error(resolvedPath);
                            return null;
                };

            var loadedAssemblies = new Dictionary<string, Assembly>();
            // ReSharper disable ImplicitlyCapturedClosure
            // ReSharper disable AccessToModifiedClosure
            Action<Assembly> loadReferencedAssemblies = (assembly) => { };
            Func<string, Assembly> loadAssembly = null;
            loadAssembly =
                (assemblyPathOrName) => {
                                            if (loadedAssemblies.hasKey(assemblyPathOrName))
                                                return loadedAssemblies[assemblyPathOrName];
                                            var assembly = assemblyPathOrName.resolveAssembly(resolveAssemblyName);
                                            if(assembly.notNull())
                                            {
                                                loadedAssemblies.add(assemblyPathOrName, assembly);
                                                loadReferencedAssemblies(assembly);
                                                if (assembly.Location.valid().isFalse())
                                                {
                                                    loadAssembly(assembly.FullName.assembly_Name());
                                                    loadAssembly(assembly.ManifestModule.Name != "<Unknown>"
                                                                     ? assembly.ManifestModule.Name
                                                                     : assembly.ManifestModule.ScopeName);
                                                }
                                                //loadAssembly(assembly.ManifestModule.Name);

                                            }
                                            return assembly;
                };

            loadReferencedAssemblies =
                (assembly)=>{
                                var referencedAssemblies =  assembly.referencedAssemblies();
                                foreach(var referencedAssembly in referencedAssemblies)
                                {
                                    var assemblyName = referencedAssembly.str();
                                    if (loadAssembly(assemblyName).isNull())
                                        "COULD NOT LOAD Referenced Assembly: {0}".error(assemblyName);
                                }
                };
            // ReSharper restore ImplicitlyCapturedClosure
            // ReSharper restore AccessToModifiedClosure
            var mainAssembly = loadAssembly(pathToAssemblyToLoad);

            "[loadAssemblyAndAllItsDependencies] there were {0} references loaded/mapped from '{1}'".info(loadedAssemblies.size(), pathToAssemblyToLoad);
            //show.info(loadedAssemblies);

            return mainAssembly;
        }
 public static bool hasMapping_Implements(this Dictionary <string, Method_CallMapping> callMappings, string signature)
 {
     return(callMappings.hasKey(signature).isTrue() && callMappings[signature].Implements.size() > 0);
 }
示例#40
0
		public static List<Java_Method> implementations(this Java_Method method, Dictionary<string, List<Java_Class>> classesImplementations)
		{
			var implementations = new List<Java_Method>();
			if (classesImplementations.hasKey(method.ClassName))
			{
				foreach(var _class in classesImplementations[method.ClassName])
					foreach(var implementationMethod in _class.Methods)
						if (method.SimpleSignature == implementationMethod.SimpleSignature)
						{
							implementations.Add(implementationMethod);
							break;
						}
			}
			return implementations;						
		}
 public static Dictionary <TKey, TValue> assert_Has_Key <TKey, TValue>(this Dictionary <TKey, TValue> dictionary, TKey key, string message = Extra_NUnit_Messages.ASSERT_HAS_KEY)
 {
     dictionary.hasKey(key).assert_True(message.format(key));
     return(dictionary);
 }