Browse Source

Fixed SD2-400: Importing classes (VB.NET).

Fixed code completion on "value" in property setters.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@353 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
3d4f0a78f7
  1. 2
      setup/buildSetup.bat
  2. 2
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Parser/ExpressionFinder.cs
  3. 3
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
  4. 2
      src/AddIns/Misc/MbUnitPad/Project/MbUnitPad.addin
  5. 1158
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  6. 23
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG
  7. 1671
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  8. 8
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
  9. 14
      src/Main/Base/Project/Src/Dom/Implementations/DefaultProperty.cs
  10. 15
      src/Main/Base/Project/Src/Dom/LanguageProperties.cs
  11. 6
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs
  12. 81
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  13. 8
      src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionProperty.cs
  14. 22
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataProvider.cs
  15. 196
      src/Main/Base/Test/NRefactoryResolverTests.cs
  16. 8
      src/SharpDevelop.WithTests.sln
  17. 2
      src/Tools/SVNChangeLogToXml/Main.cs
  18. 14
      src/publish.bat

2
setup/buildSetup.bat

@ -1,3 +1,3 @@ @@ -1,3 +1,3 @@
del "Setup.exe"
%PROGRAMFILES%\NSIS\makensis /V2 "Corsavy.nsi"
IF %ERRORLEVEL% NEQ 0 PAUSE
@IF %ERRORLEVEL% NEQ 0 PAUSE

2
src/AddIns/BackendBindings/VBNetBinding/Project/Src/Parser/ExpressionFinder.cs

@ -21,7 +21,7 @@ namespace VBNetBinding.Parser @@ -21,7 +21,7 @@ namespace VBNetBinding.Parser
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.Namespace, null);
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))

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

@ -155,8 +155,7 @@ namespace VBNetBinding @@ -155,8 +155,7 @@ namespace VBNetBinding
// and possible return types.
switch (word.ToLower()) {
case "imports":
// TODO: check if we are inside class/namespace
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.Namespace), ' ');
editor.ShowCompletionWindow(new CodeCompletionDataProvider(new ExpressionResult("Global", ExpressionContext.Type)), ' ');
return true;
case "as":
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.Type), ' ');

2
src/AddIns/Misc/MbUnitPad/Project/MbUnitPad.addin

@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
class = "MbUnitPad.ReloadCommand"/>
<ToolbarItem id = "Unload"
icon = "Icons.16x16.BrowserCancel"
tooltip = "${res:NUnitPad.NUnitPadContent.UnloadItem}"
tooltip = "${res:NUnitPad.NUnitPadContent.CancelItem}"
class = "MbUnitPad.UnloadCommand"/>
<ToolbarItem id = "Separator1" type = "Separator"/>
<ToolbarItem id = "AddMbUnitReference"

1158
src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs

File diff suppressed because it is too large Load Diff

23
src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG

@ -1420,7 +1420,10 @@ GetAccessorDecl<out PropertyGetRegion getBlock, List<AttributeSection> attribute @@ -1420,7 +1420,10 @@ GetAccessorDecl<out PropertyGetRegion getBlock, List<AttributeSection> attribute
=
ident /* "get" is not a keyword!? */
(. if (t.val != "get") Error("get expected"); .)
( Block<out stmt> | ";" ) (. getBlock = new PropertyGetRegion((BlockStatement)stmt, attributes); .)
(. Point startLocation = t.Location; .)
( Block<out stmt> | ";" )
(. getBlock = new PropertyGetRegion((BlockStatement)stmt, attributes); .)
(. getBlock.StartLocation = startLocation; getBlock.EndLocation = t.EndLocation; .)
.
SetAccessorDecl<out PropertySetRegion setBlock, List<AttributeSection> attributes>
@ -1428,7 +1431,10 @@ SetAccessorDecl<out PropertySetRegion setBlock, List<AttributeSection> attribute @@ -1428,7 +1431,10 @@ SetAccessorDecl<out PropertySetRegion setBlock, List<AttributeSection> attribute
=
ident /* "set" is not a keyword!? */
(. if (t.val != "set") Error("set expected"); .)
( Block<out stmt> | ";" ) (. setBlock = new PropertySetRegion((BlockStatement)stmt, attributes); .)
(. Point startLocation = t.Location; .)
( Block<out stmt> | ";" )
(. setBlock = new PropertySetRegion((BlockStatement)stmt, attributes); .)
(. setBlock.StartLocation = startLocation; setBlock.EndLocation = t.EndLocation; .)
.
EventAccessorDecls<out EventAddRegion addBlock, out EventRemoveRegion removeBlock>
@ -1458,27 +1464,34 @@ InterfaceAccessors<out PropertyGetRegion getBlock, out PropertySetRegion setBloc @@ -1458,27 +1464,34 @@ InterfaceAccessors<out PropertyGetRegion getBlock, out PropertySetRegion setBloc
AttributeSection section;
List<AttributeSection> attributes = new List<AttributeSection>();
getBlock = null; setBlock = null;
PropertyGetSetRegion lastBlock = null;
.)
=
{ AttributeSection<out section> (. attributes.Add(section); .) }
(. Point startLocation = la.Location; .)
(
IF (IdentIsGet()) ident (. getBlock = new PropertyGetRegion(null, attributes); .)
| IF (IdentIsSet()) ident (. setBlock = new PropertySetRegion(null, attributes); .)
| ident (. Error("set or get expected"); .)
)
";" (. attributes = new List<AttributeSection>(); .)
";"
(. if (getBlock != null) { getBlock.StartLocation = startLocation; getBlock.EndLocation = t.EndLocation; }
if (setBlock != null) { setBlock.StartLocation = startLocation; setBlock.EndLocation = t.EndLocation; }
attributes = new List<AttributeSection>(); .)
[
{ AttributeSection<out section> (. attributes.Add(section); .) }
(. startLocation = la.Location; .)
(
IF (IdentIsGet()) ident (. if (getBlock != null) Error("get already declared");
else getBlock = new PropertyGetRegion(null, attributes);
else { getBlock = new PropertyGetRegion(null, attributes); lastBlock = getBlock; }
.)
| IF (IdentIsSet()) ident (. if (setBlock != null) Error("set already declared");
else setBlock = new PropertySetRegion(null, attributes);
else { setBlock = new PropertySetRegion(null, attributes); lastBlock = setBlock; }
.)
| ident (. Error("set or get expected"); .)
)
";"
(. if (lastBlock != null) { lastBlock.StartLocation = startLocation; lastBlock.EndLocation = t.EndLocation; } .)
]
.

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

File diff suppressed because it is too large Load Diff

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

@ -1419,12 +1419,12 @@ AccessorDecls<out PropertyGetRegion getBlock, out PropertySetRegion setBlock> @@ -1419,12 +1419,12 @@ AccessorDecls<out PropertyGetRegion getBlock, out PropertySetRegion setBlock>
GetAccessorDecl<out PropertyGetRegion getBlock, List<AttributeSection> attributes>
(. Statement stmt = null; .) =
"Get"
(. Point startLocation = t.Location; .)
EOL
Block<out stmt>
(.
getBlock = new PropertyGetRegion((BlockStatement)stmt, attributes);
.)
(. getBlock = new PropertyGetRegion((BlockStatement)stmt, attributes); .)
"End" "Get"
(. getBlock.StartLocation = startLocation; getBlock.EndLocation = t.EndLocation; .)
EOL
.
@ -1434,6 +1434,7 @@ SetAccessorDecl<out PropertySetRegion setBlock, List<AttributeSection> attribute @@ -1434,6 +1434,7 @@ SetAccessorDecl<out PropertySetRegion setBlock, List<AttributeSection> attribute
Statement stmt = null; List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();
.) =
"Set"
(. Point startLocation = t.Location; .)
[ "(" [ FormalParameterList<p> ] ")" ]
EOL
Block<out stmt>
@ -1442,6 +1443,7 @@ SetAccessorDecl<out PropertySetRegion setBlock, List<AttributeSection> attribute @@ -1442,6 +1443,7 @@ SetAccessorDecl<out PropertySetRegion setBlock, List<AttributeSection> attribute
setBlock.Parameters = p;
.)
"End" "Set"
(. setBlock.StartLocation = startLocation; setBlock.EndLocation = t.EndLocation; .)
EOL
.

14
src/Main/Base/Project/Src/Dom/Implementations/DefaultProperty.cs

@ -16,8 +16,8 @@ namespace ICSharpCode.SharpDevelop.Dom { @@ -16,8 +16,8 @@ namespace ICSharpCode.SharpDevelop.Dom {
{
protected IRegion bodyRegion;
protected IRegion getterRegion;
protected IRegion setterRegion;
IRegion getterRegion;
IRegion setterRegion;
protected IMethod getterMethod;
protected IMethod setterMethod;
@ -58,12 +58,18 @@ namespace ICSharpCode.SharpDevelop.Dom { @@ -58,12 +58,18 @@ namespace ICSharpCode.SharpDevelop.Dom {
get {
return getterRegion;
}
set {
getterRegion = value;
}
}
public IRegion SetterRegion {
get {
return setterRegion;
}
set {
setterRegion = value;
}
}
public IMethod GetterMethod {
@ -80,13 +86,13 @@ namespace ICSharpCode.SharpDevelop.Dom { @@ -80,13 +86,13 @@ namespace ICSharpCode.SharpDevelop.Dom {
public virtual bool CanGet {
get {
return GetterRegion != null;
return getterRegion != null;
}
}
public virtual bool CanSet {
get {
return SetterRegion != null;
return setterRegion != null;
}
}

15
src/Main/Base/Project/Src/Dom/LanguageProperties.cs

@ -45,6 +45,15 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -45,6 +45,15 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
/// <summary>
/// Gets if classes can be imported (i.e. Imports System.Math)
/// </summary>
public virtual bool CanImportClasses {
get {
return false;
}
}
public virtual bool ShowInNamespaceCompletion(IClass c)
{
return true;
@ -84,6 +93,12 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -84,6 +93,12 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
public override bool CanImportClasses {
get {
return true;
}
}
public override bool ShowInNamespaceCompletion(IClass c)
{
foreach (IAttribute attr in c.Attributes) {

6
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs

@ -500,6 +500,12 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -500,6 +500,12 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
DefaultClass c = GetCurrentClass();
DefaultProperty property = new DefaultProperty(propertyDeclaration.Name, type, ConvertModifier(propertyDeclaration.Modifier), region, bodyRegion, GetCurrentClass());
if (propertyDeclaration.GetRegion != null) {
property.GetterRegion = GetRegion(propertyDeclaration.GetRegion.StartLocation, propertyDeclaration.GetRegion.EndLocation);
}
if (propertyDeclaration.SetRegion != null) {
property.SetterRegion = GetRegion(propertyDeclaration.SetRegion.StartLocation, propertyDeclaration.SetRegion.EndLocation);
}
property.Documentation = GetDocumentation(region.BeginLine);
property.Attributes.AddRange(VisitAttributes(propertyDeclaration.Attributes));
c.Properties.Add(property);

81
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs

@ -494,6 +494,13 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -494,6 +494,13 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
IField field = new DefaultField(para.ReturnType, para.Name, ModifierEnum.None, para.Region, callingClass);
return new LocalResolveResult(callingMember, field, true);
}
if (IsSameName(identifier, "value")) {
IProperty property = callingMember as IProperty;
if (property != null && property.SetterRegion != null && property.SetterRegion.IsInside(caretLine, caretColumn)) {
IField field = new DefaultField(property.ReturnType, "value", ModifierEnum.None, property.Region, callingClass);
return new LocalResolveResult(callingMember, field, true);
}
}
}
if (callingClass != null) {
IMember member = GetMember(callingClass.DefaultReturnType, identifier);
@ -519,6 +526,23 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -519,6 +526,23 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return new NamespaceResolveResult(callingClass, callingMember, namespaceName);
}
if (languageProperties.CanImportClasses) {
foreach (IUsing @using in cu.Usings) {
foreach (string import in @using.Usings) {
IClass c = projectContent.GetClass(import);
if (c != null) {
IMember member = GetMember(c.DefaultReturnType, identifier);
if (member != null) {
return CreateMemberResolveResult(member);
}
ResolveResult result = ResolveMethod(c.DefaultReturnType, identifier);
if (result != null)
return result;
}
}
}
}
if (languageProperties.ImportModules) {
ArrayList list = new ArrayList();
AddImportedNamespaceContents(list);
@ -682,6 +706,20 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -682,6 +706,20 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
List<IMethod> methods = SearchMethod(callingClass.DefaultReturnType, memberName);
if (methods.Count > 0)
return methods;
if (languageProperties.CanImportClasses) {
foreach (IUsing @using in cu.Usings) {
foreach (string import in @using.Usings) {
IClass c = projectContent.GetClass(import);
if (c != null) {
methods = SearchMethod(c.DefaultReturnType, memberName);
if (methods.Count > 0)
return methods;
}
}
}
}
if (languageProperties.ImportModules) {
ArrayList list = new ArrayList();
AddImportedNamespaceContents(list);
@ -762,47 +800,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -762,47 +800,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
/// <remarks>
/// does the dynamic lookup for the identifier
/// </remarks>
public IReturnType DynamicLookup(string typeName)
public IReturnType DynamicLookup(string identifier)
{
// try if it exists a variable named typeName
IReturnType variable = GetVariableType(SearchVariable(typeName));
if (variable != null) {
return variable;
}
if (callingClass == null) {
return null;
}
// try if typeName is a method parameter
IParameter parameter = SearchMethodParameter(typeName);
if (parameter != null) {
return parameter.ReturnType;
}
// check if typeName == value in set method of a property
if (typeName == "value") {
IProperty property = callingMember as IProperty;
if (property != null && property.SetterRegion != null && property.SetterRegion.IsInside(caretLine, caretColumn)) {
return property.ReturnType;
}
}
// try if there exists a nonstatic member named typeName
IReturnType t = SearchMember(callingClass.DefaultReturnType, typeName);
if (t != null) {
return t;
}
// try if there exists a static member in outer classes named typeName
List<IClass> classes = cu.GetOuterClasses(caretLine, caretColumn);
foreach (IClass c in classes) {
IMember member = GetMember(c.DefaultReturnType, typeName);
if (member != null && member.IsStatic) {
return member.ReturnType;
}
}
return null;
ResolveResult rr = ResolveIdentifierInternal(identifier);
return (rr != null) ? rr.ResolvedType : null;
}
IParameter SearchMethodParameter(string parameter)

8
src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionProperty.cs

@ -30,15 +30,15 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -30,15 +30,15 @@ namespace ICSharpCode.SharpDevelop.Dom
// show the abstract layer that we have getter & setters
if (propertyInfo.CanRead) {
getterRegion = new DefaultRegion(0, 0, 0, 0);
GetterRegion = new DefaultRegion(0, 0, 0, 0);
} else {
getterRegion = null;
GetterRegion = null;
}
if (propertyInfo.CanWrite) {
setterRegion = new DefaultRegion(0, 0, 0, 0);
SetterRegion = new DefaultRegion(0, 0, 0, 0);
} else {
setterRegion = null;
SetterRegion = null;
}
MethodInfo methodBase = null;

22
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataProvider.cs

@ -21,10 +21,30 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -21,10 +21,30 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
/// </summary>
public class CodeCompletionDataProvider : AbstractCompletionDataProvider
{
/// <summary>
/// Initialize a CodeCompletionDataProvider that reads the expression from the text area.
/// </summary>
public CodeCompletionDataProvider()
{
}
/// <summary>
/// Initalize a CodeCompletionDataProvider with a fixed expression.
/// </summary>
public CodeCompletionDataProvider(ExpressionResult expression)
{
this.fixedExpression = expression;
}
ExpressionResult fixedExpression;
protected override void GenerateCompletionData(TextArea textArea, char charTyped)
{
preSelection = null;
GenerateCompletionData(textArea, GetExpression(textArea));
if (fixedExpression.Expression == null)
GenerateCompletionData(textArea, GetExpression(textArea));
else
GenerateCompletionData(textArea, fixedExpression);
}
#if DEBUG

196
src/Main/Base/Test/NRefactoryResolverTests.cs

@ -89,6 +89,22 @@ namespace ICSharpCode.SharpDevelop.Tests @@ -89,6 +89,22 @@ namespace ICSharpCode.SharpDevelop.Tests
program);
}
public T Resolve<T>(string program, string expression, int line) where T : ResolveResult
{
ResolveResult rr = Resolve(program, expression, line);
Assert.IsNotNull(rr);
Assert.IsTrue(rr is T, "result is " + typeof(T).Name);
return (T)rr;
}
public T ResolveVB<T>(string program, string expression, int line) where T : ResolveResult
{
ResolveResult rr = ResolveVB(program, expression, line);
Assert.IsNotNull(rr);
Assert.IsTrue(rr is T, "result is " + typeof(T).Name);
return (T)rr;
}
IProjectContent corLib = ProjectContentRegistry.Mscorlib;
#endregion
@ -104,14 +120,10 @@ namespace ICSharpCode.SharpDevelop.Tests @@ -104,14 +120,10 @@ namespace ICSharpCode.SharpDevelop.Tests
End Sub
End Class
";
ResolveResult result = ResolveVB(program, "a", 4);
Assert.IsNotNull(result, "result");
Assert.IsTrue(result is LocalResolveResult, "result is LocalResolveResult");
ResolveResult result = ResolveVB<LocalResolveResult>(program, "a", 4);
Assert.AreEqual("System.String", result.ResolvedType.FullyQualifiedName);
result = ResolveVB(program, "b", 4);
Assert.IsNotNull(result, "result");
Assert.IsTrue(result is LocalResolveResult, "result is LocalResolveResult");
result = ResolveVB<LocalResolveResult>(program, "b", 4);
Assert.AreEqual("System.String", result.ResolvedType.FullyQualifiedName);
}
@ -127,9 +139,7 @@ End Class @@ -127,9 +139,7 @@ End Class
End Sub
End Class
";
ResolveResult result = ResolveVB(program, "c", 4);
Assert.IsNotNull(result, "result");
Assert.IsTrue(result is LocalResolveResult, "result is LocalResolveResult");
ResolveResult result = ResolveVB<LocalResolveResult>(program, "c", 4);
Assert.AreEqual("System.String", result.ResolvedType.FullyQualifiedName);
}
@ -168,9 +178,7 @@ End Class @@ -168,9 +178,7 @@ End Class
End Sub
End Module
";
ResolveResult result = ResolveVB(program, "t", 4);
Assert.IsNotNull(result, "result");
Assert.IsTrue(result is LocalResolveResult, "result is LocalResolveResult");
ResolveResult result = ResolveVB<LocalResolveResult>(program, "t", 4);
ArrayList arr = result.GetCompletionData(lastPC);
Assert.IsNotNull(arr, "arr");
@ -203,8 +211,7 @@ class A { @@ -203,8 +211,7 @@ class A {
[Test]
public void PropertyTypeConflictTest()
{
ResolveResult result = Resolve(arrayListConflictProgram, "arrayList", 4);
Assert.IsTrue(result is MemberResolveResult);
ResolveResult result = Resolve<MemberResolveResult>(arrayListConflictProgram, "arrayList", 4);
Assert.AreEqual("System.Collections.ArrayList", result.ResolvedType.FullyQualifiedName);
}
@ -246,9 +253,7 @@ interface IInterface2 { @@ -246,9 +253,7 @@ interface IInterface2 {
void Method2();
}
";
ResolveResult result = Resolve(program, "a", 4);
Assert.IsNotNull(result, "result");
Assert.IsTrue(result is LocalResolveResult, "result is LocalResolveResult");
ResolveResult result = Resolve<LocalResolveResult>(program, "a", 4);
ArrayList arr = result.GetCompletionData(lastPC);
Assert.IsNotNull(arr, "arr");
bool m1 = false;
@ -306,9 +311,7 @@ interface IInterface2 { @@ -306,9 +311,7 @@ interface IInterface2 {
}
}
";
ResolveResult result = Resolve(program, "TargetMethod()", 3);
Assert.IsNotNull(result);
Assert.IsTrue(result is MemberResolveResult);
ResolveResult result = Resolve<MemberResolveResult>(program, "TargetMethod()", 3);
Assert.AreEqual("System.Int32", result.ResolvedType.FullyQualifiedName, "'TargetMethod()'");
}
@ -325,9 +328,7 @@ interface IInterface2 { @@ -325,9 +328,7 @@ interface IInterface2 {
}
}
";
ResolveResult result = Resolve(program, "this.TargetMethod()", 3);
Assert.IsNotNull(result);
Assert.IsTrue(result is MemberResolveResult);
ResolveResult result = Resolve<MemberResolveResult>(program, "this.TargetMethod()", 3);
Assert.AreEqual("System.Int32", result.ResolvedType.FullyQualifiedName, "'this.TargetMethod()'");
}
@ -343,10 +344,8 @@ class A { @@ -343,10 +344,8 @@ class A {
public event EventHandler TestEvent;
}
";
ResolveResult result = Resolve(program, "TestEvent(this, EventArgs.Empty)", 4);
Assert.IsNotNull(result);
Assert.IsTrue(result is MemberResolveResult);
Assert.AreEqual("A.TestEvent", (result as MemberResolveResult).ResolvedMember.FullyQualifiedName);
MemberResolveResult result = Resolve<MemberResolveResult>(program, "TestEvent(this, EventArgs.Empty)", 4);
Assert.AreEqual("A.TestEvent", result.ResolvedMember.FullyQualifiedName);
}
[Test]
@ -377,10 +376,8 @@ class A { @@ -377,10 +376,8 @@ class A {
public event EventHandler TestEvent;
}
";
ResolveResult result = Resolve(program, "this.TestEvent(this, EventArgs.Empty)", 4);
Assert.IsNotNull(result);
Assert.IsTrue(result is MemberResolveResult);
Assert.AreEqual("A.TestEvent", (result as MemberResolveResult).ResolvedMember.FullyQualifiedName);
MemberResolveResult result = Resolve<MemberResolveResult>(program, "this.TestEvent(this, EventArgs.Empty)", 4);
Assert.AreEqual("A.TestEvent", result.ResolvedMember.FullyQualifiedName);
}
[Test]
@ -394,14 +391,10 @@ class A { @@ -394,14 +391,10 @@ class A {
}
}
";
ResolveResult result = Resolve(program, "eh(this, new ResolveEventArgs())", 5);
Assert.IsNotNull(result);
Assert.IsTrue(result is LocalResolveResult);
ResolveResult result = Resolve<LocalResolveResult>(program, "eh(this, new ResolveEventArgs())", 5);
Assert.AreEqual("eh", (result as LocalResolveResult).Field.Name);
result = Resolve(program, "eh(this, new ResolveEventArgs()).GetType(\"bla\")", 5);
Assert.IsNotNull(result);
Assert.IsTrue(result is MemberResolveResult);
result = Resolve<MemberResolveResult>(program, "eh(this, new ResolveEventArgs()).GetType(\"bla\")", 5);
Assert.AreEqual("System.Reflection.Module.GetType", (result as MemberResolveResult).ResolvedMember.FullyQualifiedName);
}
@ -417,14 +410,10 @@ class A { @@ -417,14 +410,10 @@ class A {
double Multiply(double a, double b) { return a * b; }
}
";
ResolveResult result = Resolve(program, "Multiply(1, 1)", 3);
Assert.IsNotNull(result);
Assert.IsTrue(result is MemberResolveResult, "'Multiply(1,1)' is MemberResolveResult");
ResolveResult result = Resolve<MemberResolveResult>(program, "Multiply(1, 1)", 3);
Assert.AreEqual("System.Int32", result.ResolvedType.FullyQualifiedName, "'Multiply(1,1)'");
result = Resolve(program, "Multiply(1.0, 1.0)", 3);
Assert.IsNotNull(result);
Assert.IsTrue(result is MemberResolveResult, "'Multiply(1.0,1.0)' is MemberResolveResult");
result = Resolve<MemberResolveResult>(program, "Multiply(1.0, 1.0)", 3);
Assert.AreEqual("System.Double", result.ResolvedType.FullyQualifiedName, "'Multiply(1.0,1.0)'");
}
@ -442,21 +431,18 @@ class A { @@ -442,21 +431,18 @@ class A {
A(double dblVal) {}
}
";
ResolveResult result = Resolve(program, "new A()", 3);
Assert.IsNotNull(result);
IMethod m = (IMethod)((MemberResolveResult)result).ResolvedMember;
MemberResolveResult result = Resolve<MemberResolveResult>(program, "new A()", 3);
IMethod m = (IMethod)result.ResolvedMember;
Assert.IsFalse(m.IsStatic, "new A() is static");
Assert.AreEqual(0, m.Parameters.Count, "new A() parameter count");
result = Resolve(program, "new A(10)", 3);
Assert.IsNotNull(result);
m = (IMethod)((MemberResolveResult)result).ResolvedMember;
result = Resolve<MemberResolveResult>(program, "new A(10)", 3);
m = (IMethod)result.ResolvedMember;
Assert.AreEqual(1, m.Parameters.Count, "new A(10) parameter count");
Assert.AreEqual("intVal", m.Parameters[0].Name, "new A(10) parameter");
result = Resolve(program, "new A(11.1)", 3);
Assert.IsNotNull(result);
m = (IMethod)((MemberResolveResult)result).ResolvedMember;
result = Resolve<MemberResolveResult>(program, "new A(11.1)", 3);
m = (IMethod)result.ResolvedMember;
Assert.AreEqual(1, m.Parameters.Count, "new A(11.1) parameter count");
Assert.AreEqual("dblVal", m.Parameters[0].Name, "new A(11.1) parameter");
}
@ -470,12 +456,28 @@ class A { @@ -470,12 +456,28 @@ class A {
}
}
";
ResolveResult result = Resolve(program, "new A()", 3);
Assert.IsNotNull(result);
IMethod m = (IMethod)((MemberResolveResult)result).ResolvedMember;
MemberResolveResult result = Resolve<MemberResolveResult>(program, "new A()", 3);
IMethod m = (IMethod)result.ResolvedMember;
Assert.IsNotNull(m);
}
[Test]
public void ValueInsideSetterTest()
{
string program = @"class A {
public string Property {
set {
}
}
}
";
LocalResolveResult result = Resolve<LocalResolveResult>(program, "value", 4);
Assert.AreEqual("System.String", result.ResolvedType.FullyQualifiedName);
MemberResolveResult mrr = Resolve<MemberResolveResult>(program, "value.ToString()", 4);
Assert.AreEqual("System.String.ToString", mrr.ResolvedMember.FullyQualifiedName);
}
[Test]
public void AnonymousMethodParameters()
{
@ -487,9 +489,7 @@ class A { @@ -487,9 +489,7 @@ class A {
};
} }
";
ResolveResult result = Resolve(program, "e", 5);
Assert.IsNotNull(result);
Assert.IsTrue(result is LocalResolveResult);
ResolveResult result = Resolve<LocalResolveResult>(program, "e", 5);
Assert.AreEqual("System.EventArgs", result.ResolvedType.FullyQualifiedName);
}
@ -501,9 +501,7 @@ class A { @@ -501,9 +501,7 @@ class A {
} }
";
ResolveResult result = Resolve(program, "int", 3);
Assert.IsNotNull(result);
Assert.IsTrue(result is TypeResolveResult);
ResolveResult result = Resolve<TypeResolveResult>(program, "int", 3);
Assert.AreEqual("System.Int32", result.ResolvedType.FullyQualifiedName);
}
@ -516,9 +514,7 @@ class A { @@ -516,9 +514,7 @@ class A {
End Sub
End Class
";
ResolveResult result = ResolveVB(program, "inTeGer", 3);
Assert.IsNotNull(result);
Assert.IsTrue(result is TypeResolveResult);
ResolveResult result = ResolveVB<TypeResolveResult>(program, "inTeGer", 3);
Assert.AreEqual("System.Int32", result.ResolvedType.FullyQualifiedName);
}
@ -537,9 +533,7 @@ class B { @@ -537,9 +533,7 @@ class B {
}
";
ResolveResult result = Resolve(program, "int", 4);
Assert.IsNotNull(result);
Assert.IsTrue(result is TypeResolveResult);
ResolveResult result = Resolve<TypeResolveResult>(program, "int", 4);
Assert.AreEqual("System.Int32", result.ResolvedType.FullyQualifiedName);
}
@ -555,9 +549,7 @@ class B { @@ -555,9 +549,7 @@ class B {
}
";
ResolveResult result = Resolve(program, "Activator", 5);
Assert.IsNotNull(result);
Assert.IsTrue(result is TypeResolveResult);
ResolveResult result = Resolve<TypeResolveResult>(program, "Activator", 5);
Assert.AreEqual("System.Activator", result.ResolvedType.FullyQualifiedName);
}
@ -572,9 +564,7 @@ class B { @@ -572,9 +564,7 @@ class B {
}
";
ResolveResult result = Resolve(program, "System.Activator", 4);
Assert.IsNotNull(result);
Assert.IsTrue(result is TypeResolveResult);
ResolveResult result = Resolve<TypeResolveResult>(program, "System.Activator", 4);
Assert.AreEqual("System.Activator", result.ResolvedType.FullyQualifiedName);
}
@ -586,9 +576,7 @@ class A { @@ -586,9 +576,7 @@ class A {
}
";
ResolveResult result = Resolve(program, "Environment.SpecialFolder", 3);
Assert.IsNotNull(result);
Assert.IsTrue(result is TypeResolveResult);
ResolveResult result = Resolve<TypeResolveResult>(program, "Environment.SpecialFolder", 3);
Assert.AreEqual("System.Environment.SpecialFolder", result.ResolvedType.FullyQualifiedName);
}
#endregion
@ -610,9 +598,7 @@ class Activator { @@ -610,9 +598,7 @@ class Activator {
}
}
";
ResolveResult result = Resolve(program, "Activator", 4);
Assert.IsNotNull(result);
Assert.IsTrue(result is TypeResolveResult);
ResolveResult result = Resolve<TypeResolveResult>(program, "Activator", 4);
Assert.AreEqual("Testnamespace.Activator", result.ResolvedType.FullyQualifiedName);
}
@ -630,8 +616,7 @@ class TestClass { @@ -630,8 +616,7 @@ class TestClass {
";
ResolveResult result = Resolve(program, "Collections.ArrayList", 4);
Assert.IsNull(result, "Collections.ArrayList should not resolve");
LocalResolveResult local = Resolve(program, "a", 5) as LocalResolveResult;
Assert.IsNotNull(local, "a should resolve to a local variable");
LocalResolveResult local = Resolve<LocalResolveResult>(program, "a", 5);
Assert.IsNull(local.ResolvedType, "the full type should not be resolved");
}
@ -647,11 +632,9 @@ Class TestClass @@ -647,11 +632,9 @@ Class TestClass
End Sub
End Class
";
TypeResolveResult type = ResolveVB(program, "Collections.ArrayList", 4) as TypeResolveResult;
Assert.IsNotNull(type, "Collections.ArrayList should resolve to a type");
TypeResolveResult type = ResolveVB<TypeResolveResult>(program, "Collections.ArrayList", 4);
Assert.AreEqual("System.Collections.ArrayList", type.ResolvedClass.FullyQualifiedName, "TypeResolveResult");
LocalResolveResult local = ResolveVB(program, "a", 5) as LocalResolveResult;
Assert.IsNotNull(local, "a should resolve to a local variable");
LocalResolveResult local = ResolveVB<LocalResolveResult>(program, "a", 5);
Assert.AreEqual("System.Collections.ArrayList", local.ResolvedType.FullyQualifiedName,
"the full type should be resolved");
}
@ -667,11 +650,10 @@ class TestClass { @@ -667,11 +650,10 @@ class TestClass {
}
}
";
TypeResolveResult type = Resolve(program, "COL.ArrayList", 4) as TypeResolveResult;
TypeResolveResult type = Resolve<TypeResolveResult>(program, "COL.ArrayList", 4);
Assert.IsNotNull(type, "COL.ArrayList should resolve to a type");
Assert.AreEqual("System.Collections.ArrayList", type.ResolvedClass.FullyQualifiedName, "TypeResolveResult");
LocalResolveResult local = Resolve(program, "a", 5) as LocalResolveResult;
Assert.IsNotNull(local, "a should resolve to a local variable");
LocalResolveResult local = Resolve<LocalResolveResult>(program, "a", 5);
Assert.AreEqual("System.Collections.ArrayList", local.ResolvedType.FullyQualifiedName,
"the full type should be resolved");
}
@ -681,9 +663,9 @@ class TestClass { @@ -681,9 +663,9 @@ class TestClass {
{
NamespaceResolveResult ns;
string program = "using COL = System.Collections;\r\nclass A {\r\n\r\n}\r\n";
ns = Resolve(program, "COL", 3) as NamespaceResolveResult;
ns = Resolve<NamespaceResolveResult>(program, "COL", 3);
Assert.AreEqual("System.Collections", ns.Name, "COL");
ns = Resolve(program, "COL.Generic", 3) as NamespaceResolveResult;
ns = Resolve<NamespaceResolveResult>(program, "COL.Generic", 3);
Assert.AreEqual("System.Collections.Generic", ns.Name, "COL.Generic");
}
@ -698,13 +680,43 @@ class TestClass { @@ -698,13 +680,43 @@ class TestClass {
}
}
";
TypeResolveResult rr = Resolve(program, "COL", 4) as TypeResolveResult;
TypeResolveResult rr = Resolve<TypeResolveResult>(program, "COL", 4);
Assert.AreEqual("System.Collections.ArrayList", rr.ResolvedClass.FullyQualifiedName, "COL");
LocalResolveResult lr = Resolve(program, "a", 5) as LocalResolveResult;
LocalResolveResult lr = Resolve<LocalResolveResult>(program, "a", 5);
Assert.AreEqual("System.Collections.ArrayList", lr.ResolvedType.FullyQualifiedName, "a");
}
#endregion
#region Import class tests
const string importClassProgram = @"Imports System
Imports System.Math
Class TestClass
Sub Main()
End Sub
End Class
";
[Test]
public void TestImportClassMember()
{
MemberResolveResult mrr = ResolveVB<MemberResolveResult>(importClassProgram, "Pi", 6);
Assert.AreEqual("System.Math.PI", mrr.ResolvedMember.FullyQualifiedName);
mrr = ResolveVB<MemberResolveResult>(importClassProgram, "Pi.ToString()", 6);
Assert.AreEqual("System.Double.ToString", mrr.ResolvedMember.FullyQualifiedName);
}
[Test]
public void TestImportClassMethod()
{
MemberResolveResult mrr = ResolveVB<MemberResolveResult>(importClassProgram, "Sin(3)", 6);
Assert.AreEqual("System.Math.Sin", mrr.ResolvedMember.FullyQualifiedName);
mrr = ResolveVB<MemberResolveResult>(importClassProgram, "Sin(3).ToString()", 6);
Assert.AreEqual("System.Double.ToString", mrr.ResolvedMember.FullyQualifiedName);
}
#endregion
#region Visibility tests
[Test]
public void PrivateMemberTest()

8
src/SharpDevelop.WithTests.sln

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# SharpDevelop 2.0.0.348
# SharpDevelop 2.0.0.352
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
@ -8,8 +8,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display @@ -8,8 +8,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "AddIns\DisplayBindings\XmlEditor\Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{6B717BD1-CD5E-498C-A42E-9E6A4584DC48}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormDesigner", "AddIns\DisplayBindings\FormDesigner\Project\FormDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}"
@ -30,8 +28,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{CE5B42B7-6 @@ -30,8 +28,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{CE5B42B7-6
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MbUnitPad", "AddIns\Misc\MbUnitPad\Project\MbUnitPad.csproj", "{B1CE28A0-04E8-490D-8256-E0C4D52C93C8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlHelp2", "AddIns\Misc\HtmlHelp2\Project\HtmlHelp2.csproj", "{918487B7-2153-4618-BBB3-344DBDDF2A2A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "AddIns\Misc\SubversionAddIn\Project\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}"
@ -175,7 +171,6 @@ Global @@ -175,7 +171,6 @@ Global
{CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{6B717BD1-CD5E-498C-A42E-9E6A4584DC48} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{FC0FE702-A87D-4D70-A9B6-1ECCD611125F} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{BF38FB72-B380-4196-AF8C-95749D726C61} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{6e59af58-f635-459a-9a35-c9ac41c00339} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
@ -187,7 +182,6 @@ Global @@ -187,7 +182,6 @@ Global
{6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{918487B7-2153-4618-BBB3-344DBDDF2A2A} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{B1CE28A0-04E8-490D-8256-E0C4D52C93C8} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{B08385CD-F0CC-488C-B4F4-EEB34B6D2688} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}

2
src/Tools/SVNChangeLogToXml/Main.cs

@ -53,7 +53,7 @@ class MainClass @@ -53,7 +53,7 @@ class MainClass
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("log");
client.Log(new string[] {".."}, Revision.Head, Revision.FromNumber(2), false, false,
client.Log(new string[] {".."}, Revision.Base, Revision.FromNumber(2), false, false,
delegate(LogMessage message) {
xmlWriter.WriteStartElement("logentry");
xmlWriter.WriteAttributeString("revision", message.Revision.ToString(System.Globalization.CultureInfo.InvariantCulture));

14
src/publish.bat

@ -9,10 +9,10 @@ pushd ..\setup @@ -9,10 +9,10 @@ pushd ..\setup
call buildSetup.bat
@IF %ERRORLEVEL% NEQ 0 EXIT
popd
echo.
echo.
echo.
echo Publish.bat completed successfully.
echo In the directory SharpDevelop\setup, you will find Setup.exe.
echo.
pause
@echo.
@echo.
@echo.
@echo Publish.bat completed successfully.
@echo In the directory SharpDevelop\setup, you will find Setup.exe.
@echo.
@pause
Loading…
Cancel
Save