Browse Source
Add readme that links to two third party code completion samples that use AvalonEdit and SharpDevelop DOM and NRefactory.pull/39/merge
12 changed files with 0 additions and 1282 deletions
@ -1,33 +0,0 @@ |
|||||||
using System.Reflection; |
|
||||||
using System.Runtime.CompilerServices; |
|
||||||
using System.Runtime.InteropServices; |
|
||||||
|
|
||||||
// Information about this assembly is defined by the following
|
|
||||||
// attributes.
|
|
||||||
//
|
|
||||||
// change them to the information which is associated with the assembly
|
|
||||||
// you compile.
|
|
||||||
|
|
||||||
[assembly: AssemblyTitle("CSharpEditor")] |
|
||||||
[assembly: AssemblyDescription("A small C# editor demonstrating code-completion" + |
|
||||||
" using ICSharpCode.SharpDevelop.Dom and " + |
|
||||||
"ICSharpCode.TextEditor")] |
|
||||||
[assembly: AssemblyConfiguration("")] |
|
||||||
[assembly: AssemblyCompany("ICSharpCode")] |
|
||||||
[assembly: AssemblyProduct("CSharpEditor")] |
|
||||||
[assembly: AssemblyCopyright("2006, Daniel Grunwald")] |
|
||||||
[assembly: AssemblyTrademark("")] |
|
||||||
[assembly: AssemblyCulture("")] |
|
||||||
|
|
||||||
// This sets the default COM visibility of types in the assembly to invisible.
|
|
||||||
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
|
||||||
[assembly: ComVisible(false)] |
|
||||||
|
|
||||||
// The assembly version has following format :
|
|
||||||
//
|
|
||||||
// Major.Minor.Build.Revision
|
|
||||||
//
|
|
||||||
// You can specify all values by your own or you can build default build and revision
|
|
||||||
// numbers with the '*' character (the default):
|
|
||||||
|
|
||||||
[assembly: AssemblyVersion("1.0.*")] |
|
@ -1,85 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> |
|
||||||
<PropertyGroup> |
|
||||||
<OutputType>WinExe</OutputType> |
|
||||||
<RootNamespace>CSharpEditor</RootNamespace> |
|
||||||
<AssemblyName>CSharpCodeCompletion</AssemblyName> |
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
||||||
<ProjectGuid>{489CFE09-FDF7-4C89-BAB5-BD09CADD61AD}</ProjectGuid> |
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> |
|
||||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> |
|
||||||
<NoStdLib>False</NoStdLib> |
|
||||||
<WarningLevel>4</WarningLevel> |
|
||||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> |
|
||||||
</PropertyGroup> |
|
||||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> |
|
||||||
<OutputPath>bin\Debug\</OutputPath> |
|
||||||
<Optimize>False</Optimize> |
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
||||||
<DebugSymbols>true</DebugSymbols> |
|
||||||
<DebugType>Full</DebugType> |
|
||||||
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> |
|
||||||
</PropertyGroup> |
|
||||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> |
|
||||||
<OutputPath>bin\Release\</OutputPath> |
|
||||||
<Optimize>True</Optimize> |
|
||||||
<DefineConstants>TRACE</DefineConstants> |
|
||||||
<DebugSymbols>False</DebugSymbols> |
|
||||||
<DebugType>None</DebugType> |
|
||||||
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> |
|
||||||
</PropertyGroup> |
|
||||||
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' "> |
|
||||||
<RegisterForComInterop>False</RegisterForComInterop> |
|
||||||
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies> |
|
||||||
<BaseAddress>4194304</BaseAddress> |
|
||||||
<PlatformTarget>x86</PlatformTarget> |
|
||||||
<FileAlignment>4096</FileAlignment> |
|
||||||
</PropertyGroup> |
|
||||||
<ItemGroup> |
|
||||||
<Reference Include="System" /> |
|
||||||
<Reference Include="System.Core"> |
|
||||||
<RequiredTargetFramework>3.5</RequiredTargetFramework> |
|
||||||
</Reference> |
|
||||||
<Reference Include="System.Data" /> |
|
||||||
<Reference Include="System.Drawing" /> |
|
||||||
<Reference Include="System.Windows.Forms" /> |
|
||||||
<Reference Include="System.Xml" /> |
|
||||||
<Reference Include="ICSharpCode.NRefactory"> |
|
||||||
<HintPath>..\..\bin\ICSharpCode.NRefactory.dll</HintPath> |
|
||||||
<SpecificVersion>False</SpecificVersion> |
|
||||||
</Reference> |
|
||||||
<Reference Include="ICSharpCode.SharpDevelop.Dom"> |
|
||||||
<HintPath>..\..\bin\ICSharpCode.SharpDevelop.Dom.dll</HintPath> |
|
||||||
<SpecificVersion>False</SpecificVersion> |
|
||||||
</Reference> |
|
||||||
<Reference Include="ICSharpCode.TextEditor"> |
|
||||||
<HintPath>..\..\bin\ICSharpCode.TextEditor.dll</HintPath> |
|
||||||
<SpecificVersion>False</SpecificVersion> |
|
||||||
</Reference> |
|
||||||
<Reference Include="log4net"> |
|
||||||
<HintPath>..\..\bin\log4net.dll</HintPath> |
|
||||||
<SpecificVersion>False</SpecificVersion> |
|
||||||
</Reference> |
|
||||||
<Reference Include="Mono.Cecil"> |
|
||||||
<HintPath>..\..\bin\Mono.Cecil.dll</HintPath> |
|
||||||
<SpecificVersion>False</SpecificVersion> |
|
||||||
</Reference> |
|
||||||
</ItemGroup> |
|
||||||
<ItemGroup> |
|
||||||
<Compile Include="CodeCompletionData.cs" /> |
|
||||||
<Compile Include="MainForm.cs" /> |
|
||||||
<Compile Include="MainForm.Designer.cs"> |
|
||||||
<DependentUpon>MainForm.cs</DependentUpon> |
|
||||||
</Compile> |
|
||||||
<Compile Include="AssemblyInfo.cs" /> |
|
||||||
<EmbeddedResource Include="MainForm.resx"> |
|
||||||
<DependentUpon>MainForm.cs</DependentUpon> |
|
||||||
</EmbeddedResource> |
|
||||||
<Compile Include="CodeCompletionProvider.cs" /> |
|
||||||
<Compile Include="CodeCompletionKeyHandler.cs" /> |
|
||||||
<Compile Include="HostCallbackImplementation.cs" /> |
|
||||||
<Compile Include="ToolTipProvider.cs" /> |
|
||||||
</ItemGroup> |
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" /> |
|
||||||
</Project> |
|
@ -1,18 +0,0 @@ |
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 11.00 |
|
||||||
# Visual Studio 2010 |
|
||||||
# SharpDevelop 4.0.0.5571 |
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpCodeCompletion", "CSharpCodeCompletion.csproj", "{489CFE09-FDF7-4C89-BAB5-BD09CADD61AD}" |
|
||||||
EndProject |
|
||||||
Global |
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
|
||||||
Debug|Any CPU = Debug|Any CPU |
|
||||||
Release|Any CPU = Release|Any CPU |
|
||||||
EndGlobalSection |
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
|
||||||
{489CFE09-FDF7-4C89-BAB5-BD09CADD61AD}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||||
{489CFE09-FDF7-4C89-BAB5-BD09CADD61AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||||
{489CFE09-FDF7-4C89-BAB5-BD09CADD61AD}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||||
{489CFE09-FDF7-4C89-BAB5-BD09CADD61AD}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||||
EndGlobalSection |
|
||||||
EndGlobal |
|
@ -1,167 +0,0 @@ |
|||||||
/* |
|
||||||
* Erstellt mit SharpDevelop. |
|
||||||
* Benutzer: grunwald |
|
||||||
* Datum: 27.08.2007 |
|
||||||
* Zeit: 14:25 |
|
||||||
* |
|
||||||
* Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern. |
|
||||||
*/ |
|
||||||
|
|
||||||
using System; |
|
||||||
using System.IO; |
|
||||||
using System.Text; |
|
||||||
using System.Xml; |
|
||||||
|
|
||||||
using ICSharpCode.SharpDevelop.Dom; |
|
||||||
using ICSharpCode.SharpDevelop.Dom.CSharp; |
|
||||||
using ICSharpCode.SharpDevelop.Dom.VBNet; |
|
||||||
using ICSharpCode.TextEditor.Gui.CompletionWindow; |
|
||||||
|
|
||||||
namespace CSharpEditor |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents an item in the code completion window.
|
|
||||||
/// </summary>
|
|
||||||
class CodeCompletionData : DefaultCompletionData, ICompletionData |
|
||||||
{ |
|
||||||
IMember member; |
|
||||||
IClass c; |
|
||||||
static VBNetAmbience vbAmbience = new VBNetAmbience(); |
|
||||||
static CSharpAmbience csharpAmbience = new CSharpAmbience(); |
|
||||||
|
|
||||||
public CodeCompletionData(IMember member) |
|
||||||
: base(member.Name, null, GetMemberImageIndex(member)) |
|
||||||
{ |
|
||||||
this.member = member; |
|
||||||
} |
|
||||||
|
|
||||||
public CodeCompletionData(IClass c) |
|
||||||
: base(c.Name, null, GetClassImageIndex(c)) |
|
||||||
{ |
|
||||||
this.c = c; |
|
||||||
} |
|
||||||
|
|
||||||
int overloads = 0; |
|
||||||
|
|
||||||
public void AddOverload() |
|
||||||
{ |
|
||||||
overloads++; |
|
||||||
} |
|
||||||
|
|
||||||
static int GetMemberImageIndex(IMember member) |
|
||||||
{ |
|
||||||
// Missing: different icons for private/public member
|
|
||||||
if (member is IMethod) |
|
||||||
return 1; |
|
||||||
if (member is IProperty) |
|
||||||
return 2; |
|
||||||
if (member is IField) |
|
||||||
return 3; |
|
||||||
if (member is IEvent) |
|
||||||
return 6; |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
static int GetClassImageIndex(IClass c) |
|
||||||
{ |
|
||||||
switch (c.ClassType) { |
|
||||||
case ClassType.Enum: |
|
||||||
return 4; |
|
||||||
default: |
|
||||||
return 0; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
string description; |
|
||||||
|
|
||||||
// DefaultCompletionData.Description is not virtual, but we can reimplement
|
|
||||||
// the interface to get the same effect as overriding.
|
|
||||||
string ICompletionData.Description { |
|
||||||
get { |
|
||||||
if (description == null) { |
|
||||||
IEntity entity = (IEntity)member ?? c; |
|
||||||
description = GetText(entity); |
|
||||||
if (overloads > 1) { |
|
||||||
description += " (+" + overloads + " overloads)"; |
|
||||||
} |
|
||||||
description += Environment.NewLine + XmlDocumentationToText(entity.Documentation); |
|
||||||
} |
|
||||||
return description; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Converts a member to text.
|
|
||||||
/// Returns the declaration of the member as C# or VB code, e.g.
|
|
||||||
/// "public void MemberName(string parameter)"
|
|
||||||
/// </summary>
|
|
||||||
static string GetText(IEntity entity) |
|
||||||
{ |
|
||||||
IAmbience ambience = MainForm.IsVisualBasic ? (IAmbience)vbAmbience : csharpAmbience; |
|
||||||
if (entity is IMethod) |
|
||||||
return ambience.Convert(entity as IMethod); |
|
||||||
if (entity is IProperty) |
|
||||||
return ambience.Convert(entity as IProperty); |
|
||||||
if (entity is IEvent) |
|
||||||
return ambience.Convert(entity as IEvent); |
|
||||||
if (entity is IField) |
|
||||||
return ambience.Convert(entity as IField); |
|
||||||
if (entity is IClass) |
|
||||||
return ambience.Convert(entity as IClass); |
|
||||||
// unknown entity:
|
|
||||||
return entity.ToString(); |
|
||||||
} |
|
||||||
|
|
||||||
public static string XmlDocumentationToText(string xmlDoc) |
|
||||||
{ |
|
||||||
System.Diagnostics.Debug.WriteLine(xmlDoc); |
|
||||||
StringBuilder b = new StringBuilder(); |
|
||||||
try { |
|
||||||
using (XmlTextReader reader = new XmlTextReader(new StringReader("<root>" + xmlDoc + "</root>"))) { |
|
||||||
reader.XmlResolver = null; |
|
||||||
while (reader.Read()) { |
|
||||||
switch (reader.NodeType) { |
|
||||||
case XmlNodeType.Text: |
|
||||||
b.Append(reader.Value); |
|
||||||
break; |
|
||||||
case XmlNodeType.Element: |
|
||||||
switch (reader.Name) { |
|
||||||
case "filterpriority": |
|
||||||
reader.Skip(); |
|
||||||
break; |
|
||||||
case "returns": |
|
||||||
b.AppendLine(); |
|
||||||
b.Append("Returns: "); |
|
||||||
break; |
|
||||||
case "param": |
|
||||||
b.AppendLine(); |
|
||||||
b.Append(reader.GetAttribute("name") + ": "); |
|
||||||
break; |
|
||||||
case "remarks": |
|
||||||
b.AppendLine(); |
|
||||||
b.Append("Remarks: "); |
|
||||||
break; |
|
||||||
case "see": |
|
||||||
if (reader.IsEmptyElement) { |
|
||||||
b.Append(reader.GetAttribute("cref")); |
|
||||||
} else { |
|
||||||
reader.MoveToContent(); |
|
||||||
if (reader.HasValue) { |
|
||||||
b.Append(reader.Value); |
|
||||||
} else { |
|
||||||
b.Append(reader.GetAttribute("cref")); |
|
||||||
} |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
return b.ToString(); |
|
||||||
} catch (XmlException) { |
|
||||||
return xmlDoc; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,103 +0,0 @@ |
|||||||
// CSharp Editor Example with Code Completion
|
|
||||||
// Copyright (c) 2006, Daniel Grunwald
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification, are
|
|
||||||
// permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// - Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// - Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer in the documentation and/or other materials
|
|
||||||
// provided with the distribution.
|
|
||||||
//
|
|
||||||
// - Neither the name of the ICSharpCode team nor the names of its contributors may be used to
|
|
||||||
// endorse or promote products derived from this software without specific prior written
|
|
||||||
// permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &AS IS& AND ANY EXPRESS
|
|
||||||
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
||||||
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
||||||
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
|
||||||
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Collections.Generic; |
|
||||||
using System.Drawing; |
|
||||||
using System.Windows.Forms; |
|
||||||
using System.IO; |
|
||||||
using System.Threading; |
|
||||||
|
|
||||||
using ICSharpCode.TextEditor; |
|
||||||
using ICSharpCode.TextEditor.Gui; |
|
||||||
using ICSharpCode.TextEditor.Gui.CompletionWindow; |
|
||||||
|
|
||||||
namespace CSharpEditor |
|
||||||
{ |
|
||||||
class CodeCompletionKeyHandler |
|
||||||
{ |
|
||||||
MainForm mainForm; |
|
||||||
TextEditorControl editor; |
|
||||||
CodeCompletionWindow codeCompletionWindow; |
|
||||||
|
|
||||||
private CodeCompletionKeyHandler(MainForm mainForm, TextEditorControl editor) |
|
||||||
{ |
|
||||||
this.mainForm = mainForm; |
|
||||||
this.editor = editor; |
|
||||||
} |
|
||||||
|
|
||||||
public static CodeCompletionKeyHandler Attach(MainForm mainForm, TextEditorControl editor) |
|
||||||
{ |
|
||||||
CodeCompletionKeyHandler h = new CodeCompletionKeyHandler(mainForm, editor); |
|
||||||
|
|
||||||
editor.ActiveTextAreaControl.TextArea.KeyEventHandler += h.TextAreaKeyEventHandler; |
|
||||||
|
|
||||||
// When the editor is disposed, close the code completion window
|
|
||||||
editor.Disposed += h.CloseCodeCompletionWindow; |
|
||||||
|
|
||||||
return h; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Return true to handle the keypress, return false to let the text area handle the keypress
|
|
||||||
/// </summary>
|
|
||||||
bool TextAreaKeyEventHandler(char key) |
|
||||||
{ |
|
||||||
if (codeCompletionWindow != null) { |
|
||||||
// If completion window is open and wants to handle the key, don't let the text area
|
|
||||||
// handle it
|
|
||||||
if (codeCompletionWindow.ProcessKeyEvent(key)) |
|
||||||
return true; |
|
||||||
} |
|
||||||
if (key == '.') { |
|
||||||
ICompletionDataProvider completionDataProvider = new CodeCompletionProvider(mainForm); |
|
||||||
|
|
||||||
codeCompletionWindow = CodeCompletionWindow.ShowCompletionWindow( |
|
||||||
mainForm, // The parent window for the completion window
|
|
||||||
editor, // The text editor to show the window for
|
|
||||||
MainForm.DummyFileName, // Filename - will be passed back to the provider
|
|
||||||
completionDataProvider, // Provider to get the list of possible completions
|
|
||||||
key // Key pressed - will be passed to the provider
|
|
||||||
); |
|
||||||
if (codeCompletionWindow != null) { |
|
||||||
// ShowCompletionWindow can return null when the provider returns an empty list
|
|
||||||
codeCompletionWindow.Closed += new EventHandler(CloseCodeCompletionWindow); |
|
||||||
} |
|
||||||
} |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
void CloseCodeCompletionWindow(object sender, EventArgs e) |
|
||||||
{ |
|
||||||
if (codeCompletionWindow != null) { |
|
||||||
codeCompletionWindow.Closed -= new EventHandler(CloseCodeCompletionWindow); |
|
||||||
codeCompletionWindow.Dispose(); |
|
||||||
codeCompletionWindow = null; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,166 +0,0 @@ |
|||||||
// CSharp Editor Example with Code Completion
|
|
||||||
// Copyright (c) 2006, Daniel Grunwald
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification, are
|
|
||||||
// permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// - Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// - Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer in the documentation and/or other materials
|
|
||||||
// provided with the distribution.
|
|
||||||
//
|
|
||||||
// - Neither the name of the ICSharpCode team nor the names of its contributors may be used to
|
|
||||||
// endorse or promote products derived from this software without specific prior written
|
|
||||||
// permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &AS IS& AND ANY EXPRESS
|
|
||||||
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
||||||
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
||||||
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
|
||||||
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Collections; |
|
||||||
using System.Collections.Generic; |
|
||||||
using System.Text; |
|
||||||
using System.Windows.Forms; |
|
||||||
using ICSharpCode.TextEditor; |
|
||||||
using ICSharpCode.TextEditor.Gui.CompletionWindow; |
|
||||||
using Dom = ICSharpCode.SharpDevelop.Dom; |
|
||||||
using NRefactoryResolver = ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryResolver; |
|
||||||
|
|
||||||
namespace CSharpEditor |
|
||||||
{ |
|
||||||
class CodeCompletionProvider : ICompletionDataProvider |
|
||||||
{ |
|
||||||
MainForm mainForm; |
|
||||||
|
|
||||||
public CodeCompletionProvider(MainForm mainForm) |
|
||||||
{ |
|
||||||
this.mainForm = mainForm; |
|
||||||
} |
|
||||||
|
|
||||||
public ImageList ImageList { |
|
||||||
get { |
|
||||||
return mainForm.imageList1; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public string PreSelection { |
|
||||||
get { |
|
||||||
return null; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public int DefaultIndex { |
|
||||||
get { |
|
||||||
return -1; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public CompletionDataProviderKeyResult ProcessKey(char key) |
|
||||||
{ |
|
||||||
if (char.IsLetterOrDigit(key) || key == '_') { |
|
||||||
return CompletionDataProviderKeyResult.NormalKey; |
|
||||||
} else { |
|
||||||
// key triggers insertion of selected items
|
|
||||||
return CompletionDataProviderKeyResult.InsertionKey; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Called when entry should be inserted. Forward to the insertion action of the completion data.
|
|
||||||
/// </summary>
|
|
||||||
public bool InsertAction(ICompletionData data, TextArea textArea, int insertionOffset, char key) |
|
||||||
{ |
|
||||||
textArea.Caret.Position = textArea.Document.OffsetToPosition(insertionOffset); |
|
||||||
return data.InsertAction(textArea, key); |
|
||||||
} |
|
||||||
|
|
||||||
public ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped) |
|
||||||
{ |
|
||||||
// We can return code-completion items like this:
|
|
||||||
|
|
||||||
//return new ICompletionData[] {
|
|
||||||
// new DefaultCompletionData("Text", "Description", 1)
|
|
||||||
//};
|
|
||||||
|
|
||||||
NRefactoryResolver resolver = new NRefactoryResolver(mainForm.myProjectContent.Language); |
|
||||||
Dom.ResolveResult rr = resolver.Resolve(FindExpression(textArea), |
|
||||||
mainForm.parseInformation, |
|
||||||
textArea.MotherTextEditorControl.Text); |
|
||||||
List<ICompletionData> resultList = new List<ICompletionData>(); |
|
||||||
if (rr != null) { |
|
||||||
var completionData = rr.GetCompletionData(mainForm.myProjectContent); |
|
||||||
if (completionData != null) { |
|
||||||
AddCompletionData(resultList, completionData); |
|
||||||
} |
|
||||||
} |
|
||||||
return resultList.ToArray(); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Find the expression the cursor is at.
|
|
||||||
/// Also determines the context (using statement, "new"-expression etc.) the
|
|
||||||
/// cursor is at.
|
|
||||||
/// </summary>
|
|
||||||
Dom.ExpressionResult FindExpression(TextArea textArea) |
|
||||||
{ |
|
||||||
Dom.IExpressionFinder finder; |
|
||||||
if (MainForm.IsVisualBasic) { |
|
||||||
finder = new Dom.VBNet.VBExpressionFinder(); |
|
||||||
} else { |
|
||||||
finder = new Dom.CSharp.CSharpExpressionFinder(mainForm.parseInformation); |
|
||||||
} |
|
||||||
Dom.ExpressionResult expression = finder.FindExpression(textArea.Document.TextContent, textArea.Caret.Offset); |
|
||||||
if (expression.Region.IsEmpty) { |
|
||||||
expression.Region = new Dom.DomRegion(textArea.Caret.Line + 1, textArea.Caret.Column + 1); |
|
||||||
} |
|
||||||
return expression; |
|
||||||
} |
|
||||||
|
|
||||||
void AddCompletionData(List<ICompletionData> resultList, IEnumerable<Dom.ICompletionEntry> completionData) |
|
||||||
{ |
|
||||||
// used to store the method names for grouping overloads
|
|
||||||
Dictionary<string, CodeCompletionData> nameDictionary = new Dictionary<string, CodeCompletionData>(); |
|
||||||
|
|
||||||
// Add the completion data as returned by SharpDevelop.Dom to the
|
|
||||||
// list for the text editor
|
|
||||||
foreach (object obj in completionData) { |
|
||||||
if (obj is Dom.NamespaceEntry) { |
|
||||||
resultList.Add(new DefaultCompletionData(obj.ToString(), "namespace " + obj, 5)); |
|
||||||
} else if (obj is Dom.NRefactoryResolver.KeywordEntry) { |
|
||||||
resultList.Add(new DefaultCompletionData(obj.ToString(), obj.ToString(), 5)); |
|
||||||
} else if (obj is Dom.IClass) { |
|
||||||
Dom.IClass c = (Dom.IClass)obj; |
|
||||||
resultList.Add(new CodeCompletionData(c)); |
|
||||||
} else if (obj is Dom.IMember) { |
|
||||||
Dom.IMember m = (Dom.IMember)obj; |
|
||||||
if (m is Dom.IMethod && ((m as Dom.IMethod).IsConstructor)) { |
|
||||||
// Skip constructors
|
|
||||||
continue; |
|
||||||
} |
|
||||||
// Group results by name and add "(x Overloads)" to the
|
|
||||||
// description if there are multiple results with the same name.
|
|
||||||
|
|
||||||
CodeCompletionData data; |
|
||||||
if (nameDictionary.TryGetValue(m.Name, out data)) { |
|
||||||
data.AddOverload(); |
|
||||||
} else { |
|
||||||
nameDictionary[m.Name] = data = new CodeCompletionData(m); |
|
||||||
resultList.Add(data); |
|
||||||
} |
|
||||||
} else { |
|
||||||
// Current ICSharpCode.SharpDevelop.Dom should never return anything else
|
|
||||||
throw new NotSupportedException(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,65 +0,0 @@ |
|||||||
// CSharp Editor Example with Code Completion
|
|
||||||
// Copyright (c) 2006, Daniel Grunwald
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification, are
|
|
||||||
// permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// - Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// - Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer in the documentation and/or other materials
|
|
||||||
// provided with the distribution.
|
|
||||||
//
|
|
||||||
// - Neither the name of the ICSharpCode team nor the names of its contributors may be used to
|
|
||||||
// endorse or promote products derived from this software without specific prior written
|
|
||||||
// permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &AS IS& AND ANY EXPRESS
|
|
||||||
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
||||||
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
||||||
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
|
||||||
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Windows.Forms; |
|
||||||
using ICSharpCode.SharpDevelop.Dom; |
|
||||||
|
|
||||||
namespace CSharpEditor |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// ICSharpCode.SharpDevelop.Dom was created by extracting code from ICSharpCode.SharpDevelop.dll.
|
|
||||||
/// There are a few static method calls that refer to GUI code or the code for keeping the parse
|
|
||||||
/// information. These calls have to be implemented by the application hosting
|
|
||||||
/// ICSharpCode.SharpDevelop.Dom by settings static fields with a delegate to their method
|
|
||||||
/// implementation.
|
|
||||||
/// </summary>
|
|
||||||
static class HostCallbackImplementation |
|
||||||
{ |
|
||||||
public static void Register(MainForm mainForm) |
|
||||||
{ |
|
||||||
// Must be implemented. Gets the project content of the active project.
|
|
||||||
HostCallback.GetCurrentProjectContent = delegate { |
|
||||||
return mainForm.myProjectContent; |
|
||||||
}; |
|
||||||
|
|
||||||
// The default implementation just logs to Log4Net. We want to display a MessageBox.
|
|
||||||
// Note that we use += here - in this case, we want to keep the default Log4Net implementation.
|
|
||||||
HostCallback.ShowError += delegate(string message, Exception ex) { |
|
||||||
MessageBox.Show(message + Environment.NewLine + ex.ToString()); |
|
||||||
}; |
|
||||||
HostCallback.ShowMessage += delegate(string message) { |
|
||||||
MessageBox.Show(message); |
|
||||||
}; |
|
||||||
HostCallback.ShowAssemblyLoadError += delegate(string fileName, string include, string message) { |
|
||||||
MessageBox.Show("Error loading code-completion information for " |
|
||||||
+ include + " from " + fileName |
|
||||||
+ ":\r\n" + message + "\r\n"); |
|
||||||
}; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,101 +0,0 @@ |
|||||||
namespace CSharpEditor |
|
||||||
{ |
|
||||||
partial class MainForm : System.Windows.Forms.Form |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Designer variable used to keep track of non-visual components.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Disposes resources used by the form.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing) |
|
||||||
{ |
|
||||||
if (disposing) { |
|
||||||
if (components != null) { |
|
||||||
components.Dispose(); |
|
||||||
} |
|
||||||
} |
|
||||||
base.Dispose(disposing); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This method is required for Windows Forms designer support.
|
|
||||||
/// Do not change the method contents inside the source code editor. The Forms designer might
|
|
||||||
/// not be able to load this method if it was changed manually.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent() |
|
||||||
{ |
|
||||||
this.components = new System.ComponentModel.Container(); |
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); |
|
||||||
this.textEditorControl1 = new ICSharpCode.TextEditor.TextEditorControl(); |
|
||||||
this.statusStrip1 = new System.Windows.Forms.StatusStrip(); |
|
||||||
this.parserThreadLabel = new System.Windows.Forms.ToolStripStatusLabel(); |
|
||||||
this.imageList1 = new System.Windows.Forms.ImageList(this.components); |
|
||||||
this.statusStrip1.SuspendLayout(); |
|
||||||
this.SuspendLayout(); |
|
||||||
//
|
|
||||||
// textEditorControl1
|
|
||||||
//
|
|
||||||
this.textEditorControl1.Dock = System.Windows.Forms.DockStyle.Fill; |
|
||||||
this.textEditorControl1.IsIconBarVisible = false; |
|
||||||
this.textEditorControl1.Location = new System.Drawing.Point(0, 0); |
|
||||||
this.textEditorControl1.Name = "textEditorControl1"; |
|
||||||
this.textEditorControl1.ShowEOLMarkers = true; |
|
||||||
this.textEditorControl1.ShowInvalidLines = false; |
|
||||||
this.textEditorControl1.ShowSpaces = true; |
|
||||||
this.textEditorControl1.ShowTabs = true; |
|
||||||
this.textEditorControl1.ShowVRuler = true; |
|
||||||
this.textEditorControl1.Size = new System.Drawing.Size(556, 248); |
|
||||||
this.textEditorControl1.TabIndex = 0; |
|
||||||
//
|
|
||||||
// statusStrip1
|
|
||||||
//
|
|
||||||
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { |
|
||||||
this.parserThreadLabel}); |
|
||||||
this.statusStrip1.Location = new System.Drawing.Point(0, 248); |
|
||||||
this.statusStrip1.Name = "statusStrip1"; |
|
||||||
this.statusStrip1.Size = new System.Drawing.Size(556, 22); |
|
||||||
this.statusStrip1.TabIndex = 1; |
|
||||||
this.statusStrip1.Text = "statusStrip1"; |
|
||||||
//
|
|
||||||
// parserThreadLabel
|
|
||||||
//
|
|
||||||
this.parserThreadLabel.Name = "parserThreadLabel"; |
|
||||||
this.parserThreadLabel.Size = new System.Drawing.Size(109, 17); |
|
||||||
this.parserThreadLabel.Text = "toolStripStatusLabel1"; |
|
||||||
//
|
|
||||||
// imageList1
|
|
||||||
//
|
|
||||||
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); |
|
||||||
this.imageList1.TransparentColor = System.Drawing.Color.Transparent; |
|
||||||
this.imageList1.Images.SetKeyName(0, "Icons.16x16.Class.png"); |
|
||||||
this.imageList1.Images.SetKeyName(1, "Icons.16x16.Method.png"); |
|
||||||
this.imageList1.Images.SetKeyName(2, "Icons.16x16.Property.png"); |
|
||||||
this.imageList1.Images.SetKeyName(3, "Icons.16x16.Field.png"); |
|
||||||
this.imageList1.Images.SetKeyName(4, "Icons.16x16.Enum.png"); |
|
||||||
this.imageList1.Images.SetKeyName(5, "Icons.16x16.NameSpace.png"); |
|
||||||
this.imageList1.Images.SetKeyName(6, "Icons.16x16.Event.png"); |
|
||||||
//
|
|
||||||
// MainForm
|
|
||||||
//
|
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); |
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; |
|
||||||
this.ClientSize = new System.Drawing.Size(556, 270); |
|
||||||
this.Controls.Add(this.textEditorControl1); |
|
||||||
this.Controls.Add(this.statusStrip1); |
|
||||||
this.Name = "MainForm"; |
|
||||||
this.Text = "CSharpEditor"; |
|
||||||
this.statusStrip1.ResumeLayout(false); |
|
||||||
this.statusStrip1.PerformLayout(); |
|
||||||
this.ResumeLayout(false); |
|
||||||
this.PerformLayout(); |
|
||||||
} |
|
||||||
internal System.Windows.Forms.ImageList imageList1; |
|
||||||
private System.Windows.Forms.ToolStripStatusLabel parserThreadLabel; |
|
||||||
private System.Windows.Forms.StatusStrip statusStrip1; |
|
||||||
private ICSharpCode.TextEditor.TextEditorControl textEditorControl1; |
|
||||||
} |
|
||||||
} |
|
@ -1,203 +0,0 @@ |
|||||||
// CSharp Editor Example with Code Completion
|
|
||||||
// Copyright (c) 2006, Daniel Grunwald
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification, are
|
|
||||||
// permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// - Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// - Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer in the documentation and/or other materials
|
|
||||||
// provided with the distribution.
|
|
||||||
//
|
|
||||||
// - Neither the name of the ICSharpCode team nor the names of its contributors may be used to
|
|
||||||
// endorse or promote products derived from this software without specific prior written
|
|
||||||
// permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &AS IS& AND ANY EXPRESS
|
|
||||||
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
||||||
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
||||||
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
|
||||||
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Collections.Generic; |
|
||||||
using System.Drawing; |
|
||||||
using System.Windows.Forms; |
|
||||||
using System.IO; |
|
||||||
using System.Threading; |
|
||||||
|
|
||||||
using NRefactory = ICSharpCode.NRefactory; |
|
||||||
using Dom = ICSharpCode.SharpDevelop.Dom; |
|
||||||
|
|
||||||
namespace CSharpEditor |
|
||||||
{ |
|
||||||
partial class MainForm |
|
||||||
{ |
|
||||||
[STAThread] |
|
||||||
public static void Main(string[] args) |
|
||||||
{ |
|
||||||
Application.EnableVisualStyles(); |
|
||||||
Application.SetCompatibleTextRenderingDefault(false); |
|
||||||
Application.Run(new MainForm()); |
|
||||||
} |
|
||||||
|
|
||||||
internal Dom.ProjectContentRegistry pcRegistry; |
|
||||||
internal Dom.DefaultProjectContent myProjectContent; |
|
||||||
internal Dom.ParseInformation parseInformation; |
|
||||||
Dom.ICompilationUnit lastCompilationUnit; |
|
||||||
Thread parserThread; |
|
||||||
|
|
||||||
public static bool IsVisualBasic = false; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Many SharpDevelop.Dom methods take a file name, which is really just a unique identifier
|
|
||||||
/// for a file - Dom methods don't try to access code files on disk, so the file does not have
|
|
||||||
/// to exist.
|
|
||||||
/// SharpDevelop itself uses internal names of the kind "[randomId]/Class1.cs" to support
|
|
||||||
/// code-completion in unsaved files.
|
|
||||||
/// </summary>
|
|
||||||
public const string DummyFileName = "edited.cs"; |
|
||||||
|
|
||||||
static readonly Dom.LanguageProperties CurrentLanguageProperties = IsVisualBasic ? Dom.LanguageProperties.VBNet : Dom.LanguageProperties.CSharp; |
|
||||||
|
|
||||||
public MainForm() |
|
||||||
{ |
|
||||||
//
|
|
||||||
// The InitializeComponent() call is required for Windows Forms designer support.
|
|
||||||
//
|
|
||||||
InitializeComponent(); |
|
||||||
|
|
||||||
if (IsVisualBasic) { |
|
||||||
textEditorControl1.Text = @"
|
|
||||||
Class A |
|
||||||
Sub B |
|
||||||
Dim xx As String |
|
||||||
|
|
||||||
End Sub |
|
||||||
End Class |
|
||||||
";
|
|
||||||
textEditorControl1.SetHighlighting("VBNET"); |
|
||||||
} else { |
|
||||||
textEditorControl1.Text = @"using System;
|
|
||||||
class A |
|
||||||
{ |
|
||||||
void B() |
|
||||||
{ |
|
||||||
string x; |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
||||||
";
|
|
||||||
textEditorControl1.SetHighlighting("C#"); |
|
||||||
} |
|
||||||
textEditorControl1.ShowEOLMarkers = false; |
|
||||||
textEditorControl1.ShowInvalidLines = false; |
|
||||||
HostCallbackImplementation.Register(this); |
|
||||||
CodeCompletionKeyHandler.Attach(this, textEditorControl1); |
|
||||||
ToolTipProvider.Attach(this, textEditorControl1); |
|
||||||
|
|
||||||
pcRegistry = new Dom.ProjectContentRegistry(); // Default .NET 2.0 registry
|
|
||||||
|
|
||||||
// Persistence lets SharpDevelop.Dom create a cache file on disk so that
|
|
||||||
// future starts are faster.
|
|
||||||
// It also caches XML documentation files in an on-disk hash table, thus
|
|
||||||
// reducing memory usage.
|
|
||||||
pcRegistry.ActivatePersistence(Path.Combine(Path.GetTempPath(), |
|
||||||
"CSharpCodeCompletion")); |
|
||||||
|
|
||||||
myProjectContent = new Dom.DefaultProjectContent(); |
|
||||||
myProjectContent.Language = CurrentLanguageProperties; |
|
||||||
// create dummy parseInformation to prevent NullReferenceException when using CC before parsing
|
|
||||||
// for the first time
|
|
||||||
parseInformation = new Dom.ParseInformation(new Dom.DefaultCompilationUnit(myProjectContent)); |
|
||||||
} |
|
||||||
|
|
||||||
protected override void OnLoad(EventArgs e) |
|
||||||
{ |
|
||||||
base.OnLoad(e); |
|
||||||
|
|
||||||
parserThread = new Thread(ParserThread); |
|
||||||
parserThread.IsBackground = true; |
|
||||||
parserThread.Start(); |
|
||||||
} |
|
||||||
|
|
||||||
void ParserThread() |
|
||||||
{ |
|
||||||
BeginInvoke(new MethodInvoker(delegate { parserThreadLabel.Text = "Loading mscorlib..."; })); |
|
||||||
myProjectContent.AddReferencedContent(pcRegistry.Mscorlib); |
|
||||||
|
|
||||||
// do one initial parser step to enable code-completion while other
|
|
||||||
// references are loading
|
|
||||||
ParseStep(); |
|
||||||
|
|
||||||
string[] referencedAssemblies = { |
|
||||||
"System", "System.Data", "System.Drawing", "System.Xml", "System.Windows.Forms", "Microsoft.VisualBasic" |
|
||||||
}; |
|
||||||
foreach (string assemblyName in referencedAssemblies) { |
|
||||||
string assemblyNameCopy = assemblyName; // copy for anonymous method
|
|
||||||
BeginInvoke(new MethodInvoker(delegate { parserThreadLabel.Text = "Loading " + assemblyNameCopy + "..."; })); |
|
||||||
Dom.IProjectContent referenceProjectContent = pcRegistry.GetProjectContentForReference(assemblyName, assemblyName); |
|
||||||
myProjectContent.AddReferencedContent(referenceProjectContent); |
|
||||||
if (referenceProjectContent is Dom.ReflectionProjectContent) { |
|
||||||
(referenceProjectContent as Dom.ReflectionProjectContent).InitializeReferences(); |
|
||||||
} |
|
||||||
} |
|
||||||
if (IsVisualBasic) { |
|
||||||
myProjectContent.DefaultImports = new Dom.DefaultUsing(myProjectContent); |
|
||||||
myProjectContent.DefaultImports.Usings.Add("System"); |
|
||||||
myProjectContent.DefaultImports.Usings.Add("System.Text"); |
|
||||||
myProjectContent.DefaultImports.Usings.Add("Microsoft.VisualBasic"); |
|
||||||
} |
|
||||||
BeginInvoke(new MethodInvoker(delegate { parserThreadLabel.Text = "Ready"; })); |
|
||||||
|
|
||||||
// Parse the current file every 2 seconds
|
|
||||||
while (!IsDisposed) { |
|
||||||
ParseStep(); |
|
||||||
|
|
||||||
Thread.Sleep(2000); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void ParseStep() |
|
||||||
{ |
|
||||||
string code = null; |
|
||||||
Invoke(new MethodInvoker(delegate { |
|
||||||
code = textEditorControl1.Text; |
|
||||||
})); |
|
||||||
TextReader textReader = new StringReader(code); |
|
||||||
Dom.ICompilationUnit newCompilationUnit; |
|
||||||
NRefactory.SupportedLanguage supportedLanguage; |
|
||||||
if (IsVisualBasic) |
|
||||||
supportedLanguage = NRefactory.SupportedLanguage.VBNet; |
|
||||||
else |
|
||||||
supportedLanguage = NRefactory.SupportedLanguage.CSharp; |
|
||||||
using (NRefactory.IParser p = NRefactory.ParserFactory.CreateParser(supportedLanguage, textReader)) { |
|
||||||
// we only need to parse types and method definitions, no method bodies
|
|
||||||
// so speed up the parser and make it more resistent to syntax
|
|
||||||
// errors in methods
|
|
||||||
p.ParseMethodBodies = false; |
|
||||||
|
|
||||||
p.Parse(); |
|
||||||
newCompilationUnit = ConvertCompilationUnit(p.CompilationUnit); |
|
||||||
} |
|
||||||
// Remove information from lastCompilationUnit and add information from newCompilationUnit.
|
|
||||||
myProjectContent.UpdateCompilationUnit(lastCompilationUnit, newCompilationUnit, DummyFileName); |
|
||||||
lastCompilationUnit = newCompilationUnit; |
|
||||||
parseInformation = new Dom.ParseInformation(newCompilationUnit); |
|
||||||
} |
|
||||||
|
|
||||||
Dom.ICompilationUnit ConvertCompilationUnit(NRefactory.Ast.CompilationUnit cu) |
|
||||||
{ |
|
||||||
Dom.NRefactoryResolver.NRefactoryASTConvertVisitor converter; |
|
||||||
converter = new Dom.NRefactoryResolver.NRefactoryASTConvertVisitor(myProjectContent); |
|
||||||
cu.AcceptVisitor(converter, null); |
|
||||||
return converter.Cu; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,191 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||||
<root> |
|
||||||
<!-- |
|
||||||
Microsoft ResX Schema |
|
||||||
|
|
||||||
Version 2.0 |
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format |
|
||||||
that is mostly human readable. The generation and parsing of the |
|
||||||
various data types are done through the TypeConverter classes |
|
||||||
associated with the data types. |
|
||||||
|
|
||||||
Example: |
|
||||||
|
|
||||||
... ado.net/XML headers & schema ... |
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader> |
|
||||||
<resheader name="version">2.0</resheader> |
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> |
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> |
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> |
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> |
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> |
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value> |
|
||||||
</data> |
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> |
|
||||||
<comment>This is a comment</comment> |
|
||||||
</data> |
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple |
|
||||||
name/value pairs. |
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a |
|
||||||
type or mimetype. Type corresponds to a .NET class that support |
|
||||||
text/value conversion through the TypeConverter architecture. |
|
||||||
Classes that don't support this are serialized and stored with the |
|
||||||
mimetype set. |
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the |
|
||||||
ResXResourceReader how to depersist the object. This is currently not |
|
||||||
extensible. For a given mimetype the value must be set accordingly: |
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format |
|
||||||
that the ResXResourceWriter will generate, however the reader can |
|
||||||
read any of the formats listed below. |
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64 |
|
||||||
value : The object must be serialized with |
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter |
|
||||||
: and then encoded with base64 encoding. |
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64 |
|
||||||
value : The object must be serialized with |
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter |
|
||||||
: and then encoded with base64 encoding. |
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64 |
|
||||||
value : The object must be serialized into a byte array |
|
||||||
: using a System.ComponentModel.TypeConverter |
|
||||||
: and then encoded with base64 encoding. |
|
||||||
--> |
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> |
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> |
|
||||||
<xsd:element name="root" msdata:IsDataSet="true"> |
|
||||||
<xsd:complexType> |
|
||||||
<xsd:choice maxOccurs="unbounded"> |
|
||||||
<xsd:element name="metadata"> |
|
||||||
<xsd:complexType> |
|
||||||
<xsd:sequence> |
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" /> |
|
||||||
</xsd:sequence> |
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" /> |
|
||||||
<xsd:attribute name="type" type="xsd:string" /> |
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" /> |
|
||||||
<xsd:attribute ref="xml:space" /> |
|
||||||
</xsd:complexType> |
|
||||||
</xsd:element> |
|
||||||
<xsd:element name="assembly"> |
|
||||||
<xsd:complexType> |
|
||||||
<xsd:attribute name="alias" type="xsd:string" /> |
|
||||||
<xsd:attribute name="name" type="xsd:string" /> |
|
||||||
</xsd:complexType> |
|
||||||
</xsd:element> |
|
||||||
<xsd:element name="data"> |
|
||||||
<xsd:complexType> |
|
||||||
<xsd:sequence> |
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> |
|
||||||
</xsd:sequence> |
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> |
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> |
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> |
|
||||||
<xsd:attribute ref="xml:space" /> |
|
||||||
</xsd:complexType> |
|
||||||
</xsd:element> |
|
||||||
<xsd:element name="resheader"> |
|
||||||
<xsd:complexType> |
|
||||||
<xsd:sequence> |
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
|
||||||
</xsd:sequence> |
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" /> |
|
||||||
</xsd:complexType> |
|
||||||
</xsd:element> |
|
||||||
</xsd:choice> |
|
||||||
</xsd:complexType> |
|
||||||
</xsd:element> |
|
||||||
</xsd:schema> |
|
||||||
<resheader name="resmimetype"> |
|
||||||
<value>text/microsoft-resx</value> |
|
||||||
</resheader> |
|
||||||
<resheader name="version"> |
|
||||||
<value>2.0</value> |
|
||||||
</resheader> |
|
||||||
<resheader name="reader"> |
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
|
||||||
</resheader> |
|
||||||
<resheader name="writer"> |
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
|
||||||
</resheader> |
|
||||||
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> |
|
||||||
<value>17, 17</value> |
|
||||||
</metadata> |
|
||||||
<metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> |
|
||||||
<value>128, 17</value> |
|
||||||
</metadata> |
|
||||||
<data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64"> |
|
||||||
<value> |
|
||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w |
|
||||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 |
|
||||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk |
|
||||||
DQAAAk1TRnQBSQFMAgEBBwEAAQkBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo |
|
||||||
AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA |
|
||||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 |
|
||||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA |
|
||||||
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm |
|
||||||
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM |
|
||||||
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA |
|
||||||
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz |
|
||||||
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ |
|
||||||
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM |
|
||||||
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA |
|
||||||
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA |
|
||||||
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ |
|
||||||
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ |
|
||||||
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA |
|
||||||
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm |
|
||||||
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ |
|
||||||
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz |
|
||||||
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA |
|
||||||
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM |
|
||||||
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM |
|
||||||
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM |
|
||||||
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA |
|
||||||
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM |
|
||||||
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ |
|
||||||
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz |
|
||||||
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm |
|
||||||
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw |
|
||||||
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/9UAAg4DAAEQAQ4JAAEb |
|
||||||
AXMBXxoACV8JAAEPAQ4FAAEQAQ4IAAHvAXUBKwFfGAABGgNuBEoBCAFfCQABEAEOBQABEAEOCQABmQEW |
|
||||||
AUsBXxcAAVgFegJZAUoBXwkAARABDgUAARABDgkAAZkBegEWASkBXxYAAVgCmgGRAq4BeQFZAUoBXwkA |
|
||||||
AQ8BDgUAAREBDgoAAXQBegEWASkBXxUAAVgBoAKaBHoBSgdfAgABEAEOBwABDwEOBwABcwFLAUoBSwF6 |
|
||||||
ARYBIgFfFAABWAKgAZECrgJ6AUoBbgRKAQgBXwMAAQ4GAAEPAQ4JAAJ6AZkClAEWASIUAAFYAcMCoAKa |
|
||||||
AnoBSgJ6A1kBSgFfAwACDgUAARABDgkAAVkB9gF6ARYBSwFfFQABwwRYA1IBeQGRAq4BeQFZAUoBXwMA |
|
||||||
Ag4FAAEQAQ4JAAFZAaABegGUARYBSwFfGgABWAGgApoEegFKAV8DAAEQAQ4FAAEQAQ8KAAFZAfYBegGU |
|
||||||
ARYBSgFfGQABWAKgAZECrgJ6AUoBXwQAAREBDgMAARABDwsAAVkBoAF6AXkBlAEWARQBXxgAAVgBwwKg |
|
||||||
ApoCegFKAV8XAAGZA3kCdAGZGAABwwRYA1IBGj0AAQYBXz0AAgYBawFfEgAMXx0AAQYBgQG4AQYBawFf |
|
||||||
EAABrgtmAV8cAAFfAYEC/gG4AQYBaxAAAZEB/wL0AfIB8QPdAQkBuwFmAV8bAAPtAYEC/gG4AQYQAAGu |
|
||||||
Af8B9wHtAf8C9wLtARkBuwFmAV8bAAGSAV8CAAEGAf4BaxEAAZEG/wH0AhkBuwFmAV8NAAFrAV8MAAH3 |
|
||||||
AV8CAAFiAQYNAAEMAV8DAAGRAf8C7QH/AvcB7QGRARkBBwFmAV8FAAGgARoBmQHvAfcCAAJrAQ0BXwYA |
|
||||||
ASkBXwMAAfcBXwEAA2IBXwMAAaABGgGZAe8B9wMAAWEBDAFnAV8CAAHtCP8B9AEHAWYBXwsAAWsBBgFr |
|
||||||
AQYBDQFfBAABAwIpAV8CAAGSAV8BYgGDAYQCYgFfCQADYQEFAWEBXwEAAfcB/wG8ARkB/wEJAbwB7wFK |
|
||||||
Af8BvAFmAV8CAAFfAqACmQHvAfcBAAEGAoEBawEGAWsBSAFfAgABUQEDATcBAwEpAV8BAAHtAV8BBQH9 |
|
||||||
AX8BhAFiAQUCoAKZAe8B9wIAAWEDBQFhAQUBYQFfAfcB/wHzAUsB8wH/AbwBSgFYAQ8BvAGLA18BZgYA |
|
||||||
AgYBgQEGAYEBawEGAWsBDQFfAlEB+wI3AQMCbQHrAe0B9wGCAf0BfwGEAWIHAAEFAYMBBQKDAQUDYQHV |
|
||||||
Ad0BHAF6AUoB7QFKAXkBSgFZAg8BIgHsAWYBrgGgAQABmQHvAbQBAAIGAYECuAGBAWsBBgFrAQ0BUQP7 |
|
||||||
AjcBAwEpAV8DAAGIAf0BggEAAaABAAGZAe8BtAEAAWEBBQGDA6UBgwEFAWEBAAG0AdwBCQEcAXoBSgF6 |
|
||||||
AUoBegFKAVgBUgExAUQBZgGuBwABBgS4AYEDBgEAAVED+wI3AQMFAAGICQABYQSlAYMBYQIAAbQB1QG0 |
|
||||||
AQkBHAF6AUoBmgFKAnoCWQEyAa4BzwgAAZABuQK4AYEBBgFrAwABUQP7AQMRAAFhA6UBBQcAAfQBHAF6 |
|
||||||
AUoBoAN6AlkBjAHPCQABkAG5AbgBgQEGBQABUQH7AVETAAEMAaUBgwkAAfQBHAF6AqACegF5AewB7wG1 |
|
||||||
CgABBgG4AQYHAAFRFQABYQsAAfQDHAPsAbwB9wHvCwABBgQAAUIBTQE+BwABPgMAASgDAAFAAwABIAMA |
|
||||||
AQEBAAEBBgABARYAA/8BAAb/AgAG/wIABv8CAAL/AfMBnwHxAf8CAAGAAT8B5wHPAfAB/wMAAT8B5wHP |
|
||||||
AfgBfwMAAT8B5wHPAfgBPwMAAT8B5wHPAfwBHwQAAc8B5wHwAQ8EAAHnAc8B+AEPBAAB5wHPAfgBHwQA |
|
||||||
AecBzwH4AQ8CAAH8AQAB5wHPAfwBBwIAAfwBAAHzAZ8B/AEDAgAB/AEAAv8B/gEDAgAB/AEBBP8CAAH/ |
|
||||||
AfMH/wHhAv8BgAEHA/8BwAL/AQABBwP/AYAC/wEAAQcD/wEAAv8BAAEHA/8BMQL/AQABBwH/Ac8B/wEz |
|
||||||
Af8B5wEAAQcBwQGHAecBIQHBAcMBAAEHAf8BAwHDAQAB/wGBAQABBgECAQEBgQEAAQMDAAH8AwAB/gMA |
|
||||||
AUQCAAFxAUQBAQIAAf4BAAGAAfsB/gEDAgAB/wEBAcEC/wEHAfABAAH/AYMB4wL/AY8B+AEAAf8BxwH3 |
|
||||||
Av8B3wH8AQAB/wHvCw== |
|
||||||
</value> |
|
||||||
</data> |
|
||||||
</root> |
|
@ -1,150 +0,0 @@ |
|||||||
// CSharp Editor Example with Code Completion
|
|
||||||
// Copyright (c) 2007, Daniel Grunwald
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification, are
|
|
||||||
// permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// - Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// - Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer in the documentation and/or other materials
|
|
||||||
// provided with the distribution.
|
|
||||||
//
|
|
||||||
// - Neither the name of the ICSharpCode team nor the names of its contributors may be used to
|
|
||||||
// endorse or promote products derived from this software without specific prior written
|
|
||||||
// permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &AS IS& AND ANY EXPRESS
|
|
||||||
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
||||||
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
||||||
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
|
||||||
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Text; |
|
||||||
using ICSharpCode.SharpDevelop.Dom; |
|
||||||
using ICSharpCode.SharpDevelop.Dom.CSharp; |
|
||||||
using ICSharpCode.SharpDevelop.Dom.VBNet; |
|
||||||
using TextEditor = ICSharpCode.TextEditor; |
|
||||||
using NRefactoryResolver = ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryResolver; |
|
||||||
|
|
||||||
namespace CSharpEditor |
|
||||||
{ |
|
||||||
sealed class ToolTipProvider |
|
||||||
{ |
|
||||||
MainForm mainForm; |
|
||||||
TextEditor.TextEditorControl editor; |
|
||||||
|
|
||||||
private ToolTipProvider(MainForm mainForm, TextEditor.TextEditorControl editor) |
|
||||||
{ |
|
||||||
this.mainForm = mainForm; |
|
||||||
this.editor = editor; |
|
||||||
} |
|
||||||
|
|
||||||
public static void Attach(MainForm mainForm, TextEditor.TextEditorControl editor) |
|
||||||
{ |
|
||||||
ToolTipProvider tp = new ToolTipProvider(mainForm, editor); |
|
||||||
editor.ActiveTextAreaControl.TextArea.ToolTipRequest += tp.OnToolTipRequest; |
|
||||||
} |
|
||||||
|
|
||||||
void OnToolTipRequest(object sender, TextEditor.ToolTipRequestEventArgs e) |
|
||||||
{ |
|
||||||
if (e.InDocument && !e.ToolTipShown) { |
|
||||||
IExpressionFinder expressionFinder; |
|
||||||
if (MainForm.IsVisualBasic) { |
|
||||||
expressionFinder = new VBExpressionFinder(); |
|
||||||
} else { |
|
||||||
expressionFinder = new CSharpExpressionFinder(mainForm.parseInformation); |
|
||||||
} |
|
||||||
ExpressionResult expression = expressionFinder.FindFullExpression( |
|
||||||
editor.Text, |
|
||||||
editor.Document.PositionToOffset(e.LogicalPosition)); |
|
||||||
if (expression.Region.IsEmpty) { |
|
||||||
expression.Region = new DomRegion(e.LogicalPosition.Line + 1, e.LogicalPosition.Column + 1); |
|
||||||
} |
|
||||||
|
|
||||||
TextEditor.TextArea textArea = editor.ActiveTextAreaControl.TextArea; |
|
||||||
NRefactoryResolver resolver = new NRefactoryResolver(mainForm.myProjectContent.Language); |
|
||||||
ResolveResult rr = resolver.Resolve(expression, |
|
||||||
mainForm.parseInformation, |
|
||||||
textArea.MotherTextEditorControl.Text); |
|
||||||
string toolTipText = GetText(rr); |
|
||||||
if (toolTipText != null) { |
|
||||||
e.ShowToolTip(toolTipText); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
static string GetText(ResolveResult result) |
|
||||||
{ |
|
||||||
if (result == null) { |
|
||||||
return null; |
|
||||||
} |
|
||||||
if (result is MixedResolveResult) |
|
||||||
return GetText(((MixedResolveResult)result).PrimaryResult); |
|
||||||
IAmbience ambience = MainForm.IsVisualBasic ? (IAmbience)new VBNetAmbience() : new CSharpAmbience(); |
|
||||||
ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.ShowAccessibility; |
|
||||||
if (result is MemberResolveResult) { |
|
||||||
return GetMemberText(ambience, ((MemberResolveResult)result).ResolvedMember); |
|
||||||
} else if (result is LocalResolveResult) { |
|
||||||
LocalResolveResult rr = (LocalResolveResult)result; |
|
||||||
ambience.ConversionFlags = ConversionFlags.UseFullyQualifiedTypeNames |
|
||||||
| ConversionFlags.ShowReturnType; |
|
||||||
StringBuilder b = new StringBuilder(); |
|
||||||
if (rr.IsParameter) |
|
||||||
b.Append("parameter "); |
|
||||||
else |
|
||||||
b.Append("local variable "); |
|
||||||
b.Append(ambience.Convert(rr.Field)); |
|
||||||
return b.ToString(); |
|
||||||
} else if (result is NamespaceResolveResult) { |
|
||||||
return "namespace " + ((NamespaceResolveResult)result).Name; |
|
||||||
} else if (result is TypeResolveResult) { |
|
||||||
IClass c = ((TypeResolveResult)result).ResolvedClass; |
|
||||||
if (c != null) |
|
||||||
return GetMemberText(ambience, c); |
|
||||||
else |
|
||||||
return ambience.Convert(result.ResolvedType); |
|
||||||
} else if (result is MethodGroupResolveResult) { |
|
||||||
MethodGroupResolveResult mrr = result as MethodGroupResolveResult; |
|
||||||
IMethod m = mrr.GetMethodIfSingleOverload(); |
|
||||||
if (m != null) |
|
||||||
return GetMemberText(ambience, m); |
|
||||||
else |
|
||||||
return "Overload of " + ambience.Convert(mrr.ContainingType) + "." + mrr.Name; |
|
||||||
} else { |
|
||||||
return null; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
static string GetMemberText(IAmbience ambience, IEntity member) |
|
||||||
{ |
|
||||||
StringBuilder text = new StringBuilder(); |
|
||||||
if (member is IField) { |
|
||||||
text.Append(ambience.Convert(member as IField)); |
|
||||||
} else if (member is IProperty) { |
|
||||||
text.Append(ambience.Convert(member as IProperty)); |
|
||||||
} else if (member is IEvent) { |
|
||||||
text.Append(ambience.Convert(member as IEvent)); |
|
||||||
} else if (member is IMethod) { |
|
||||||
text.Append(ambience.Convert(member as IMethod)); |
|
||||||
} else if (member is IClass) { |
|
||||||
text.Append(ambience.Convert(member as IClass)); |
|
||||||
} else { |
|
||||||
text.Append("unknown member "); |
|
||||||
text.Append(member.ToString()); |
|
||||||
} |
|
||||||
string documentation = member.Documentation; |
|
||||||
if (documentation != null && documentation.Length > 0) { |
|
||||||
text.Append('\n'); |
|
||||||
text.Append(CodeCompletionData.XmlDocumentationToText(documentation)); |
|
||||||
} |
|
||||||
return text.ToString(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
Binary file not shown.
Loading…
Reference in new issue