Browse Source

Infer array literal context from context in FormsDesigner CodeDom converter.

Updated Boo.Lang.CodeDom.dll -> fixes generation of array literals.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1128 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
1898a796a3
  1. 3
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs
  2. 2
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerLoader.cs
  3. 23
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/CodeDomVisitor.cs

3
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs

@ -275,6 +275,8 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -275,6 +275,8 @@ namespace Grunwald.BooBinding.CodeCompletion
MakeTypeResult(c);
return;
}
ClearResult();
// go through the members of the modules in that namespace
foreach (object o in projectContent.GetNamespaceContents(namespaceName)) {
IMember member = o as IMember;
@ -296,6 +298,7 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -296,6 +298,7 @@ namespace Grunwald.BooBinding.CodeCompletion
bool ResolveMember(IReturnType type, string memberName)
{
ClearResult();
if (type == null)
return false;
bool isClassInInheritanceTree = false;

2
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerLoader.cs

@ -183,7 +183,7 @@ namespace Grunwald.BooBinding.Designer @@ -183,7 +183,7 @@ namespace Grunwald.BooBinding.Designer
BooParsingStep step = new BooParsingStep();
StringBuilder errors = new StringBuilder();
Module module = BooParser.ParseModule(4, new CompileUnit(), textEditorControl.FileName,
Module module = BooParser.ParseModule(4, new CompileUnit(), fileName,
new StringReader(fileContent),
delegate(antlr.RecognitionException e) {
errors.AppendLine(e.ToString());

23
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/CodeDomVisitor.cs

@ -385,7 +385,9 @@ namespace Grunwald.BooBinding.Designer @@ -385,7 +385,9 @@ namespace Grunwald.BooBinding.Designer
foreach (IMethod me in rt.GetMethods()) {
if (me.IsStatic == isStatic && me.Name == name) {
_fieldReferenceType = me.ReturnType;
return new CodeMethodReferenceExpression(target, name);
CodeMethodReferenceExpression cmre = new CodeMethodReferenceExpression(target, name);
cmre.UserData["method"] = me;
return cmre;
}
}
foreach (IField field in rt.GetFields()) {
@ -421,12 +423,14 @@ namespace Grunwald.BooBinding.Designer @@ -421,12 +423,14 @@ namespace Grunwald.BooBinding.Designer
} else if (_expression is CodeMethodReferenceExpression) {
cmie = new CodeMethodInvokeExpression((CodeMethodReferenceExpression)_expression);
ConvertExpressions(cmie.Parameters, node.Arguments);
FixArrayArguments(cmie);
_expression = cmie;
} else if (_expression is CodeFieldReferenceExpression) {
// when a type is unknown, a MemberReferenceExpression is translated into a CodeFieldReferenceExpression
CodeFieldReferenceExpression cfre = (CodeFieldReferenceExpression)_expression;
cmie = new CodeMethodInvokeExpression(cfre.TargetObject, cfre.FieldName);
ConvertExpressions(cmie.Parameters, node.Arguments);
FixArrayArguments(cmie);
_expression = cmie;
} else {
_expression = null;
@ -434,6 +438,23 @@ namespace Grunwald.BooBinding.Designer @@ -434,6 +438,23 @@ namespace Grunwald.BooBinding.Designer
}
}
/// <summary>
/// Fixes the type of array literals used as arguments to the method.
/// </summary>
void FixArrayArguments(CodeMethodInvokeExpression cmie)
{
IMethod m = cmie.Method.UserData["method"] as IMethod;
if (m != null) {
int count = Math.Min(m.Parameters.Count, cmie.Parameters.Count);
for (int i = 0; i < count; i++) {
CodeArrayCreateExpression cace = cmie.Parameters[i] as CodeArrayCreateExpression;
if (cace != null) {
cace.CreateType = new CodeTypeReference(m.Parameters[i].ReturnType.FullyQualifiedName);
}
}
}
}
/// <summary>Converts a list of expressions to CodeDom expressions.</summary>
void ConvertExpressions(CodeExpressionCollection args, ExpressionCollection expressions)
{

Loading…
Cancel
Save