public OperationResult Morph(MutationParameters parameters)
 {
     parameters.Validate();
       if (parameters.SourceType == null) throw new ArgumentException("parameters must contain a SourceType", "parameters");
       var targetType = parameters.SourceType; // the source is also the target
       var visitor = new MorphIntoInterfaceVisitor(parameters);
       targetType.Accept(visitor);
       return visitor.Result;
 }
 public IOperationResult Mutate(MutationParameters parameters)
 {
     parameters.Validate();
       var assembly = parameters.Assembly;
       var result = new CompositeOperationResult();
       assembly.MainModule.GetAllTypes(). // TODO: what about other modules?
     Where(type => DoesRoles(type)).
     // TODO: do we need a special order here? like base classes first?
     ForEach(type => {
       var singleResult = new RoleComposerMutator().ComposeRoles(
     new MutationParameters {
       SourceType = type,
       Context = parameters.Context
     });
       result.AddResult(singleResult);
     });
       return result;
 }
        public IOperationResult Morph(MutationParameters parameters)
        {
            if (parameters.SourceType != null) return MorphType(parameters);

              parameters.Validate();
              var assembly = parameters.Assembly;
              var result = new CompositeOperationResult();
              assembly.MainModule.GetAllTypes().
            Where(type => type.IsRole() && !type.IsRoleView()).
            ForEach(role => {
              var singleResult = MorphType(
            new MutationParameters {
              SourceType = role,
              Context = parameters.Context
            }
              );
              result.AddResult(singleResult);
            });
              return result;
        }
예제 #4
0
        public RoleComposerResult ComposeRoles(MutationParameters parameters)
        {
            parameters.Validate();
              _targetType = parameters.SourceType;
              if (_targetType == null) throw new ArgumentException("parameters must contain a SourceType", "parameters");

              Tracer.TraceVerbose("Compose class: {0}", _targetType.ToString());

              var result = new RoleComposerResult();

              CheckComposition(result);
              if (!result.Success) { return result; }

              var roles = RetrieveRoles();

              var conflictDetector = new ConflictDetector(_targetType);
              {
            var memberProcessResult = conflictDetector.Process(roles);
            result.AddResult(memberProcessResult);
            if (!memberProcessResult.Success) {
              return result;
            }
              }

              if (_targetType.IsRole()) {
            // roles are not composed
            return result;
              }

              {
            _container = conflictDetector.Container;
            var composeResult = ComposeRoles(roles);
            result.AddResult(composeResult);
            if (!composeResult.Success) {
              return result;
            }
              }

              return result;
        }
        public MorphIntoRoleResult MorphType(MutationParameters parameters)
        {
            parameters.Validate();
              var roleType = parameters.SourceType;
              if (roleType == null) throw new ArgumentException("parameters must include a SourceType", "parameters");

              _parameters = parameters;

              if (!roleType.IsRole()) {
            throw new InvalidOperationException("Cannot morph class into role");
              }

              Tracer.TraceVerbose("Morph role: {0}", roleType);

              var result = new MorphIntoRoleResult();

              CheckRole(roleType, result);
              if (!result.Success) { return result; }

              PreProcessRole(roleType); // TODO: result?
              if (!result.Success) { return result; }

              var roleStateClass = ExtractRoleStateClass(roleType, result);
              if (!result.Success) { return result; }

              // TODO: Cecil bug! We need to touch the SemanticsAttributes in order for it to remain on the method!
              roleType.Methods.Select(m => m.SemanticsAttributes).ToList();

              var roleCodeClass = ExtractRoleCodeClass(roleType, result);
              if (!result.Success) { return result; }

              MorphRoleIntoInterface(roleType, result);
              if (!result.Success) { return result; }

              result.CodeType = roleCodeClass;
              result.StateType = roleStateClass;

              return result;
        }
 public IOperationResult Mutate(MutationParameters parameters)
 {
     parameters.Validate();
       return Check(parameters);
 }