public Type BuildTypeFromParent(String newTypeName, Type sourceContent, StringBuilder writer, IBuildVisitorDelegate buildVisitorDelegate) { newTypeName = GetBytecodeTypeName(newTypeName); StringBuilder sb = new StringBuilder(); ClassWriter cw = BeanContext.RegisterWithLifecycle(new ClassWriter(ambethClassLoader, sb)).Finish(); IClassVisitor visitor = cw;// new SuppressLinesClassVisitor(cw); visitor = new LogImplementationsClassVisitor(visitor); //visitor = new TraceClassVisitor(visitor, sb); IClassVisitor wrappedVisitor = visitor; Type originalModifiers = BytecodeBehaviorState.State.OriginalType; if (originalModifiers.IsInterface || originalModifiers.IsAbstract) { wrappedVisitor = new InterfaceToClassVisitor(wrappedVisitor); } if (!PublicConstructorVisitor.HasValidConstructor()) { wrappedVisitor = new PublicConstructorVisitor(wrappedVisitor); } wrappedVisitor = buildVisitorDelegate.Invoke(wrappedVisitor); if (Object.ReferenceEquals(wrappedVisitor, visitor)) { // there seem to be no custom action to be done with the new type. So we skip type enhancement return(null); } visitor = wrappedVisitor; visitor.Visit(sourceContent.Attributes, newTypeName, sourceContent, new Type[0]); Type content = null; try { visitor.VisitEnd(); content = cw.GetCreatedType(); } catch (Exception) { Log.Error(sb.ToString()); throw; } if (content == null) { throw new Exception("A visitor did not correctly call its cascaded visitor with VisitEnd()"); } //Verify(content); return(content); }