Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@novell.com>2011-06-16 21:35:14 +0400
committerMike Krüger <mkrueger@novell.com>2011-06-17 17:04:20 +0400
commit59ba94055eaf9dd53a26b5f4ca1c20cfe8cb3b5e (patch)
treee727589b6d331b01817fac99b3111b041b0664ac /main/src/addins/MonoDevelop.Moonlight
parent74a5706749742fbd5889675e62746e82ee27e4f2 (diff)
Started type system conversion. (still some todos left)
Diffstat (limited to 'main/src/addins/MonoDevelop.Moonlight')
-rw-r--r--main/src/addins/MonoDevelop.Moonlight/Makefile.am1
-rw-r--r--main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight.Gui/MoonlightOptionsPanelWidget.cs10
-rw-r--r--main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight.csproj4
-rw-r--r--main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/MoonlightEditorExtension.cs85
-rw-r--r--main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/MoonlightParser.cs106
-rw-r--r--main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/XamlG.cs1
6 files changed, 101 insertions, 106 deletions
diff --git a/main/src/addins/MonoDevelop.Moonlight/Makefile.am b/main/src/addins/MonoDevelop.Moonlight/Makefile.am
index 3d9c886ea8..081c83253a 100644
--- a/main/src/addins/MonoDevelop.Moonlight/Makefile.am
+++ b/main/src/addins/MonoDevelop.Moonlight/Makefile.am
@@ -6,6 +6,7 @@ DEPS = \
$(top_builddir)/build/AddIns/MonoDevelop.Deployment/MonoDevelop.Deployment.dll \
$(top_builddir)/build/AddIns/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.dll \
$(top_builddir)/build/AddIns/MonoDevelop.XmlEditor/MonoDevelop.XmlEditor.dll \
+ $(top_builddir)/build/bin/ICSharpCode.NRefactory.dll \
$(top_builddir)/build/bin/MonoDevelop.Core.dll \
$(top_builddir)/build/bin/MonoDevelop.Ide.dll
diff --git a/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight.Gui/MoonlightOptionsPanelWidget.cs b/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight.Gui/MoonlightOptionsPanelWidget.cs
index f4f56ec37e..dacfb1b492 100644
--- a/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight.Gui/MoonlightOptionsPanelWidget.cs
+++ b/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight.Gui/MoonlightOptionsPanelWidget.cs
@@ -27,8 +27,8 @@
//
using System;
-using MonoDevelop.Projects.Dom;
-using MonoDevelop.Projects.Dom.Parser;
+using ICSharpCode.NRefactory.TypeSystem;
+using MonoDevelop.TypeSystem;
namespace MonoDevelop.Moonlight.Gui
{
@@ -94,11 +94,11 @@ namespace MonoDevelop.Moonlight.Gui
return;
classesFilled = true;
try {
- ProjectDom dom = ProjectDomService.GetProjectDom (project);
- IType appType = dom.GetType ("System.Windows.Application", true);
+ var dom = TypeSystemService.GetContext (project);
+ IType appType = dom.GetClass ("System.Windows", "Application", 0, StringComparer.Ordinal);
if (appType == null)
return;
- foreach (IType type in dom.GetSubclasses (appType, false))
+ foreach (IType type in appType.GetAllBaseTypes (dom))
classListStore.AppendValues (type.FullName);
} catch (InvalidOperationException) {
// Project not found in parser database
diff --git a/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight.csproj b/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight.csproj
index 86a6ac4610..1a65811a47 100644
--- a/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight.csproj
+++ b/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight.csproj
@@ -90,6 +90,10 @@
<Name>MonoDevelop.Deployment</Name>
<Private>False</Private>
</ProjectReference>
+ <ProjectReference Include="..\..\..\contrib\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj">
+ <Project>{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}</Project>
+ <Name>ICSharpCode.NRefactory</Name>
+ </ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="gtk-gui\gui.stetic">
diff --git a/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/MoonlightEditorExtension.cs b/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/MoonlightEditorExtension.cs
index a2519e165c..c5a24b54b5 100644
--- a/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/MoonlightEditorExtension.cs
+++ b/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/MoonlightEditorExtension.cs
@@ -29,10 +29,10 @@
using System;
using System.Collections.Generic;
-using MonoDevelop.Projects.Dom;
-using MonoDevelop.Projects.Dom.Parser;
using MonoDevelop.Ide.CodeCompletion;
-using MonoDevelop.Xml.StateEngine;
+using MonoDevelop.Xml.StateEngine;
+using ICSharpCode.NRefactory.TypeSystem;
+using MonoDevelop.TypeSystem;
namespace MonoDevelop.Moonlight
{
@@ -47,47 +47,42 @@ namespace MonoDevelop.Moonlight
#region Code completion
-// static ProjectDom GetMLDom (MoonlightProject project)
+// static ITypeResolveContext GetMLDom (MoonlightProject project)
// {
-// return ProjectDomService.GetAssemblyDom (
+// return TypeSystemService.GetAssemblyDom (
// MonoDevelop.Core.Runtime.SystemAssemblyService.GetAssemblyNameForVersion (
// "System.Windows", GetProjectTargetFramework (project)));
// }
- public static IEnumerable<IType> ListControlClasses (ProjectDom database, string namespac)
+ public static IEnumerable<IType> ListControlClasses (ITypeResolveContext database, string namespac)
{
if (database == null)
yield break;
- DomReturnType swd = new DomReturnType ("System.Windows.DependencyObject");
+ var swd = database.GetClass ("System.Windows", "DependencyObject", 0, StringComparer.Ordinal);
//return classes if they derive from system.web.ui.control
- foreach (IMember mem in database.GetNamespaceContents (namespac, true, true)) {
- IType cls = mem as IType;
- if (cls != null && !cls.IsAbstract && cls.IsPublic && cls.IsBaseType (swd))
+ foreach (IType cls in database.GetClasses (namespac, StringComparer.Ordinal)) {
+ if (cls != null && !cls.GetDefinition ().IsAbstract && cls.GetDefinition ().IsPublic && cls.IsBaseType (database, swd))
yield return cls;
}
}
- static IEnumerable<MonoDevelop.Projects.Dom.IProperty> GetAllProperties (
- MonoDevelop.Projects.Dom.Parser.ProjectDom projectDatabase,
- MonoDevelop.Projects.Dom.IType cls)
+ static IEnumerable<IProperty> GetAllProperties (
+ ITypeResolveContext projectDatabase,
+ IType cls)
{
- foreach (MonoDevelop.Projects.Dom.IType type in projectDatabase.GetInheritanceTree (cls))
- foreach (MonoDevelop.Projects.Dom.IProperty prop in type.Properties)
- yield return prop;
+ return cls.GetProperties (projectDatabase);
}
- static IEnumerable<MonoDevelop.Projects.Dom.IEvent> GetAllEvents (
- MonoDevelop.Projects.Dom.Parser.ProjectDom projectDatabase,
- MonoDevelop.Projects.Dom.IType cls)
+ static IEnumerable<IEvent> GetAllEvents (
+ ITypeResolveContext projectDatabase,
+ IType cls)
{
- foreach (MonoDevelop.Projects.Dom.IType type in projectDatabase.GetInheritanceTree (cls))
- foreach (MonoDevelop.Projects.Dom.IEvent ev in type.Events)
- yield return ev;
+ return cls.GetEvents (projectDatabase);
}
- static IEnumerable<T> GetUniqueMembers<T> (IEnumerable<T> members) where T : MonoDevelop.Projects.Dom.IMember
+ static IEnumerable<T> GetUniqueMembers<T> (IEnumerable<T> members) where T : IMember
{
Dictionary <string, bool> existingItems = new Dictionary<string,bool> ();
foreach (T item in members) {
@@ -98,35 +93,35 @@ namespace MonoDevelop.Moonlight
}
}
- static void AddControlMembers (CompletionDataList list, ProjectDom database, IType controlClass,
+ static void AddControlMembers (CompletionDataList list, ITypeResolveContext database, IType controlClass,
Dictionary<string, string> existingAtts)
{
//add atts only if they're not already in the tag
- foreach (IProperty prop in GetUniqueMembers<MonoDevelop.Projects.Dom.IProperty> (GetAllProperties (database, controlClass)))
+ foreach (IProperty prop in GetUniqueMembers<IProperty> (GetAllProperties (database, controlClass)))
if (prop.IsPublic && (existingAtts == null || !existingAtts.ContainsKey (prop.Name)))
- list.Add (prop.Name, prop.StockIcon, prop.Documentation);
+ list.Add (prop.Name, prop.GetStockIcon (), prop.Documentation);
//similarly add events
- foreach (MonoDevelop.Projects.Dom.IEvent eve
- in GetUniqueMembers<MonoDevelop.Projects.Dom.IEvent> (GetAllEvents (database, controlClass))) {
+ foreach (var eve
+ in GetUniqueMembers<IEvent> (GetAllEvents (database, controlClass))) {
string eveName = eve.Name;
if (eve.IsPublic && (existingAtts == null || !existingAtts.ContainsKey (eveName)))
- list.Add (eveName, eve.StockIcon, eve.Documentation);
+ list.Add (eveName, eve.GetStockIcon (), eve.Documentation);
}
}
- ProjectDom GetDb ()
+ ITypeResolveContext GetDb ()
{
- return Document.Dom;
+ return Document.TypeResolveContext;
}
- void GetType (IAttributedXObject attributedOb, Action<IType, ProjectDom> action)
+ void GetType (IAttributedXObject attributedOb, Action<IType, ITypeResolveContext> action)
{
- ProjectDom database = GetDb ();
+ ITypeResolveContext database = GetDb ();
if (database == null)
return;
foreach (string namespc in namespaces) {
- IType controlType = database.GetType (namespc + "." + attributedOb.Name.Name);
+ IType controlType = database.GetClass (namespc, attributedOb.Name.Name, 0, StringComparer.Ordinal);
if (controlType != null) {
action (controlType, database);
break;
@@ -140,17 +135,17 @@ namespace MonoDevelop.Moonlight
protected override void GetElementCompletions(CompletionDataList list)
{
base.GetElementCompletions (list);
- ProjectDom database = GetDb ();
+ ITypeResolveContext database = GetDb ();
if (database == null)
return;
- IType type = database.GetType ("System.Windows.DependencyObject");
+ IType type = database.GetClass ("System.Windows", "DependencyObject", 0, StringComparer.Ordinal);
if (type == null)
return;
foreach (string namespc in namespaces)
foreach (IType t in ListControlClasses (database, namespc))
- list.Add (t.Name, Gtk.Stock.GoForward, t.Documentation);
+ list.Add (t.Name, Gtk.Stock.GoForward, t.GetDocumentation ());
}
// static MonoDevelop.Core.TargetFramework GetProjectTargetFramework (MoonlightProject project)
@@ -165,7 +160,7 @@ namespace MonoDevelop.Moonlight
if (!existingAtts.ContainsKey ("x:Name"))
list.Add ("x:Name");
- GetType (attributedOb, delegate (IType type, ProjectDom dom) {
+ GetType (attributedOb, delegate (IType type, ITypeResolveContext dom) {
AddControlMembers (list, dom, type, existingAtts);
});
return list.Count > 0? list : null;
@@ -174,21 +169,21 @@ namespace MonoDevelop.Moonlight
protected override CompletionDataList GetAttributeValueCompletions (IAttributedXObject attributedOb, XAttribute att)
{
var list = base.GetAttributeValueCompletions (attributedOb, att) ?? new CompletionDataList ();
-
- GetType (attributedOb, delegate (IType type, ProjectDom dom) {
+ ITypeResolveContext ctx = document.TypeResolveContext;
+ GetType (attributedOb, delegate (IType type, ITypeResolveContext dom) {
foreach (IProperty prop in GetAllProperties (dom, type)) {
if (prop.Name != att.Name.FullName)
continue;
//boolean completion
- if (prop.ReturnType.FullName == "System.Boolean") {
+ if (prop.ReturnType.Resolve (ctx).Equals (ctx.GetClass (typeof (bool)))) {
list.Add ("true", "md-literal");
list.Add ("false", "md-literal");
return;
}
//color completion
- if (prop.ReturnType.FullName == "System.Windows.Media.Color") {
+ if (prop.ReturnType.Resolve (ctx).ReflectionName == "System.Windows.Media.Color") {
System.Drawing.ColorConverter conv = new System.Drawing.ColorConverter ();
foreach (System.Drawing.Color c in conv.GetStandardValues (null)) {
if (c.IsSystemColor)
@@ -200,9 +195,9 @@ namespace MonoDevelop.Moonlight
}
//enum completion
- MonoDevelop.Projects.Dom.IType retCls = dom.GetType (prop.ReturnType);
- if (retCls != null && retCls.ClassType == MonoDevelop.Projects.Dom.ClassType.Enum) {
- foreach (MonoDevelop.Projects.Dom.IField enumVal in retCls.Fields)
+ var retCls = prop.ReturnType.Resolve (ctx);
+ if (retCls != null && retCls.IsEnum ()) {
+ foreach (var enumVal in retCls.GetFields (ctx))
if (enumVal.IsPublic && enumVal.IsStatic)
list.Add (enumVal.Name, "md-literal", enumVal.Documentation);
return;
diff --git a/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/MoonlightParser.cs b/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/MoonlightParser.cs
index dc7bf45c73..998d5f81c1 100644
--- a/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/MoonlightParser.cs
+++ b/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/MoonlightParser.cs
@@ -33,17 +33,16 @@ using System.Linq;
using System.Xml;
using MonoDevelop.Xml.StateEngine;
-using MonoDevelop.Projects.Dom;
-using MonoDevelop.Projects.Dom.Parser;
+using MonoDevelop.TypeSystem;
+using ICSharpCode.NRefactory.TypeSystem;
namespace MonoDevelop.Moonlight
{
- public class MoonlightParser : AbstractParser
+ public class MoonlightParser : AbstractTypeSystemProvider
{
- public override ParsedDocument Parse (ProjectDom dom, string fileName, string fileContent)
+ public override ParsedDocument Parse (ICSharpCode.NRefactory.TypeSystem.IProjectContent projectContent, bool storeAst, string fileName, TextReader tr)
{
XmlParsedDocument doc = new XmlParsedDocument (fileName);
- TextReader tr = new StringReader (fileContent);
try {
Parser xmlParser = new Parser (new XmlFreeState (), true);
xmlParser.Parse (tr);
@@ -59,10 +58,6 @@ namespace MonoDevelop.Moonlight
catch (Exception ex) {
MonoDevelop.Core.LoggingService.LogError ("Unhandled error parsing xaml document", ex);
}
- finally {
- if (tr != null)
- tr.Dispose ();
- }
return doc;
}
@@ -83,55 +78,56 @@ namespace MonoDevelop.Moonlight
string rootNamespace, rootType, rootAssembly;
XamlG.ParseXmlns (rootClass.Value, out rootType, out rootNamespace, out rootAssembly);
-
- CompilationUnit cu = new CompilationUnit (doc.FileName);
- doc.CompilationUnit = cu;
- DomRegion rootRegion = doc.XDocument.RootElement.Region;
- if (doc.XDocument.RootElement.IsClosed)
- rootRegion.End = doc.XDocument.RootElement.ClosingTag.Region.End;
-
- DomType declType = new DomType (cu, ClassType.Class, Modifiers.Partial | Modifiers.Public, rootType,
- doc.XDocument.RootElement.Region.Start, rootNamespace, rootRegion);
- cu.Add (declType);
-
- DomMethod initcomp = new DomMethod ();
- initcomp.Name = "InitializeComponent";
- initcomp.Modifiers = Modifiers.Public;
- initcomp.ReturnType = DomReturnType.Void;
- declType.Add (initcomp);
-
- DomField _contentLoaded = new DomField ("_contentLoaded");
- _contentLoaded.ReturnType = new DomReturnType ("System.Boolean");
-
- if (isApplication)
- return;
-
- cu.Add (new DomUsing (DomRegion.Empty, "System"));
- cu.Add (new DomUsing (DomRegion.Empty, "System.Windows"));
- cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Controls"));
- cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Documents"));
- cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Input"));
- cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Media"));
- cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Media.Animation"));
- cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Shapes"));
- cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Controls.Primitives"));
-
-// Dictionary<string,string> namespaceMap = new Dictionary<string, string> ();
-// namespaceMap["x"] = "http://schemas.microsoft.com/winfx/2006/xaml";
+// TODO: Type system conversion.
+// var cu = new ParsedDocument (doc.FileName);
+// doc.CompilationUnit = cu;
+//
+// DomRegion rootRegion = doc.XDocument.RootElement.Region;
+// if (doc.XDocument.RootElement.IsClosed)
+// rootRegion.End = doc.XDocument.RootElement.ClosingTag.Region.End;
+//
+// DomType declType = new DomType (cu, ClassType.Class, Modifiers.Partial | Modifiers.Public, rootType,
+// doc.XDocument.RootElement.Region.Start, rootNamespace, rootRegion);
+// cu.Add (declType);
+//
+// DomMethod initcomp = new DomMethod ();
+// initcomp.Name = "InitializeComponent";
+// initcomp.Modifiers = Modifiers.Public;
+// initcomp.ReturnType = DomReturnType.Void;
+// declType.Add (initcomp);
+//
+// DomField _contentLoaded = new DomField ("_contentLoaded");
+// _contentLoaded.ReturnType = new DomReturnType ("System.Boolean");
+//
+// if (isApplication)
+// return;
+//
+// cu.Add (new DomUsing (DomRegion.Empty, "System"));
+// cu.Add (new DomUsing (DomRegion.Empty, "System.Windows"));
+// cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Controls"));
+// cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Documents"));
+// cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Input"));
+// cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Media"));
+// cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Media.Animation"));
+// cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Shapes"));
+// cu.Add (new DomUsing (DomRegion.Empty, "System.Windows.Controls.Primitives"));
- XName nameAtt = new XName ("x", "Name");
+ // Dictionary<string,string> namespaceMap = new Dictionary<string, string> ();
+ // namespaceMap["x"] = "http://schemas.microsoft.com/winfx/2006/xaml";
- foreach (XElement el in doc.XDocument.RootElement.AllDescendentElements) {
- XAttribute name = el.Attributes [nameAtt];
- if (name != null && name.IsComplete) {
- string type = ResolveType (el);
- if (type == null || type.Length == 0)
- doc.Add (new Error (ErrorType.Error, el.Region.Start, "Could not find namespace for '" + el.Name.FullName + "'."));
- else
- declType.Add (new DomField (name.Value, Modifiers.Internal, el.Region.Start, new DomReturnType (type)));
- }
- }
+// XName nameAtt = new XName ("x", "Name");
+//
+// foreach (XElement el in doc.XDocument.RootElement.AllDescendentElements) {
+// XAttribute name = el.Attributes [nameAtt];
+// if (name != null && name.IsComplete) {
+// string type = ResolveType (el);
+// if (type == null || type.Length == 0)
+// doc.Add (new Error (ErrorType.Error, el.Region.Begin, "Could not find namespace for '" + el.Name.FullName + "'."));
+// else
+// declType.Add (new DomField (name.Value, Modifiers.Internal, el.Region.Begin, new DomReturnType (type)));
+// }
+// }
}
static string GetNamespace (XElement el)
diff --git a/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/XamlG.cs b/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/XamlG.cs
index 9f9c21f6b9..7765742003 100644
--- a/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/XamlG.cs
+++ b/main/src/addins/MonoDevelop.Moonlight/MonoDevelop.Moonlight/XamlG.cs
@@ -34,7 +34,6 @@ using System.IO;
using System.Xml;
using MonoDevelop.Projects;
-using MonoDevelop.Projects.Dom;
namespace MonoDevelop.Moonlight
{