Пример #1
0
		public static void JumpToDeclaration (MonoDevelop.Ide.Gui.Document doc, RefactoringSymbolInfo info)
		{
			if (info.Symbol != null)
				RefactoringService.RoslynJumpToDeclaration (info.Symbol, doc.Project);
			if (info.CandidateSymbols.Length > 0)
				RefactoringService.RoslynJumpToDeclaration (info.CandidateSymbols[0], doc.Project);
		}
		void FindImplementingSymbols (Compilation compilation, RefactoringSymbolInfo info)
		{
			var interfaceType = info.Symbol as ITypeSymbol;
			if (interfaceType == null)
				return;

			Task.Run (delegate {
				using (var monitor = IdeApp.Workbench.ProgressMonitors.GetSearchProgressMonitor (true, true)) {
					var parentTypeNode = info.Node?.Parent?.Parent?.Parent;
					if (parentTypeNode == null)
						return;
					var implementingType = info.Model.GetDeclaredSymbol (parentTypeNode) as INamedTypeSymbol;
					if (implementingType == null)
						return;
					foreach (var interfaceMember in interfaceType.GetMembers ()) {
						var impl = implementingType.FindImplementationForInterfaceMember (interfaceMember);
						if (impl == null)
							continue;
						var loc = impl.Locations.First ();
						monitor.ReportResult (new MemberReference (impl, loc.SourceTree.FilePath, loc.SourceSpan.Start, loc.SourceSpan.Length));
					}
					foreach (var iFace in interfaceType.AllInterfaces) {
					
						foreach (var interfaceMember in iFace.GetMembers ()) {
							var impl = implementingType.FindImplementationForInterfaceMember (interfaceMember);
							if (impl == null)
								continue;
							var loc = impl.Locations.First ();
							monitor.ReportResult (new MemberReference (impl, loc.SourceTree.FilePath, loc.SourceSpan.Start, loc.SourceSpan.Length));
						}
					}
						
				}
			});
		}