avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hamm...@apache.org
Subject svn commit: rev 46323 - in avalon/trunk/central/laboratory/avalon-net/DynamicProxy: . Builder Builder/CodeGenerators DynamicProxyTest
Date Sun, 19 Sep 2004 07:09:32 GMT
Author: hammett
Date: Sun Sep 19 00:09:31 2004
New Revision: 46323

Added:
   avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/GeneratorContext.cs   (contents,
props changed)
Modified:
   avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Apache.Avalon.DynamicProxy.csproj
   avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/BaseCodeGenerator.cs
   avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/ClassProxyGenerator.cs
   avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/InterfaceProxyGenerator.cs
   avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/DefaultProxyBuilder.cs
   avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/IProxyBuilder.cs
   avalon/trunk/central/laboratory/avalon-net/DynamicProxy/DynamicProxyTest/CustomProxyGeneratorTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/DynamicProxy/ProxyGenerator.cs
Log:
Bug fixes.

Modified: avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Apache.Avalon.DynamicProxy.csproj
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Apache.Avalon.DynamicProxy.csproj
(original)
+++ avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Apache.Avalon.DynamicProxy.csproj
Sun Sep 19 00:09:31 2004
@@ -109,6 +109,11 @@
                     BuildAction = "Compile"
                 />
                 <File
+                    RelPath = "Builder\GeneratorContext.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
                     RelPath = "Builder\IProxyBuilder.cs"
                     SubType = "Code"
                     BuildAction = "Compile"

Modified: avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/BaseCodeGenerator.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/BaseCodeGenerator.cs
(original)
+++ avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/BaseCodeGenerator.cs
Sun Sep 19 00:09:31 2004
@@ -24,33 +24,29 @@
 	/// </summary>
 	public abstract class BaseCodeGenerator
 	{
+		private static readonly String FILE_NAME = "GeneratedAssembly.dll";
+
+		private Type m_baseType = typeof(Object);
+		private AssemblyBuilder m_assemblyBuilder;
 		private TypeBuilder m_typeBuilder;
 		private FieldBuilder m_handlerField;
 		private ConstructorBuilder m_constBuilder;
 		private IList m_generated = new ArrayList();
 
-		private EnhanceTypeDelegate m_enhanceDelegate;
-		private ScreenInterfacesDelegate m_screenInterfacesDelegate;
-
-		protected BaseCodeGenerator()
-		{
-		}
+		private GeneratorContext m_context;
 
-		protected BaseCodeGenerator(EnhanceTypeDelegate enhance, 
-			ScreenInterfacesDelegate screenInterfaces)
+		protected BaseCodeGenerator(GeneratorContext context)
 		{
-			m_enhanceDelegate = enhance;
-			m_screenInterfacesDelegate = screenInterfaces;
+			m_context = context;
 		}
 
-		protected EnhanceTypeDelegate EnhanceTypeDelegate
+		protected BaseCodeGenerator() : this(new GeneratorContext())
 		{
-			get { return m_enhanceDelegate; }
 		}
 
-		protected ScreenInterfacesDelegate ScreenInterfacesDelegate
+		protected GeneratorContext Context
 		{
-			get { return m_screenInterfacesDelegate; }
+			get { return m_context; }
 		}
 
 		protected TypeBuilder MainTypeBuilder
@@ -73,18 +69,30 @@
 			AssemblyName assemblyName = new AssemblyName();
 			assemblyName.Name = "DynamicAssemblyProxyGen";
 
-			AssemblyBuilder assemblyBuilder =
+			ModuleBuilder moduleBuilder = null;
+
+#if (DEBUG)
+			m_assemblyBuilder =
+				AppDomain.CurrentDomain.DefineDynamicAssembly(
+					assemblyName,
+					AssemblyBuilderAccess.RunAndSave);
+			moduleBuilder = m_assemblyBuilder.DefineDynamicModule(assemblyName.Name, FILE_NAME);
+#else
+			m_assemblyBuilder =
 				AppDomain.CurrentDomain.DefineDynamicAssembly(
 					assemblyName,
 					AssemblyBuilderAccess.Run);
+			moduleBuilder = m_assemblyBuilder.DefineDynamicModule(assemblyName.Name, true);
+#endif
 
-			return assemblyBuilder.DefineDynamicModule(assemblyName.Name, true);
+			return moduleBuilder;
 		}
 
 		protected virtual TypeBuilder CreateTypeBuilder(Type baseType, Type[] interfaces)
 		{
 			ModuleBuilder moduleBuilder = CreateDynamicModule();
 
+			m_baseType = baseType;
 			m_typeBuilder = moduleBuilder.DefineType(
 				"ProxyType", TypeAttributes.Public | TypeAttributes.Class, baseType, interfaces);
 
@@ -94,14 +102,52 @@
 			return m_typeBuilder;
 		}
 
+		protected virtual void EnhanceType()
+		{
+			if (Context.EnhanceType != null)
+			{
+				Context.EnhanceType(MainTypeBuilder, HandlerFieldBuilder, DefaultConstructorBuilder);
+			}
+		}
+
+		protected virtual Type[] ScreenInterfaces(Type[] interfaces)
+		{
+			if (Context.ScreenInterfaces != null)
+			{
+				interfaces = Context.ScreenInterfaces(interfaces);
+			}
+
+			return interfaces;
+		}
+
+		protected virtual Type CreateType()
+		{
+			Type newType = MainTypeBuilder.CreateType();
+#if (DEBUG)
+			m_assemblyBuilder.Save(FILE_NAME);
+#endif
+			return newType;
+		}
+
 		/// <summary>
 		/// Generates a public field holding the <see cref="IInvocationHandler"/>
 		/// </summary>
 		/// <returns><see cref="FieldBuilder"/> instance</returns>
 		protected FieldBuilder GenerateField()
 		{
-			return m_typeBuilder.DefineField("handler",
-			                                 typeof (IInvocationHandler), FieldAttributes.Public);
+			return GenerateField("handler", typeof (IInvocationHandler) );
+		}
+
+		/// <summary>
+		/// Generates a public field
+		/// </summary>
+		/// <param name="name">Field's name</param>
+		/// <param name="type">Field's type</param>
+		/// <returns></returns>
+		protected FieldBuilder GenerateField( String name, Type type )
+		{
+			return m_typeBuilder.DefineField(name,
+				typeof (IInvocationHandler), FieldAttributes.Public);
 		}
 
 		/// <summary>
@@ -118,7 +164,7 @@
 
 			ILGenerator ilGenerator = consBuilder.GetILGenerator();
 			ilGenerator.Emit(OpCodes.Ldarg_0);
-			ilGenerator.Emit(OpCodes.Call, typeof (Object).GetConstructor(new Type[0]));
+			ilGenerator.Emit(OpCodes.Call, m_baseType.GetConstructor(new Type[0]));
 			ilGenerator.Emit(OpCodes.Ldarg_0);
 			ilGenerator.Emit(OpCodes.Ldarg_1);
 			ilGenerator.Emit(OpCodes.Stfld, m_handlerField);
@@ -135,7 +181,10 @@
 		{
 			foreach(Type inter in interfaces)
 			{
-				GenerateTypeImplementation(inter, false);
+				if (!Context.ShouldSkip( inter ))
+				{
+					GenerateTypeImplementation(inter, false);
+				}
 			}
 		}
 

Modified: avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/ClassProxyGenerator.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/ClassProxyGenerator.cs
(original)
+++ avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/ClassProxyGenerator.cs
Sun Sep 19 00:09:31 2004
@@ -25,29 +25,21 @@
 		{
 		}
 
-		public ClassProxyGenerator(EnhanceTypeDelegate enhance, ScreenInterfacesDelegate screenInterfaces)
: 
-			base(enhance, screenInterfaces)
+		public ClassProxyGenerator(GeneratorContext context) : base(context)
 		{
 		}
 
 		public Type GenerateCode(Type baseClass)
 		{
 			Type[] interfaces = new Type[0];
-
-			if (ScreenInterfacesDelegate != null)
-			{
-				interfaces = ScreenInterfacesDelegate(interfaces);
-			}
+			interfaces = ScreenInterfaces(interfaces);
 
 			CreateTypeBuilder( baseClass, interfaces );
 			GenerateTypeImplementation( baseClass, true );
 
-			if (EnhanceTypeDelegate != null)
-			{
-				EnhanceTypeDelegate(MainTypeBuilder, HandlerFieldBuilder, DefaultConstructorBuilder);
-			}
+			EnhanceType();
 
-			return MainTypeBuilder.CreateType();
+			return CreateType();
 		}
 	}
 }

Modified: avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/InterfaceProxyGenerator.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/InterfaceProxyGenerator.cs
(original)
+++ avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/CodeGenerators/InterfaceProxyGenerator.cs
Sun Sep 19 00:09:31 2004
@@ -15,8 +15,6 @@
 namespace Apache.Avalon.DynamicProxy.Builder.CodeGenerators
 {
 	using System;
-	using System.Reflection;
-	using System.Reflection.Emit;
 
 	/// <summary>
 	/// Summary description for InterfaceProxyGenerator.
@@ -27,28 +25,21 @@
 		{
 		}
 
-		public InterfaceProxyGenerator(EnhanceTypeDelegate enhance, ScreenInterfacesDelegate screenInterfaces)
: 
-			base(enhance, screenInterfaces)
+		public InterfaceProxyGenerator(GeneratorContext context) : base(context)
 		{
-
 		}
 
-		public Type GenerateCode(Type[] interfaces)
+		public virtual Type GenerateCode(Type[] interfaces)
 		{
-			if (ScreenInterfacesDelegate != null)
-			{
-				interfaces = ScreenInterfacesDelegate(interfaces);
-			}
+			interfaces = ScreenInterfaces(interfaces);
 
-			CreateTypeBuilder( null, interfaces );
+			CreateTypeBuilder( typeof(Object), interfaces );
 			GenerateInterfaceImplementation( interfaces );
 
-			if (EnhanceTypeDelegate != null)
-			{
-				EnhanceTypeDelegate(MainTypeBuilder, HandlerFieldBuilder, DefaultConstructorBuilder);
-			}
+			EnhanceType();
 
-			return MainTypeBuilder.CreateType();
+			return CreateType();
 		}
+
 	}
 }

Modified: avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/DefaultProxyBuilder.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/DefaultProxyBuilder.cs
(original)
+++ avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/DefaultProxyBuilder.cs
Sun Sep 19 00:09:31 2004
@@ -24,29 +24,27 @@
 	{
 		#region IProxyBuilder Members
 
-		public Type CreateInterfaceProxy(Type[] interfaces)
+		public virtual Type CreateInterfaceProxy(Type[] interfaces)
 		{
 			InterfaceProxyGenerator generator = new InterfaceProxyGenerator();
 			return generator.GenerateCode( interfaces );
 		}
 
-		public Type CreateClassProxy(Type theClass)
+		public virtual Type CreateClassProxy(Type theClass)
 		{
 			ClassProxyGenerator generator = new ClassProxyGenerator();
 			return generator.GenerateCode( theClass );
 		}
 
-		public Type CreateCustomInterfaceProxy(Type[] interfaces, EnhanceTypeDelegate enhance,

-			ScreenInterfacesDelegate screenInterfaces)
+		public virtual Type CreateCustomInterfaceProxy(Type[] interfaces, GeneratorContext context)
 		{
-			InterfaceProxyGenerator generator = new InterfaceProxyGenerator(enhance, screenInterfaces);
+			InterfaceProxyGenerator generator = new InterfaceProxyGenerator(context);
 			return generator.GenerateCode( interfaces );
 		}
 
-		public Type CreateCustomClassProxy(Type theClass, EnhanceTypeDelegate enhance, 
-			ScreenInterfacesDelegate screenInterfaces)
+		public virtual Type CreateCustomClassProxy(Type theClass, GeneratorContext context)
 		{
-			ClassProxyGenerator generator = new ClassProxyGenerator(enhance, screenInterfaces);
+			ClassProxyGenerator generator = new ClassProxyGenerator(context);
 			return generator.GenerateCode( theClass );
 		}
 

Added: avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/GeneratorContext.cs
==============================================================================
--- (empty file)
+++ avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/GeneratorContext.cs	Sun
Sep 19 00:09:31 2004
@@ -0,0 +1,68 @@
+// Copyright 2004 The Apache Software Foundation
+// 
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// 
+//     http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+namespace Apache.Avalon.DynamicProxy
+{
+	using System;
+	using System.Collections;
+
+	/// <summary>
+	/// Summary description for GeneratorContext.
+	/// </summary>
+	public sealed class GeneratorContext : DictionaryBase
+	{
+		private EnhanceTypeDelegate m_enhance;
+		private ScreenInterfacesDelegate m_screenInterfaces;
+		private IList m_skipInterfaces = new ArrayList();
+
+		public GeneratorContext()
+		{
+		}
+
+		public GeneratorContext(EnhanceTypeDelegate enhanceDelegate, 
+			ScreenInterfacesDelegate screenDelegate)
+		{
+			m_enhance = enhanceDelegate;
+			m_screenInterfaces = screenDelegate;
+		}
+
+		public EnhanceTypeDelegate EnhanceType
+		{
+			get { return m_enhance; }
+			set { m_enhance = value; }
+		}
+
+		public ScreenInterfacesDelegate ScreenInterfaces
+		{
+			get { return m_screenInterfaces; }
+			set { m_screenInterfaces = value; }
+		}
+
+		public bool ShouldSkip( Type interfaceType )
+		{
+			return m_skipInterfaces.Contains( interfaceType );
+		}
+
+		public void AddInterfaceToSkip( Type interfaceType )
+		{
+			m_skipInterfaces.Add( interfaceType );
+		}
+
+		public object this[ String key ]
+		{
+			get { return Dictionary[key]; }
+			set { Dictionary[key] = value; }
+		}
+	}
+}

Modified: avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/IProxyBuilder.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/IProxyBuilder.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/DynamicProxy/Builder/IProxyBuilder.cs	Sun Sep
19 00:09:31 2004
@@ -23,12 +23,10 @@
 	{
 		Type CreateInterfaceProxy( Type[] interfaces );
 
-		Type CreateCustomInterfaceProxy( Type[] interfaces, EnhanceTypeDelegate enhance, 
-			ScreenInterfacesDelegate screenInterfaces );
+		Type CreateCustomInterfaceProxy( Type[] interfaces, GeneratorContext context );
 
 		Type CreateClassProxy( Type theClass );
 
-		Type CreateCustomClassProxy( Type theClass, EnhanceTypeDelegate enhance, 
-			ScreenInterfacesDelegate screenInterfaces );
+		Type CreateCustomClassProxy( Type theClass, GeneratorContext context );
 	}
 }

Modified: avalon/trunk/central/laboratory/avalon-net/DynamicProxy/DynamicProxyTest/CustomProxyGeneratorTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/DynamicProxy/DynamicProxyTest/CustomProxyGeneratorTestCase.cs
(original)
+++ avalon/trunk/central/laboratory/avalon-net/DynamicProxy/DynamicProxyTest/CustomProxyGeneratorTestCase.cs
Sun Sep 19 00:09:31 2004
@@ -31,7 +31,6 @@
 		private ProxyGenerator m_generator;
 		private bool m_enhanceInvoked;
 		private bool m_screenInvoked;
-		private bool m_constructorInvoked;
 
 		[SetUp]
 		public void Init()
@@ -39,37 +38,37 @@
 			m_generator = new ProxyGenerator();
 			m_enhanceInvoked = false;
 			m_screenInvoked = false;
-			m_constructorInvoked = false;
 		}
 
 		[Test]
 		public void CreateCustomProxy()
 		{
+			GeneratorContext context = new GeneratorContext( 
+				new EnhanceTypeDelegate(EnhanceType),
+				new ScreenInterfacesDelegate(ScreenInterfaces));
+
 			object proxy = m_generator.CreateCustomProxy(
 				typeof (IMyInterface), 
-				new StandardInvocationHandler(new MyInterfaceImpl()),
-				new EnhanceTypeDelegate(EnhanceType), 
-				new ScreenInterfacesDelegate(ScreenInterfaces), 
-				new ConstructorArgumentsDelegate(BuildConstructorArguments));
+				new StandardInvocationHandler(new MyInterfaceImpl()), context);
 
 			Assert( m_enhanceInvoked );
 			Assert( m_screenInvoked );
-			Assert( m_constructorInvoked );
 		}
 
 		[Test]
 		public void CreateCustomClassProxy()
 		{
+			GeneratorContext context = new GeneratorContext( 
+				new EnhanceTypeDelegate(EnhanceType),
+				new ScreenInterfacesDelegate(ScreenInterfaces));
+
 			object proxy = m_generator.CreateCustomClassProxy(
 				typeof (ServiceClass), 
 				new StandardInvocationHandler(new ServiceClass()),
-				new EnhanceTypeDelegate(EnhanceType), 
-				new ScreenInterfacesDelegate(ScreenInterfaces), 
-				new ConstructorArgumentsDelegate(BuildConstructorArguments));
+				context);
 
 			Assert( m_enhanceInvoked );
 			Assert( m_screenInvoked );
-			Assert( m_constructorInvoked );
 		}
 
 		private void EnhanceType(TypeBuilder mainType, FieldBuilder handlerFieldBuilder, ConstructorBuilder
constructorBuilder)
@@ -92,18 +91,6 @@
 			m_screenInvoked = true;
 
 			return interfaces;
-		}
-		
-		private object[] BuildConstructorArguments(Type generatedType, IInvocationHandler handler)
-		{
-			Assert( !m_constructorInvoked );
-
-			AssertNotNull( generatedType );
-			AssertNotNull( handler );
-
-			m_constructorInvoked = true;
-
-			return new object[] { handler };
 		}
 	}
 }

Modified: avalon/trunk/central/laboratory/avalon-net/DynamicProxy/ProxyGenerator.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/DynamicProxy/ProxyGenerator.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/DynamicProxy/ProxyGenerator.cs	Sun Sep 19 00:09:31
2004
@@ -23,8 +23,6 @@
 
 	public delegate Type[] ScreenInterfacesDelegate( Type[] interfaces );
 
-	public delegate object[] ConstructorArgumentsDelegate( Type generatedType, IInvocationHandler
handler );
-
 	/// <summary>
 	/// Generates a Java style proxy. This overrides the .Net proxy requirements 
 	/// that forces one to extend MarshalByRefObject or (for a different purpose)
@@ -56,7 +54,7 @@
 			m_builder = builder;
 		}
 
-		public ProxyGenerator() : this( new ProxyBuilderImpl() )
+		public ProxyGenerator() : this( new DefaultProxyBuilder() )
 		{
 		}
 
@@ -74,15 +72,13 @@
 			return CreateProxyInstance( newType, handler );
 		}
 
-		public virtual object CreateCustomClassProxy(Type baseClass, IInvocationHandler handler,

-			EnhanceTypeDelegate enhance, 
-			ScreenInterfacesDelegate screenInterfaces, 
-			ConstructorArgumentsDelegate constructorArguments)
+		public virtual object CreateCustomClassProxy(Type baseClass, 
+			IInvocationHandler handler, GeneratorContext context)
 		{
-			AssertCreateClassProxyArguments(baseClass, handler);
+			AssertCreateClassProxyArguments(baseClass, handler, context);
 
-			Type newType = ProxyBuilder.CreateCustomClassProxy(baseClass, enhance, screenInterfaces);
-			return CreateCustomProxyInstance( newType, handler, constructorArguments );
+			Type newType = ProxyBuilder.CreateCustomClassProxy(baseClass, context);
+			return CreateProxyInstance( newType, handler, context );
 		}
 
 		/// <summary>
@@ -117,17 +113,13 @@
 		/// </summary>
 		/// <param name="theInterface"></param>
 		/// <param name="handler"></param>
-		/// <param name="enhance"></param>
-		/// <param name="screenInterfaces"></param>
-		/// <param name="constructorArguments"></param>
+		/// <param name="context"></param>
 		/// <returns></returns>
 		public virtual object CreateCustomProxy(Type theInterface, 
-			IInvocationHandler handler, EnhanceTypeDelegate enhance, 
-			ScreenInterfacesDelegate screenInterfaces, 
-			ConstructorArgumentsDelegate constructorArguments )
+			IInvocationHandler handler, 
+			GeneratorContext context )
 		{
-			return CreateCustomProxy( new Type[] { theInterface }, handler, 
-				enhance, screenInterfaces, constructorArguments );
+			return CreateCustomProxy( new Type[] { theInterface }, handler, context );
 		}
 
 		/// <summary>
@@ -135,18 +127,14 @@
 		/// </summary>
 		/// <param name="interfaces"></param>
 		/// <param name="handler"></param>
-		/// <param name="enhance"></param>
-		/// <param name="screenInterfaces"></param>
-		/// <param name="constructorArguments"></param>
+		/// <param name="context"></param>
 		/// <returns></returns>
 		public virtual object CreateCustomProxy(Type[] interfaces, 
-			IInvocationHandler handler, EnhanceTypeDelegate enhance, 
-			ScreenInterfacesDelegate screenInterfaces, 
-			ConstructorArgumentsDelegate constructorArguments )
-		{
-			AssertCreateProxyArguments( interfaces, handler);
-			Type newType = ProxyBuilder.CreateCustomInterfaceProxy(interfaces, enhance, screenInterfaces);
-			return CreateCustomProxyInstance( newType, handler, constructorArguments );
+			IInvocationHandler handler, GeneratorContext context )
+		{
+			AssertCreateProxyArguments( interfaces, handler, context );
+			Type newType = ProxyBuilder.CreateCustomInterfaceProxy(interfaces, context);
+			return CreateProxyInstance( newType, handler, context );
 		}
 
 		protected virtual object CreateProxyInstance(Type type, IInvocationHandler handler)
@@ -154,17 +142,9 @@
 			return Activator.CreateInstance(type, new object[] {handler});
 		}
 
-		protected virtual object CreateCustomProxyInstance(Type type, IInvocationHandler handler,
ConstructorArgumentsDelegate constructorArguments)
+		protected virtual object CreateProxyInstance(Type type, IInvocationHandler handler, GeneratorContext
context)
 		{
-			if (constructorArguments != null)
-			{
-				object[] arguments = constructorArguments( type, handler );
-				return Activator.CreateInstance(type, arguments);
-			}
-			else
-			{
-				return CreateProxyInstance( type, handler );
-			}
+			return CreateProxyInstance( type, handler );
 		}
 
 		protected static void AssertCreateProxyArguments(Type[] interfaces, IInvocationHandler
handler)
@@ -183,6 +163,16 @@
 			}
 		}
 
+		protected static void AssertCreateProxyArguments(Type[] interfaces, IInvocationHandler
handler, GeneratorContext context)
+		{
+			AssertCreateProxyArguments(interfaces, handler);
+
+			if (context == null)
+			{
+				throw new ArgumentNullException("context");
+			}
+		}
+
 		protected static void AssertCreateClassProxyArguments(Type baseClass, IInvocationHandler
handler)
 		{
 			if (baseClass == null)
@@ -196,6 +186,15 @@
 			if (handler == null)
 			{
 				throw new ArgumentNullException("handler");
+			}
+		}
+
+		protected static void AssertCreateClassProxyArguments(Type baseClass, IInvocationHandler
handler, GeneratorContext context)
+		{
+			AssertCreateClassProxyArguments(baseClass, handler);
+			if (context == null)
+			{
+				throw new ArgumentNullException("context");
 			}
 		}
 	}

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org


Mime
View raw message