[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