[MonoDevelop] [PATCH] Fix Improper MemberNodeCommandHandling inClassPad

Balaji Rao balajirrao at gmail.com
Tue May 29 02:31:45 EDT 2007


On 5/25/07, Lluis Sanchez <lluis at ximian.com> wrote:
> El dv 25 de 05 del 2007 a les 06:38 -0400, en/na Jeffrey Stedfast va
> escriure:
> > On Fri, 2007-05-25 at 12:22 +0200, Lluis Sanchez wrote:
> > > Hi,
> > >
> > > > When a member in a ClassPad was clicked, the correct source file was
> > > > not being opened. This patch fixes it by including filename
> > > > information in all Region objects.
> > >
> > > I'm concerned about memory use. If every member of the class has the
> > > name of the file, that's a lot of duplicated strings in memory, and will
> > > be noticeable in big projects such as MonoDevelop which has thousands of
> > > members. I know that the file name string instance is shared at parse
> > > time, but this info is saved to disk (to pidb files) and later reloaded,
> > > and when reloaded an instance will be created for each string. That's
> > > something to take into account.
> >
> > One possibility is to have the pidb loading code keep a table of unique
> > FileName strings as they are loaded from disk, and set the instance to
> > the unique string rather than the one loaded.
 So, I think the filename table should be maintained for each Class.
Or do we need to have a global one? Having a per class filename table
adds only a little overhead as it duplicates the filename between all
classes declared in the same file. So which one would be better? If it
is chosen to go for a global table,  is there anything wrong in making
it have a static reference in the class 'DefaultClass' ?

Can it be done in this way? Please explain.

> Yes, that's one possible solution.
>
> >
> > >
> > > > This is my first patch. So please point out any mistakes and omissions.
> > >
> > > Always provide patches as an attachment to the mail, since mail readers
> > > are likely to mess up the formatting.
> > >
> > > Thanks!
> > > Lluis.
> > >
> > > >
> > > > --- monodevelop-0.13.1/Extras/CSharpBinding/Parser/Parser.cs      2007-03-08
> > > > 04:32:26.000000000 +0530
> > > > +++ monodevelop-0.13.1.patch/Extras/CSharpBinding/Parser/Parser.cs        2007-05-23
> > > > 13:53:40.000000000 +0530
> > > > @@ -95,8 +95,17 @@
> > > >                   // FIXME: track api changes
> > > >                   //visitor.Cu.ErrorInformation = p.Errors.ErrorInformation;
> > > >                   RetrieveRegions (visitor.Cu, p.Lexer.SpecialTracker);
> > > > -                 foreach (IClass c in visitor.Cu.Classes)
> > > > +                 foreach (IClass c in visitor.Cu.Classes) {
> > > >                           c.Region.FileName = fileName;
> > > > +                         foreach (IField f in c.Fields)
> > > > +                                 f.Region.FileName = fileName;
> > > > +                         foreach (IMethod m in c.Methods)
> > > > +                                 m.Region.FileName = fileName;
> > > > +                         foreach (IProperty pr in c.Properties)
> > > > +                                 pr.Region.FileName = fileName;
> > > > +                         foreach (IEvent ev in c.Events)
> > > > +                                 ev.Region.FileName = fileName;
> > > > +                 }
> > > >                   AddCommentTags (visitor.Cu, p.Lexer.TagComments);
> > > >              return visitor.Cu;
> > > >           }
> > > >
> > > >
> > > > --- md/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ClassPad/MemberNodeCommandHandler.cs     2007-03-08
> > > > 04:31:51.000000000 +0530
> > > > +++ monodevelop-0.13.1.patch/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ClassPad/MemberNodeCommandHandler.cs       2007-05-23
> > > > 13:52:22.000000000 +0530
> > > > @@ -39,21 +39,10 @@
> > > >   {
> > > >           public override void ActivateItem ()
> > > >           {
> > > > -                 string file = GetFileName ();
> > > >                   IMember member = CurrentNode.DataItem as IMember;
> > > > +                 string file = member.Region.FileName;
> > > >                   int line = member.Region.BeginLine;
> > > >                   IdeApp.Workbench.OpenDocument (file, Math.Max (1, line), 1, true);
> > > >           }
> > > > -
> > > > -         string GetFileName ()
> > > > -         {
> > > > -                 IMember member = (IMember) CurrentNode.GetParentDataItem
> > > > (typeof(IMember), true);
> > > > -                 if (member != null && member.Region.FileName != null) return
> > > > member.Region.FileName;
> > > > -
> > > > -                 ClassData cls = (ClassData) CurrentNode.GetParentDataItem
> > > > (typeof(ClassData), true);
> > > > -                 if (cls != null && cls.Class.Region.FileName != null) return
> > > > cls.Class.Region.FileName;
> > > > -
> > > > -                 return null;
> > > > -         }
> > > >   }
> > > >  }
> > > >
> > > > --- md/Core/src/MonoDevelop.Ide/ChangeLog 2007-03-08 04:31:53.000000000 +0530
> > > > +++ monodevelop-0.13.1.patch/Core/src/MonoDevelop.Ide/ChangeLog   2007-05-23
> > > > 14:08:51.000000000 +0530
> > > > @@ -1,3 +1,7 @@
> > > > +2007-05-23  Balaji Rao R <balajirrao at gmail.com>
> > > > + * MonoDevelop.Ide.Gui.Pads.ClassPad/MemberNodeCommandHandler.cs : Made
> > > > + to obtain FileName information directly from the respective regions.
> > > > +
> > > >  2007-02-24  Lluis Sanchez Gual <lluis at novell.com>
> > > >
> > > >   * MonoDevelop.Ide.addin.xml: Fix compatible version number.
> > > >
> > > >
> > > > --- monodevelop-0.13.1/Extras/CSharpBinding/ChangeLog     2007-03-08
> > > > 04:32:26.000000000 +0530
> > > > +++ monodevelop-0.13.1.patch/Extras/CSharpBinding/ChangeLog       2007-05-23
> > > > 14:04:10.000000000 +0530
> > > > @@ -1,3 +1,7 @@
> > > > +2007-05-23 Balaji Rao R <balajirrao at gmail.com>
> > > > + * Parser/Parser.cs : Include FileName information in all regions
> > > > + belonging to a class.
> > > > +
> > > >  2007-02-16  Lluis Sanchez Gual <lluis at novell.com>
> > > >
> > > >   * Gui/CSharpTextEditorExtension.cs: Don't show completion windo for
> > > >
> > > >
> > >
> > > _______________________________________________
> > > Monodevelop-list mailing list
> > > Monodevelop-list at lists.ximian.com
> > > http://lists.ximian.com/mailman/listinfo/monodevelop-list
> >
>
>


-- 
warm regards

Balaji Rao


More information about the Monodevelop-list mailing list