diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2011-11-11 14:37:27 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2011-11-11 14:37:27 +0400 |
commit | ccb96e47803a3c1826f7140481a566bd3b519b24 (patch) | |
tree | e1af2087364623b18117cb0b26e6d03f9a181000 /main/src/addins/MonoDevelop.MacDev | |
parent | 39da0c9d7ec9e78cb32104f3bff45eff35f28396 (diff) |
[MacDev] Reduced changeset. The model is now more than that with the
old type system.
Diffstat (limited to 'main/src/addins/MonoDevelop.MacDev')
-rw-r--r-- | main/src/addins/MonoDevelop.MacDev/ObjCIntegration/NSObjectInfoService.cs | 22 | ||||
-rw-r--r-- | main/src/addins/MonoDevelop.MacDev/ObjCIntegration/NSObjectProjectInfo.cs | 20 |
2 files changed, 24 insertions, 18 deletions
diff --git a/main/src/addins/MonoDevelop.MacDev/ObjCIntegration/NSObjectInfoService.cs b/main/src/addins/MonoDevelop.MacDev/ObjCIntegration/NSObjectInfoService.cs index 71bf2918ea..747f15d082 100644 --- a/main/src/addins/MonoDevelop.MacDev/ObjCIntegration/NSObjectInfoService.cs +++ b/main/src/addins/MonoDevelop.MacDev/ObjCIntegration/NSObjectInfoService.cs @@ -53,7 +53,7 @@ namespace MonoDevelop.MacDev.ObjCIntegration readonly ITypeReference nsobjectType, registerAttType, connectAttType, exportAttType, modelAttType, iboutletAttType, ibactionAttType; - static Dictionary<DotNetProject,NSObjectProjectInfo> infos = new Dictionary<DotNetProject, NSObjectProjectInfo> (); + static Dictionary<ITypeResolveContext,NSObjectProjectInfo> infos = new Dictionary<ITypeResolveContext, NSObjectProjectInfo> (); static NSObjectInfoService () { @@ -84,26 +84,26 @@ namespace MonoDevelop.MacDev.ObjCIntegration TypeSystemService.ForceUpdate (dom); project.ReferenceAddedToProject += HandleDomReferencesUpdated; project.ReferenceRemovedFromProject += HandleDomReferencesUpdated; - return GetProjectInfo (project, dom); + return GetProjectInfo (dom); } - NSObjectProjectInfo GetProjectInfo (DotNetProject project, ITypeResolveContext dom) + public NSObjectProjectInfo GetProjectInfo (ITypeResolveContext dom) { NSObjectProjectInfo info; lock (infos) { - if (infos.TryGetValue (project, out info)) + if (infos.TryGetValue (dom, out info)) return info; //only include DOMs that can resolve NSObject var nso = nsobjectType.Resolve (dom); if (nso == null || nso == SharedTypes.UnknownType) { - infos[project] = null; + infos[dom] = null; return null; } - info = new NSObjectProjectInfo (project, dom, this); - infos[project] = info; + info = new NSObjectProjectInfo (dom, this); + infos[dom] = info; } return info; } @@ -111,9 +111,10 @@ namespace MonoDevelop.MacDev.ObjCIntegration static void HandleDomReferencesUpdated (object sender, ProjectReferenceEventArgs e) { var project = (DotNetProject)sender; + var dom = TypeSystemService.GetContext (project); NSObjectProjectInfo info; lock (infos) { - if (!infos.TryGetValue (project, out info)) + if (!infos.TryGetValue (dom, out info)) return; } info.SetNeedsUpdating (); @@ -122,17 +123,17 @@ namespace MonoDevelop.MacDev.ObjCIntegration static void HandleDomUnloaded (object sender, ProjectEventArgs e) { var project = (DotNetProject)e.Project; + var dom = TypeSystemService.GetContext (project); lock (infos) { project.ReferenceAddedToProject -= HandleDomReferencesUpdated; project.ReferenceRemovedFromProject -= HandleDomReferencesUpdated; - infos.Remove (project); + infos.Remove (dom); } } internal IEnumerable<NSObjectTypeInfo> GetRegisteredObjects (ITypeResolveContext dom) { var nso = nsobjectType.Resolve (dom); - if (nso == null || nso == SharedTypes.UnknownType) throw new Exception ("Could not get NSObject from type database"); @@ -173,7 +174,6 @@ namespace MonoDevelop.MacDev.ObjCIntegration } } } - if (string.IsNullOrEmpty (objcName)) return null; diff --git a/main/src/addins/MonoDevelop.MacDev/ObjCIntegration/NSObjectProjectInfo.cs b/main/src/addins/MonoDevelop.MacDev/ObjCIntegration/NSObjectProjectInfo.cs index 78f1a93c24..1356bddaad 100644 --- a/main/src/addins/MonoDevelop.MacDev/ObjCIntegration/NSObjectProjectInfo.cs +++ b/main/src/addins/MonoDevelop.MacDev/ObjCIntegration/NSObjectProjectInfo.cs @@ -48,12 +48,10 @@ namespace MonoDevelop.MacDev.ObjCIntegration NSObjectInfoService infoService; ITypeResolveContext dom; - DotNetProject project; bool needsUpdating; - public NSObjectProjectInfo (DotNetProject project, ITypeResolveContext dom, NSObjectInfoService infoService) + public NSObjectProjectInfo (ITypeResolveContext dom, NSObjectInfoService infoService) { - this.project = project; this.infoService = infoService; this.dom = dom; needsUpdating = true; @@ -86,7 +84,7 @@ namespace MonoDevelop.MacDev.ObjCIntegration if (!needsUpdating) return; - foreach (var r in GetReferencedProjects (project)) { + foreach (var r in References) { var info = infoService.GetProjectInfo (r); if (info != null) info.Update (); @@ -95,7 +93,6 @@ namespace MonoDevelop.MacDev.ObjCIntegration objcTypes.Clear (); cliTypes.Clear (); - dom = TypeSystemService.GetContext (project); foreach (var type in infoService.GetRegisteredObjects (dom)) { if (objcTypes.ContainsKey (type.ObjCName)) { @@ -137,11 +134,20 @@ namespace MonoDevelop.MacDev.ObjCIntegration cliTypes[type.CliName] = type; } + IEnumerable<ITypeResolveContext> References { + get { + var compCtx = dom as ICSharpCode.NRefactory.TypeSystem.Implementation.CompositeTypeResolveContext; + if (compCtx == null) + return Enumerable.Empty<ITypeResolveContext> (); + return compCtx.Children.Take (1); + } + } + bool TryResolveCliToObjc (string cliType, out NSObjectTypeInfo resolved) { if (cliTypes.TryGetValue (cliType, out resolved)) return true; - foreach (var r in GetReferencedProjects (project)) { + foreach (var r in References) { var rDom = infoService.GetProjectInfo (r); if (rDom != null && rDom.cliTypes.TryGetValue (cliType, out resolved)) return true; @@ -154,7 +160,7 @@ namespace MonoDevelop.MacDev.ObjCIntegration { if (objcTypes.TryGetValue (objcType, out resolved)) return true; - foreach (var r in GetReferencedProjects (project)) { + foreach (var r in References) { var rDom = infoService.GetProjectInfo (r); if (rDom != null && rDom.objcTypes.TryGetValue (objcType, out resolved)) return true; |