private void DrawRecommendationFoldout(ProblemDescriptor problemDescriptor) { EditorGUILayout.BeginVertical(GUI.skin.box, GUILayout.Width(LayoutSize.FoldoutWidth), GUILayout.MinHeight(LayoutSize.FoldoutMinHeight)); m_ShowRecommendation = BoldFoldout(m_ShowRecommendation, Styles.RecommendationFoldout); if (m_ShowRecommendation) { if (problemDescriptor != null) { EditorStyles.textField.wordWrap = true; GUILayout.TextArea(problemDescriptor.solution, GUILayout.MaxHeight(LayoutSize.FoldoutMaxHeight)); } else { EditorGUILayout.LabelField(NoIssueSelectedText); } } EditorGUILayout.EndVertical(); }
private void DrawDetailsFoldout(ProblemDescriptor problemDescriptor) { EditorGUILayout.BeginVertical(GUI.skin.box, GUILayout.Width(m_FoldoutWidth)); m_ShowDetails = BoldFoldout(m_ShowDetails, Styles.DetailsFoldout); if (m_ShowDetails) { if (problemDescriptor != null) { EditorStyles.textField.wordWrap = true; // var text = issue.description + " is called from " + issue.callingMethod + "\n\n" + issue.def.problem; var text = problemDescriptor.problem; EditorGUILayout.TextArea(text, GUILayout.MaxHeight(m_FoldoutMaxHeight)); } else { EditorGUILayout.LabelField(NoIssueSelectedText); } } EditorGUILayout.EndVertical(); }
private void SearchAndEval(ProblemDescriptor descriptor, ProjectReport projectReport) { if (string.IsNullOrEmpty(descriptor.customevaluator)) { // do we actually need to look in all assemblies? Maybe we can find a way to only evaluate on the right assembly foreach (var assembly in m_Assemblies) { try { var value = MethodEvaluator.Eval(assembly.Location, descriptor.type, "get_" + descriptor.method, new System.Type[0] { }, new object[0] { }); if (value.ToString() == descriptor.value) { AddIssue(descriptor, string.Format("{0}: {1}", descriptor.description, value), projectReport); // stop iterating assemblies break; } } catch (Exception) { // this is safe to ignore } } } else { Type helperType = m_Helpers.GetType(); MethodInfo theMethod = helperType.GetMethod(descriptor.customevaluator); bool isIssue = (bool)theMethod.Invoke(m_Helpers, null); if (isIssue) { AddIssue(descriptor, descriptor.description, projectReport); } } }
private void DrawFoldouts() { ProblemDescriptor problemDescriptor = null; var selectedItems = m_ActiveIssueTable.GetSelectedItems(); var selectedDescriptors = selectedItems.Select(i => i.ProblemDescriptor); var selectedIssues = selectedItems.Select(i => i.ProjectIssue); // find out if all descriptors are the same var firstDescriptor = selectedDescriptors.FirstOrDefault(); if (selectedDescriptors.Count() == selectedDescriptors.Count(d => d.id == firstDescriptor.id)) { problemDescriptor = firstDescriptor; } DrawDetailsFoldout(problemDescriptor); DrawRecommendationFoldout(problemDescriptor); if (m_ActiveAnalysisView.desc.showInvertedCallTree) { CallTreeNode callTree = null; if (selectedIssues.Count() == 1) { var issue = selectedIssues.First(); if (issue != null) { // get caller sub-tree callTree = issue.callTree.GetChild(); } } if (m_CurrentCallTree != callTree) { m_CallHierarchyView.SetCallTree(callTree); m_CallHierarchyView.Reload(); m_CurrentCallTree = callTree; } DrawCallHierarchy(callTree); } }
public Rule GetRule(ProblemDescriptor descriptor, string filter = "") { return(m_Rules.FirstOrDefault(r => r.id == descriptor.id && r.filter.Equals(filter))); }
public IssueTableItem(int id, int depth, string displayName, ProblemDescriptor problemDescriptor, ProjectIssue projectIssue = null) : base(id, depth, displayName) { this.problemDescriptor = problemDescriptor; m_ProjectIssue = projectIssue; }
public void RegisterDescriptor(ProblemDescriptor descriptor) { m_ProblemDescriptors.Add(descriptor); }
public IssueTableItem(int id, int depth, ProblemDescriptor problemDescriptor) : base(id, depth) { ProblemDescriptor = problemDescriptor; }
public void RegisterDescriptor(ProblemDescriptor descriptor) { // TODO: check for id conflict m_ProblemDescriptors.Add(descriptor); }