Browse Source

implemented Options in Dom. Option Infer On/Off, turn Type Inference on and off

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/vbnet@6190 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Siegfried Pammer 15 years ago
parent
commit
6f9028b875
  1. 15
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/CompletionDataHelper.cs
  2. 24
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
  3. 37
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionItemList.cs
  4. 13
      src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj
  5. 3
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
  6. 8
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultCompilationUnit.cs
  7. 63
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultOption.cs
  8. 7
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/ICompilationUnit.cs
  9. 28
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/IOption.cs
  10. 18
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/OptionType.cs
  11. 12
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryASTConvertVisitor.cs
  12. 27
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs

15
src/AddIns/BackendBindings/VBNetBinding/Project/Src/CompletionDataHelper.cs

@ -170,19 +170,4 @@ namespace ICSharpCode.VBNetBinding @@ -170,19 +170,4 @@ namespace ICSharpCode.VBNetBinding
}
}
}
public class VBNetCompletionItemList : NRefactoryCompletionItemList
{
public ITextEditor Editor { get; set; }
public ICompletionListWindow Window { get; set; }
public override CompletionItemListKeyResult ProcessInput(char key)
{
if (key == '?' && string.IsNullOrWhiteSpace(Editor.Document.GetText(Window.StartOffset, Window.EndOffset - Window.StartOffset)))
return CompletionItemListKeyResult.NormalKey;
return base.ProcessInput(key);
}
}
}

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

@ -52,7 +52,6 @@ namespace ICSharpCode.VBNetBinding @@ -52,7 +52,6 @@ namespace ICSharpCode.VBNetBinding
VBNetExpressionFinder ef = new VBNetExpressionFinder(ParserService.GetParseInformation(editor.FileName));
ExpressionResult result;
VBNetCompletionItemList list;
switch (ch) {
case '(':
@ -69,9 +68,7 @@ namespace ICSharpCode.VBNetBinding @@ -69,9 +68,7 @@ namespace ICSharpCode.VBNetBinding
case '.':
result = ef.FindExpression(editor.Document.Text, editor.Caret.Offset);
LoggingService.Debug("CC: After dot, result=" + result + ", context=" + result.Context);
list = CompletionDataHelper.GenerateCompletionData(result, editor, ch);
list.Editor = editor;
list.Window = editor.ShowCompletionWindow(list);
ShowCompletion(result, editor, ch);
return CodeCompletionKeyPressResult.Completed;
case ' ':
editor.Document.Insert(editor.Caret.Offset, " ");
@ -80,9 +77,7 @@ namespace ICSharpCode.VBNetBinding @@ -80,9 +77,7 @@ namespace ICSharpCode.VBNetBinding
string word = editor.GetWordBeforeCaret().Trim();
if (word.Equals("overrides", StringComparison.InvariantCultureIgnoreCase) || word.Equals("return", StringComparison.InvariantCultureIgnoreCase) || !LiteralMayFollow((BitArray)result.Tag) && !OperatorMayFollow((BitArray)result.Tag) && ExpressionContext.IdentifierExpected != result.Context) {
LoggingService.Debug("CC: After space, result=" + result + ", context=" + result.Context);
list = CompletionDataHelper.GenerateCompletionData(result, editor, ch);
list.Editor = editor;
list.Window = editor.ShowCompletionWindow(list);
ShowCompletion(result, editor, ch);
}
return CodeCompletionKeyPressResult.EatKey;
default:
@ -100,9 +95,7 @@ namespace ICSharpCode.VBNetBinding @@ -100,9 +95,7 @@ namespace ICSharpCode.VBNetBinding
if ((result.Context != ExpressionContext.IdentifierExpected && char.IsLetter(ch)) &&
(!char.IsLetterOrDigit(prevChar) && prevChar != '.')) {
LoggingService.Debug("CC: Beginning to type a word, result=" + result + ", context=" + result.Context);
list = CompletionDataHelper.GenerateCompletionData(result, editor, ch);
list.Editor = editor;
list.Window = editor.ShowCompletionWindow(list);
ShowCompletion(result, editor, ch);
return CodeCompletionKeyPressResult.CompletedIncludeKeyInCompletion;
}
}
@ -111,6 +104,13 @@ namespace ICSharpCode.VBNetBinding @@ -111,6 +104,13 @@ namespace ICSharpCode.VBNetBinding
return CodeCompletionKeyPressResult.None;
}
void ShowCompletion(ExpressionResult result, ITextEditor editor, char ch)
{
VBNetCompletionItemList list = CompletionDataHelper.GenerateCompletionData(result, editor, ch);
list.Editor = editor;
list.Window = editor.ShowCompletionWindow(list);
}
#region Helpers
bool OperatorMayFollow(BitArray array)
@ -227,9 +227,7 @@ namespace ICSharpCode.VBNetBinding @@ -227,9 +227,7 @@ namespace ICSharpCode.VBNetBinding
VBNetExpressionFinder ef = new VBNetExpressionFinder(ParserService.GetParseInformation(editor.FileName));
ExpressionResult result = ef.FindExpression(editor.Document.Text, cursor);
LoggingService.Debug("CC: Beginning to type a word, result=" + result + ", context=" + result.Context);
var list = CompletionDataHelper.GenerateCompletionData(result, editor, '\0');
list.Editor = editor;
list.Window = editor.ShowCompletionWindow(list);
ShowCompletion(result, editor, '\0');
return true;
}

37
src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionItemList.cs

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Siegfried Pammer" email="siegfriedpammer@gmail.com"/>
// <version>$Revision: 6077 $</version>
// </file>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Parser.VB;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
namespace ICSharpCode.VBNetBinding
{
public class VBNetCompletionItemList : NRefactoryCompletionItemList
{
public ITextEditor Editor { get; set; }
public ICompletionListWindow Window { get; set; }
public override CompletionItemListKeyResult ProcessInput(char key)
{
if (key == '?' && string.IsNullOrWhiteSpace(Editor.Document.GetText(Window.StartOffset, Window.EndOffset - Window.StartOffset)))
return CompletionItemListKeyResult.NormalKey;
return base.ProcessInput(key);
}
}
}

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

@ -50,12 +50,15 @@ @@ -50,12 +50,15 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Configuration\AssemblyInfo.cs" />
<EmbeddedResource Include="Resources\BuildOptions.xfrm" />
<EmbeddedResource Include="Resources\BuildOptions.xfrm">
<LogicalName>Resources.BuildOptions.xfrm</LogicalName>
</EmbeddedResource>
<Compile Include="Src\Extensions.cs" />
<Compile Include="Src\FormattingStrategy\VBStatement.cs" />
<Compile Include="Src\VBNetBracketSearcher.cs" />
<Compile Include="Src\CompletionDataHelper.cs" />
<Compile Include="Src\VBNetCompletionBindingOld.cs" />
<Compile Include="Src\VBNetCompletionItemList.cs" />
<Compile Include="Src\VBNetLanguageBinding.cs" />
<Compile Include="Src\VBNetProjectBinding.cs" />
<Compile Include="Src\FormattingStrategy\VBNetFormattingStrategy.cs" />
@ -72,9 +75,13 @@ @@ -72,9 +75,13 @@
<Compile Include="Src\OptionPanels\ProjectImports.cs">
<SubType>Form</SubType>
</Compile>
<EmbeddedResource Include="Resources\ProjectImports.xfrm" />
<EmbeddedResource Include="Resources\ProjectImports.xfrm">
<LogicalName>Resources.ProjectImports.xfrm</LogicalName>
</EmbeddedResource>
<Compile Include="Src\OptionPanels\TextEditorOptions.cs" />
<EmbeddedResource Include="Resources\VBNetTextEditorOptions.xfrm" />
<EmbeddedResource Include="Resources\VBNetTextEditorOptions.xfrm">
<LogicalName>Resources.VBNetTextEditorOptions.xfrm</LogicalName>
</EmbeddedResource>
<Compile Include="Src\Project\CSharpToVBNetConverter.cs" />
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Configuration\GlobalAssemblyInfo.cs</Link>

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

@ -87,6 +87,7 @@ @@ -87,6 +87,7 @@
<Compile Include="Src\Implementations\DefaultEvent.cs" />
<Compile Include="Src\Implementations\DefaultField.cs" />
<Compile Include="Src\Implementations\DefaultMethod.cs" />
<Compile Include="Src\Implementations\DefaultOption.cs" />
<Compile Include="Src\Implementations\DefaultParameter.cs" />
<Compile Include="Src\Implementations\DefaultProperty.cs" />
<Compile Include="Src\Implementations\DefaultReturnType.cs" />
@ -109,7 +110,9 @@ @@ -109,7 +110,9 @@
<Compile Include="Src\Interfaces\ICompletionEntry.cs" />
<Compile Include="Src\Interfaces\IDomProgressMonitor.cs" />
<Compile Include="Src\Interfaces\IFreezable.cs" />
<Compile Include="Src\Interfaces\IOption.cs" />
<Compile Include="Src\Interfaces\IUsingScope.cs" />
<Compile Include="Src\Interfaces\OptionType.cs" />
<Compile Include="Src\LazyList.cs" />
<Compile Include="Src\NRefactoryResolver\CodeSnippetConverter.cs" />
<Compile Include="Src\NRefactoryResolver\CSharpToVBNetConvertVisitor.cs" />

8
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultCompilationUnit.cs

@ -26,6 +26,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -26,6 +26,7 @@ namespace ICSharpCode.SharpDevelop.Dom
IList<IAttribute> attributes = new List<IAttribute>();
IList<FoldingRegion> foldingRegions = new List<FoldingRegion>();
IList<TagComment> tagComments = new List<TagComment>();
IList<IOption> options = new List<IOption>();
protected override void FreezeInternal()
{
@ -34,6 +35,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -34,6 +35,7 @@ namespace ICSharpCode.SharpDevelop.Dom
attributes = FreezeList(attributes);
foldingRegions = FreezeList(foldingRegions);
tagComments = FreezeList(tagComments);
options = FreezeList(options);
usingScope.Freeze();
base.FreezeInternal();
@ -160,5 +162,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -160,5 +162,11 @@ namespace ICSharpCode.SharpDevelop.Dom
return projectContent.Language;
}
}
public IList<IOption> Options {
get {
return options;
}
}
}
}

63
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultOption.cs

@ -0,0 +1,63 @@ @@ -0,0 +1,63 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Siegfried Pammer" email="siegfriedpammer@gmail.com" />
// <version>$Revision$</version>
// </file>
using System;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// Description of DefaultOption.
/// </summary>
public class DefaultOption : AbstractFreezable, IOption
{
OptionType type;
bool value;
DomRegion region;
public DefaultOption(OptionType type)
: this(type, true)
{
}
public DefaultOption(OptionType type, bool value)
: this(type, value, DomRegion.Empty)
{
}
public DefaultOption(OptionType type, bool value, DomRegion region)
{
this.type = type;
this.value = value;
this.region = region;
}
protected override void FreezeInternal()
{
base.FreezeInternal();
}
public DomRegion Region {
get {
return region;
}
}
public OptionType Type {
get {
return type;
}
}
public bool Value {
get {
if (type == OptionType.CompareBinary || type == OptionType.CompareText)
return true;
return value;
}
}
}
}

7
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/ICompilationUnit.cs

@ -69,6 +69,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -69,6 +69,13 @@ namespace ICSharpCode.SharpDevelop.Dom
get;
}
/// <summary>
/// gets the Options defined in this cu (VB only!)
/// </summary>
IList<IOption> Options {
get;
}
/// <summary>
/// Returns the innerst class in which the carret currently is, returns null
/// if the carret is outside any class boundaries.

28
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/IOption.cs

@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Siegfried Pammer" email="siegfriedpammer@gmail.com" />
// <version>$Revision$</version>
// </file>
using System;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// Description of IOption.
/// </summary>
public interface IOption : IFreezable
{
DomRegion Region {
get;
}
OptionType Type {
get;
}
bool Value {
get;
}
}
}

18
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/OptionType.cs

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Siegfried Pammer" email="siegfriedpammer@gmail.com" />
// <version>$Revision$</version>
// </file>
namespace ICSharpCode.SharpDevelop.Dom
{
public enum OptionType {
None = ICSharpCode.NRefactory.Ast.OptionType.None,
Explicit = ICSharpCode.NRefactory.Ast.OptionType.Explicit,
Strict = ICSharpCode.NRefactory.Ast.OptionType.Strict,
CompareBinary = ICSharpCode.NRefactory.Ast.OptionType.CompareBinary,
CompareText = ICSharpCode.NRefactory.Ast.OptionType.CompareText,
Infer = ICSharpCode.NRefactory.Ast.OptionType.Infer
}
}

12
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryASTConvertVisitor.cs

@ -222,6 +222,18 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -222,6 +222,18 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return data;
}
public override object VisitOptionDeclaration(ICSharpCode.NRefactory.Ast.OptionDeclaration optionDeclaration, object data)
{
cu.Options.Add(
new DefaultOption((OptionType)optionDeclaration.OptionType, optionDeclaration.OptionValue,
new DomRegion(optionDeclaration.StartLocation.Line, optionDeclaration.StartLocation.Column,
optionDeclaration.EndLocation.Line, optionDeclaration.EndLocation.Column)
)
);
return null;
}
void ConvertAttributes(AST.AttributedNode from, AbstractEntity to)
{
if (from.Attributes.Count == 0) {

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

@ -44,6 +44,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -44,6 +44,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
int caretLine;
int caretColumn;
bool inferAllowed;
public NR.SupportedLanguage Language {
get {
return language;
@ -106,8 +108,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -106,8 +108,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
this.languageProperties = languageProperties;
if (languageProperties is LanguageProperties.CSharpProperties) {
language = NR.SupportedLanguage.CSharp;
inferAllowed = true;
} else if (languageProperties is LanguageProperties.VBNetProperties) {
language = NR.SupportedLanguage.VBNet;
inferAllowed = false;
} else {
throw new NotSupportedException("The language " + languageProperties.ToString() + " is not supported in the resolver");
}
@ -157,6 +161,13 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -157,6 +161,13 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
this.ProjectContent = cu.ProjectContent;
if (cu.Language == LanguageProperties.VBNet) {
// TODO : get options from project
if (cu.Options.Any(o => o.Type == OptionType.Infer))
inferAllowed = cu.Options.First(o => o.Type == OptionType.Infer).Value;
}
callingClass = cu.GetInnermostClass(caretLine, caretColumn);
callingMember = GetCallingMember();
return true;
@ -1043,13 +1054,17 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -1043,13 +1054,17 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return rt;
if (v.TypeRef == null || v.TypeRef.IsNull || v.TypeRef.Type == "var") {
if (v.ParentLambdaExpression != null) {
rt = new LambdaParameterReturnType(v.ParentLambdaExpression, v.Name, this);
} else {
rt = new InferredReturnType(v.Initializer, this);
if (v.IsLoopVariable) {
rt = new ElementReturnType(this.projectContent, rt);
if (inferAllowed) {
if (v.ParentLambdaExpression != null) {
rt = new LambdaParameterReturnType(v.ParentLambdaExpression, v.Name, this);
} else {
rt = new InferredReturnType(v.Initializer, this);
if (v.IsLoopVariable) {
rt = new ElementReturnType(this.projectContent, rt);
}
}
} else {
rt = this.projectContent.SystemTypes.Object;
}
} else {
rt = TypeVisitor.CreateReturnType(v.TypeRef, this);

Loading…
Cancel
Save