Browse Source

- removed IOption

- replaced with IVBNetOptionProvider
- XDocument, XElement, XComment, XProcessingDirective, XCData will be correctly resolved

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/vbnet@6191 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Siegfried Pammer 16 years ago
parent
commit
3219079f94
  1. 35
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
  2. 1
      src/AddIns/BackendBindings/VBNetBinding/Test/MockTextEditor.cs
  3. 8
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.atg
  4. 2
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs
  5. 2449
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Parser.cs
  6. 429
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  7. 2
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
  8. 16
      src/Libraries/NRefactory/Test/Lexer/VBNet/LexerContextTests.cs
  9. 309
      src/Main/Base/Test/VBExpressionFinderTests.cs
  10. 5
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
  11. 8
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultCompilationUnit.cs
  12. 63
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultOption.cs
  13. 7
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/ICompilationUnit.cs
  14. 28
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/IOption.cs
  15. 18
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/OptionType.cs
  16. 38
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryASTConvertVisitor.cs
  17. 8
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs
  18. 30
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/ResolveVisitor.cs
  19. 27
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/IVBNetOptionProvider.cs
  20. 54
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/VBNetCompilationUnit.cs

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

@ -18,7 +18,7 @@ using ICSharpCode.SharpDevelop.Project; @@ -18,7 +18,7 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.VBNetBinding
{
public class VBNetProject : CompilableProject
public class VBNetProject : CompilableProject, IVBNetOptionProvider
{
protected override void OnPropertyChanged(ProjectPropertyChangedEventArgs e)
{
@ -150,5 +150,38 @@ namespace ICSharpCode.VBNetBinding @@ -150,5 +150,38 @@ namespace ICSharpCode.VBNetBinding
}
}
}*/
public Nullable<bool> OptionInfer {
get { return GetValue("OptionInfer", false); }
}
public Nullable<bool> OptionStrict {
get { return GetValue("OptionStrict", false); }
}
public Nullable<bool> OptionExplicit {
get { return GetValue("OptionExplicit", true); }
}
public Nullable<CompareKind> OptionCompare {
get {
string val = GetEvaluatedProperty("OptionCompare");
if ("Text".Equals(val, StringComparison.OrdinalIgnoreCase))
return CompareKind.Text;
return CompareKind.Binary;
}
}
bool? GetValue(string name, bool defaultVal)
{
string val = GetEvaluatedProperty("OptionInfer");
if (val == null)
return defaultVal;
return "On".Equals(val, StringComparison.OrdinalIgnoreCase);
}
}
}

1
src/AddIns/BackendBindings/VBNetBinding/Test/MockTextEditor.cs

@ -36,6 +36,7 @@ namespace ICSharpCode.VBNetBinding.Tests @@ -36,6 +36,7 @@ namespace ICSharpCode.VBNetBinding.Tests
{
PropertyService.InitializeServiceForUnitTests();
pc = new DefaultProjectContent();
pc.Language = LanguageProperties.VBNet;
pc.ReferencedContents.Add(AssemblyParserService.DefaultProjectContentRegistry.Mscorlib);
Dictionary<string, string> referencedAssemblies = new Dictionary<string, string>() {

8
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.atg

@ -761,12 +761,18 @@ XmlLiteral @@ -761,12 +761,18 @@ XmlLiteral
(.OnEachPossiblePath: nextTokenIsPotentialStartOfExpression = true; .)
=
(. PushContext(Context.Xml, la, t); .)
{ ( XmlComment | XmlProcessingInstruction ) [ XmlContent ] } XmlElement { XmlComment [ XmlContent ] }
(
( XmlComment | XmlProcessingInstruction | XmlCData ) [ XmlContent ] { ( XmlComment | XmlProcessingInstruction ) [ XmlContent ] } [ XmlElement { XmlComment [ XmlContent ] } ]
|
XmlElement { XmlComment [ XmlContent ] }
)
(. PopContext(); .)
.
XmlElement =
(. PushContext(Context.Xml, la, t); .)
XmlOpenTag { ANY | XmlEmbeddedExpression } ( XmlCloseTagEmptyElement | XmlCloseTag { ANY | XmlEmbeddedExpression | XmlElement } XmlOpenEndTag { ANY | XmlEmbeddedExpression } XmlCloseTag )
(. PopContext(); .)
.
XmlEmbeddedExpression =

2
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs

@ -1059,7 +1059,7 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -1059,7 +1059,7 @@ namespace ICSharpCode.NRefactory.Parser.VB
}
}
return null;
return new Token(Tokens.XmlComment, new Location(x, y), new Location(Col, Line), sb.ToString(), null, LiteralFormat.None);
}
string ReadXmlContent(char ch)

2449
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Parser.cs

File diff suppressed because it is too large Load Diff

429
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs

File diff suppressed because it is too large Load Diff

2
src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG

@ -1652,7 +1652,6 @@ Expr<out Expression expr> @@ -1652,7 +1652,6 @@ Expr<out Expression expr>
QueryExpr<out expr>
| LambdaExpr<out expr>
| DisjunctionExpr<out expr>
| XmlLiteralExpression<out expr>
.
AssignmentOperator<out AssignmentOperatorType op>
@ -1751,6 +1750,7 @@ SimpleNonInvocationExpression<out Expression pexpr> @@ -1751,6 +1750,7 @@ SimpleNonInvocationExpression<out Expression pexpr>
| /* 11.5.1 */ "GetType" "(" GetTypeTypeName<out type> ")" (. pexpr = new TypeOfExpression(type); .)
| /* 11.5.2 */ "TypeOf" SimpleExpr<out expr> "Is" TypeName<out type> (. pexpr = new TypeOfIsExpression(expr, type); .)
| /* 11.22 */ ConditionalExpression<out pexpr>
| XmlLiteralExpression<out pexpr>
)
|
(

16
src/Libraries/NRefactory/Test/Lexer/VBNet/LexerContextTests.cs

@ -52,6 +52,8 @@ End Class @@ -52,6 +52,8 @@ End Class
enter Expression
enter Expression
enter Xml
enter Xml
exit Xml
exit Xml
exit Expression
exit Expression
@ -89,6 +91,8 @@ End Class @@ -89,6 +91,8 @@ End Class
enter Expression
enter Expression
enter Xml
enter Xml
exit Xml
exit Xml
exit Expression
exit Expression
@ -104,6 +108,8 @@ End Class @@ -104,6 +108,8 @@ End Class
enter Expression
enter Expression
enter Xml
enter Xml
exit Xml
exit Xml
exit Expression
exit Expression
@ -501,18 +507,20 @@ End Module", @@ -501,18 +507,20 @@ End Module",
enter Expression
enter Expression
enter Xml
enter Expression
enter Xml
enter Expression
enter Expression
enter Expression
exit Expression
exit Expression
exit Expression
exit Expression
enter Expression
enter Expression
enter Expression
enter Expression
exit Expression
exit Expression
exit Expression
exit Expression
exit Xml
exit Xml
exit Expression
exit Expression

309
src/Main/Base/Test/VBExpressionFinderTests.cs

@ -33,22 +33,6 @@ Class MainClass ' a comment @@ -33,22 +33,6 @@ Class MainClass ' a comment
End Class
";
const string program2 = @"
Class MainClass
Sub A
Console.WriteLine(""Hello World!"")
End Sub
End Class
";
const string program3 = @"
Class MainClass
Sub A
Console.WriteLine
End Sub
End Class
";
VBNetExpressionFinder ef;
[SetUp]
@ -61,20 +45,22 @@ End Class @@ -61,20 +45,22 @@ End Class
ef = new VBNetExpressionFinder(null);
}
void FindFull(string program, string location, string expectedExpression, ExpressionContext expectedContext)
void FindFull(string program, string expectedExpression, ExpressionContext expectedContext)
{
int pos = program.IndexOf(location);
int pos = program.IndexOf("|");
if (pos < 0) Assert.Fail("location not found in program");
program = program.Remove(pos, 1);
ExpressionResult er = ef.FindFullExpression(program, pos);
Assert.AreEqual(expectedExpression, er.Expression);
Assert.AreEqual(expectedContext.ToString(), er.Context.ToString());
}
void Find(string program, string location, int offset, string expectedExpression, ExpressionContext expectedContext)
void Find(string program, string expectedExpression, ExpressionContext expectedContext)
{
int pos = program.IndexOf(location);
int pos = program.IndexOf("|");
if (pos < 0) Assert.Fail("location not found in program");
ExpressionResult er = ef.FindExpression(program, pos + offset);
program = program.Remove(pos, 1);
ExpressionResult er = ef.FindExpression(program, pos);
Assert.AreEqual(expectedExpression, er.Expression);
Assert.AreEqual(expectedContext.ToString(), er.Context.ToString());
}
@ -83,51 +69,112 @@ End Class @@ -83,51 +69,112 @@ End Class
[Test]
public void FindSimple()
{
Find(program2, "sole", 0, "Con", ExpressionContext.MethodBody);
string program2 = @"
Class MainClass
Sub A
Con|sole.WriteLine(""Hello World!"")
End Sub
End Class
";
Find(program2, "Con", ExpressionContext.MethodBody);
}
[Test]
public void FindSimple2()
{
Find(program2, "Wri", 0, "Console.", ExpressionContext.Default);
string program2 = @"
Class MainClass
Sub A
Console.|WriteLine(""Hello World!"")
End Sub
End Class
";
Find(program2, "Console.", ExpressionContext.Default);
}
[Test]
public void FindSimple3()
{
Find(program3, "WriteLine", "WriteLine".Length, "Console.WriteLine", ExpressionContext.Default);
string program3 = @"
Class MainClass
Sub A
Console.WriteLine|
End Sub
End Class
";
Find(program3, "Console.WriteLine", ExpressionContext.Default);
}
[Test]
public void FindAfterBrace()
{
Find(program2, "WriteLine", "WriteLine(".Length, "", ExpressionContext.Default);
string program2 = @"
Class MainClass
Sub A
Console.WriteLine(|""Hello World!"")
End Sub
End Class
";
Find(program2, "", ExpressionContext.Default);
}
[Test]
public void ForEachLoop()
{
Find(program1, "loopVarName", 4, "loop", ExpressionContext.IdentifierExpected);
string program1 = @"
Imports System
Imports System.Linq
Class MainClass ' a comment
Dim under_score_field As Integer
Sub SomeMethod()
simple += 1
Dim text = ""Text""
For Each loop|VarName In collection
Next
End Sub
End Class
";
Find(program1, "loop", ExpressionContext.IdentifierExpected);
}
[Test]
public void FindEmptyAfterImports()
{
Find(program1, " ", 1, "", ExpressionContext.Global);
string program1 = @"
Imports System
Imports System.Linq
|
Class MainClass ' a comment
Dim under_score_field As Integer
Sub SomeMethod()
simple += 1
Dim text = ""Text""
For Each loopVarName In collection
Next
End Sub
End Class
";
Find(program1, "", ExpressionContext.Global);
}
[Test]
public void FindParameterStart()
{
Find(@"Module Program
Private Function CreateFolder(
End Module", "(", 1, "", ExpressionContext.IdentifierExpected);
Private Function CreateFolder(|
End Module", "", ExpressionContext.IdentifierExpected);
}
[Test]
public void FindAfterNewLineImport()
{
Find("Imports System\n", "\n", 1, "", ExpressionContext.Global);
Find("Imports System\n|", "", ExpressionContext.Global);
}
[Test]
@ -135,9 +182,9 @@ End Module", "(", 1, "", ExpressionContext.IdentifierExpected); @@ -135,9 +182,9 @@ End Module", "(", 1, "", ExpressionContext.IdentifierExpected);
{
Find(@"Class MainClass
Sub Main()
Test(Test2(1) + Test2(2))
Test(Te|st2(1) + Test2(2))
End Sub
End Class", "Test2", 2, "Te", ExpressionContext.Default);
End Class", "Te", ExpressionContext.Default);
}
[Test]
@ -145,9 +192,9 @@ End Class", "Test2", 2, "Te", ExpressionContext.Default); @@ -145,9 +192,9 @@ End Class", "Test2", 2, "Te", ExpressionContext.Default);
{
Find(@"Class MainClass
Sub Main()
Test(Test2(1) + Test2(2))
Test(Test2|(1) + Test2(2))
End Sub
End Class", "Test2", 5, "Test2", ExpressionContext.Default);
End Class", "Test2", ExpressionContext.Default);
}
#endregion
@ -214,65 +261,197 @@ End Module"; @@ -214,65 +261,197 @@ End Module";
[Test]
public void Simple()
{
FindFull(program1, "mple += 1", "simple", ExpressionContext.Default);
string program1 = @"
Imports System
Imports System.Linq
Class MainClass ' a comment
Dim under_score_field As Integer
Sub SomeMethod()
si|mple += 1
Dim text = ""Text""
For Each loopVarName In collection
Next
End Sub
End Class
";
FindFull(program1, "simple", ExpressionContext.Default);
}
[Test]
public void SimpleBeginningOfExpression()
{
FindFull(program1, "simple += 1", "simple", ExpressionContext.Default);
string program1 = @"
Imports System
Imports System.Linq
Class MainClass ' a comment
Dim under_score_field As Integer
Sub SomeMethod()
|simple += 1
Dim text = ""Text""
For Each loopVarName In collection
Next
End Sub
End Class
";
FindFull(program1, "simple", ExpressionContext.Default);
}
[Test]
public void Underscore()
{
FindFull(program1, "der_score_field", "under_score_field", ExpressionContext.Default);
string program1 = @"
Imports System
Imports System.Linq
Class MainClass ' a comment
Dim un|der_score_field As Integer
Sub SomeMethod()
simple += 1
Dim text = ""Text""
For Each loopVarName In collection
Next
End Sub
End Class
";
FindFull(program1, "under_score_field", ExpressionContext.Default);
}
[Test]
public void IdentifierBeforeKeyword()
{
FindFull(program1, "arName", "loopVarName", ExpressionContext.Default);
string program1 = @"
Imports System
Imports System.Linq
Class MainClass ' a comment
Dim under_score_field As Integer
Sub SomeMethod()
simple += 1
Dim text = ""Text""
For Each loopV|arName In collection
Next
End Sub
End Class
";
FindFull(program1, "loopVarName", ExpressionContext.Default);
}
[Test]
public void LocalVariableDecl()
{
FindFull(program1, "ext", "text", ExpressionContext.Default);
string program1 = @"
Imports System
Imports System.Linq
Class MainClass ' a comment
Dim under_score_field As Integer
Sub SomeMethod()
simple += 1
Dim t|ext = ""Text""
For Each loopVarName In collection
Next
End Sub
End Class
";
FindFull(program1, "text", ExpressionContext.Default);
}
[Test]
public void Imports1()
{
FindFull(program1, "ystem", "System", ExpressionContext.Importable);
string program1 = @"
Imports S|ystem
Imports System.Linq
Class MainClass ' a comment
Dim under_score_field As Integer
Sub SomeMethod()
simple += 1
Dim text = ""Text""
For Each loopVarName In collection
Next
End Sub
End Class
";
FindFull(program1, "System", ExpressionContext.Importable);
}
[Test]
public void Imports2()
{
FindFull(program1, "inq", "System.Linq", ExpressionContext.Importable);
string program1 = @"
Imports System
Imports System.L|inq
Class MainClass ' a comment
Dim under_score_field As Integer
Sub SomeMethod()
simple += 1
Dim text = ""Text""
For Each loopVarName In collection
Next
End Sub
End Class
";
FindFull(program1, "System.Linq", ExpressionContext.Importable);
}
[Test]
public void ClassName()
{
FindFull(program1, "ainClas", "MainClass", ExpressionContext.Default);
string program1 = @"
Imports System
Imports System.Linq
Class M|ainClass ' a comment
Dim under_score_field As Integer
Sub SomeMethod()
simple += 1
Dim text = ""Text""
For Each loopVarName In collection
Next
End Sub
End Class
";
FindFull(program1, "MainClass", ExpressionContext.Default);
}
[Test]
public void SubName()
{
FindFull(program1, "omeMe", "SomeMethod", ExpressionContext.Default);
string program1 = @"
Imports System
Imports System.Linq
Class MainClass ' a comment
Dim under_score_field As Integer
Sub S|omeMethod()
simple += 1
Dim text = ""Text""
For Each loopVarName In collection
Next
End Sub
End Class
";
FindFull(program1, "SomeMethod", ExpressionContext.Default);
}
[Test]
public void ParameterName()
{
FindFull(@"Module Test
Function Fibo(x As Integer) As Integer
Function Fibo(|x As Integer) As Integer
End Function
End Module", "x", "x", ExpressionContext.Default);
End Module", "x", ExpressionContext.Default);
}
[Test]
@ -280,9 +459,45 @@ End Module", "x", "x", ExpressionContext.Default); @@ -280,9 +459,45 @@ End Module", "x", "x", ExpressionContext.Default);
{
FindFull(@"Module Test
Sub Main()
String.Format(""{0}"", ""Test"")
String.For|mat(""{0}"", ""Test"")
End Sub
End Module", "String.Format(\"{0}\", \"Test\")", ExpressionContext.Default);
}
[Test]
public void SimpleXml()
{
FindFull(@"Module Test
Sub Main()
Dim xml = <!-- te|st -->
Dim x = 5
End Sub
End Module", "<!-- test -->", ExpressionContext.Default);
}
[Test]
public void SimpleXml2()
{
FindFull(@"Module Test
Sub Main()
Dim xml = <!-- test -->
Dim xml2 = <![CDATA[some| text]]>
End Sub
End Module", "<![CDATA[some text]]>", ExpressionContext.Default);
}
[Test]
public void SimpleXml3()
{
FindFull(@"Module Test
Sub Main()
Dim xml = <!-- test -->
Dim x = |5
End Sub
End Module", "mat", "String.Format(\"{0}\", \"Test\")", ExpressionContext.Default);
End Module", "5", ExpressionContext.Default);
}
#region Old Tests

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

@ -87,7 +87,6 @@ @@ -87,7 +87,6 @@
<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" />
@ -110,9 +109,7 @@ @@ -110,9 +109,7 @@
<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" />
@ -148,6 +145,8 @@ @@ -148,6 +145,8 @@
<Compile Include="Src\IComment.cs" />
<Compile Include="Src\ReflectionLayer\ReflectionTypeNameSyntaxError.cs" />
<Compile Include="Src\SignatureComparer.cs" />
<Compile Include="Src\VBNet\IVBNetOptionProvider.cs" />
<Compile Include="Src\VBNet\VBNetCompilationUnit.cs" />
<Compile Include="Src\VBNet\VBNetExpressionFinder.cs" />
<Compile Include="Src\XmlDoc.cs" />
<Compile Include="Src\Tag.cs" />

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

@ -26,7 +26,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -26,7 +26,6 @@ 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()
{
@ -35,7 +34,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -35,7 +34,6 @@ namespace ICSharpCode.SharpDevelop.Dom
attributes = FreezeList(attributes);
foldingRegions = FreezeList(foldingRegions);
tagComments = FreezeList(tagComments);
options = FreezeList(options);
usingScope.Freeze();
base.FreezeInternal();
@ -162,11 +160,5 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -162,11 +160,5 @@ 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

@ -1,63 +0,0 @@ @@ -1,63 +0,0 @@
// <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,13 +69,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -69,13 +69,6 @@ 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

@ -1,28 +0,0 @@ @@ -1,28 +0,0 @@
// <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

@ -1,18 +0,0 @@ @@ -1,18 +0,0 @@
// <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
}
}

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

@ -11,8 +11,8 @@ using System.Collections.Generic; @@ -11,8 +11,8 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Linq;
using ICSharpCode.NRefactory.Visitors;
using ICSharpCode.SharpDevelop.Dom.VBNet;
using AST = ICSharpCode.NRefactory.Ast;
using RefParser = ICSharpCode.NRefactory;
@ -33,7 +33,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -33,7 +33,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
public NRefactoryASTConvertVisitor(IProjectContent projectContent)
{
cu = new DefaultCompilationUnit(projectContent);
if (projectContent.Language == LanguageProperties.VBNet)
cu = new VBNetCompilationUnit(projectContent);
else
cu = new DefaultCompilationUnit(projectContent);
}
DefaultClass GetCurrentClass()
@ -224,14 +227,31 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -224,14 +227,31 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
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)
)
);
if (cu is VBNetCompilationUnit) {
VBNetCompilationUnit provider = cu as VBNetCompilationUnit;
switch (optionDeclaration.OptionType) {
case ICSharpCode.NRefactory.Ast.OptionType.Explicit:
provider.OptionExplicit = optionDeclaration.OptionValue;
break;
case ICSharpCode.NRefactory.Ast.OptionType.Strict:
provider.OptionStrict = optionDeclaration.OptionValue;
break;
case ICSharpCode.NRefactory.Ast.OptionType.CompareBinary:
provider.OptionCompare = CompareKind.Binary;
break;
case ICSharpCode.NRefactory.Ast.OptionType.CompareText:
provider.OptionCompare = CompareKind.Text;
break;
case ICSharpCode.NRefactory.Ast.OptionType.Infer:
provider.OptionInfer = optionDeclaration.OptionValue;
break;
}
return null;
}
return null;
return base.VisitOptionDeclaration(optionDeclaration, data);
}
void ConvertAttributes(AST.AttributedNode from, AbstractEntity to)

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

@ -16,6 +16,7 @@ using ICSharpCode.NRefactory; @@ -16,6 +16,7 @@ using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Ast;
using ICSharpCode.NRefactory.Visitors;
using ICSharpCode.SharpDevelop.Dom.CSharp;
using ICSharpCode.SharpDevelop.Dom.VBNet;
using NR = ICSharpCode.NRefactory;
namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
@ -161,11 +162,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -161,11 +162,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
this.ProjectContent = cu.ProjectContent;
if (cu.Language == LanguageProperties.VBNet) {
// TODO : get options from project
if (language == SupportedLanguage.VBNet) {
IVBNetOptionProvider provider = cu as IVBNetOptionProvider;
if (cu.Options.Any(o => o.Type == OptionType.Infer))
inferAllowed = cu.Options.First(o => o.Type == OptionType.Infer).Value;
inferAllowed = provider.OptionInfer ?? false;
}
callingClass = cu.GetInnermostClass(caretLine, caretColumn);

30
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/ResolveVisitor.cs

@ -667,5 +667,35 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -667,5 +667,35 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
{
return CreateResolveResult(uncheckedExpression.Expression);
}
#region XML Literal resolver
public override object VisitXmlContentExpression(XmlContentExpression xmlContentExpression, object data)
{
switch (xmlContentExpression.Type) {
case XmlContentType.Comment:
return CreateResolveResult(new TypeReference("System.Xml.Linq.XComment"));
case XmlContentType.Text:
return CreateResolveResult(new TypeReference("System.Xml.Linq.XText"));
case XmlContentType.CData:
return CreateResolveResult(new TypeReference("System.Xml.Linq.XCData"));
case XmlContentType.ProcessingInstruction:
if (xmlContentExpression.Content.StartsWith("xml ", StringComparison.OrdinalIgnoreCase))
return CreateResolveResult(new TypeReference("System.Xml.Linq.XDocumentType"));
return CreateResolveResult(new TypeReference("System.Xml.Linq.XProcessingInstruction"));
default:
throw new Exception("Invalid value for XmlContentType");
}
}
public override object VisitXmlDocumentExpression(XmlDocumentExpression xmlDocumentExpression, object data)
{
return CreateResolveResult(new TypeReference("System.Xml.Linq.XDocument"));
}
public override object VisitXmlElementExpression(XmlElementExpression xmlElementExpression, object data)
{
return CreateResolveResult(new TypeReference("System.Xml.Linq.XElement"));
}
#endregion
}
}

27
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/IVBNetOptionProvider.cs

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
// <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.VBNet
{
/// <summary>
/// Description of IVBNetOptionProvider.
/// </summary>
public interface IVBNetOptionProvider
{
bool? OptionInfer { get; }
bool? OptionStrict { get; }
bool? OptionExplicit { get; }
CompareKind? OptionCompare { get; }
}
public enum CompareKind
{
Binary,
Text
}
}

54
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/VBNetCompilationUnit.cs

@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
// <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.VBNet
{
/// <summary>
/// Description of VBNetCompilationUnit.
/// </summary>
public class VBNetCompilationUnit : DefaultCompilationUnit, IVBNetOptionProvider
{
IVBNetOptionProvider projectOptionProvider;
public VBNetCompilationUnit(IProjectContent projectContent)
: base(projectContent)
{
if (projectContent.Project is IVBNetOptionProvider)
projectOptionProvider = projectContent.Project as IVBNetOptionProvider;
else {
infer = false;
strict = false;
@explicit = true;
compare = CompareKind.Binary;
}
}
bool? infer, strict, @explicit;
CompareKind? compare;
public bool? OptionInfer {
get { return infer ?? projectOptionProvider.OptionInfer; }
set { infer = value; }
}
public bool? OptionStrict {
get { return strict ?? projectOptionProvider.OptionStrict; }
set { strict = value; }
}
public bool? OptionExplicit {
get { return @explicit ?? projectOptionProvider.OptionExplicit; }
set { @explicit = value; }
}
public CompareKind? OptionCompare {
get { return compare ?? projectOptionProvider.OptionCompare; }
set { compare = value; }
}
}
}
Loading…
Cancel
Save