Ejemplo n.º 1
0
        public void GenerateTypeSystem()
        {
            IProjectContent pc     = new CSharpProjectContent();
            CSharpParser    parser = new CSharpParser();

            parser.GenerateTypeSystemMode = true;
            foreach (string fileName in fileNames)
            {
                CompilationUnit cu;
                using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.SequentialScan)) {
                    cu = parser.Parse(fs, fileName);
                }
                var parsedFile = cu.ToTypeSystem();
                foreach (var td in parsedFile.GetAllTypeDefinitions())
                {
                    Assert.AreSame(parsedFile, td.ParsedFile);
                    foreach (var member in td.Members)
                    {
                        Assert.AreSame(parsedFile, member.ParsedFile);
                        Assert.AreSame(td, member.DeclaringTypeDefinition);
                    }
                }
                pc = pc.UpdateProjectContent(null, parsedFile);
            }
        }
Ejemplo n.º 2
0
        void ResolveButtonClick(object sender, EventArgs e)
        {
            IProjectContent project    = new CSharpProjectContent();
            var             parsedFile = compilationUnit.ToTypeSystem();

            project = project.UpdateProjectContent(null, parsedFile);
            project = project.AddAssemblyReferences(builtInLibs.Value);

            ICompilation compilation = project.CreateCompilation();

            StoreInDictionaryNavigator navigator;

            if (csharpTreeView.SelectedNode != null)
            {
                navigator = new StoreInDictionaryNavigator((AstNode)csharpTreeView.SelectedNode.Tag);
            }
            else
            {
                navigator = new StoreInDictionaryNavigator();
            }
            CSharpAstResolver resolver = new CSharpAstResolver(compilation, compilationUnit, parsedFile);

            resolver.ApplyNavigator(navigator);
            csharpTreeView.BeginUpdate();
            ShowResolveResultsInTree(csharpTreeView.Nodes, navigator);
            csharpTreeView.EndUpdate();
        }
Ejemplo n.º 3
0
        public TestRefactoringContext(string content)
        {
            int idx = content.IndexOf("$");

            if (idx >= 0)
            {
                content = content.Substring(0, idx) + content.Substring(idx + 1);
            }
            doc = new ReadOnlyDocument(content);
            var parser = new CSharpParser();

            Unit = parser.Parse(content, "program.cs");
            if (parser.HasErrors)
            {
                parser.ErrorPrinter.Errors.ForEach(e => Console.WriteLine(e.Message));
            }
            Assert.IsFalse(parser.HasErrors, "File contains parsing errors.");
            parsedFile = Unit.ToTypeSystem();

            IProjectContent pc = new CSharpProjectContent();

            pc = pc.UpdateProjectContent(null, parsedFile);
            pc = pc.AddAssemblyReferences(new[] { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore });

            compilation = pc.CreateCompilation();
            resolver    = new CSharpAstResolver(compilation, Unit, parsedFile);
            if (idx >= 0)
            {
                Location = doc.GetLocation(idx);
            }
        }
        IEntity Lookup(string cref)
        {
            string program = @"using System;
using System.Collections.Generic;
/// <summary/>
class Test {
	int @int;
	void M(int a) {}
	
	void Overloaded(int a) {}
	void Overloaded(string a) {}
	void Overloaded(ref int a) {}
	
	public int this[int index] { get { return 0; } }
	
	public static int operator +(Test a, int b) { return 0; }
	public static implicit operator Test(int a) { return 0; }
	public static implicit operator int(Test a) { return 0; }
}
interface IGeneric<A, B> {
	void Test<T>(ref T[,] a);
}
class Impl<T> : IGeneric<List<string>[,], T> {
	void IGeneric<List<string>[,], T>.Test<X>(ref X[,] a) {}
}";

            var     pc             = new CSharpProjectContent().AddAssemblyReferences(new[] { CecilLoaderTests.Mscorlib });
            var     cu             = new CSharpParser().Parse(new StringReader(program), "program.cs");
            var     compilation    = pc.UpdateProjectContent(null, cu.ToTypeSystem()).CreateCompilation();
            var     typeDefinition = compilation.MainAssembly.TopLevelTypeDefinitions.Single();
            IEntity entity         = typeDefinition.Documentation.ResolveCref(cref);

            Assert.IsNotNull(entity, "ResolveCref() returned null.");
            return(entity);
        }
        void Init(string program)
        {
            var pc = new CSharpProjectContent().AddAssemblyReferences(new[] { CecilLoaderTests.Mscorlib });
            var cu = new CSharpParser().Parse(new StringReader(program), "program.cs");

            compilation    = pc.UpdateProjectContent(null, cu.ToTypeSystem()).CreateCompilation();
            typeDefinition = compilation.MainAssembly.TopLevelTypeDefinitions.FirstOrDefault();
        }
Ejemplo n.º 6
0
        internal static IParameterDataProvider CreateProvider(string text)
        {
            string parsedText;
            string editorText;
            int    cursorPosition = text.IndexOf('$');
            int    endPos         = text.IndexOf('$', cursorPosition + 1);

            if (endPos == -1)
            {
                parsedText = editorText = text.Substring(0, cursorPosition) + text.Substring(cursorPosition + 1);
            }
            else
            {
                parsedText     = text.Substring(0, cursorPosition) + new string (' ', endPos - cursorPosition) + text.Substring(endPos + 1);
                editorText     = text.Substring(0, cursorPosition) + text.Substring(cursorPosition + 1, endPos - cursorPosition - 1) + text.Substring(endPos + 1);
                cursorPosition = endPos - 1;
            }
            var doc = new ReadOnlyDocument(editorText);

            IProjectContent pctx = new CSharpProjectContent();

            pctx = pctx.AddAssemblyReferences(new [] { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore });

            var compilationUnit = new CSharpParser().Parse(parsedText, "program.cs");

            var parsedFile = compilationUnit.ToTypeSystem();

            pctx = pctx.UpdateProjectContent(null, parsedFile);
            var cmp = pctx.CreateCompilation();
            var loc = doc.GetLocation(cursorPosition);

            var engine = new CSharpParameterCompletionEngine(doc, new TestFactory(pctx));

            var rctx = new CSharpTypeResolveContext(cmp.MainAssembly);

            rctx = rctx.WithUsingScope(parsedFile.GetUsingScope(loc).Resolve(cmp));
            var curDef = parsedFile.GetInnermostTypeDefinition(loc);

            if (curDef != null)
            {
                rctx = rctx.WithCurrentTypeDefinition(curDef.Resolve(rctx).GetDefinition());
                var curMember = parsedFile.GetMember(loc);
                if (curMember != null)
                {
                    rctx = rctx.WithCurrentMember(curMember.CreateResolved(rctx));
                }
            }
            engine.ctx = rctx;

            engine.CSharpParsedFile = parsedFile;
            engine.ProjectContent   = pctx;
            engine.Unit             = compilationUnit;

            return(engine.GetParameterDataProvider(cursorPosition, doc.GetCharAt(cursorPosition - 1)));
        }
        public static TestRefactoringContext Create(string content)
        {
            int idx = content.IndexOf("$");

            if (idx >= 0)
            {
                content = content.Substring(0, idx) + content.Substring(idx + 1);
            }
            int idx1 = content.IndexOf("<-");
            int idx2 = content.IndexOf("->");

            int selectionStart = 0;
            int selectionEnd   = 0;

            if (0 <= idx1 && idx1 < idx2)
            {
                content        = content.Substring(0, idx2) + content.Substring(idx2 + 2);
                content        = content.Substring(0, idx1) + content.Substring(idx1 + 2);
                selectionStart = idx1;
                selectionEnd   = idx2 - 2;
                idx            = selectionEnd;
            }

            var doc    = new StringBuilderDocument(content);
            var parser = new CSharpParser();
            var unit   = parser.Parse(content, "program.cs");

            if (parser.HasErrors)
            {
                parser.ErrorPrinter.Errors.ForEach(e => Console.WriteLine(e.Message));
            }
            Assert.IsFalse(parser.HasErrors, "File contains parsing errors.");
            unit.Freeze();
            var parsedFile = unit.ToTypeSystem();

            IProjectContent pc = new CSharpProjectContent();

            pc = pc.UpdateProjectContent(null, parsedFile);
            pc = pc.AddAssemblyReferences(new[] { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore });

            var          compilation = pc.CreateCompilation();
            var          resolver    = new CSharpAstResolver(compilation, unit, parsedFile);
            TextLocation location    = TextLocation.Empty;

            if (idx >= 0)
            {
                location = doc.GetLocation(idx);
            }
            return(new TestRefactoringContext(doc, location, resolver)
            {
                selectionStart = selectionStart,
                selectionEnd = selectionEnd
            });
        }
Ejemplo n.º 8
0
        void FindReferencesButtonClick(object sender, EventArgs e)
        {
            if (csharpTreeView.SelectedNode == null)
            {
                return;
            }

            IProjectContent project    = new CSharpProjectContent();
            var             parsedFile = compilationUnit.ToTypeSystem();

            project = project.UpdateProjectContent(null, parsedFile);
            project = project.AddAssemblyReferences(builtInLibs.Value);

            ICompilation      compilation = project.CreateCompilation();
            CSharpAstResolver resolver    = new CSharpAstResolver(compilation, compilationUnit, parsedFile);

            AstNode             node = (AstNode)csharpTreeView.SelectedNode.Tag;
            IEntity             entity;
            MemberResolveResult mrr = resolver.Resolve(node) as MemberResolveResult;
            TypeResolveResult   trr = resolver.Resolve(node) as TypeResolveResult;

            if (mrr != null)
            {
                entity = mrr.Member;
            }
            else if (trr != null)
            {
                entity = trr.Type.GetDefinition();
            }
            else
            {
                return;
            }

            FindReferences         fr             = new FindReferences();
            int                    referenceCount = 0;
            FoundReferenceCallback callback       = delegate(AstNode matchNode, ResolveResult result) {
                Debug.WriteLine(matchNode.StartLocation + " - " + matchNode + " - " + result);
                referenceCount++;
            };

            var searchScopes = fr.GetSearchScopes(entity);

            Debug.WriteLine("Find references to " + entity.ReflectionName);
            fr.FindReferencesInFile(searchScopes, parsedFile, compilationUnit, compilation, callback, CancellationToken.None);

            MessageBox.Show("Found " + referenceCount + " references to " + entity.FullName);
        }
Ejemplo n.º 9
0
        void HandleClicked(object sender, EventArgs e)
        {
            var parser = new CSharpParser();
            var unit   = parser.Parse(editor.Text, "dummy.cs");

            var parsedFile = unit.ToTypeSystem();

            IProjectContent project = new CSharpProjectContent();

            project = project.UpdateProjectContent(null, parsedFile);
            project = project.AddAssemblyReferences(builtInLibs.Value);


            CSharpAstResolver resolver = new CSharpAstResolver(project.CreateCompilation(), unit, parsedFile);

            ShowUnit(unit, resolver);
        }
Ejemplo n.º 10
0
		public void GenerateTypeSystem()
		{
			IProjectContent pc = new CSharpProjectContent();
			CSharpParser parser = new CSharpParser();
			parser.GenerateTypeSystemMode = true;
			foreach (string fileName in fileNames) {
				CompilationUnit cu;
				using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.SequentialScan)) {
					cu = parser.Parse(fs, fileName);
				}
				var parsedFile = cu.ToTypeSystem();
				foreach (var td in parsedFile.GetAllTypeDefinitions()) {
					Assert.AreSame(parsedFile, td.ParsedFile);
					foreach (var member in td.Members) {
						Assert.AreSame(parsedFile, member.ParsedFile);
						Assert.AreSame(td, member.DeclaringTypeDefinition);
					}
				}
				pc = pc.UpdateProjectContent(null, parsedFile);
			}
		}
Ejemplo n.º 11
0
        public TestRefactoringContext(string content)
        {
            int idx = content.IndexOf ("$");
            if (idx >= 0)
                content = content.Substring (0, idx) + content.Substring (idx + 1);
            doc = new ReadOnlyDocument (content);
            var parser = new CSharpParser ();
            Unit = parser.Parse (content, "program.cs");
            if (parser.HasErrors)
                parser.ErrorPrinter.Errors.ForEach (e => Console.WriteLine (e.Message));
            Assert.IsFalse (parser.HasErrors, "File contains parsing errors.");
            parsedFile = Unit.ToTypeSystem();

            IProjectContent pc = new CSharpProjectContent();
            pc = pc.UpdateProjectContent(null, parsedFile);
            pc = pc.AddAssemblyReferences(new[] { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore });

            compilation = pc.CreateCompilation();
            resolver = new CSharpAstResolver(compilation, Unit, parsedFile);
            if (idx >= 0)
                Location = doc.GetLocation (idx);
        }
Ejemplo n.º 12
0
		Tuple<ReadOnlyDocument, CSharpCompletionEngine> GetContent (string text, CompilationUnit compilationUnit)
		{
			var doc = new ReadOnlyDocument (text);
			IProjectContent pctx = new CSharpProjectContent ();
			pctx = pctx.AddAssemblyReferences (new [] { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore });
			var parsedFile = compilationUnit.ToTypeSystem ();
			
			pctx = pctx.UpdateProjectContent (null, parsedFile);
			var cmp = pctx.CreateCompilation ();
			
			var engine = new CSharpCompletionEngine (doc, new TestFactory (), pctx, new CSharpTypeResolveContext (cmp.MainAssembly), compilationUnit, parsedFile);
			engine.EolMarker = Environment.NewLine;
			engine.FormattingPolicy = FormattingOptionsFactory.CreateMono ();
			return Tuple.Create (doc, engine);
		}
Ejemplo n.º 13
0
		static CompletionDataList CreateProvider (string text, bool isCtrlSpace)
		{
			string parsedText;
			string editorText;
			int cursorPosition = text.IndexOf ('$');
			int endPos = text.IndexOf ('$', cursorPosition + 1);
			if (endPos == -1) {
				parsedText = editorText = text.Substring (0, cursorPosition) + text.Substring (cursorPosition + 1);
			} else {
				parsedText = text.Substring (0, cursorPosition) + new string (' ', endPos - cursorPosition) + text.Substring (endPos + 1);
				editorText = text.Substring (0, cursorPosition) + text.Substring (cursorPosition + 1, endPos - cursorPosition - 1) + text.Substring (endPos + 1);
				cursorPosition = endPos - 1; 
			}
			var doc = new ReadOnlyDocument (editorText);
			
			IProjectContent pctx = new CSharpProjectContent ();
			pctx = pctx.AddAssemblyReferences (new [] { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore });
			
			var compilationUnit = new CSharpParser ().Parse (parsedText, "program.cs");
			compilationUnit.Freeze ();
			
			var parsedFile = compilationUnit.ToTypeSystem ();
			pctx = pctx.UpdateProjectContent (null, parsedFile);
			
			var cmp = pctx.CreateCompilation ();
			var loc = doc.GetLocation (cursorPosition);
			
			var rctx = new CSharpTypeResolveContext (cmp.MainAssembly);
			rctx = rctx.WithUsingScope (parsedFile.GetUsingScope (loc).Resolve (cmp));
			

			var curDef = parsedFile.GetInnermostTypeDefinition (loc);
			if (curDef != null) {
				var resolvedDef = curDef.Resolve (rctx).GetDefinition ();
				rctx = rctx.WithCurrentTypeDefinition (resolvedDef);
				var curMember = resolvedDef.Members.FirstOrDefault (m => m.Region.Begin <= loc && loc < m.BodyRegion.End);
				if (curMember != null)
					rctx = rctx.WithCurrentMember (curMember);
			}
			var engine = new CSharpCompletionEngine (doc, new TestFactory (), pctx, rctx, compilationUnit, parsedFile);
				
			engine.EolMarker = Environment.NewLine;
			engine.FormattingPolicy = FormattingOptionsFactory.CreateMono ();
			
			var data = engine.GetCompletionData (cursorPosition, isCtrlSpace);
			
			return new CompletionDataList () {
				Data = data,
				AutoCompleteEmptyMatch = engine.AutoCompleteEmptyMatch,
				AutoSelect = engine.AutoSelect,
				DefaultCompletionString = engine.DefaultCompletionString
			};
		}
Ejemplo n.º 14
0
		internal static IParameterDataProvider CreateProvider (string text)
		{
			string parsedText;
			string editorText;
			int cursorPosition = text.IndexOf ('$');
			int endPos = text.IndexOf ('$', cursorPosition + 1);
			if (endPos == -1)
				parsedText = editorText = text.Substring (0, cursorPosition) + text.Substring (cursorPosition + 1);
			else {
				parsedText = text.Substring (0, cursorPosition) + new string (' ', endPos - cursorPosition) + text.Substring (endPos + 1);
				editorText = text.Substring (0, cursorPosition) + text.Substring (cursorPosition + 1, endPos - cursorPosition - 1) + text.Substring (endPos + 1);
				cursorPosition = endPos - 1; 
			}
			var doc = new ReadOnlyDocument (editorText);
			
			IProjectContent pctx = new CSharpProjectContent ();
			pctx = pctx.AddAssemblyReferences (new [] { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore });
			
			var compilationUnit = new CSharpParser ().Parse (parsedText, "program.cs");
			
			var parsedFile = compilationUnit.ToTypeSystem ();
			pctx = pctx.UpdateProjectContent (null, parsedFile);
			var cmp = pctx.CreateCompilation ();
			var loc = doc.GetLocation (cursorPosition);
			
			var engine = new CSharpParameterCompletionEngine (doc, new TestFactory (pctx));
			
			var rctx = new CSharpTypeResolveContext (cmp.MainAssembly);
			rctx = rctx.WithUsingScope (parsedFile.GetUsingScope (loc).Resolve (cmp));
			var curDef = parsedFile.GetInnermostTypeDefinition (loc);
			if (curDef != null) {
				rctx = rctx.WithCurrentTypeDefinition (curDef.Resolve (rctx).GetDefinition ());
				var curMember = parsedFile.GetMember (loc);
				if (curMember != null)
					rctx = rctx.WithCurrentMember (curMember.CreateResolved (rctx));
			}
			engine.ctx = rctx;
			
			engine.CSharpParsedFile = parsedFile;
			engine.ProjectContent = pctx;
			engine.Unit = compilationUnit;
			
			return engine.GetParameterDataProvider (cursorPosition, doc.GetCharAt (cursorPosition - 1));
		}
		public static TestRefactoringContext Create (string content)
		{
			int idx = content.IndexOf ("$");
			if (idx >= 0)
				content = content.Substring (0, idx) + content.Substring (idx + 1);
			int idx1 = content.IndexOf ("<-");
			int idx2 = content.IndexOf ("->");
			
			int selectionStart = 0;
			int selectionEnd = 0;
			if (0 <= idx1 && idx1 < idx2) {
				content = content.Substring (0, idx2) + content.Substring (idx2 + 2);
				content = content.Substring (0, idx1) + content.Substring (idx1 + 2);
				selectionStart = idx1;
				selectionEnd = idx2 - 2;
				idx = selectionEnd;
			}
			
			var doc = new StringBuilderDocument (content);
			var parser = new CSharpParser ();
			var unit = parser.Parse (content, "program.cs");
			foreach (var error in parser.Errors)
				Console.WriteLine (error.Message);
			Assert.IsFalse (parser.HasErrors, "File contains parsing errors.");
			unit.Freeze ();
			var parsedFile = unit.ToTypeSystem ();
			
			IProjectContent pc = new CSharpProjectContent ();
			pc = pc.UpdateProjectContent (null, parsedFile);
			pc = pc.AddAssemblyReferences (new[] { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore });
			
			var compilation = pc.CreateCompilation ();
			var resolver = new CSharpAstResolver (compilation, unit, parsedFile);
			TextLocation location = TextLocation.Empty;
			if (idx >= 0)
				location = doc.GetLocation (idx);
			return new TestRefactoringContext(doc, location, resolver) {
				selectionStart = selectionStart,
				selectionEnd = selectionEnd
			};
		}
		public static CSharpCompletionEngine CreateEngine(string text, out int cursorPosition, params IUnresolvedAssembly[] references)
		{
			string parsedText;
			string editorText;
			cursorPosition = text.IndexOf('$');
			int endPos = text.IndexOf('$', cursorPosition + 1);
			if (endPos == -1) {
				if (cursorPosition < 0) {
					parsedText = editorText = text;
				} else {
					parsedText = editorText = text.Substring(0, cursorPosition) + text.Substring(cursorPosition + 1);
				}
			} else {
					parsedText = text.Substring(0, cursorPosition) + new string(' ', endPos - cursorPosition) + text.Substring(endPos + 1);
					editorText = text.Substring(0, cursorPosition) + text.Substring(cursorPosition + 1, endPos - cursorPosition - 1) + text.Substring(endPos + 1);
					cursorPosition = endPos - 1; 
			}
			var doc = new ReadOnlyDocument(editorText);

			IProjectContent pctx = new CSharpProjectContent();
			var refs = new List<IUnresolvedAssembly> { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore, SystemAssembly };
			if (references != null)
				refs.AddRange (references);

			pctx = pctx.AddAssemblyReferences(refs);

			var compilationUnit = new CSharpParser().Parse(parsedText, "program.cs");
			compilationUnit.Freeze();

			var parsedFile = compilationUnit.ToTypeSystem();
			pctx = pctx.UpdateProjectContent(null, parsedFile);

			var cmp = pctx.CreateCompilation();
			var loc = cursorPosition > 0 ? doc.GetLocation(cursorPosition) : new TextLocation (1, 1);

			var rctx = new CSharpTypeResolveContext(cmp.MainAssembly);
			rctx = rctx.WithUsingScope(parsedFile.GetUsingScope(loc).Resolve(cmp));

			var curDef = parsedFile.GetInnermostTypeDefinition(loc);
			if (curDef != null) {
					var resolvedDef = curDef.Resolve(rctx).GetDefinition();
					rctx = rctx.WithCurrentTypeDefinition(resolvedDef);
					var curMember = resolvedDef.Members.FirstOrDefault(m => m.Region.Begin <= loc && loc < m.BodyRegion.End);
					if (curMember != null) {
							rctx = rctx.WithCurrentMember(curMember);
					}
			}
			var mb = new DefaultCompletionContextProvider(doc, parsedFile);
			var engine = new CSharpCompletionEngine(doc, mb, new TestFactory(), pctx, rctx);

			engine.EolMarker = Environment.NewLine;
			engine.FormattingPolicy = FormattingOptionsFactory.CreateMono();
			return engine;
		}