[svn] r7329: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel: SourceGenerator.n XmlDo...

pbludov svnadmin at nemerle.org
Wed Jan 24 15:52:46 CET 2007


Log:
XMLDoc members coding

Author: pbludov
Date: Wed Jan 24 15:52:43 2007
New Revision: 7329

Modified:
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/SourceGenerator.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/XmlDocReader.n

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/SourceGenerator.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/SourceGenerator.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/SourceGenerator.n	Wed Jan 24 15:52:43 2007
@@ -35,18 +35,6 @@
       _writer.Write(value);
     }
 
-    protected Write(value : char) : void
-    {
-      when (_applyIndent)
-      {
-        repeat (_indent)
-          _writer.Write('\t');
-        _applyIndent = false;
-      }
-
-      _writer.Write(value);
-    }
-
     protected WriteLine() : void
     {
       Write(Environment.NewLine);
@@ -56,7 +44,7 @@
     protected BeginBlock() : void
     {
       WriteLine();
-      Write('{');
+      Write("{");
       ++ _indent;
       WriteLine();
     }
@@ -64,7 +52,7 @@
     protected EndBlock() : void
     {
       -- _indent;
-      Write('}');
+      Write("}");
       WriteLine();
     }
 
@@ -115,7 +103,7 @@
         | Private              => "private"
         });
 
-      Write(' ');
+      Write(" ");
     }
 
     private WriteName(name : string) : void
@@ -275,9 +263,10 @@
           WriteLine();
           WriteLine();
 
-          members.Iter(m : 'a =>
+          members.Iter(m =>
             {
               writer(m);
+              Write(";");
               WriteLine();
             });
 
@@ -331,7 +320,7 @@
 
       match (ty.LookupMember("Invoke"))
       {
-      | [m is IMethod]   =>
+      | (m is IMethod) :: _ =>
         Write("(");
         m.GetParameters().Iter(p =>
           {
@@ -339,8 +328,7 @@
             Write(" : ");
             WriteType(p.ty);
           });
-        Write(")");
-        Write(" : ");
+        Write(") : ");
         WriteType(m.ReturnType);
       | _                => ();
       }

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/XmlDocReader.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/XmlDocReader.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/XmlDocReader.n	Wed Jan 24 15:52:43 2007
@@ -1,4 +1,5 @@
 using System;
+using System.Diagnostics;
 using System.IO;
 using System.Xml;
 
@@ -70,6 +71,8 @@
       | None          =>
         def xmlFile = Environment.ExpandEnvironmentVariables(Path.ChangeExtension(asmFilePath, ".xml"));
         def docFile = 
+          try
+          {
           if (File.Exists(xmlFile))
             XmlDocFile(xmlFile);
           else
@@ -85,6 +88,14 @@
             else
               null;
           }
+          }
+          catch
+          {
+          // Eat exceptions related to bad file format or problems with access to.
+          //
+          | e is XmlException              => Debug.WriteLine(e.ToString(), typeof(XmlDocReader).Name); null;
+          | e is InvalidOperationException => Debug.WriteLine(e.ToString(), typeof(XmlDocReader).Name); null;
+          }
         _xmlDocCache = _xmlDocCache.Add(asmFilePath, docFile);
 
         docFile;
@@ -93,35 +104,49 @@
 
     private GetKey(member : IMember) : string
     {
-      def name = member.GetFullName();
-      match (member)
+      def getName(m : IMember) : string
       {
-      | _  is IProperty  => "P:" + name;
-      | _  is IField     => "F:" + name;
-      | mi is IMethod    => 
+      | ti is TypeInfo =>
+        if (ti.TyparmsCount == 0)
+          ti.FullName;
+        else
+          ti.FullName + "`" + ti.TyparmsCount.ToString();
 
-        def memType = mi.GetMemType();
+      | _              => (if (m.DeclaringType != null) m.DeclaringType.FullName + "."; else "") + m.Name.Replace('.', '#');
+      }
 
-        match (memType)
+      def getTypeName(ty : MType) : string
         {
-        | Fun(MType.Tuple(args), _) =>
+      | Class       (tycon, _) => getName(tycon);
+      | TyVarRef    (tyvar)    => tyvar.Name;
+      | Fun         (from, to) => "(todo)";
+      | Tuple       (args)     => "(todo)";
+      | Array       (t, rank)  => getTypeName(t.Fix()) + "[]"; // Todo: rank
+      | Ref         (t)
+      | Out         (t)        => getTypeName(t.Fix());
+      | Void                   => throw InvalidOperationException("Got void as method parameter");
+      | Intersection(_)        => throw InvalidOperationException("Got Intersection as method parameter");
+      }
+
+      def name = getName(member);
 
-          "M:" + name + "(" + args.Map((tv) =>
+      match (member.MemberKind)
             {
-            | MType.Array(MType.Class(t, _), _) => t.FullName + "[]"
-              //VladD2: çàêîìåíòèðîâàííûé êîä ïðèâîäèò ê àññåðòó. 
-              // ïîäðîáíîñòè ñìîòðè â êîôðåöèè ïî íåìåðëó.
-            | mt is MType => //if (mt.TypeInfo == null) mt.SystemType.Name else mt.TypeInfo.FullName
-                             mt.ToString()
-            | _           => ""
-            }).ToString(",") + ")"
+      | MemberKinds.Field       => "F:" + name;
+      | MemberKinds.Event       => "E:" + name;
+      | MemberKinds.Property    => "P:" + name;
 
-        | Fun(MType.Array(MType.Class(ti, _), _), _) => "M:" + name + "(" + ti.FullName + "[])"
-        | Fun(MType.Class(ti, _), _)                 => "M:" + name + "(" + ti.FullName + ")"
-        | Fun(MType.Void, _) => "M:" + name;
-        | _                  => null;
-        }
+      | MemberKinds.TypeInfo
+      | MemberKinds.NestedType  => "T:" + name;
 
+      | MemberKinds.Method
+      | MemberKinds.Constructor =>
+        def method = member :> IMethod;
+        def parms = method.GetParameters();
+        if (parms.IsEmpty)
+          "M:" + name;
+        else
+          "M:" + name + "(" + parms.Map(p => getTypeName(p.ty.Fix())).ToString(",") + ")";
       | _ => null;
       }
     }
@@ -152,7 +177,7 @@
 
     public GetInfo(mtype : MType, location : Location) : XmlDocInfo
     {
-      GetInfo("T:" + mtype.TypeInfo.FullName, location);
+      GetInfo(mtype.TypeInfo, location);
     }
 
     public GetInfo(member : IMember, location : Location) : XmlDocInfo



More information about the svn mailing list