Browse Source

Move Ambience and ExpressionFinder to ICSharpCode.SharpDevelop.Dom

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1958 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
7ce88146dc
  1. 9
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs
  2. 3
      src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
  3. 3
      src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
  4. 9
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs
  5. 13
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/EventHandlerCompletitionDataProvider.cs
  6. 3
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/Parser.cs
  7. 5
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
  8. 4
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
  9. 1
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
  10. 3
      src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin
  11. 2
      src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj
  12. 17
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/CodeDOMGenerator.cs
  13. 1
      src/AddIns/Misc/HtmlHelp2/Project/src/Service/SharpDevLanguageClass.cs
  14. 2
      src/AddIns/Misc/ResourceToolkit/Project/Src/Resolver/NRefactoryAstCacheService.cs
  15. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  16. 10
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  17. 6
      src/Main/Base/Project/Src/Project/IProject.cs
  18. 4
      src/Main/Base/Project/Src/Services/AmbienceService/AmbienceService.cs
  19. 6
      src/Main/Base/Project/Src/Services/AmbienceService/CodeDOMGeneratorUtility.cs
  20. 68
      src/Main/Base/Project/Src/Services/AmbienceService/IAmbience.cs
  21. 8
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
  22. 63
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Ambience.cs
  23. 9
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/CSharpAmbience.cs
  24. 22
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs
  25. 179
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CtrlSpaceResolveHelper.cs
  26. 166
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs
  27. 4
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ResolveResult.cs
  28. 521
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/ExpressionFinder.cs
  29. 7
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/VBNetAmbience.cs
  30. 5
      src/SharpDevelop.sln

9
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs

@ -13,7 +13,6 @@ using ICSharpCode.Core; @@ -13,7 +13,6 @@ using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using AST = Boo.Lang.Compiler.Ast;
using NRResolver = ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryResolver;
namespace Grunwald.BooBinding.CodeCompletion
{
@ -204,7 +203,7 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -204,7 +203,7 @@ namespace Grunwald.BooBinding.CodeCompletion
return new NamespaceResolveResult(callingClass, callingMember, "");
}
ResolveResult rr = NRResolver.GetResultFromDeclarationLine(callingClass, callingMember as IMethodOrProperty, this.caretLine, this.caretColumn, expressionResult.Expression);
ResolveResult rr = CtrlSpaceResolveHelper.GetResultFromDeclarationLine(callingClass, callingMember as IMethodOrProperty, this.caretLine, this.caretColumn, expressionResult.Expression);
if (rr != null) return rr;
AST.Expression expr;
@ -302,11 +301,11 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -302,11 +301,11 @@ namespace Grunwald.BooBinding.CodeCompletion
return null;
if (context == ExpressionContext.Importable) {
pc.AddNamespaceContents(result, "", pc.Language, true);
NRResolver.AddUsing(result, pc.DefaultImports, pc);
CtrlSpaceResolveHelper.AddUsing(result, pc.DefaultImports, pc);
return result;
}
NRResolver.AddContentsFromCalling(result, callingClass, callingMember);
CtrlSpaceResolveHelper.AddContentsFromCalling(result, callingClass, callingMember);
AddImportedNamespaceContents(result);
if (BooProject.BooCompilerPC != null) {
@ -359,7 +358,7 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -359,7 +358,7 @@ namespace Grunwald.BooBinding.CodeCompletion
if (c != null) list.Add(c);
}
list.Add(new DuckClass(cu));
NRResolver.AddImportedNamespaceContents(list, cu, callingClass);
CtrlSpaceResolveHelper.AddImportedNamespaceContents(list, cu, callingClass);
}
internal class DuckClass : DefaultClass

3
src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin

@ -10,11 +10,12 @@ @@ -10,11 +10,12 @@
<Runtime>
<Import assembly = "CSharpBinding.dll"/>
<Import assembly = ":ICSharpCode.SharpDevelop"/>
<Import assembly = ":ICSharpCode.SharpDevelop.Dom"/>
</Runtime>
<Path name = "/SharpDevelop/Workbench/Ambiences">
<Class id = "C#"
class = "ICSharpCode.Core.CSharpAmbience"/>
class = "ICSharpCode.SharpDevelop.Dom.CSharp.CSharpAmbience"/>
</Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/ProjectActions/Convert">

3
src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj

@ -44,7 +44,6 @@ @@ -44,7 +44,6 @@
<ItemGroup>
<Compile Include="Configuration\AssemblyInfo.cs" />
<EmbeddedResource Include="Resources\BuildOptions.xfrm" />
<Compile Include="Src\CSharpAmbience.cs" />
<Compile Include="Src\CSharpLanguageBinding.cs" />
<Compile Include="Src\FormattingStrategy\CSharpFormattingStrategy.cs" />
<Compile Include="Src\FormattingStrategy\DocumentAccessor.cs" />
@ -52,7 +51,6 @@ @@ -52,7 +51,6 @@
<Compile Include="Src\OptionPanels\BuildOptions.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Src\Parser\ExpressionFinder.cs" />
<Compile Include="Src\Parser\Parser.cs" />
<Compile Include="Src\Project\CSharpProject.cs" />
<None Include="CSharpBinding.addin">
@ -86,7 +84,6 @@ @@ -86,7 +84,6 @@
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<Folder Include="Src\PrettyPrinter\Gui\" />
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj">
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project>
<Name>ICSharpCode.SharpDevelop.Dom</Name>

9
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs

@ -14,8 +14,9 @@ using ICSharpCode.NRefactory.Visitors; @@ -14,8 +14,9 @@ using ICSharpCode.NRefactory.Visitors;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.Refactoring;
using ICSharpCode.SharpDevelop.Dom.CSharp;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
using ICSharpCode.SharpDevelop.Dom.Refactoring;
using ICSharpCode.TextEditor.Document;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
using AST = ICSharpCode.NRefactory.Ast;
@ -27,7 +28,7 @@ namespace CSharpBinding @@ -27,7 +28,7 @@ namespace CSharpBinding
{
public override bool HandleKeyPress(SharpDevelopTextAreaControl editor, char ch)
{
Parser.ExpressionFinder ef = new Parser.ExpressionFinder(editor.FileName);
CSharpExpressionFinder ef = new CSharpExpressionFinder(editor.FileName);
int cursor = editor.ActiveTextAreaControl.Caret.Offset;
ExpressionContext context = null;
if (ch == '(') {
@ -267,7 +268,7 @@ namespace CSharpBinding @@ -267,7 +268,7 @@ namespace CSharpBinding
bool IsInComment(SharpDevelopTextAreaControl editor)
{
Parser.ExpressionFinder ef = new Parser.ExpressionFinder(editor.FileName);
CSharpExpressionFinder ef = new CSharpExpressionFinder(editor.FileName);
int cursor = editor.ActiveTextAreaControl.Caret.Offset - 1;
return ef.FilterComments(editor.Document.GetText(0, cursor + 1), ref cursor) == null;
}
@ -310,7 +311,7 @@ namespace CSharpBinding @@ -310,7 +311,7 @@ namespace CSharpBinding
bool ShowNewCompletion(SharpDevelopTextAreaControl editor)
{
Parser.ExpressionFinder ef = new Parser.ExpressionFinder(editor.FileName);
CSharpExpressionFinder ef = new CSharpExpressionFinder(editor.FileName);
int cursor = editor.ActiveTextAreaControl.Caret.Offset;
ExpressionContext context = ef.FindExpression(editor.Document.GetText(0, cursor) + " T.", cursor + 2).Context;
if (context.IsObjectCreation) {

13
src/AddIns/BackendBindings/CSharpBinding/Project/Src/EventHandlerCompletitionDataProvider.cs

@ -7,17 +7,14 @@ @@ -7,17 +7,14 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.TextEditor;
using ICSharpCode.Core;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
using ICSharpCode.TextEditor.Document;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.CSharp;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
namespace CSharpBinding
{

3
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/Parser.cs

@ -9,6 +9,7 @@ using System; @@ -9,6 +9,7 @@ using System;
using System.IO;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.CSharp;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
namespace CSharpBinding.Parser
@ -35,7 +36,7 @@ namespace CSharpBinding.Parser @@ -35,7 +36,7 @@ namespace CSharpBinding.Parser
public IExpressionFinder CreateExpressionFinder(string fileName)
{
return new ExpressionFinder(fileName);
return new CSharpExpressionFinder(fileName);
}
public bool CanParse(string fileName)

5
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs

@ -1,16 +1,17 @@ @@ -1,16 +1,17 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="none" email=""/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.CSharp;
using ICSharpCode.SharpDevelop.Internal.Templates;
using ICSharpCode.SharpDevelop.Project;

4
src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs

@ -11,6 +11,8 @@ using System.IO; @@ -11,6 +11,8 @@ using System.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.VBNet;
using ICSharpCode.SharpDevelop.Internal.Templates;
using ICSharpCode.SharpDevelop.Project;
@ -74,7 +76,7 @@ namespace VBNetBinding @@ -74,7 +76,7 @@ namespace VBNetBinding
void InitVB()
{
Language = "VBNet";
LanguageProperties = ICSharpCode.SharpDevelop.Dom.LanguageProperties.VBNet;
LanguageProperties = LanguageProperties.VBNet;
BuildConstantSeparator = ',';
reparseSensitiveProperties.Add("TargetFrameworkVersion");
reparseSensitiveProperties.Add("DefineConstants");

1
src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs

@ -14,6 +14,7 @@ using ICSharpCode.SharpDevelop; @@ -14,6 +14,7 @@ using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.Refactoring;
using ICSharpCode.SharpDevelop.Dom.VBNet;
using ICSharpCode.TextEditor.Document;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
using VBTokens = ICSharpCode.NRefactory.Parser.VB.Tokens;

3
src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin

@ -10,11 +10,12 @@ @@ -10,11 +10,12 @@
<Runtime>
<Import assembly = "VBNetBinding.dll"/>
<Import assembly = ":ICSharpCode.SharpDevelop"/>
<Import assembly = ":ICSharpCode.SharpDevelop.Dom"/>
</Runtime>
<Path name = "/SharpDevelop/Workbench/Ambiences">
<Class id = "VBNet"
class = "VBNetBinding.VBNetAmbience"/>
class = "ICSharpCode.SharpDevelop.Dom.VBNet.VBNetAmbience"/>
</Path>
<Path name = "/SharpDevelop/Workbench/FileFilter">

2
src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj

@ -45,7 +45,6 @@ @@ -45,7 +45,6 @@
<ItemGroup>
<Compile Include="Configuration\AssemblyInfo.cs" />
<EmbeddedResource Include="Resources\BuildOptions.xfrm" />
<Compile Include="Src\VBNetAmbience.cs" />
<Compile Include="Src\VBNetLanguageBinding.cs" />
<Compile Include="Src\FormattingStrategy\VBNetFormattingStrategy.cs" />
<Compile Include="Src\OptionPanels\BuildOptions.cs">
@ -92,7 +91,6 @@ @@ -92,7 +91,6 @@
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<Folder Include="Src\PrettyPrinter\Gui\" />
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj">
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project>
<Name>ICSharpCode.SharpDevelop.Dom</Name>

17
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/CodeDOMGenerator.cs

@ -6,25 +6,12 @@ @@ -6,25 +6,12 @@
// </file>
using System;
using System.IO;
using System.Xml;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.FormsDesigner.Services;
using ICSharpCode.SharpDevelop;
namespace ICSharpCode.FormsDesigner
{

1
src/AddIns/Misc/HtmlHelp2/Project/src/Service/SharpDevLanguageClass.cs

@ -10,6 +10,7 @@ namespace HtmlHelp2.Environment @@ -10,6 +10,7 @@ namespace HtmlHelp2.Environment
using System;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Project;
using MSHelpServices;

2
src/AddIns/Misc/ResourceToolkit/Project/Src/Resolver/NRefactoryAstCacheService.cs

@ -198,7 +198,7 @@ namespace Hornung.ResourceToolkit.Resolver @@ -198,7 +198,7 @@ namespace Hornung.ResourceToolkit.Resolver
// code belonging to this expression is unavailable.
expressionString = resolver.LanguageProperties.CodeGenerator.GenerateCode(expression, String.Empty);
}
if ((rr = NRefactoryResolver.GetResultFromDeclarationLine(resolver.CallingClass, resolver.CallingMember as IMethodOrProperty, caretLine, caretColumn, expressionString)) != null) {
if ((rr = CtrlSpaceResolveHelper.GetResultFromDeclarationLine(resolver.CallingClass, resolver.CallingMember as IMethodOrProperty, caretLine, caretColumn, expressionString)) != null) {
return rr;
}
}

2
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -90,10 +90,8 @@ @@ -90,10 +90,8 @@
<Compile Include="Src\Services\Language\Language.cs" />
<Compile Include="Src\Services\DisplayBinding\DisplayBindingService.cs" />
<Compile Include="Src\Internal\ConditionEvaluators\ProjectActiveEvaluator.cs" />
<Compile Include="Src\Services\AmbienceService\IAmbience.cs" />
<Compile Include="Src\Services\AmbienceService\NetAmbience.cs" />
<Compile Include="Src\Services\AmbienceService\AmbienceReflectionDecorator.cs" />
<Compile Include="Src\Services\AmbienceService\AbstractAmbience.cs" />
<Compile Include="Src\Services\AmbienceService\AmbienceService.cs" />
<Compile Include="Src\Services\AmbienceService\CodeDOMGeneratorUtility.cs" />
<Compile Include="Src\Internal\ConditionEvaluators\WindowOpenEvaluator.cs" />

10
src/Main/Base/Project/Src/Project/AbstractProject.cs

@ -6,19 +6,15 @@ @@ -6,19 +6,15 @@
// </file>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.CodeDom.Compiler;
using System.Diagnostics;
using System.IO;
using System.Globalization;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Internal.Templates;
namespace ICSharpCode.SharpDevelop.Project
{

6
src/Main/Base/Project/Src/Project/IProject.cs

@ -6,9 +6,9 @@ @@ -6,9 +6,9 @@
// </file>
using System;
using System.ComponentModel;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Project
@ -50,7 +50,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -50,7 +50,7 @@ namespace ICSharpCode.SharpDevelop.Project
get;
}
ICSharpCode.Core.IAmbience Ambience {
ICSharpCode.SharpDevelop.Dom.IAmbience Ambience {
get;
}

4
src/Main/Base/Project/Src/Services/AmbienceService/AmbienceService.cs

@ -6,8 +6,10 @@ @@ -6,8 +6,10 @@
// </file>
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.Core
namespace ICSharpCode.SharpDevelop
{
public static class AmbienceService
{

6
src/Main/Base/Project/Src/Services/AmbienceService/CodeDOMGeneratorUtility.cs

@ -6,12 +6,14 @@ @@ -6,12 +6,14 @@
// </file>
using System;
using System.Collections;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections;
using System.Text;
namespace ICSharpCode.Core
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop
{
public class CodeDOMGeneratorUtility
{

68
src/Main/Base/Project/Src/Services/AmbienceService/IAmbience.cs

@ -1,68 +0,0 @@ @@ -1,68 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.Core
{
[Flags]
public enum ConversionFlags {
None = 0,
ShowParameterNames = 1,
ShowAccessibility = 16,
UseFullyQualifiedNames = 2,
ShowModifiers = 4,
ShowInheritanceList = 8,
IncludeHTMLMarkup = 32,
QualifiedNamesOnlyForReturnTypes = 128,
IncludeBodies = 256,
ShowReturnType = 512,
StandardConversionFlags = ShowParameterNames |
UseFullyQualifiedNames |
ShowReturnType |
ShowModifiers,
All = ShowParameterNames |
ShowAccessibility |
UseFullyQualifiedNames |
ShowModifiers |
ShowReturnType |
ShowInheritanceList,
}
public interface IAmbience
{
ConversionFlags ConversionFlags {
get;
set;
}
string Convert(ModifierEnum modifier);
string Convert(IClass c);
string ConvertEnd(IClass c);
string Convert(IField field);
string Convert(IProperty property);
string Convert(IEvent e);
string Convert(IMethod m);
string ConvertEnd(IMethod m);
string Convert(IParameter param);
string Convert(IReturnType returnType);
string WrapAttribute(string attribute);
string WrapComment(string comment);
string GetIntrinsicTypeName(string dotNetTypeName);
}
}

8
src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj

@ -144,6 +144,12 @@ @@ -144,6 +144,12 @@
<Compile Include="Src\Refactoring\RefactoringProvider.cs" />
<Compile Include="Src\Refactoring\NRefactoryRefactoringProvider.cs" />
<Compile Include="Src\GacInterop.cs" />
<Compile Include="Src\CtrlSpaceResolveHelper.cs" />
<Compile Include="Src\CSharp\CSharpAmbience.cs" />
<Compile Include="Src\Ambience.cs" />
<Compile Include="Src\CSharp\ExpressionFinder.cs" />
<Compile Include="Src\VBNet\VBNetAmbience.cs" />
<Compile Include="Src\VBNet\ExpressionFinder.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Configuration" />
@ -158,6 +164,8 @@ @@ -158,6 +164,8 @@
<Folder Include="Src\Interfaces" />
<Folder Include="Src\ProjectContent" />
<Folder Include="Src\Refactoring" />
<Folder Include="Src\CSharp" />
<Folder Include="Src\VBNet" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

63
src/Main/Base/Project/Src/Services/AmbienceService/AbstractAmbience.cs → src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Ambience.cs

@ -2,15 +2,68 @@ @@ -2,15 +2,68 @@
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version>$Revision$</version>
// <version>$Revision: 1951 $</version>
// </file>
using System;
using System.Collections;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.Core
namespace ICSharpCode.SharpDevelop.Dom
{
[Flags]
public enum ConversionFlags {
None = 0,
ShowParameterNames = 1,
ShowAccessibility = 16,
UseFullyQualifiedNames = 2,
ShowModifiers = 4,
ShowInheritanceList = 8,
IncludeHTMLMarkup = 32,
QualifiedNamesOnlyForReturnTypes = 128,
IncludeBodies = 256,
ShowReturnType = 512,
StandardConversionFlags = ShowParameterNames |
UseFullyQualifiedNames |
ShowReturnType |
ShowModifiers,
All = ShowParameterNames |
ShowAccessibility |
UseFullyQualifiedNames |
ShowModifiers |
ShowReturnType |
ShowInheritanceList,
}
public interface IAmbience
{
ConversionFlags ConversionFlags {
get;
set;
}
string Convert(ModifierEnum modifier);
string Convert(IClass c);
string ConvertEnd(IClass c);
string Convert(IField field);
string Convert(IProperty property);
string Convert(IEvent e);
string Convert(IMethod m);
string ConvertEnd(IMethod m);
string Convert(IParameter param);
string Convert(IReturnType returnType);
string WrapAttribute(string attribute);
string WrapComment(string comment);
string GetIntrinsicTypeName(string dotNetTypeName);
}
public abstract class AbstractAmbience : IAmbience
{
ConversionFlags conversionFlags = ConversionFlags.StandardConversionFlags;
@ -22,7 +75,7 @@ namespace ICSharpCode.Core @@ -22,7 +75,7 @@ namespace ICSharpCode.Core
set {
conversionFlags = value;
}
}
}
public bool ShowReturnType {
get {
@ -88,9 +141,9 @@ namespace ICSharpCode.Core @@ -88,9 +141,9 @@ namespace ICSharpCode.Core
public abstract string ConvertEnd(IMethod m);
public abstract string Convert(IParameter param);
public abstract string Convert(IReturnType returnType);
public abstract string WrapAttribute(string attribute);
public abstract string WrapComment(string comment);
public abstract string GetIntrinsicTypeName(string dotNetTypeName);
}
}

9
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpAmbience.cs → src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/CSharpAmbience.cs

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version>$Revision$</version>
// <version>$Revision: 1423 $</version>
// </file>
using System;
@ -10,12 +10,9 @@ using System.Collections; @@ -10,12 +10,9 @@ using System.Collections;
using System.Collections.Generic;
using System.Text;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.Core;
namespace ICSharpCode.Core
namespace ICSharpCode.SharpDevelop.Dom.CSharp
{
public class CSharpAmbience : AbstractAmbience
public class CSharpAmbience : AbstractAmbience
{
static string[,] typeConversionList = new string[,] {
{"System.Void", "void"},

22
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/ExpressionFinder.cs → src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs

@ -2,24 +2,22 @@ @@ -2,24 +2,22 @@
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// <version>$Revision: 1751 $</version>
// </file>
using System;
using System.Text;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
namespace CSharpBinding.Parser
namespace ICSharpCode.SharpDevelop.Dom.CSharp
{
/// <summary>
/// Description of ExpressionFinder.
/// Supports getting the expression including context from the cursor position.
/// </summary>
public class ExpressionFinder : IExpressionFinder
public class CSharpExpressionFinder : IExpressionFinder
{
string fileName;
public ExpressionFinder(string fileName)
public CSharpExpressionFinder(string fileName)
{
this.fileName = fileName;
}
@ -35,7 +33,7 @@ namespace CSharpBinding.Parser @@ -35,7 +33,7 @@ namespace CSharpBinding.Parser
return new ExpressionResult(expression.Substring(4).TrimStart(), GetCreationContext(), null);
}
if (IsInAttribute(inText, offset))
return new ExpressionResult(expression, ExpressionContext.GetAttribute(ParserService.CurrentProjectContent));
return new ExpressionResult(expression, ExpressionContext.GetAttribute(HostCallback.GetCurrentProjectContent()));
return new ExpressionResult(expression);
}
@ -96,7 +94,7 @@ namespace CSharpBinding.Parser @@ -96,7 +94,7 @@ namespace CSharpBinding.Parser
} else {
UnGet();
if (ReadIdentifier(GetNextNonWhiteSpace()) == "throw") {
return ExpressionContext.TypeDerivingFrom(ParserService.CurrentProjectContent.GetClass("System.Exception"), true);
return ExpressionContext.TypeDerivingFrom(HostCallback.GetCurrentProjectContent().GetClass("System.Exception"), true);
}
}
return ExpressionContext.ObjectCreation;
@ -201,7 +199,11 @@ namespace CSharpBinding.Parser @@ -201,7 +199,11 @@ namespace CSharpBinding.Parser
int lastExpressionStartPosition;
internal int LastExpressionStartPosition {
/// <summary>
/// Gets the position in the source string (after filtering out comments)
/// where the beginning of last expression was found.
/// </summary>
public int LastExpressionStartPosition {
get {
return lastExpressionStartPosition;
}

179
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CtrlSpaceResolveHelper.cs

@ -0,0 +1,179 @@ @@ -0,0 +1,179 @@
/*
* Created by SharpDevelop.
* User: tfssetup
* Date: 10/27/2006
* Time: 1:40 PM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// Provides static methods that fill a list of completion results with entries
/// reachable from a certain calling class/member or entries that introduced
/// by a certain Using statement.
/// </summary>
public class CtrlSpaceResolveHelper
{
static void AddTypeParametersForCtrlSpace(ArrayList result, IEnumerable<ITypeParameter> typeParameters)
{
foreach (ITypeParameter p in typeParameters) {
DefaultClass c = DefaultTypeParameter.GetDummyClassForTypeParameter(p);
if (p.Method != null) {
c.Documentation = "Type parameter of " + p.Method.Name;
} else {
c.Documentation = "Type parameter of " + p.Class.Name;
}
result.Add(c);
}
}
public static void AddContentsFromCalling(ArrayList result, IClass callingClass, IMember callingMember)
{
IMethodOrProperty methodOrProperty = callingMember as IMethodOrProperty;
if (methodOrProperty != null) {
foreach (IParameter p in methodOrProperty.Parameters) {
result.Add(new DefaultField.ParameterField(p.ReturnType, p.Name, methodOrProperty.Region, callingClass));
}
if (callingMember is IMethod) {
AddTypeParametersForCtrlSpace(result, ((IMethod)callingMember).TypeParameters);
}
}
bool inStatic = false;
if (callingMember != null)
inStatic = callingMember.IsStatic;
if (callingClass != null) {
AddTypeParametersForCtrlSpace(result, callingClass.TypeParameters);
ArrayList members = new ArrayList();
IReturnType t = callingClass.DefaultReturnType;
members.AddRange(t.GetMethods());
members.AddRange(t.GetFields());
members.AddRange(t.GetEvents());
members.AddRange(t.GetProperties());
foreach (IMember m in members) {
if ((!inStatic || m.IsStatic) && m.IsAccessible(callingClass, true)) {
result.Add(m);
}
}
members.Clear();
IClass c = callingClass.DeclaringType;
while (c != null) {
t = c.DefaultReturnType;
members.AddRange(t.GetMethods());
members.AddRange(t.GetFields());
members.AddRange(t.GetEvents());
members.AddRange(t.GetProperties());
c = c.DeclaringType;
}
foreach (IMember m in members) {
if (m.IsStatic) {
result.Add(m);
}
}
}
}
public static void AddImportedNamespaceContents(ArrayList result, ICompilationUnit cu, IClass callingClass)
{
IProjectContent projectContent = cu.ProjectContent;
projectContent.AddNamespaceContents(result, "", projectContent.Language, true);
foreach (IUsing u in cu.Usings) {
AddUsing(result, u, projectContent);
}
AddUsing(result, projectContent.DefaultImports, projectContent);
if (callingClass != null) {
string[] namespaceParts = callingClass.Namespace.Split('.');
for (int i = 1; i <= namespaceParts.Length; i++) {
foreach (object member in projectContent.GetNamespaceContents(string.Join(".", namespaceParts, 0, i))) {
if (!result.Contains(member))
result.Add(member);
}
}
IClass currentClass = callingClass;
do {
foreach (IClass innerClass in currentClass.GetAccessibleTypes(currentClass)) {
if (!result.Contains(innerClass))
result.Add(innerClass);
}
currentClass = currentClass.DeclaringType;
} while (currentClass != null);
}
}
public static void AddUsing(ArrayList result, IUsing u, IProjectContent projectContent)
{
if (u == null) {
return;
}
bool importNamespaces = projectContent.Language.ImportNamespaces;
bool importClasses = projectContent.Language.CanImportClasses;
foreach (string name in u.Usings) {
if (importClasses) {
IClass c = projectContent.GetClass(name, 0);
if (c != null) {
ArrayList members = new ArrayList();
IReturnType t = c.DefaultReturnType;
members.AddRange(t.GetMethods());
members.AddRange(t.GetFields());
members.AddRange(t.GetEvents());
members.AddRange(t.GetProperties());
foreach (IMember m in members) {
if (m.IsStatic && m.IsPublic) {
result.Add(m);
}
}
continue;
}
}
if (importNamespaces) {
string newName = null;
if (projectContent.DefaultImports != null) {
newName = projectContent.DefaultImports.SearchNamespace(name);
}
projectContent.AddNamespaceContents(result, newName ?? name, projectContent.Language, true);
} else {
foreach (object o in projectContent.GetNamespaceContents(name)) {
if (!(o is string))
result.Add(o);
}
}
}
if (u.HasAliases) {
foreach (string alias in u.Aliases.Keys) {
result.Add(alias);
}
}
}
public static ResolveResult GetResultFromDeclarationLine(IClass callingClass, IMethodOrProperty callingMember, int caretLine, int caretColumn, string expression)
{
if (callingClass == null) return null;
int pos = expression.IndexOf('(');
if (pos >= 0) {
expression = expression.Substring(0, pos);
}
expression = expression.Trim();
if (!callingClass.BodyRegion.IsInside(caretLine, caretColumn)
&& callingClass.ProjectContent.Language.NameComparer.Equals(expression, callingClass.Name))
{
return new TypeResolveResult(callingClass, callingMember, callingClass);
}
if (callingMember != null
&& !callingMember.BodyRegion.IsInside(caretLine, caretColumn)
&& callingClass.ProjectContent.Language.NameComparer.Equals(expression, callingMember.Name))
{
return new MemberResolveResult(callingClass, callingMember, callingMember);
}
return null;
}
}
}

166
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs

@ -117,28 +117,6 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -117,28 +117,6 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return expression;
}
public static ResolveResult GetResultFromDeclarationLine(IClass callingClass, IMethodOrProperty callingMember, int caretLine, int caretColumn, string expression)
{
if (callingClass == null) return null;
int pos = expression.IndexOf('(');
if (pos >= 0) {
expression = expression.Substring(0, pos);
}
expression = expression.Trim();
if (!callingClass.BodyRegion.IsInside(caretLine, caretColumn)
&& callingClass.ProjectContent.Language.NameComparer.Equals(expression, callingClass.Name))
{
return new TypeResolveResult(callingClass, callingMember, callingClass);
}
if (callingMember != null
&& !callingMember.BodyRegion.IsInside(caretLine, caretColumn)
&& callingClass.ProjectContent.Language.NameComparer.Equals(expression, callingMember.Name))
{
return new MemberResolveResult(callingClass, callingMember, callingMember);
}
return null;
}
public bool Initialize(string fileName, int caretLineNumber, int caretColumn)
{
this.caretLine = caretLineNumber;
@ -208,7 +186,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -208,7 +186,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
RunLookupTableVisitor(fileContent);
ResolveResult rr = GetResultFromDeclarationLine(callingClass, callingMember as IMethodOrProperty, caretLine, caretColumn, expression);
ResolveResult rr = CtrlSpaceResolveHelper.GetResultFromDeclarationLine(callingClass, callingMember as IMethodOrProperty, caretLine, caretColumn, expression);
if (rr != null) return rr;
return ResolveInternal(expr, expressionResult.Context);
@ -688,7 +666,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -688,7 +666,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (languageProperties.ImportModules) {
ArrayList list = new ArrayList();
AddImportedNamespaceContents(list, cu, callingClass);
CtrlSpaceResolveHelper.AddImportedNamespaceContents(list, cu, callingClass);
foreach (object o in list) {
IClass c = o as IClass;
if (c != null && IsSameName(identifier, c.Name)) {
@ -852,7 +830,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -852,7 +830,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (languageProperties.ImportModules) {
ArrayList list = new ArrayList();
AddImportedNamespaceContents(list, cu, callingClass);
CtrlSpaceResolveHelper.AddImportedNamespaceContents(list, cu, callingClass);
foreach (object o in list) {
IMethod m = o as IMethod;
if (m != null && IsSameName(m.Name, memberName)) {
@ -1048,7 +1026,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -1048,7 +1026,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
}
AddContentsFromCalling(result, callingClass, callingMember);
CtrlSpaceResolveHelper.AddContentsFromCalling(result, callingClass, callingMember);
foreach (KeyValuePair<string, List<LocalLookupVariable>> pair in lookupTableVisitor.Variables) {
if (pair.Value != null && pair.Value.Count > 0) {
@ -1061,142 +1039,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -1061,142 +1039,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
}
}
AddImportedNamespaceContents(result, cu, callingClass);
CtrlSpaceResolveHelper.AddImportedNamespaceContents(result, cu, callingClass);
return result;
}
static void AddTypeParametersForCtrlSpace(ArrayList result, IEnumerable<ITypeParameter> typeParameters)
{
foreach (ITypeParameter p in typeParameters) {
DefaultClass c = DefaultTypeParameter.GetDummyClassForTypeParameter(p);
if (p.Method != null) {
c.Documentation = "Type parameter of " + p.Method.Name;
} else {
c.Documentation = "Type parameter of " + p.Class.Name;
}
result.Add(c);
}
}
public static void AddContentsFromCalling(ArrayList result, IClass callingClass, IMember callingMember)
{
IMethodOrProperty methodOrProperty = callingMember as IMethodOrProperty;
if (methodOrProperty != null) {
foreach (IParameter p in methodOrProperty.Parameters) {
result.Add(new DefaultField.ParameterField(p.ReturnType, p.Name, methodOrProperty.Region, callingClass));
}
if (callingMember is IMethod) {
AddTypeParametersForCtrlSpace(result, ((IMethod)callingMember).TypeParameters);
}
}
bool inStatic = false;
if (callingMember != null)
inStatic = callingMember.IsStatic;
if (callingClass != null) {
AddTypeParametersForCtrlSpace(result, callingClass.TypeParameters);
ArrayList members = new ArrayList();
IReturnType t = callingClass.DefaultReturnType;
members.AddRange(t.GetMethods());
members.AddRange(t.GetFields());
members.AddRange(t.GetEvents());
members.AddRange(t.GetProperties());
foreach (IMember m in members) {
if ((!inStatic || m.IsStatic) && m.IsAccessible(callingClass, true)) {
result.Add(m);
}
}
members.Clear();
IClass c = callingClass.DeclaringType;
while (c != null) {
t = c.DefaultReturnType;
members.AddRange(t.GetMethods());
members.AddRange(t.GetFields());
members.AddRange(t.GetEvents());
members.AddRange(t.GetProperties());
c = c.DeclaringType;
}
foreach (IMember m in members) {
if (m.IsStatic) {
result.Add(m);
}
}
}
}
public static void AddImportedNamespaceContents(ArrayList result, ICompilationUnit cu, IClass callingClass)
{
IProjectContent projectContent = cu.ProjectContent;
projectContent.AddNamespaceContents(result, "", projectContent.Language, true);
foreach (IUsing u in cu.Usings) {
AddUsing(result, u, projectContent);
}
AddUsing(result, projectContent.DefaultImports, projectContent);
if (callingClass != null) {
string[] namespaceParts = callingClass.Namespace.Split('.');
for (int i = 1; i <= namespaceParts.Length; i++) {
foreach (object member in projectContent.GetNamespaceContents(string.Join(".", namespaceParts, 0, i))) {
if (!result.Contains(member))
result.Add(member);
}
}
IClass currentClass = callingClass;
do {
foreach (IClass innerClass in currentClass.GetAccessibleTypes(currentClass)) {
if (!result.Contains(innerClass))
result.Add(innerClass);
}
currentClass = currentClass.DeclaringType;
} while (currentClass != null);
}
}
public static void AddUsing(ArrayList result, IUsing u, IProjectContent projectContent)
{
if (u == null) {
return;
}
bool importNamespaces = projectContent.Language.ImportNamespaces;
bool importClasses = projectContent.Language.CanImportClasses;
foreach (string name in u.Usings) {
if (importClasses) {
IClass c = projectContent.GetClass(name, 0);
if (c != null) {
ArrayList members = new ArrayList();
IReturnType t = c.DefaultReturnType;
members.AddRange(t.GetMethods());
members.AddRange(t.GetFields());
members.AddRange(t.GetEvents());
members.AddRange(t.GetProperties());
foreach (IMember m in members) {
if (m.IsStatic && m.IsPublic) {
result.Add(m);
}
}
continue;
}
}
if (importNamespaces) {
string newName = null;
if (projectContent.DefaultImports != null) {
newName = projectContent.DefaultImports.SearchNamespace(name);
}
projectContent.AddNamespaceContents(result, newName ?? name, projectContent.Language, true);
} else {
foreach (object o in projectContent.GetNamespaceContents(name)) {
if (!(o is string))
result.Add(o);
}
}
}
if (u.HasAliases) {
foreach (string alias in u.Aliases.Keys) {
result.Add(alias);
}
}
}
}
}

4
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ResolveResult.cs

@ -122,8 +122,8 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -122,8 +122,8 @@ namespace ICSharpCode.SharpDevelop.Dom
if (supportsExtensionMethods || supportsExtensionProperties) {
ArrayList list = new ArrayList();
IMethod dummyMethod = new DefaultMethod("dummy", VoidReturnType.Instance, ModifierEnum.Static, DomRegion.Empty, DomRegion.Empty, callingClass);
NRefactoryResolver.NRefactoryResolver.AddContentsFromCalling(list, callingClass, dummyMethod);
NRefactoryResolver.NRefactoryResolver.AddImportedNamespaceContents(list, callingClass.CompilationUnit, callingClass);
CtrlSpaceResolveHelper.AddContentsFromCalling(list, callingClass, dummyMethod);
CtrlSpaceResolveHelper.AddImportedNamespaceContents(list, callingClass.CompilationUnit, callingClass);
bool searchExtensionsInClasses = language.SearchExtensionsInClasses;
foreach (object o in list) {

521
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/ExpressionFinder.cs

@ -0,0 +1,521 @@ @@ -0,0 +1,521 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Markus Palme" email="MarkusPalme@gmx.de"/>
// <version>$Revision: 915 $</version>
// </file>
using System;
using System.Text;
namespace ICSharpCode.SharpDevelop.Dom.VBNet
{
public class VBExpressionFinder : IExpressionFinder
{
ExpressionResult CreateResult(string expression)
{
if (expression == null)
return new ExpressionResult(null);
if (expression.Length > 8 && expression.Substring(0, 8).Equals("Imports ", StringComparison.InvariantCultureIgnoreCase))
return new ExpressionResult(expression.Substring(8).TrimStart(), ExpressionContext.Type, null);
if (expression.Length > 4 && expression.Substring(0, 4).Equals("New ", StringComparison.InvariantCultureIgnoreCase))
return new ExpressionResult(expression.Substring(4).TrimStart(), ExpressionContext.ObjectCreation, null);
if (curTokenType == Ident && lastIdentifier.Equals("as", StringComparison.InvariantCultureIgnoreCase))
return new ExpressionResult(expression, ExpressionContext.Type);
return new ExpressionResult(expression);
}
public ExpressionResult FindExpression(string inText, int offset)
{
return CreateResult(FindExpressionInternal(inText, offset));
}
public string FindExpressionInternal(string inText, int offset)
{
this.text = FilterComments(inText, ref offset);
this.offset = this.lastAccept = offset;
this.state = START;
if (this.text == null)
{
return null;
}
//Console.WriteLine("---------------");
while (state != ERROR)
{
ReadNextToken();
//Console.WriteLine("cur state {0} got token {1}/{3} going to {2}", GetStateName(state), GetTokenName(curTokenType), GetStateName(stateTable[state, curTokenType]), curTokenType);
state = stateTable[state, curTokenType];
if (state == ACCEPT || state == ACCEPT2 || state == DOT)
{
lastAccept = this.offset;
}
if (state == ACCEPTNOMORE)
{
return this.text.Substring(this.offset + 1, offset - this.offset);
}
}
return this.text.Substring(this.lastAccept + 1, offset - this.lastAccept);
}
internal int LastExpressionStartPosition {
get {
return ((state == ACCEPTNOMORE) ? offset : lastAccept) + 1;
}
}
public ExpressionResult FindFullExpression(string inText, int offset)
{
string expressionBeforeOffset = FindExpressionInternal(inText, offset);
if (expressionBeforeOffset == null || expressionBeforeOffset.Length == 0)
return CreateResult(null);
StringBuilder b = new StringBuilder(expressionBeforeOffset);
// append characters after expression
for (int i = offset + 1; i < inText.Length; ++i) {
char c = inText[i];
if (Char.IsLetterOrDigit(c)) {
if (Char.IsWhiteSpace(inText, i - 1))
break;
b.Append(c);
} else if (c == ' ') {
b.Append(c);
} else if (c == '(') {
int otherBracket = SearchBracketForward(inText, i + 1, '(', ')');
if (otherBracket < 0)
break;
b.Append(inText, i, otherBracket - i + 1);
break;
} else {
break;
}
}
return CreateResult(b.ToString());
}
// Like VBNetFormattingStrategy.SearchBracketForward, but operates on a string.
private int SearchBracketForward(string text, int offset, char openBracket, char closingBracket)
{
bool inString = false;
bool inComment = false;
int brackets = 1;
for (int i = offset; i < text.Length; ++i) {
char ch = text[i];
if (ch == '\n') {
inString = false;
inComment = false;
}
if (inComment) continue;
if (ch == '"') inString = !inString;
if (inString) continue;
if (ch == '\'') {
inComment = true;
} else if (ch == openBracket) {
++brackets;
} else if (ch == closingBracket) {
--brackets;
if (brackets == 0) return i;
}
}
return -1;
}
/// <summary>
/// Removed the last part of the expression.
/// </summary>
/// <example>
/// "obj.Field" => "obj"
/// "obj.Method(args,...)" => "obj.Method"
/// </example>
public string RemoveLastPart(string expression)
{
text = expression;
offset = text.Length - 1;
ReadNextToken();
if (curTokenType == Ident && Peek() == '.')
GetNext();
return text.Substring(0, offset + 1);
}
#region Comment Filter and 'inside string watcher'
int initialOffset;
public string FilterComments(string text, ref int offset)
{
if (text.Length <= offset)
return null;
this.initialOffset = offset;
StringBuilder outText = new StringBuilder();
int curOffset = 0;
while (curOffset <= initialOffset)
{
char ch = text[curOffset];
switch (ch)
{
case '@':
if (curOffset + 1 < text.Length && text[curOffset + 1] == '"')
{
outText.Append(text[curOffset++]); // @
outText.Append(text[curOffset++]); // "
if (!ReadVerbatimString(outText, text, ref curOffset))
{
return null;
}
}
else
{
outText.Append(ch);
++curOffset;
}
break;
case '"':
outText.Append(ch);
curOffset++;
if (!ReadString(outText, text, ref curOffset))
{
return null;
}
break;
case '\'':
offset -= 1;
curOffset += 1;
if (!ReadToEOL(text, ref curOffset, ref offset))
{
return null;
}
break;
default:
outText.Append(ch);
++curOffset;
break;
}
}
return outText.ToString();
}
bool ReadToEOL(string text, ref int curOffset, ref int offset)
{
while (curOffset <= initialOffset)
{
char ch = text[curOffset++];
--offset;
if (ch == '\n')
{
return true;
}
}
return false;
}
bool ReadString(StringBuilder outText, string text, ref int curOffset)
{
while (curOffset <= initialOffset)
{
char ch = text[curOffset++];
outText.Append(ch);
if (ch == '"')
{
return true;
}
}
return false;
}
bool ReadVerbatimString(StringBuilder outText, string text, ref int curOffset)
{
while (curOffset <= initialOffset)
{
char ch = text[curOffset++];
outText.Append(ch);
if (ch == '"')
{
if (curOffset < text.Length && text[curOffset] == '"')
{
outText.Append(text[curOffset++]);
}
else
{
return true;
}
}
}
return false;
}
bool ReadMultiLineComment(string text, ref int curOffset, ref int offset)
{
while (curOffset <= initialOffset)
{
char ch = text[curOffset++];
--offset;
if (ch == '*')
{
if (curOffset < text.Length && text[curOffset] == '/')
{
++curOffset;
--offset;
return true;
}
}
}
return false;
}
#endregion
#region mini backward lexer
string text;
int offset;
char GetNext()
{
if (offset >= 0)
{
return text[offset--];
}
return '\0';
}
char Peek()
{
if (offset >= 0)
{
return text[offset];
}
return '\0';
}
void UnGet()
{
++offset;
}
// tokens for our lexer
static int Err = 0;
static int Dot = 1;
static int StrLit = 2;
static int Ident = 3;
static int New = 4;
// static int Bracket = 5;
static int Parent = 6;
static int Curly = 7;
static int Using = 8;
int curTokenType;
readonly static string[] tokenStateName = new string[] {
"Err", "Dot", "StrLit", "Ident", "New", "Bracket", "Paren", "Curly", "Using"
};
string GetTokenName(int state)
{
return tokenStateName[state];
}
string lastIdentifier;
void ReadNextToken()
{
char ch = GetNext();
curTokenType = Err;
if (ch == '\0' || ch == '\n' || ch == '\r')
{
return;
}
while (Char.IsWhiteSpace(ch))
{
ch = GetNext();
if (ch == '\n' || ch == '\r')
{
return;
}
}
switch (ch)
{
case '}':
if (ReadBracket('{', '}'))
{
curTokenType = Curly;
}
break;
case ')':
if (ReadBracket('(', ')'))
{
curTokenType = Parent;
}
break;
case ']':
if (ReadBracket('[', ']'))
{
curTokenType = Ident;
}
break;
case '.':
curTokenType = Dot;
break;
case '\'':
case '"':
if (ReadStringLiteral(ch))
{
curTokenType = StrLit;
}
break;
default:
if (IsIdentifierPart(ch))
{
string ident = ReadIdentifier(ch);
if (ident != null)
{
switch (ident.ToLowerInvariant())
{
case "new":
curTokenType = New;
break;
case "imports":
curTokenType = Using;
break;
default:
lastIdentifier = ident;
curTokenType = Ident;
break;
}
}
}
break;
}
}
bool ReadStringLiteral(char litStart)
{
while (true)
{
char ch = GetNext();
if (ch == '\0')
{
return false;
}
if (ch == litStart)
{
if (Peek() == '@' && litStart == '"')
{
GetNext();
}
return true;
}
}
}
bool ReadBracket(char openBracket, char closingBracket)
{
int curlyBraceLevel = 0;
int squareBracketLevel = 0;
int parenthesisLevel = 0;
switch (openBracket)
{
case '(':
parenthesisLevel++;
break;
case '[':
squareBracketLevel++;
break;
case '{':
curlyBraceLevel++;
break;
}
while (parenthesisLevel != 0 || squareBracketLevel != 0 || curlyBraceLevel != 0)
{
char ch = GetNext();
if (ch == '\0')
{
return false;
}
switch (ch)
{
case '(':
parenthesisLevel--;
break;
case '[':
squareBracketLevel--;
break;
case '{':
curlyBraceLevel--;
break;
case ')':
parenthesisLevel++;
break;
case ']':
squareBracketLevel++;
break;
case '}':
curlyBraceLevel++;
break;
}
}
return true;
}
string ReadIdentifier(char ch)
{
string identifier = ch.ToString();
while (IsIdentifierPart(Peek()))
{
identifier = GetNext() + identifier;
}
return identifier;
}
bool IsIdentifierPart(char ch)
{
return Char.IsLetterOrDigit(ch) || ch == '_';
}
#endregion
#region finite state machine
readonly static int ERROR = 0;
readonly static int START = 1;
readonly static int DOT = 2;
readonly static int MORE = 3;
readonly static int CURLY = 4;
readonly static int CURLY2 = 5;
readonly static int CURLY3 = 6;
readonly static int ACCEPT = 7;
readonly static int ACCEPTNOMORE = 8;
readonly static int ACCEPT2 = 9;
readonly static string[] stateName = new string[] {
"ERROR",
"START",
"DOT",
"MORE",
"CURLY",
"CURLY2",
"CURLY3",
"ACCEPT",
"ACCEPTNOMORE",
"ACCEPT2"
};
string GetStateName(int state)
{
return stateName[state];
}
int state = 0;
int lastAccept = 0;
static int[,] stateTable = new int[,] {
// Err, Dot, Str, ID, New, Brk, Par, Cur, Using
/*ERROR*/ { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR},
/*START*/ { ERROR, ERROR, ACCEPT, ACCEPT, ERROR, MORE, ACCEPT2, CURLY, ACCEPTNOMORE},
/*DOT*/ { ERROR, ERROR, ACCEPT, ACCEPT, ERROR, MORE, ACCEPT2, CURLY, ERROR},
/*MORE*/ { ERROR, ERROR, ACCEPT, ACCEPT, ERROR, MORE, ACCEPT2, CURLY, ERROR},
/*CURLY*/ { ERROR, ERROR, ERROR, ERROR, ERROR, CURLY2, ERROR, ERROR, ERROR},
/*CURLY2*/ { ERROR, ERROR, ERROR, CURLY3, ERROR, ERROR, ERROR, ERROR, ERROR},
/*CURLY3*/ { ERROR, ERROR, ERROR, ERROR, ACCEPTNOMORE, ERROR, ERROR, ERROR, ERROR},
/*ACCEPT*/ { ERROR, DOT, ERROR, ERROR, ACCEPT, ERROR, ERROR, ERROR, ACCEPTNOMORE},
/*ACCEPTNOMORE*/ { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR},
/*ACCEPT2*/ { ERROR, DOT, ERROR, ACCEPT, ACCEPT, ERROR, ERROR, ERROR, ERROR},
};
#endregion
}
}

7
src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetAmbience.cs → src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/VBNetAmbience.cs

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version>$Revision$</version>
// <version>$Revision: 1421 $</version>
// </file>
using System;
@ -10,10 +10,7 @@ using System.Collections; @@ -10,10 +10,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Text;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.Core;
namespace VBNetBinding
namespace ICSharpCode.SharpDevelop.Dom.VBNet
{
public class VBNetAmbience : AbstractAmbience
{

5
src/SharpDevelop.sln

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# SharpDevelop 2.1.0.1913

Microsoft Visual Studio Solution File, Format Version 9.00
# SharpDevelop 2.1.0.1947
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject
EndProjectSection

Loading…
Cancel
Save