コード例 #1
0
 public VariableInliningPattern(CodePatternsContext patternsContext, MethodSpecificContext methodContext, IVariablesToNotInlineFinder finder)
     : base(patternsContext, methodContext.Method.Module.TypeSystem)
 {
     this.methodContext = methodContext;
     this.inliner       = new RestrictedVariableInliner(typeSystem);
     this.finder        = finder;
 }
コード例 #2
0
 public InitializationPattern(CodePatternsContext patternsContext, DecompilationContext context)
 {
     base(patternsContext, context.get_MethodContext().get_Method().get_Module().get_TypeSystem());
     this.typeContext = context.get_TypeContext();
     this.method      = context.get_MethodContext().get_Method();
     return;
 }
コード例 #3
0
 public MultiAssignPattern(CodePatternsContext patternsContext, MethodSpecificContext methodContext)
 {
     this.variablesToRemove = new HashSet <VariableDefinition>();
     base(patternsContext, methodContext.get_Method().get_Module().get_TypeSystem());
     this.methodContext = methodContext;
     return;
 }
コード例 #4
0
 public CommonPatterns(CodePatternsContext patternsContext, TypeSystem typeSystem)
 {
     base();
     this.typeSystem      = typeSystem;
     this.patternsContext = patternsContext;
     return;
 }
コード例 #5
0
 public VariableInliningPattern(CodePatternsContext patternsContext, MethodSpecificContext methodContext, IVariablesToNotInlineFinder finder)
     : base(patternsContext, methodContext.Method.Module.TypeSystem)
 {
     this.methodContext = methodContext;
     this.inliner = new RestrictedVariableInliner(typeSystem);
     this.finder = finder;
 }
コード例 #6
0
 public VariableDefineUseCounter(CodePatternsContext patternContext)
 {
     this.bannedVariables = new HashSet <VariableDefinition>();
     base();
     this.patternContext = patternContext;
     return;
 }
コード例 #7
0
		public BlockStatement Process(DecompilationContext context, BlockStatement body)
		{
			this.context = context;
            this.typeSystem = context.MethodContext.Method.Module.TypeSystem;
            this.patternsContext = new CodePatternsContext(body);
			body = (BlockStatement)Visit(body);
			return body;
		}
コード例 #8
0
 public VariableInliningPattern(CodePatternsContext patternsContext, MethodSpecificContext methodContext, IVariablesToNotInlineFinder finder)
 {
     base(patternsContext, methodContext.get_Method().get_Module().get_TypeSystem());
     this.methodContext = methodContext;
     this.inliner       = new RestrictedVariableInliner(this.typeSystem);
     this.finder        = finder;
     this.dereferencer  = new SimpleDereferencer();
     return;
 }
        private void ProcessCtorInvocation()
        {
            int startIndex, endIndex;
            bool isBaseCtor;
            StatementCollection statements = GetStatementsForInvocation(out endIndex, out startIndex, out isBaseCtor);

            if (statements == null)
            {
                return;
            }

            this.patternsContext = new CodePatternsContext(statements);

            List<ICodePattern> patternArray = new List<ICodePattern>(new ICodePattern[] 
												{   new NullCoalescingPattern(patternsContext, methodContext), new TernaryConditionPatternAgressive(patternsContext, typeSystem),
                                                    new ArrayInitialisationPattern(patternsContext, typeSystem), new VariableInliningPatternAggressive(patternsContext, methodContext),
                                                    new MultiAssignPattern(patternsContext, methodContext)});

            if (isBaseCtor)
            {
                patternArray.Add(new InitializationPattern(patternsContext, context));
            }

            if (!ProcessStatementCollection(statements, patternArray))
            {
                return;
            }

            if (statements[0].CodeNodeType != CodeNodeType.ExpressionStatement)
            {
                return;
            }

            MethodInvocationExpression theCtorInvokeExpression = (statements[0] as ExpressionStatement).Expression as MethodInvocationExpression;
            if (theCtorInvokeExpression.CodeNodeType != CodeNodeType.BaseCtorExpression &&
                theCtorInvokeExpression.CodeNodeType != CodeNodeType.ThisCtorExpression)
            {
                return;
            }

            methodContext.CtorInvokeExpression = theCtorInvokeExpression;
        }
コード例 #10
0
 public VariableDefineUseCounter(CodePatternsContext patternContext)
 {
     this.patternContext = patternContext;
 }
コード例 #11
0
 public NullCoalescingPattern(CodePatternsContext patternsContext, MethodSpecificContext methodContext)
 {
     base(patternsContext, methodContext.get_Method().get_Module().get_TypeSystem());
     this.methodContext = methodContext;
     return;
 }
コード例 #12
0
 public VariableInliningPatternAggressive(CodePatternsContext patternsContext, Telerik.JustDecompiler.Decompiler.MethodSpecificContext methodContext)
     : base(patternsContext, methodContext)
 {
 }
コード例 #13
0
 public VariableDefineUseCounter(CodePatternsContext patternContext)
 {
     this.patternContext = patternContext;
 }
コード例 #14
0
 public BaseInitialisationPattern(CodePatternsContext patternsContext, TypeSystem ts)
     : base(patternsContext, ts)
 {
 }
コード例 #15
0
 public ArrayInitialisationPattern(CodePatternsContext patternsContext, TypeSystem ts)
 {
     base(patternsContext, ts);
     return;
 }
コード例 #16
0
		public InitializationPattern(CodePatternsContext patternsContext, DecompilationContext context)
			: base(patternsContext, context.MethodContext.Method.Module.TypeSystem)
		{
            this.typeContext = context.TypeContext;
			this.method = context.MethodContext.Method;
		}
コード例 #17
0
 public MultiAssignPattern(CodePatternsContext patternsContext, MethodSpecificContext methodContext) : base(patternsContext, methodContext.Method.Module.TypeSystem)
 {
     this.methodContext = methodContext;
 }
コード例 #18
0
 public NullCoalescingPattern(CodePatternsContext patternsContext, MethodSpecificContext methodContext)
     : base(patternsContext, methodContext.Method.Module.TypeSystem)
 {
     this.methodContext = methodContext;
 }
コード例 #19
0
 public CommonPatterns(CodePatternsContext patternsContext, TypeSystem typeSystem)
 {
     this.typeSystem      = typeSystem;
     this.patternsContext = patternsContext;
 }
コード例 #20
0
 private VariableInliningPattern GetVariableInliningPattern(CodePatternsContext patternsContext)
 {
     return isAggressive ? new VariableInliningPatternAggressive(patternsContext, context.MethodContext) : new VariableInliningPattern(patternsContext, context.MethodContext);
 }
コード例 #21
0
		public CommonPatterns(CodePatternsContext patternsContext, TypeSystem typeSystem)
		{
			this.typeSystem = typeSystem;
            this.patternsContext = patternsContext;
		}
		public CollectionInitializationPattern(CodePatternsContext patternsContext, TypeSystem typeSystem)
			: base(patternsContext, typeSystem)
		{
		}
コード例 #23
0
 public FieldInitializationPattern(CodePatternsContext patternsContext, DecompilationContext context)
     : base(patternsContext, context.MethodContext.Method.Module.TypeSystem)
 {
     this.typeContext = context.TypeContext;
     this.method      = context.MethodContext.Method;
 }
コード例 #24
0
 private TernaryConditionPattern GetTernaryPattern(CodePatternsContext patternsContext)
 {
     return isAggressive || isInFilter ? new TernaryConditionPatternAgressive(patternsContext, typeSystem) : new TernaryConditionPattern(patternsContext, typeSystem);
 }
コード例 #25
0
 public NullCoalescingPattern(CodePatternsContext patternsContext, MethodSpecificContext methodContext)
     : base(patternsContext, methodContext.Method.Module.TypeSystem)
 {
     this.methodContext = methodContext;
 }
コード例 #26
0
 public VariableInliningPatternAggressive(CodePatternsContext patternsContext, MethodSpecificContext methodContext, IVariablesToNotInlineFinder finder)
 {
     base(patternsContext, methodContext, finder);
     return;
 }
コード例 #27
0
		public TernaryConditionPattern(CodePatternsContext patternsContext, TypeSystem typeSystem) :  base(patternsContext, typeSystem)
		{
		}
コード例 #28
0
 public TernaryConditionPatternAgressive(CodePatternsContext patternsContext, TypeSystem typeSystem)
 {
     base(patternsContext, typeSystem);
     return;
 }
		public ObjectInitialisationPattern(CodePatternsContext patternsContext, TypeSystem typeSystem)
			: base(patternsContext, typeSystem)
		{
		}
 public VariableInliningPatternAggressive(CodePatternsContext patternsContext, Telerik.JustDecompiler.Decompiler.MethodSpecificContext methodContext, IVariablesToNotInlineFinder finder)
     : base(patternsContext, methodContext, finder)
 {
 }
コード例 #31
0
 public CollectionInitializationPattern(CodePatternsContext patternsContext, TypeSystem typeSystem)
     : base(patternsContext, typeSystem)
 {
 }
コード例 #32
0
 public TernaryConditionPattern(CodePatternsContext patternsContext, TypeSystem typeSystem) :  base(patternsContext, typeSystem)
 {
 }
コード例 #33
0
 public ObjectInitialisationPattern(CodePatternsContext patternsContext, TypeSystem typeSystem)
 {
     base(patternsContext, typeSystem);
     return;
 }
コード例 #34
0
		public BaseInitialisationPattern(CodePatternsContext patternsContext, TypeSystem ts)
			: base(patternsContext, ts)
		{
		}
 public VariableInliningPatternAggressive(CodePatternsContext patternsContext, Telerik.JustDecompiler.Decompiler.MethodSpecificContext methodContext)
     :base(patternsContext, methodContext)
 {
 }
コード例 #36
0
 public VariableInliningPatternAggressive(CodePatternsContext patternsContext, Telerik.JustDecompiler.Decompiler.MethodSpecificContext methodContext, IVariablesToNotInlineFinder finder)
     : base(patternsContext, methodContext, finder)
 {
 }