diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin
index 3410dde9fd..5256e29e13 100644
--- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin
@@ -44,6 +44,10 @@
class = "Grunwald.BooBinding.CodeCompletion.BooParser"/>
+
+
+
+
diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj
index 885ed9e79f..018c3b604c 100644
--- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj
@@ -84,6 +84,7 @@
+
diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs
index f4802feabb..6d4f5ebe2a 100644
--- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs
@@ -429,6 +429,19 @@ namespace Grunwald.BooBinding.CodeCompletion
}
#endregion
+ public override void OnGeneratorExpression(GeneratorExpression node)
+ {
+ ClearResult();
+ node.Expression.Accept(this);
+
+ if (resolveResult != null) {
+ IClass enumerable = ProjectContentRegistry.Mscorlib.GetClass("System.Collections.Generic.IEnumerable", 1);
+ MakeResult(new ConstructedReturnType(enumerable.DefaultReturnType, new IReturnType[] { resolveResult.ResolvedType }));
+ } else {
+ MakeResult(new GetClassReturnType(projectContent, "System.Collections.IEnumerable", 0));
+ }
+ }
+
public override void OnBinaryExpression(BinaryExpression node)
{
switch (node.Operator) {
diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/VariableLookupVisitor.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/VariableLookupVisitor.cs
index 3b1f71d9b9..29d52f3f98 100644
--- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/VariableLookupVisitor.cs
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/VariableLookupVisitor.cs
@@ -108,6 +108,23 @@ namespace Grunwald.BooBinding.CodeCompletion
InferResult(node.Iterator, node.Declarations[0].Name, node.LexicalInfo, true);
}
}
+
+ public override void OnGeneratorExpression(GeneratorExpression node)
+ {
+ if (node.LexicalInfo.Line != resolver.CaretLine)
+ return;
+ LoggingService.Warn("GeneratorExpression: " + node.EndSourceLocation.Line);
+ if (node.Declarations.Count != 1) {
+ // TODO: support unpacking
+ base.OnGeneratorExpression(node);
+ return;
+ }
+ if (node.Declarations[0].Name == lookFor) {
+ Visit(node.Declarations[0]);
+ InferResult(node.Iterator, node.Declarations[0].Name, node.LexicalInfo, true);
+ }
+ base.OnGeneratorExpression(node);
+ }
}
///
diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/FormattingStrategy.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/FormattingStrategy.cs
new file mode 100644
index 0000000000..1b2071a739
--- /dev/null
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/FormattingStrategy.cs
@@ -0,0 +1,40 @@
+/*
+ * Created by SharpDevelop.
+ * User: Daniel Grunwald
+ * Date: 22.10.2005
+ * Time: 21:51
+ */
+
+using System;
+using ICSharpCode.TextEditor;
+using ICSharpCode.TextEditor.Document;
+using ICSharpCode.TextEditor.Actions;
+
+namespace Grunwald.BooBinding
+{
+ public class BooFormattingStrategy : DefaultFormattingStrategy
+ {
+ protected override int SmartIndentLine(TextArea area, int line)
+ {
+ IDocument document = area.Document;
+ LineSegment previousLine = document.GetLineSegment(line-1);
+
+ if (document.GetText(previousLine).EndsWith(":")) {
+ LineSegment currentLine = document.GetLineSegment(line);
+ string indentation = GetIndentation(area, line-1);
+ indentation += Tab.GetIndentationString(document);
+ document.Replace(currentLine.Offset,
+ currentLine.Length,
+ indentation + document.GetText(currentLine));
+ return indentation.Length;
+ }
+
+ return base.SmartIndentLine(area, line);
+ }
+
+ // Deactivate indenting multiple lines with Ctrl-I
+ public override void IndentLines(TextArea textArea, int begin, int end)
+ {
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Dom/MemberLookupHelper.cs b/src/Main/Base/Project/Src/Dom/MemberLookupHelper.cs
index 8edb890c54..ca858dae5f 100644
--- a/src/Main/Base/Project/Src/Dom/MemberLookupHelper.cs
+++ b/src/Main/Base/Project/Src/Dom/MemberLookupHelper.cs
@@ -692,6 +692,11 @@ namespace ICSharpCode.SharpDevelop.Dom
{
IClass c = returnType.GetUnderlyingClass();
if (c == null) return null;
+ if (baseClass.CompareTo(c) == 0) {
+ if (returnType.TypeArguments == null || baseClassTypeParameterIndex >= returnType.TypeArguments.Count)
+ return null;
+ return returnType.TypeArguments[baseClassTypeParameterIndex];
+ }
foreach (IReturnType baseType in c.BaseTypes) {
if (baseClass.CompareTo(baseType.GetUnderlyingClass()) == 0) {
if (baseType.TypeArguments == null || baseClassTypeParameterIndex >= baseType.TypeArguments.Count)
diff --git a/src/Main/Base/Test/MemberLookupHelperTests.cs b/src/Main/Base/Test/MemberLookupHelperTests.cs
index 8def52249a..9a1c0aa26c 100644
--- a/src/Main/Base/Test/MemberLookupHelperTests.cs
+++ b/src/Main/Base/Test/MemberLookupHelperTests.cs
@@ -40,5 +40,14 @@ namespace ICSharpCode.SharpDevelop.Tests
Assert.AreEqual("System.String", res.TypeArguments[0].FullyQualifiedName);
Assert.AreEqual("System.Int32", res.TypeArguments[1].FullyQualifiedName);
}
+
+ [Test]
+ public void TypeParameterPassedToBaseClassSameClass()
+ {
+ IReturnType[] stringArr = { ReflectionReturnType.String };
+ IReturnType rrt = new ConstructedReturnType(EnumerableClass.DefaultReturnType, stringArr);
+ IReturnType res = MemberLookupHelper.GetTypeParameterPassedToBaseClass(rrt, EnumerableClass, 0);
+ Assert.AreEqual("System.String", res.FullyQualifiedName);
+ }
}
}