[svn] r7515: nemerle/trunk/tools/reflector-addon:
reflector-addon.build reflector-addon.nproj src/Assembly...
pbludov
svnadmin at nemerle.org
Mon Mar 5 06:50:58 CET 2007
Log:
reflector-addon: updated to match the version of Reflector itself.
Author: pbludov
Date: Mon Mar 5 06:50:50 2007
New Revision: 7515
Added:
nemerle/trunk/tools/reflector-addon/src/OptionsPage.n
Modified:
nemerle/trunk/tools/reflector-addon/reflector-addon.build
nemerle/trunk/tools/reflector-addon/reflector-addon.nproj
nemerle/trunk/tools/reflector-addon/src/AssemblyInfo.n
nemerle/trunk/tools/reflector-addon/src/CodeModel/LanguageWriterBase.n
nemerle/trunk/tools/reflector-addon/src/CodeModel/VisitorBase.n
nemerle/trunk/tools/reflector-addon/src/CustomAttributeWrapper.n
nemerle/trunk/tools/reflector-addon/src/Helper.n
nemerle/trunk/tools/reflector-addon/src/Language.n
nemerle/trunk/tools/reflector-addon/src/LanguageWriter.n
nemerle/trunk/tools/reflector-addon/src/LanguageWriterConfiguration.n
nemerle/trunk/tools/reflector-addon/src/Package.n
Modified: nemerle/trunk/tools/reflector-addon/reflector-addon.build
==============================================================================
--- nemerle/trunk/tools/reflector-addon/reflector-addon.build (original)
+++ nemerle/trunk/tools/reflector-addon/reflector-addon.build Mon Mar 5 06:50:50 2007
@@ -1,22 +1,25 @@
<?xml version="1.0"?>
<project name="reflector-addon" default="build">
- <property name='configuration' value="Debug"/>
+ <property name="configuration" value="Debug"/>
+ <property name="reflectorVersion" value="REFLECTOR_VER_50"/>
- <property name='boot.dir' value="${path::get-full-path('../../boot')}"/>
- <property name='build.dir' value="${path::get-full-path('bin')}/${configuration}"/>
- <property name='lib.dir' value="${path::get-full-path('lib')}"/>
+ <property name="boot.dir" value="${path::get-full-path('../../boot')}"/>
+ <property name="build.dir" value="${path::get-full-path('bin')}/${configuration}"/>
+ <property name="lib.dir" value="${path::get-full-path('lib')}"/>
<target name="build">
<mkdir dir="${build.dir}" />
- <ncc output='${build.dir}/Reflector.NemerleLanguage.dll' target='dll'>
+ <ncc output="${build.dir}/Reflector.NemerleLanguage.dll" target="dll">
<references>
- <include name='${lib.dir}/Reflector.exe' />
+ <include name="${lib.dir}/Reflector.exe" />
+ <include name="System.Windows.Forms.dll" />
</references>
- <sources basedir='src'>
- <include name='*.n' />
- <include name='CodeModel/*.n' />
+ <sources basedir="src">
+ <include name="*.n" />
+ <include name="CodeModel/*.n" />
</sources>
+ <arg line="-def:${reflectorVersion}"/>
</ncc>
</target>
@@ -27,10 +30,12 @@
<target name="clean">
<delete>
- <fileset basedir='${build.dir}'>
- <include name='**' />
+ <fileset basedir="${build.dir}">
+ <include name="**" />
</fileset>
</delete>
</target>
+ <target name="rebuild" depends="clean build"/>
+
</project>
Modified: nemerle/trunk/tools/reflector-addon/reflector-addon.nproj
==============================================================================
--- nemerle/trunk/tools/reflector-addon/reflector-addon.nproj (original)
+++ nemerle/trunk/tools/reflector-addon/reflector-addon.nproj Mon Mar 5 06:50:50 2007
@@ -1,6 +1,7 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>reflector-addon</Name>
+ <NoStdLib>false</NoStdLib>
<TargetPlatform>v2</TargetPlatform>
</PropertyGroup>
<PropertyGroup>
@@ -36,24 +37,22 @@
<CmdArgs>
</CmdArgs>
<OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE;REFLECTOR_VER_50</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin\Release\</OutputPath>
</PropertyGroup>
<ItemGroup>
- <Reference Include="System" />
- <Reference Include="Nemerle">
- <Name>Nemerle</Name>
- <AssemblyName>Nemerle.dll</AssemblyName>
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\..\boot\Nemerle.dll</HintPath>
- </Reference>
<Reference Include="Reflector">
<Name>Reflector</Name>
<AssemblyName>Reflector.exe</AssemblyName>
<SpecificVersion>False</SpecificVersion>
<HintPath>lib\Reflector.exe</HintPath>
</Reference>
+ <Reference Include="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <Name>System.Windows.Forms</Name>
+ <AssemblyName>System.Windows.Forms.dll</AssemblyName>
+ </Reference>
</ItemGroup>
<ItemGroup>
<Folder Include="src\" />
@@ -70,6 +69,9 @@
<Compile Include="src\Language.n" />
<Compile Include="src\LanguageWriter.n" />
<Compile Include="src\LanguageWriterConfiguration.n" />
+ <Compile Include="src\OptionsPage.n">
+ <SubType>Code</SubType>
+ </Compile>
<Compile Include="src\Package.n" />
<Compile Include="src\UsingNamespaceVisitor.n" />
</ItemGroup>
Modified: nemerle/trunk/tools/reflector-addon/src/AssemblyInfo.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/AssemblyInfo.n (original)
+++ nemerle/trunk/tools/reflector-addon/src/AssemblyInfo.n Mon Mar 5 06:50:50 2007
@@ -44,6 +44,8 @@
//
[assembly: AssemblyCompany ("mailto:devel-en at nemerle.org")]
+#if REFLECTOR_VER_42
+
// Compatible with Reflector.exe version 4.2.
//
[assembly: AssemblyInformationalVersion("4.2.0.0")]
@@ -52,6 +54,18 @@
//
[assembly: Nemerle.Utility.AssemblyVersionFromSVN("4.2.0.SVN")]
+#elif REFLECTOR_VER_50
+
+// Compatible with Reflector.exe version 5.0.
+//
+[assembly: AssemblyInformationalVersion("5.0.0.0")]
+
+// Real version.
+//
+[assembly: Nemerle.Utility.AssemblyVersionFromSVN("5.0.0.SVN")]
+
+#endif
+
// Signing.
//
[assembly: AssemblyDelaySign(false)]
Modified: nemerle/trunk/tools/reflector-addon/src/CodeModel/LanguageWriterBase.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/CodeModel/LanguageWriterBase.n (original)
+++ nemerle/trunk/tools/reflector-addon/src/CodeModel/LanguageWriterBase.n Mon Mar 5 06:50:50 2007
@@ -111,6 +111,16 @@
_formatter.WriteReference(if (check && Keywords.Contains(name)) EscapeKeyword(name) else name, description, target);
}
+ public WriteIndent() : void
+ {
+ _formatter.WriteIndent();
+ }
+
+ public WriteOutdent() : void
+ {
+ _formatter.WriteOutdent();
+ }
+
#region Extensions
public WriteIdentifier(name : string) : void
@@ -151,21 +161,6 @@
}
}
- public BeginBlock() : void
- {
- WriteLine();
- Write("{");
- WriteLine();
- _formatter.WriteIndent();
- }
-
- public EndBlock() : void
- {
- _formatter.WriteOutdent();
- Write("}");
- WriteLine();
- }
-
public WriteTypeReference(ty : ITypeReference, description : string, target : object) : void
{
_formatter.WriteReference(
Modified: nemerle/trunk/tools/reflector-addon/src/CodeModel/VisitorBase.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/CodeModel/VisitorBase.n (original)
+++ nemerle/trunk/tools/reflector-addon/src/CodeModel/VisitorBase.n Mon Mar 5 06:50:50 2007
@@ -85,11 +85,6 @@
VisitExpression(value.Target);
}
- public virtual VisitArrayInitializerExpression(value : IArrayInitializerExpression) : void
- {
- VisitExpressionCollection(value.Expressions);
- }
-
public virtual VisitArrayType(value : IArrayType) : void
{
VisitType(value.ElementType);
@@ -201,6 +196,14 @@
VisitCustomAttribute(value[i]);
}
+#if REFLECTOR_VER_50
+
+ public virtual VisitDebugBreakStatement(_ : IDebugBreakStatement) : void
+ {
+ }
+
+#endif
+
public virtual VisitDefaultCase(value : IDefaultCase) : void
{
VisitStatement(value.Body);
@@ -237,9 +240,7 @@
public virtual VisitEventDeclarationCollection(value : IEventDeclarationCollection) : void
{
for (mutable i = 0; i < value.Count; ++i)
- {
- VisitEventDeclaration(value[i]);
- }
+ VisitMemberDeclaration(value[i]);
}
public virtual VisitEventReference(value : IEventReference) : void
@@ -249,7 +250,7 @@
public virtual VisitEventReferenceExpression(value : IEventReferenceExpression) : void
{
- VisitEventReference(value.Event);
+ VisitMemberReference(value.Event);
VisitExpression(value.Target);
}
@@ -273,11 +274,9 @@
| e is ICanCastExpression => VisitCanCastExpression (e)
| e is ICastExpression => VisitCastExpression (e)
| e is ITypeOfExpression => VisitTypeOfExpression (e)
- | e is INamedArgumentExpression => VisitNamedArgumentExpression (e)
| e is IEventReferenceExpression => VisitEventReferenceExpression (e)
| e is IArgumentListExpression => VisitArgumentListExpression (e)
| e is IArrayCreateExpression => VisitArrayCreateExpression (e)
- | e is IArrayInitializerExpression => VisitArrayInitializerExpression (e)
| e is IConditionExpression => VisitConditionExpression (e)
| e is INullCoalescingExpression => VisitNullCoalescingExpression (e)
| e is IDelegateCreateExpression => VisitDelegateCreateExpression (e)
@@ -291,12 +290,24 @@
| e is IAddressDereferenceExpression => VisitAddressDereferenceExpression (e)
| e is ISizeOfExpression => VisitSizeOfExpression (e)
| e is ITypedReferenceCreateExpression => VisitTypedReferenceCreateExpression (e)
- | e is IObjectInitializeExpression => VisitObjectInitializeExpression (e)
| e is ITypeOfTypedReferenceExpression => VisitTypeOfTypedReferenceExpression (e)
| e is IValueOfTypedReferenceExpression => VisitValueOfTypedReferenceExpression(e)
| e is IStackAllocateExpression => VisitStackAllocateExpression (e)
| e is IGenericDefaultExpression => VisitGenericDefaultExpression (e)
| e is ISnippetExpression => VisitSnippetExpression (e)
+#if REFLECTOR_VER_42
+ | e is IArrayInitializerExpression => VisitArrayInitializerExpression (e)
+ | e is INamedArgumentExpression => VisitNamedArgumentExpression (e)
+ | e is IObjectInitializeExpression => VisitObjectInitializeExpression (e)
+#elif REFLECTOR_VER_50
+ | e is IAnonymousMethodExpression => VisitAnonymousMethodExpression (e);
+ | e is IBlockExpression => VisitBlockExpression (e);
+ | e is IFieldOfExpression => VisitFieldOfExpression (e);
+ | e is ILambdaExpression => VisitLambdaExpression (e);
+ | e is IMemberInitializerExpression => VisitMemberInitializerExpression (e);
+ | e is IMethodOfExpression => VisitMethodOfExpression (e);
+ | e is IQueryExpression => VisitQueryExpression (e);
+#endif
| null => {}
| _ => throw NotSupportedException($"Invalid expression type '$(value.GetType().Name)'.");
}
@@ -321,7 +332,7 @@
public virtual VisitFieldDeclarationCollection(value : IFieldDeclarationCollection) : void
{
for (mutable i = 0; i < value.Count; ++i)
- VisitFieldDeclaration(value[i]);
+ VisitMemberDeclaration(value[i]);
}
public virtual VisitFieldReference(value : IFieldReference) : void
@@ -331,7 +342,7 @@
public virtual VisitFieldReferenceExpression(value : IFieldReferenceExpression) : void
{
- VisitFieldReference(value.Field);
+ VisitMemberReference(value.Field);
VisitExpression(value.Target);
}
@@ -423,7 +434,7 @@
public virtual VisitMethodDeclarationCollection(value : IMethodDeclarationCollection) : void
{
for (mutable i = 0; i < value.Count; ++i)
- VisitMethodDeclaration(value[i]);
+ VisitMemberDeclaration(value[i]);
}
public virtual VisitMethodInvokeExpression(value : IMethodInvokeExpression) : void
@@ -440,7 +451,7 @@
public virtual VisitMethodReferenceCollection(value : IMethodReferenceCollection) : void
{
for (mutable i = 0; i < value.Count; ++i)
- VisitMethodReference(value[i]);
+ VisitMemberReference(value[i]);
}
public virtual VisitMethodReferenceExpression(value : IMethodReferenceExpression) : void
@@ -474,11 +485,6 @@
{
}
- public virtual VisitNamedArgumentExpression(value : INamedArgumentExpression) : void
- {
- VisitExpression(value.Value);
- }
-
public virtual VisitNamespace(value : INamespace) : void
{
VisitTypeDeclarationCollection(value.Types);
@@ -493,6 +499,18 @@
public virtual VisitObjectCreateExpression(value : IObjectCreateExpression) : void
{
VisitExpressionCollection(value.Arguments);
+ VisitMemberReference(value.Constructor);
+#if REFLECTOR_VER_50
+ VisitExpression(value.Initializer);
+ VisitType(value.Type);
+#endif
+ }
+
+#if REFLECTOR_VER_42
+
+ public virtual VisitArrayInitializerExpression(value : IArrayInitializerExpression) : void
+ {
+ VisitExpressionCollection(value.Expressions);
}
public virtual VisitObjectInitializeExpression(value : IObjectInitializeExpression) : void
@@ -500,6 +518,167 @@
VisitType(value.Type);
}
+ public virtual VisitNamedArgumentExpression(value : INamedArgumentExpression) : void
+ {
+ VisitExpression(value.Value);
+ }
+
+#elif REFLECTOR_VER_50
+
+ public virtual VisitAnonymousMethodExpression(value : IAnonymousMethodExpression) : void
+ {
+ VisitStatement(value.Body);
+ VisitType(value.DelegateType);
+ VisitParameterDeclarationCollection(value.Parameters);
+ VisitMethodReturnType(value.ReturnType);
+ }
+
+ public virtual VisitBlockExpression(value : IBlockExpression) : void
+ {
+ VisitExpressionCollection(value.Expressions);
+ }
+
+ public virtual VisitFieldOfExpression(value : IFieldOfExpression) : void
+ {
+ VisitMemberReference(value.Field);
+ }
+
+ public virtual VisitLambdaExpression(value : ILambdaExpression) : void
+ {
+ VisitExpression(value.Body);
+ VisitVariableDeclarationCollection(value.Parameters);
+ }
+
+ public virtual VisitMemberInitializerExpression(value : IMemberInitializerExpression) : void
+ {
+ VisitMemberReference(value.Member);
+ VisitExpression(value.Value);
+ }
+
+ public virtual VisitMethodOfExpression(value : IMethodOfExpression) : void
+ {
+ VisitMemberReference(value.Method);
+ VisitTypeReference(value.Type);
+ }
+
+ public virtual VisitQueryExpression(value : IQueryExpression) : void
+ {
+ VisitQueryBody(value.Body);
+ VisitQueryClause(value.From);
+ }
+
+ public virtual VisitQueryBody(value : IQueryBody) : void
+ {
+ VisitQueryClauseCollection(value.Clauses);
+ VisitQueryContinuation(value.Continuation);
+ VisitQueryOperation(value.Operation);
+ }
+
+ public virtual VisitQueryOperation(value : IQueryOperation) : void
+ {
+ | o is IGroupOperation => VisitGroupOperation (o);
+ | o is ISelectOperation => VisitSelectOperation(o);
+ | null => {}
+ | _ => throw NotSupportedException($"Invalid query operation '$(value.GetType().Name)'.");
+ }
+
+ public virtual VisitGroupOperation(value : IGroupOperation) : void
+ {
+ VisitExpression(value.Item);
+ VisitExpression(value.Key);
+ }
+
+ public virtual VisitSelectOperation(value : ISelectOperation) : void
+ {
+ VisitExpression(value.Expression);
+ }
+
+ public virtual VisitQueryContinuation(value : IQueryContinuation) : void
+ {
+ VisitQueryBody(value.Body);
+ VisitVariableDeclaration(value.Variable);
+ }
+
+ public virtual VisitQueryClause(value : IQueryClause) : void
+ {
+ | c is IFromClause => VisitFromClause (c);
+ | c is IJoinClause => VisitJoinClause (c);
+ | c is ILetClause => VisitLetClause (c);
+ | c is IOrderClause => VisitOrderClause(c);
+ | c is IWhereClause => VisitWhereClause(c);
+ | null => {}
+ | _ => throw NotSupportedException($"Invalid query clause '$(value.GetType().Name)'.");
+ }
+
+ public virtual VisitFromClause(value : IFromClause) : void
+ {
+ VisitExpression(value.Expression);
+ VisitVariableDeclaration(value.Variable);
+ }
+
+ public virtual VisitJoinClause(value : IJoinClause) : void
+ {
+ VisitExpression(value.Equality);
+ VisitExpression(value.In);
+ VisitVariableDeclaration(value.Into);
+ VisitExpression(value.On);
+ VisitVariableDeclaration(value.Variable);
+ }
+
+ public virtual VisitLetClause(value : ILetClause) : void
+ {
+ VisitExpression(value.Expression);
+ VisitVariableDeclaration(value.Variable);
+ }
+
+ public virtual VisitOrderClause(value : IOrderClause) : void
+ {
+ VisitExpression(value.Expression);
+ }
+
+ public virtual VisitWhereClause(value : IWhereClause) : void
+ {
+ VisitExpression(value.Expression);
+ }
+
+ public virtual VisitQueryClauseCollection(value : IQueryClauseCollection) : void
+ {
+ for (mutable i = 0; i < value.Count; ++i)
+ VisitQueryClause(value[i]);
+ }
+
+#endif
+
+ public virtual VisitMemberReference(value : IMemberReference) : void
+ {
+ match (value)
+ {
+ | m is IEventReference => VisitEventReference (m);
+ | m is IFieldReference => VisitFieldReference (m);
+ | m is IMemberDeclaration => VisitMemberDeclaration(m);
+ | m is IMethodReference => VisitMethodReference (m);
+ | m is IPropertyReference => VisitPropertyReference(m);
+ | null => {}
+ | _ => throw NotSupportedException($"Invalid member reference '$(value.GetType().Name)'.");
+ }
+
+ unless (value == null)
+ VisitType(value.DeclaringType);
+ }
+
+ public virtual VisitMemberDeclaration(value : IMemberDeclaration) : void
+ {
+ match (value)
+ {
+ | m is IEventDeclaration => VisitEventDeclaration (m);
+ | m is IFieldDeclaration => VisitFieldDeclaration (m);
+ | m is IMethodDeclaration => VisitMethodDeclaration (m);
+ | m is IPropertyDeclaration => VisitPropertyDeclaration(m);
+ | null => {}
+ | _ => throw NotSupportedException($"Invalid member declaration '$(value.GetType().Name)'.");
+ }
+ }
+
public virtual VisitOptionalModifier(ty : IOptionalModifier) : void
{
VisitType(ty.Modifier);
@@ -510,7 +689,9 @@
{
VisitCustomAttributeCollection(value.Attributes);
VisitType(value.ParameterType);
+#if REFLECTOR_VER_42
VisitExpression(value.DefaultValue);
+#endif
}
public virtual VisitParameterDeclarationCollection(value : IParameterDeclarationCollection) : void
@@ -533,7 +714,7 @@
public virtual VisitPropertyDeclarationCollection(value : IPropertyDeclarationCollection) : void
{
for (mutable i = 0; i < value.Count; ++i)
- VisitPropertyDeclaration(value[i]);
+ VisitMemberDeclaration(value[i]);
}
public virtual VisitPropertyIndexerExpression(value : IPropertyIndexerExpression) : void
@@ -549,7 +730,7 @@
public virtual VisitPropertyReferenceExpression(value : IPropertyReferenceExpression) : void
{
- VisitPropertyReference(value.Property);
+ VisitMemberReference(value.Property);
VisitExpression(value.Target);
}
@@ -623,6 +804,9 @@
| e is ILockStatement => VisitLockStatement (e)
| e is IMemoryCopyStatement => VisitMemoryCopyStatement (e)
| e is IMemoryInitializeStatement => VisitMemoryInitializeStatement(e)
+#if REFLECTOR_VER_50
+ | s is IDebugBreakStatement => VisitDebugBreakStatement (s);
+#endif
| null => {}
| _ => throw NotSupportedException($"Invalid statement type '$(value.GetType().Name)'.")
}
@@ -758,6 +942,12 @@
VisitType(value.VariableType);
}
+ public virtual VisitVariableDeclarationCollection(value : IVariableDeclarationCollection) : void
+ {
+ for (mutable i = 0; i < value.Count; ++i)
+ VisitVariableDeclaration(value[i]);
+ }
+
public virtual VisitVariableDeclarationExpression(value : IVariableDeclarationExpression) : void
{
VisitVariableDeclaration(value.Variable);
Modified: nemerle/trunk/tools/reflector-addon/src/CustomAttributeWrapper.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/CustomAttributeWrapper.n (original)
+++ nemerle/trunk/tools/reflector-addon/src/CustomAttributeWrapper.n Mon Mar 5 06:50:50 2007
@@ -26,7 +26,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
using Nemerle.Collections;
using Nemerle.Utility;
using System;
@@ -63,6 +62,11 @@
&& (fref.Target :> ITypeReferenceExpression).Type.Name == "MethodImplOptions" =>
_methodImplOptions = Enum.Parse(typeof (MethodImplOptions), fref.Field.Name) :> MethodImplOptions;
+#if REFLECTOR_VER_50
+ | mi is IMemberInitializerExpression
+ when mi.Member.Name == "MethodCodeType" => {}
+#endif
+
| _ =>
throw NotSupportedException();
});
@@ -79,18 +83,34 @@
[Accessor] mutable _isIn : bool;
[Accessor] mutable _isOut : bool;
[Accessor] mutable _isParamArray : bool;
+#if REFLECTOR_VER_50
+ [Accessor] mutable _defaultValue : IExpression;
+#endif
public this(value : IParameterDeclaration)
{
Init(value.Attributes, attr =>
{
- match (attr.Constructor.DeclaringType.GetTypeName())
+ def (ns, name) = attr.Constructor.DeclaringType.GetTypeName();
+ match (ns)
{
- | ("System.Runtime.InteropServices", "InAttribute") => _isIn = true; true;
- | ("System.Runtime.InteropServices", "OutAttribute") => _isOut = true; true;
- | ("System.Runtime.InteropServices", "OptionalAttribute") => /* hide it */ true;
- | ("System", "ParamArrayAttribute") => _isParamArray = true; true;
- | _ => false
+ | "System.Runtime.InteropServices" =>
+ match (name)
+ {
+ | "InAttribute" => _isIn = true; true;
+ | "OutAttribute" => _isOut = true; true;
+ | "OptionalAttribute" => /* hide it */ true;
+
+#if REFLECTOR_VER_50
+ | "DefaultParameterValueAttribute"
+ when attr.Arguments.Count == 1 => _defaultValue = attr.Arguments[0]; true;
+#endif
+
+ | _ => false;
+ }
+ | "System"
+ when name == "ParamArrayAttribute" => _isParamArray = true; true;
+ | _ => false;
}
}
);
Modified: nemerle/trunk/tools/reflector-addon/src/Helper.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/Helper.n (original)
+++ nemerle/trunk/tools/reflector-addon/src/Helper.n Mon Mar 5 06:50:50 2007
@@ -37,6 +37,17 @@
{
internal module Helper
{
+ public ToLowerInvariantString(this value : object) : string
+ {
+ | null => null;
+ | obj => obj.ToString().ToLowerInvariant();
+ }
+
+ public GetService['a](this serviceProvider : IServiceProvider) : 'a
+ {
+ serviceProvider.GetService(typeof('a)) :> 'a
+ }
+
public IsConstructor(this value : IMethodReference) : bool
{
value.Name == ".ctor" || value.Name == ".cctor";
Modified: nemerle/trunk/tools/reflector-addon/src/Language.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/Language.n (original)
+++ nemerle/trunk/tools/reflector-addon/src/Language.n Mon Mar 5 06:50:50 2007
@@ -26,18 +26,27 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+using System;
+using Reflector;
using Reflector.CodeModel;
namespace Reflector.NemerleLanguage
{
internal class Language : ILanguage
{
+ private _cfgMgr : IConfigurationManager;
+
+ public this(serviceProvider : IServiceProvider)
+ {
+ _cfgMgr = serviceProvider.GetService();
+ }
+
public GetWriter
( formatter : IFormatter
, configuration : ILanguageWriterConfiguration
) : ILanguageWriter
{
- LanguageWriter(formatter, configuration);
+ LanguageWriter(formatter, configuration, _cfgMgr);
}
public FileExtension : string
Modified: nemerle/trunk/tools/reflector-addon/src/LanguageWriter.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/LanguageWriter.n (original)
+++ nemerle/trunk/tools/reflector-addon/src/LanguageWriter.n Mon Mar 5 06:50:50 2007
@@ -48,17 +48,61 @@
public this
( formatter : IFormatter
, configuration : ILanguageWriterConfiguration
+ , configManager : IConfigurationManager
)
{
when (configuration == null)
throw ArgumentNullException("configuration");
base(formatter);
- _configuration = LanguageWriterConfiguration(configuration);
+ _configuration = LanguageWriterConfiguration(configuration, configManager);
_voidTypeCache = Hashtable();
}
+ public BeginBlock() : void
+ {
+ def bt = _configuration.BracingType;
+
+ if (bt == BracingType.Block)
+ {
+ WriteLine();
+ Write("{");
+ }
+ else when (bt == BracingType.C)
+ Write(" {");
+
+ WriteLine();
+ WriteIndent();
+ }
+
+ public EndBlock() : void
+ {
+ def bt = _configuration.BracingType;
+
+ WriteOutdent();
+
+ when (bt == BracingType.Block || bt == BracingType.C)
+ Write("}");
+
+ WriteLine();
+ }
+
+ public EndLine() : void
+ {
+ unless (_configuration.BracingType == BracingType.Indent)
+ Write(";");
+ WriteLine();
+ }
+
+ public LineBreak() : void
+ {
+ when (_configuration.BracingType == BracingType.Indent)
+ Write(" \\");
+
+ WriteLine();
+ }
+
#region Module
public override WriteAssembly(value : IAssembly) : void
@@ -115,6 +159,11 @@
def loc = Environment.ExpandEnvironmentVariables(value.Location);
when (File.Exists(loc))
WriteProperty("Size", $"$(FileInfo(loc).Length) Bytes");
+
+#if REFLECTOR_VER_50
+ WriteProperty("FileAlignment", $"$(value.FileAlignment) Bytes");
+ WriteProperty("TargetRuntimeVersion", value.TargetRuntimeVersion);
+#endif
}
public override WriteModuleReference(value : IModuleReference) : void
@@ -158,8 +207,7 @@
WriteKeyword("using");
Write(" ");
Write(ns);
- Write(";");
- WriteLine();
+ EndLine();
foundAny = true;
});
@@ -214,7 +262,7 @@
def loc = Environment.ExpandEnvironmentVariables(file.Location);
when (File.Exists(loc))
WriteProperty("Size", $"$(FileInfo(loc).Length) Bytes");
- | _ => throw NotImplementedException();
+ | _ => throw NotSupportedException();
}
}
@@ -248,6 +296,9 @@
| s is ILockStatement => WriteLockStatement (s);
| s is IMemoryCopyStatement => WriteMemoryCopyStatement (s);
| s is IMemoryInitializeStatement => WriteMemoryInitializeStatement(s);
+#if REFLECTOR_VER_50
+ | s is IDebugBreakStatement => WriteDebugBreakStatement (s);
+#endif
| s => throw NotSupportedException($"Invalid statement type '$(s.GetType().Name)'.");
}
@@ -258,10 +309,7 @@
{
WriteStatement(s);
when (IsSingleLineStatement(s))
- {
- Write(";");
- WriteLine();
- }
+ EndLine();
});
EndBlock();
}
@@ -536,6 +584,15 @@
Write(")");
}
+#if REFLECTOR_VER_50
+
+ private WriteDebugBreakStatement(_ : IDebugBreakStatement) : void
+ {
+ WriteKeyword("debug");
+ }
+
+#endif
+
#endregion
#region WriteExpression
@@ -546,7 +603,6 @@
| expr is ILiteralExpression => WriteLiteralExpression(expr);
| expr is IAssignExpression => WriteAssignExpression(expr);
| expr is ITypeOfExpression => WriteTypeOfExpression(expr);
- | expr is INamedArgumentExpression => WriteNamedArgumentExpression(expr);
| expr is ITypeReferenceExpression => WriteTypeReferenceExpression(expr);
| expr is IFieldReferenceExpression => WriteFieldReferenceExpression(expr);
| expr is IEventReferenceExpression => WriteEventReferenceExpression(expr);
@@ -555,7 +611,6 @@
| expr is IStackAllocateExpression => WriteStackAllocateExpression(expr);
| expr is IPropertyReferenceExpression => WritePropertyReferenceExpression(expr);
| expr is IArrayCreateExpression => WriteArrayCreateExpression(expr);
- | expr is IArrayInitializerExpression => WriteArrayInitializerExpression(expr);
| expr is IBaseReferenceExpression => WriteBaseReferenceExpression(expr);
| expr is IUnaryExpression => WriteUnaryExpression(expr);
| expr is IBinaryExpression => WriteBinaryExpression(expr);
@@ -583,9 +638,21 @@
| expr is ITypeOfTypedReferenceExpression => WriteTypeOfTypedReferenceExpression(expr);
| expr is IValueOfTypedReferenceExpression => WriteValueOfTypedReferenceExpression(expr);
| expr is ITypedReferenceCreateExpression => WriteTypedReferenceCreateExpression(expr);
- | expr is IObjectInitializeExpression => WriteObjectInitializeExpression(expr);
| expr is ISnippetExpression => WriteSnippetExpression(expr);
- | _ => throw NotImplementedException();
+#if REFLECTOR_VER_42
+ | expr is IArrayInitializerExpression => WriteArrayInitializerExpression(expr);
+ | expr is INamedArgumentExpression => WriteNamedArgumentExpression(expr);
+ | expr is IObjectInitializeExpression => WriteObjectInitializeExpression(expr);
+#elif REFLECTOR_VER_50
+ | expr is IAnonymousMethodExpression => WriteAnonymousMethodExpression(expr);
+ | expr is IBlockExpression => WriteBlockExpression(expr);
+ | expr is IFieldOfExpression => WriteFieldOfExpression(expr);
+ | expr is ILambdaExpression => WriteLambdaExpression(expr);
+ | expr is IMemberInitializerExpression => WriteMemberInitializerExpression(expr);
+ | expr is IMethodOfExpression => WriteMethodOfExpression(expr);
+ | expr is IQueryExpression => WriteQueryExpression(expr);
+#endif
+ | _ => throw NotSupportedException();
}
private WriteLiteralExpression(expression : ILiteralExpression) : void
@@ -595,7 +662,7 @@
| null => WriteLiteral("null");
| str is string => WriteLiteral($"\"$(EscapeString(str))\"")
| chr is char => WriteLiteral($"'$(EscapeChar(chr))'")
- | other => WriteLiteral(Convert.ToString(other, CultureInfo.InvariantCulture))
+ | other => WriteLiteral(other, NumberFormat.Auto)
}
}
@@ -647,13 +714,6 @@
Write(")");
}
- private WriteNamedArgumentExpression(expr : INamedArgumentExpression) : void
- {
- WriteMemberReference(expr.Member);
- Write(" = ");
- WriteExpression(expr.Value);
- }
-
private WriteTypeReferenceExpression(expr : ITypeReferenceExpression) : void
{
WriteType(expr.Type);
@@ -726,18 +786,17 @@
WriteKeyword("array");
if (expr.Initializer != null)
+#if REFLECTOR_VER_50
+ WriteBlockExpression(expr.Initializer);
+#else
WriteExpression(expr.Initializer);
+#endif
else if (expr.Dimensions != null && expr.Dimensions.Count != 0)
WriteList(expr.Dimensions.ToList(), "(", ")", WriteExpression);
else
Write("[]");
}
- private WriteArrayInitializerExpression(expr : IArrayInitializerExpression) : void
- {
- WriteList(expr.Expressions.ToList(), "[", "]", WriteExpression);
- }
-
private WriteBaseReferenceExpression(_ : IBaseReferenceExpression) : void
{
WriteKeyword("base");
@@ -889,10 +948,23 @@
private WriteObjectCreateExpression(expr : IObjectCreateExpression) : void
{
+#if REFLECTOR_VER_42
WriteType(expr.Constructor.DeclaringType);
+#elif REFLECTOR_VER_50
+ WriteType(expr.Type);
+#endif
+
Write("(");
WriteList(expr.Arguments.ToList(), WriteExpression);
Write(")");
+
+#if REFLECTOR_VER_50
+ unless (expr.Initializer == null || expr.Initializer.Expressions.Count == 0)
+ {
+ Write(" ");
+ WriteExpression(expr.Initializer);
+ }
+#endif
}
private WriteThisReferenceExpression(_ : IThisReferenceExpression) : void
@@ -974,17 +1046,238 @@
Write(")");
}
+ private WriteSnippetExpression(expr : ISnippetExpression) : void
+ {
+ WriteComment(expr.Value);
+ }
+
+#if REFLECTOR_VER_42
+
+ private WriteNamedArgumentExpression(expr : INamedArgumentExpression) : void
+ {
+ WriteMemberReference(expr.Member);
+ Write(" = ");
+ WriteExpression(expr.Value);
+ }
+
+ private WriteArrayInitializerExpression(expr : IArrayInitializerExpression) : void
+ {
+ WriteList(expr.Expressions.ToList(), "[", "]", WriteExpression);
+ }
+
private WriteObjectInitializeExpression(expr : IObjectInitializeExpression) : void
{
WriteType(expr.Type);
Write("()");
}
- private WriteSnippetExpression(expr : ISnippetExpression) : void
+#elif REFLECTOR_VER_50
+
+ private WriteAnonymousMethodExpression(value : IAnonymousMethodExpression) : void
{
- WriteComment(expr.Value);
+ def parameters = value.Parameters.ToList().Filter(p => !string.IsNullOrEmpty(p.Name));
+
+ WriteKeyword("fun");
+ Write(" ");
+
+ WriteList(parameters, "(", ") ", WriteParameterDeclaration);
+ WriteBody(value.Body);
+ }
+
+ private WriteBlockExpression(value : IBlockExpression) : void
+ {
+ BeginBlock();
+ WriteList(value.Expressions.ToList(), WriteExpression);
+ EndBlock();
+ }
+
+ private WriteFieldOfExpression(value : IFieldOfExpression) : void
+ {
+ WriteKeyword("fieldof");
+ Write("(");
+ WriteType(value.Field.DeclaringType);
+ Write(".");
+ WriteReference(value.Field.Name, value.Field.GetUserFriendlyName(), value.Field);
+ Write(")");
+ }
+
+ private WriteLambdaExpression(value : ILambdaExpression) : void
+ {
+ WriteList(value.Parameters.ToList(), "(", ")", p : IVariableDeclaration => WriteDeclaration(p.Name));
+ Write(" => ");
+ WriteExpression(value.Body);
+ }
+
+ private WriteMemberInitializerExpression(value : IMemberInitializerExpression) : void
+ {
+ WriteMemberReference(value.Member);
+ Write(" = ");
+ WriteExpression(value.Value);
+ }
+
+ private WriteMethodOfExpression(value : IMethodOfExpression) : void
+ {
+ WriteKeyword("methodof");
+ Write("(");
+ WriteType(value.Method.DeclaringType);
+ Write(".");
+ WriteReference(value.Method.Name, value.Method.GetUserFriendlyName(), value.Method);
+ unless (value.Type == null)
+ {
+ Write(",");
+ WriteType(value.Type);
+ }
+ Write(")");
+ }
+
+ private WriteQueryExpression(value : IQueryExpression) : void
+ {
+ Write("(");
+ WriteFromClause(value.From);
+ LineBreak();
+ WriteQueryBody(value.Body);
+ Write(")");
+ }
+
+ private WriteQueryBody(value : IQueryBody) : void
+ {
+ // from | where | let | join | orderby
+ //
+ WriteList(value.Clauses.ToList(), null, null, " ", e =>
+ {
+ WriteQueryClause(e);
+ LineBreak();
+ }
+ );
+
+ // select | group
+ //
+ WriteQueryOperation(value.Operation);
+
+ // into
+ //
+ unless (value.Continuation == null)
+ {
+ LineBreak();
+ WriteQueryContinuation(value.Continuation);
+ }
}
+ private WriteQueryOperation(value : IQueryOperation) : void
+ {
+ | o is IGroupOperation => WriteGroupOperation (o);
+ | o is ISelectOperation => WriteSelectOperation(o);
+ | null => {}
+ | _ => throw NotSupportedException($"Invalid query operation '$(value.GetType().Name)'.");
+ }
+
+ private WriteGroupOperation(value : IGroupOperation) : void
+ {
+ WriteKeyword("group");
+ Write(" ");
+ WriteExpression(value.Item);
+ Write(" ");
+ WriteKeyword("by");
+ Write(" ");
+ WriteExpression(value.Key);
+ }
+
+ private WriteSelectOperation(value : ISelectOperation) : void
+ {
+ WriteKeyword("select");
+ Write(" ");
+ WriteExpression(value.Expression);
+ }
+
+ private WriteQueryContinuation(value : IQueryContinuation) : void
+ {
+ WriteKeyword("into");
+ Write(" ");
+ WriteDeclaration(value.Variable.Name);
+ LineBreak();
+ WriteQueryBody(value.Body);
+ }
+
+ private WriteQueryClause(value : IQueryClause) : void
+ {
+ | c is IFromClause => WriteFromClause (c);
+ | c is IJoinClause => WriteJoinClause (c);
+ | c is ILetClause => WriteLetClause (c);
+ | c is IOrderClause => WriteOrderClause(c);
+ | c is IWhereClause => WriteWhereClause(c);
+ | null => {}
+ | _ => throw NotSupportedException($"Invalid query clause '$(value.GetType().Name)'.");
+ }
+
+ private WriteFromClause(value : IFromClause) : void
+ {
+ WriteKeyword("from");
+ Write(" ");
+ WriteDeclaration(value.Variable.Name);
+ Write(" ");
+ WriteKeyword("in");
+ Write(" ");
+ WriteExpression(value.Expression);
+ }
+
+ private WriteJoinClause(value : IJoinClause) : void
+ {
+ WriteKeyword("join");
+ Write(" ");
+ WriteDeclaration(value.Variable.Name);
+ Write(" ");
+ WriteKeyword("in");
+ Write(" ");
+ WriteExpression(value.In);
+ Write(" ");
+ WriteKeyword("on");
+ Write(" ");
+ WriteExpression(value.On);
+ Write(" ");
+ WriteKeyword("equals");
+ Write(" ");
+ WriteExpression(value.Equality);
+
+ unless (value.Into == null)
+ {
+ Write(" ");
+ WriteKeyword("into");
+ Write(" ");
+ WriteDeclaration(value.Into.Name);
+ }
+ }
+
+ private WriteLetClause(value : ILetClause) : void
+ {
+ WriteKeyword("let");
+ Write(" ");
+ WriteDeclaration(value.Variable.Name);
+ Write(" = ");
+ WriteExpression(value.Expression);
+ }
+
+ private WriteOrderClause(value : IOrderClause) : void
+ {
+ WriteKeyword("orderby");
+ Write(" ");
+ WriteExpression(value.Expression);
+
+ when (value.Direction == OrderDirection.Descending)
+ {
+ Write(" ");
+ WriteKeyword("descending");
+ }
+ }
+
+ private WriteWhereClause(value : IWhereClause) : void
+ {
+ WriteKeyword("where");
+ Write(" ");
+ WriteExpression(value.Expression);
+ }
+
+#endif
+
#endregion
#region Type members
@@ -1005,6 +1298,8 @@
WriteMemberName(value.Name);
Write(" : ");
WriteType(value.EventType);
+
+ unless (_configuration.BracingType == BracingType.Indent)
Write(";");
unless (_configuration.ShowTypeDeclarationBody)
@@ -1056,6 +1351,7 @@
WriteExpression(value.Initializer);
}
+ unless (_configuration.BracingType == BracingType.Indent)
Write(";");
unless (_configuration.ShowTypeDeclarationBody)
@@ -1114,13 +1410,12 @@
Write(")");
| _ => WriteMethodInvokeExpression(cd.Initializer);
}
- Write(";");
- WriteLine();
+
+ EndLine();
}
| _ =>
WriteMethodInvokeExpression(cd.Initializer);
- Write(";");
- WriteLine();
+ EndLine();
}
| _ => {}
}
@@ -1132,15 +1427,11 @@
{
WriteStatement(s);
when (IsSingleLineStatement(s))
- {
- Write(";");
- WriteLine();
- }
+ EndLine();
});
| s is IStatement =>
WriteStatement(s);
- Write(";");
- WriteLine();
+ EndLine();
| _ => {}
}
@@ -1347,6 +1638,7 @@
WriteGenericParameterConstraintList(genArgs);
}
+ unless (_configuration.BracingType == BracingType.Indent)
Write(";");
}
@@ -1394,7 +1686,7 @@
WriteDeclaration(f.Name);
// Initializer optimization.
- // Do not write redundant initializers.
+ // Strip out redundant initializers.
// Also [FlagsAttribute] marked enum values are written in hex.
//
def suppressInitializer =
@@ -1403,14 +1695,9 @@
| literal is ILiteralExpression =>
if (wrapper.IsFlagsEnumeration)
{
- match (literal.Value)
- {
- | fmt is IFormattable =>
Write(" = ");
- WriteLiteral("0x" + fmt.ToString("X2", CultureInfo.InvariantCulture));
+ WriteLiteral(literal.Value, NumberFormat.Hexadecimal);
true
- | _ => false
- }
}
else
{
@@ -1482,7 +1769,9 @@
WriteGenericParameterConstraintList(genArgs);
Write(" = ");
- WriteReference(alias, alias, typeRef);
+ // WriteReference(alias, alias, typeRef);
+ Write(alias);
+ unless (_configuration.BracingType == BracingType.Indent)
Write(";");
}
@@ -1520,11 +1809,20 @@
{
BeginBlock();
- def events = value.Events .ToList().Filter(e => !e.RuntimeSpecialName);
- def fields = value.Fields .ToList().Filter(e => !e.IsGenerated() && !e.RuntimeSpecialName);
- def innerTypes = value.NestedTypes.ToList().Filter(e => !e.IsGenerated());
- def properties = value.Properties .ToList().Filter(e => !e.IsGenerated());
- mutable methods = value.Methods .ToList().Filter(e => !e.IsGenerated());
+ mutable events = value.Events .ToList().Filter(e => !e.RuntimeSpecialName);
+ mutable fields = value.Fields .ToList().Filter(e => !e.RuntimeSpecialName);
+ mutable innerTypes = value.NestedTypes.ToList();
+ mutable properties = value.Properties .ToList();
+ mutable methods = value.Methods .ToList();
+
+ when (_configuration.HideCompilerGenerated)
+ {
+ events = events .Filter(e => !e.IsGenerated());
+ fields = fields .Filter(f => !f.IsGenerated());
+ innerTypes = innerTypes.Filter(t => !t.IsGenerated());
+ properties = properties.Filter(p => !p.IsGenerated());
+ methods = methods .Filter(m => !m.IsGenerated());
+ }
events.Iter(e : IEventDeclaration =>
{
@@ -1624,8 +1922,13 @@
private WriteVariableReference(value : IVariableReference) : void
{
- def ty = value.Variable.VariableType.GetUserFriendlyName();
- WriteReference(value.Name, $"$(value.Name) : $ty // Local variable", null);
+#if REFLECTOR_VER_42
+ def variable = value.Variable;
+#elif REFLECTOR_VER_50
+ def variable = value.Resolve();
+#endif
+ def ty = variable.VariableType.GetUserFriendlyName();
+ WriteReference(variable.Name, $"$(variable.Name) : $ty // Local variable", null);
}
private WriteMemberReference(memberReference : IMemberReference) : void
@@ -1639,6 +1942,7 @@
private WriteVariableDeclaration(value : IVariableDeclaration, inner : bool = false) : void
{
+ // Identifier, Name, Symbol
unless (inner)
{
WriteKeyword("mutable");
@@ -1698,7 +2002,7 @@
def dims = arrType.Dimensions;
when (dims.Count > 1)
{
- WriteLiteral(dims.Count.ToString(CultureInfo.InvariantCulture));
+ WriteLiteral(dims.Count, NumberFormat.Auto);
Write(", ");
}
@@ -1811,7 +2115,7 @@
{
| b is IBinaryExpression when b.Operator == BinaryOperator.BooleanOr =>
writeCase(b.Left);
- WriteLine();
+ LineBreak();
writeCase(b.Right);
| _ =>
Write("| ");
@@ -1980,10 +2284,16 @@
else
WriteType(value.ParameterType);
- unless (value.DefaultValue == null)
+#if REFLECTOR_VER_42
+ def defaultValue = value.DefaultValue;
+#elif REFLECTOR_VER_50
+ def defaultValue = wrapper.DefaultValue;
+#endif
+
+ unless (defaultValue == null)
{
Write(" = ");
- WriteExpression(value.DefaultValue);
+ WriteExpression(defaultValue);
}
}
@@ -2017,10 +2327,10 @@
when _configuration.ShowMethodDeclarationBody =>
BeginBlock();
WriteStatement(s);
- Write(";");
- WriteLine();
+ EndLine();
EndBlock();
| _ =>
+ unless (_configuration.BracingType == BracingType.Indent)
Write(";");
}
@@ -2213,6 +2523,49 @@
Write("void");
}
+ private WriteLiteral(value : object, suggestedFormat : NumberFormat) : void
+ {
+ def numFmt = if (_configuration.NumberFormat == NumberFormat.Auto) suggestedFormat else _configuration.NumberFormat;
+ def typeCode = if (value is IConvertible) (value :> IConvertible).GetTypeCode() else TypeCode.Object;
+
+ match (typeCode)
+ {
+ | TypeCode.SByte
+ | TypeCode.Byte
+ | TypeCode.Int16
+ | TypeCode.UInt16
+ | TypeCode.Int32
+ | TypeCode.UInt32
+ | TypeCode.Int64
+ | TypeCode.UInt64 =>
+ def strFmt =
+ match (numFmt)
+ {
+ | NumberFormat.Hexadecimal => "X";
+ | NumberFormat.Decimal => "D";
+ | NumberFormat.Auto =>
+ def longVal = if (typeCode == TypeCode.UInt64)
+ value :> long;
+ else
+ (value :> IConvertible).ToInt64(CultureInfo.InvariantCulture);
+
+ if (longVal < 16 || (longVal < 1000 && (longVal % 10) == 0))
+ "D";
+ else
+ "X";
+ }
+
+ def formattable = value :> IFormattable;
+
+ when (strFmt == "X")
+ WriteLiteral("0x");
+
+ WriteLiteral(formattable.ToString(strFmt, CultureInfo.InvariantCulture));
+
+ | _ => WriteLiteral(Convert.ToString(value, CultureInfo.InvariantCulture));
+ }
+ }
+
#endregion
#region Keywords
Modified: nemerle/trunk/tools/reflector-addon/src/LanguageWriterConfiguration.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/LanguageWriterConfiguration.n (original)
+++ nemerle/trunk/tools/reflector-addon/src/LanguageWriterConfiguration.n Mon Mar 5 06:50:50 2007
@@ -27,47 +27,90 @@
*/
using System;
+using Nemerle.Utility;
+
+using Reflector;
using Reflector.CodeModel;
namespace Reflector.NemerleLanguage
{
+ internal enum NumberFormat
+ {
+ | Auto
+ | Hexadecimal
+ | Decimal
+ }
+
+ internal enum BracingType
+ {
+ | Block
+ | C
+ | Indent
+ }
+
internal class LanguageWriterConfiguration
{
+ static FalseString : string = false.ToLowerInvariantString();
+
_configuration : ILanguageWriterConfiguration;
- public this(configuration : ILanguageWriterConfiguration)
- {
+ [Accessor] _numberFormat : NumberFormat;
+ [Accessor] _bracingType : BracingType;
+ [Accessor] _hideCompilerGenerated : bool;
+
+ public this
+ ( configuration : ILanguageWriterConfiguration
+ , configManager : IConfigurationManager
+ )
+ {
+ _numberFormat = ParseEnumValue(configuration["NumberFormat"], NumberFormat.Auto);
+
+ unless (configManager == null)
+ {
+ def memerleConfig = configManager["Nemerle"];
+ _bracingType = ParseEnumValue(memerleConfig.GetProperty("BracingType"), BracingType.Block);
+ _hideCompilerGenerated = memerleConfig.GetProperty("HideCompilerGenerated") != FalseString;
+ }
+
_configuration = configuration;
}
+ private static ParseEnumValue['a](strValue : string, defaultValue : 'a) : 'a
+ {
+ if (!string.IsNullOrEmpty(strValue) && Array.IndexOf(Enum.GetNames(typeof('a)), strValue) >= 0)
+ Enum.Parse(typeof('a), strValue) :> 'a;
+ else
+ defaultValue;
+ }
+
public ShowCustomAttributes : bool
{
- get { _configuration["ShowCustomAttributes"] == "true" }
+ get { _configuration["ShowCustomAttributes"] != FalseString }
}
public ShowDocumentation : bool
{
- get { _configuration["ShowDocumentation"] == "true" }
+ get { _configuration["ShowDocumentation"] != FalseString }
}
public ShowNamespaceBody : bool
{
- get { _configuration["ShowNamespaceBody"] == "true" }
+ get { _configuration["ShowNamespaceBody"] != FalseString }
}
public ShowNamespaceImports : bool
{
- get { _configuration["ShowNamespaceImports"] == "true" }
+ get { _configuration["ShowNamespaceImports"] != FalseString }
}
public ShowMethodDeclarationBody : bool
{
- get { _configuration["ShowMethodDeclarationBody"] == "true" }
+ get { _configuration["ShowMethodDeclarationBody"] != FalseString }
}
public ShowTypeDeclarationBody : bool
{
- get { _configuration["ShowTypeDeclarationBody"] == "true" }
+ get { _configuration["ShowTypeDeclarationBody"] != FalseString }
}
#region IsVisible
Added: nemerle/trunk/tools/reflector-addon/src/OptionsPage.n
==============================================================================
--- (empty file)
+++ nemerle/trunk/tools/reflector-addon/src/OptionsPage.n Mon Mar 5 06:50:50 2007
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2003-2007 The University of Wroclaw.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the University may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL THE UNIVERSITY BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if REFLECTOR_VER_50
+
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+
+using Reflector;
+using Reflector.CodeModel;
+
+namespace Reflector.NemerleLanguage
+{
+ internal class OptionsPage : Control, IPropertyPage
+ {
+ private _nemerleConfig : IConfiguration;
+
+ private mutable _cbBracingType : ComboBox;
+ private mutable _hideCompilerGenerated : CheckBox;
+
+ public this(nemerleConfig : IConfiguration)
+ {
+ when (nemerleConfig == null)
+ throw ArgumentNullException("nemerleConfig");
+
+ _nemerleConfig = nemerleConfig;
+
+ Name = "OptionsPage";
+ Dock = DockStyle.Fill;
+ }
+
+ #region Component Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private InitializeComponent() : void
+ {
+ _cbBracingType = ComboBox();
+ _hideCompilerGenerated = CheckBox();
+
+ def panel = TableLayoutPanel();
+ def lblBracingType = Label();
+
+ panel.SuspendLayout();
+ SuspendLayout();
+
+ // panel
+ //
+ panel.ColumnCount = 2;
+ _ = panel.ColumnStyles.Add(ColumnStyle(SizeType.Percent, 40.0f));
+ _ = panel.ColumnStyles.Add(ColumnStyle(SizeType.Percent, 60.0f));
+ panel.Controls.Add(_hideCompilerGenerated, 0, 0);
+ panel.Controls.Add(lblBracingType, 0, 1);
+ panel.Controls.Add(_cbBracingType, 1, 1);
+ panel.Dock = DockStyle.Fill;
+ panel.Name = "panel";
+ panel.RowCount = 3;
+ _ = panel.RowStyles.Add(RowStyle(SizeType.Percent, 20.0f));
+ _ = panel.RowStyles.Add(RowStyle(SizeType.Percent, 20.0f));
+ _ = panel.RowStyles.Add(RowStyle(SizeType.Percent, 60.0f));
+
+ // _hideCompilerGeneratedGenerated
+ //
+ _hideCompilerGenerated.Anchor = AnchorStyles.None;
+ _hideCompilerGenerated.AutoSize = true;
+ panel.SetColumnSpan(_hideCompilerGenerated, 2);
+ _hideCompilerGenerated.Name = "HideCompilerGenerated";
+ _hideCompilerGenerated.Text = "&Hide compiler generated members";
+
+ // lblBracingType
+ //
+ lblBracingType.Anchor = AnchorStyles.None;
+ lblBracingType.AutoSize = true;
+ lblBracingType.Name = "lblBracingType";
+ lblBracingType.Text = "&Bracing type";
+
+ // _cbBracingType
+ //
+ _cbBracingType.Anchor = AnchorStyles.None;
+ _cbBracingType.Name = typeof(BracingType).Name;
+ _cbBracingType.DataSource = Enum.GetNames(typeof(BracingType));
+ _cbBracingType.DropDownStyle = ComboBoxStyle.DropDownList;
+
+ // OptionsPage
+ //
+ Controls.Add(panel);
+
+ panel.ResumeLayout(false);
+ panel.PerformLayout();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ #region IPropertyPage members
+
+ public Cancel() : void
+ {
+ }
+
+ public Commit() : void
+ {
+ // Untill the options page is shown, all options match the config file.
+ //
+ unless (Controls.Count == 0)
+ {
+ _nemerleConfig.SetProperty(_hideCompilerGenerated.Name, _hideCompilerGenerated.Checked.ToLowerInvariantString(), true.ToLowerInvariantString());
+ _nemerleConfig.SetProperty(_cbBracingType.Name, _cbBracingType.Text, BracingType.Block.ToString());
+ }
+ }
+
+ protected override OnCreateControl() : void
+ {
+ base.OnCreateControl();
+
+ // Initialize the component on the first time.
+ //
+ when (Controls.Count == 0)
+ InitializeComponent();
+
+ _hideCompilerGenerated.Checked = _nemerleConfig.GetProperty(_hideCompilerGenerated.Name) != false.ToLowerInvariantString();
+ _cbBracingType.SelectedItem = _nemerleConfig.GetProperty(_cbBracingType.Name, BracingType.Block.ToString());
+ }
+
+ public Title : string
+ {
+ get { "Nemerle"; }
+ }
+
+ #endregion
+ }
+}
+
+#endif
\ No newline at end of file
Modified: nemerle/trunk/tools/reflector-addon/src/Package.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/Package.n (original)
+++ nemerle/trunk/tools/reflector-addon/src/Package.n Mon Mar 5 06:50:50 2007
@@ -43,13 +43,23 @@
when (serviceProvider == null)
throw ArgumentNullException("serviceProvider");
- _langMgr = serviceProvider.GetService(typeof(ILanguageManager)) :> ILanguageManager;
+ _langMgr = serviceProvider.GetService();
when (_langMgr == null)
throw InvalidOperationException("ILanguageManager not available");
- _nemerleLang = Language();
+ _nemerleLang = Language(serviceProvider);
_langMgr.RegisterLanguage(_nemerleLang);
+
+#if REFLECTOR_VER_50
+
+ def propPageMgr = serviceProvider.GetService() : IPropertyPageManager;
+ def configMgr = serviceProvider.GetService() : IConfigurationManager;
+
+ propPageMgr.OptionsPages.Add(OptionsPage(configMgr["Nemerle"]));
+
+#endif
+
}
public Unload() : void
More information about the svn
mailing list