internal protected virtual void OnItemsRemoved(IEnumerable <ProjectItem> objs)
        {
            NotifyModified("Items");
            var args = new ProjectItemEventArgs();

            args.AddRange(objs.Select(pi => new ProjectItemEventInfo(this, pi)));
            if (ProjectItemRemoved != null)
            {
                ProjectItemRemoved(this, args);
            }
        }
		void OnReferencesChanged (object sender, ProjectItemEventArgs e)
		{
			foreach (var project in e.Select (x => x.SolutionItem).Distinct ()) {
				var dnp = project as DotNetProject;
				if (dnp == null)
					continue;

				var addinFlavor = dnp.AsFlavor<AddinProjectFlavor> ();
				if (addinFlavor == null)
					continue;

				ITreeBuilder builder = Context.GetTreeBuilder (addinFlavor.AddinReferences);
				if (builder != null)
					builder.UpdateChildren ();
			}
		}
		void OnItemsChanged (object sender, ProjectItemEventArgs e)
		{
			var projects = new HashSet<DotNetProject> ();
			foreach (ProjectItemEventInfo evt in e)
				if (evt.Item is NativeReference)
					projects.Add ((DotNetProject)evt.SolutionItem);
			foreach (var project in projects) {
				ITreeBuilder builder = Context.GetTreeBuilder (project);
				if (builder != null)
					builder.UpdateChildren ();
			}
		}