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@xamarin.com>2011-11-11 14:37:27 +0400
committerMike Krüger <mkrueger@xamarin.com>2011-11-11 14:37:27 +0400
commitccb96e47803a3c1826f7140481a566bd3b519b24 (patch)
treee1af2087364623b18117cb0b26e6d03f9a181000 /main/src/addins/MonoDevelop.MacDev
parent39da0c9d7ec9e78cb32104f3bff45eff35f28396 (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.cs22
-rw-r--r--main/src/addins/MonoDevelop.MacDev/ObjCIntegration/NSObjectProjectInfo.cs20
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;