[mono/monodevelop] 84a48e91: [CodeGeneration] Fixed stetic code generation of unresolved members.

6 views
Skip to first unread message

Mike Krüger (mkrueger@xamarin.com)

unread,
May 8, 2012, 5:55:10 AM5/8/12
to Mono Patches List

Branch: refs/heads/master
Home: https://github.com/mono/monodevelop
Compare: https://github.com/mono/monodevelop/compare/b7bde22...84a48e9

Commit: 84a48e9130a7bf6421e65568495139005c424a0b
Author: Mike Krüger <mkru...@xamarin.com> (mkrueger)
Date: 2012-05-08 09:53:35 GMT
URL: https://github.com/mono/monodevelop/commit/84a48e9130a7bf6421e65568495139005c424a0b

[CodeGeneration] Fixed stetic code generation of unresolved members.

Changed paths:
M main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/CSharpCodeGenerator.cs
M main/src/addins/MonoDevelop.GtkCore/MonoDevelop.GtkCore.GuiBuilder/CodeBinder.cs
M main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/CodeGenerationService.cs

Modified: main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/CSharpCodeGenerator.cs
===================================================================
@@ -111,14 +111,23 @@ public override string WrapInRegions (string regionName, string text)
ImplementingType = implementingType,
Part = part
};
- if (member is IMethod)
- return GenerateCode ((IMethod)member, options);
- if (member is IProperty)
- return GenerateCode ((IProperty)member, options);
- if (member is IField)
- return GenerateCode ((IField)member, options);
- if (member is IEvent)
- return GenerateCode ((IEvent)member, options);
+ ITypeResolveContext ctx;
+
+ var doc = IdeApp.Workbench.GetDocument (implementingType.Region.FileName);
+ if (doc != null) {
+ ctx = doc.ParsedDocument.GetTypeResolveContext (doc.Compilation, implementingType.Region.Begin);
+ } else {
+ ctx = new CSharpTypeResolveContext (implementingType.Compilation.MainAssembly, null, implementingType, null);
+ }
+
+ if (member is IUnresolvedMethod)
+ return GenerateCode ((IMethod) ((IUnresolvedMethod)member).CreateResolved (ctx), options);
+ if (member is IUnresolvedProperty)
+ return GenerateCode ((IProperty) ((IUnresolvedProperty)member).CreateResolved (ctx), options);
+ if (member is IUnresolvedField)
+ return GenerateCode ((IField) ((IUnresolvedField)member).CreateResolved (ctx), options);
+ if (member is IUnresolvedEvent)
+ return GenerateCode ((IEvent) ((IUnresolvedEvent)member).CreateResolved (ctx), options);
throw new NotSupportedException ("member " + member + " is not supported.");
}

@@ -224,7 +233,7 @@ void AppendReturnType (StringBuilder result, CodeGenerationOptions options, ITyp
var file = pf as CSharpParsedFile;
var resolved = type;
if (resolved.Kind == TypeKind.Unknown) {
- result.Append (type.ToString ());
+ result.Append (type.FullName);
return;
}
var def = type.GetDefinition ();

Modified: main/src/addins/MonoDevelop.GtkCore/MonoDevelop.GtkCore.GuiBuilder/CodeBinder.cs
===================================================================
@@ -174,10 +174,10 @@ public void BindSignal (Stetic.Signal signal)

var met = new DefaultUnresolvedMethod (cls, signal.Handler) {
Accessibility = Accessibility.Protected,
- ReturnType = new DefaultUnresolvedTypeDefinition (signal.SignalDescriptor.HandlerReturnTypeName)
+ ReturnType = ReflectionHelper.ParseReflectionName (signal.SignalDescriptor.HandlerReturnTypeName)
};
foreach (Stetic.ParameterDescriptor pinfo in signal.SignalDescriptor.HandlerParameters)
- met.Parameters.Add (new DefaultUnresolvedParameter (new DefaultUnresolvedTypeDefinition (pinfo.TypeName), pinfo.Name));
+ met.Parameters.Add (new DefaultUnresolvedParameter (ReflectionHelper.ParseReflectionName (pinfo.TypeName), pinfo.Name));
var resolvedCls = cls.Resolve (cls.ParsedFile.GetTypeResolveContext (TypeSystemService.GetCompilation (project), cls.Region.Begin)).GetDefinition ();
CodeGenerationService.AddNewMember (resolvedCls, cls, met);
}
@@ -223,7 +223,7 @@ public void BindToField (Stetic.Component obj)
IUnresolvedField GetFieldCode (IUnresolvedTypeDefinition cls, Stetic.Component obj, string name)
{
return new DefaultUnresolvedField (cls, name) {
- ReturnType = new DefaultUnresolvedTypeDefinition (obj.Type.ClassName),
+ ReturnType = ReflectionHelper.ParseReflectionName (obj.Type.ClassName),
Accessibility = Accessibility.Protected
};
}

Modified: main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/CodeGenerationService.cs
===================================================================
@@ -357,38 +357,34 @@ static InsertionPoint GetSuitableInsertionPoint (IEnumerable<InsertionPoint> poi

static InsertionPoint GetNewFieldPosition (IEnumerable<InsertionPoint> points, IUnresolvedTypeDefinition cls)
{
- throw new NotImplementedException ();
-// if (cls.GetDefinition ().Fields.Count == 0)
-// return points.FirstOrDefault ();
-// var lastField = cls.Fields.Last ();
-// return points.FirstOrDefault (p => p.Location.Convert () > lastField.Location);
+ if (!cls.Fields.Any ())
+ return points.FirstOrDefault ();
+ var lastField = cls.Fields.Last ();
+ return points.FirstOrDefault (p => p.Location.Convert () > lastField.Region.Begin);
}

static InsertionPoint GetNewMethodPosition (IEnumerable<InsertionPoint> points, IUnresolvedTypeDefinition cls)
{
- throw new NotImplementedException ();
-// if (cls.MethodCount + cls.ConstructorCount == 0)
-// return GetNewPropertyPosition (points, cls);
-// var lastMember = cls.Members.Last ();
-// return points.FirstOrDefault (p => p.Location.Convert () > lastMember.Location);
+ if (!cls.Methods.Any ())
+ return GetNewPropertyPosition (points, cls);
+ var lastMember = cls.Members.Last ();
+ return points.FirstOrDefault (p => p.Location.Convert () > lastMember.Region.Begin);
}

static InsertionPoint GetNewPropertyPosition (IEnumerable<InsertionPoint> points, IUnresolvedTypeDefinition cls)
{
- throw new NotImplementedException ();
-// if (cls.PropertyCount == 0)
-// IProperty lastProperty = cls.Properties.Last ();
-// return GetNewFieldPosition (points, cls);
-// return points.FirstOrDefault (p => p.Location.Convert () > lastProperty.Location);
+ if (!cls.Properties.Any ())
+ return GetNewFieldPosition (points, cls);
+ var lastProperty = cls.Properties.Last ();
+ return points.FirstOrDefault (p => p.Location.Convert () > lastProperty.Region.Begin);
}

static InsertionPoint GetNewEventPosition (IEnumerable<InsertionPoint> points, IUnresolvedTypeDefinition cls)
{
- throw new NotImplementedException ();
-// if (cls.EventCount == 0)
-// return GetNewMethodPosition (points, cls);
-// IEvent lastEvent = cls.Events.Last ();
-// return points.FirstOrDefault (p => p.Location.Convert () > lastEvent.Location);
+ if (!cls.Events.Any ())
+ return GetNewMethodPosition (points, cls);
+ var lastEvent = cls.Events.Last ();
+ return points.FirstOrDefault (p => p.Location.Convert () > lastEvent.Region.Begin);
}
#endregion

Reply all
Reply to author
Forward
0 new messages