Пример #1
0
        protected override Task <DecompileAsyncResult> DecompileAsync(DecompileCodeState decompileCodeState)
        {
            var state = (AddMembersDecompileCodeState)decompileCodeState;

            state.CancellationToken.ThrowIfCancellationRequested();

            DecompileTypeMethods options;

            options = new DecompileTypeMethods(state.MainOutput, state.DecompilationContext, nonNestedType);
            options.Types.Add(nonNestedType);
            options.Types.AddRange(nonNestedType.GetTypes());
            options.DecompileHidden = false;
            decompiler.Decompile(DecompilationType.TypeMethods, options);

            state.CancellationToken.ThrowIfCancellationRequested();

            options = new DecompileTypeMethods(state.HiddenOutput, state.DecompilationContext, nonNestedType);
            options.Types.Add(nonNestedType);
            options.Types.AddRange(nonNestedType.GetTypes());
            options.DecompileHidden = true;
            decompiler.Decompile(DecompilationType.TypeMethods, options);

            state.CancellationToken.ThrowIfCancellationRequested();

            var result = new DecompileAsyncResult();

            result.AddDocument(MainCodeName, state.MainOutput.ToString(), state.MainOutput.Span);
            result.AddDocument(MainGeneratedCodeName, state.HiddenOutput.ToString(), null);
            return(Task.FromResult(result));
        }
Пример #2
0
 internal static DecompiledBodyKind GetDecompiledBodyKind(DecompileTypeMethods info, AstBuilder builder, MethodDef method)
 {
     if (info.DecompileHidden)
     {
         return(DecompiledBodyKind.Empty);
     }
     if (info.Methods.Contains(method))
     {
         return(DecompiledBodyKind.Full);
     }
     return(DecompiledBodyKind.Empty);
 }
Пример #3
0
        void DecompileTypeMethods(DecompileTypeMethods info)
        {
            var state = CreateAstBuilder(info.Context, CSharpDecompiler.CreateDecompilerSettings_DecompileTypeMethods(langSettings.Settings, !info.DecompileHidden), currentType: info.Type);

            try {
                state.AstBuilder.GetDecompiledBodyKind = (builder, method) => CSharpDecompiler.GetDecompiledBodyKind(info, builder, method);
                state.AstBuilder.AddType(info.Type);
                RunTransformsAndGenerateCode(ref state, info.Output, info.Context, new DecompileTypeMethodsTransform(info.Methods, !info.DecompileHidden, info.MakeEverythingPublic));
            }
            finally {
                state.Dispose();
            }
        }
Пример #4
0
        protected override Task <DecompileAsyncResult> DecompileAsync(DecompileCodeState decompileCodeState)
        {
            var state = (EditClassDecompileCodeState)decompileCodeState;

            state.CancellationToken.ThrowIfCancellationRequested();

            state.DecompilationContext.CalculateILSpans = true;
            var options = new DecompileTypeMethods(state.MainOutput, state.DecompilationContext, nonNestedTypeToEdit);

            options.DecompileHidden = false;
            options.ShowAll         = true;
            decompiler.Decompile(DecompilationType.TypeMethods, options);

            state.CancellationToken.ThrowIfCancellationRequested();

            var result = new DecompileAsyncResult();

            result.AddDocument(MainCodeName, state.MainOutput.ToString(), state.MainOutput.Span);
            return(Task.FromResult(result));
        }
Пример #5
0
        Task DecompileAsync(MethodDef method, MethodSourceStatement?methodSourceStatement)
        {
            Debug.Assert(decompileCodeState == null);
            if (decompileCodeState != null)
            {
                throw new InvalidOperationException();
            }
            var state = new DecompileCodeState(method, methodSourceStatement);

            decompileCodeState = state;

            return(Task.Run(() => {
                state.CancellationToken.ThrowIfCancellationRequested();

                var type = method.DeclaringType;
                while (type.DeclaringType != null)
                {
                    type = type.DeclaringType;
                }

                DecompileTypeMethods options;

                state.DecompilationContext.CalculateBinSpans = true;
                options = new DecompileTypeMethods(state.MainOutput, state.DecompilationContext, type);
                options.Methods.Add(method);
                options.DecompileHidden = false;
                options.MakeEverythingPublic = makeEverythingPublic;
                decompiler.Decompile(DecompilationType.TypeMethods, options);

                state.CancellationToken.ThrowIfCancellationRequested();

                state.DecompilationContext.CalculateBinSpans = false;
                options = new DecompileTypeMethods(state.HiddenOutput, state.DecompilationContext, type);
                options.Methods.Add(method);
                options.DecompileHidden = true;
                options.MakeEverythingPublic = makeEverythingPublic;
                decompiler.Decompile(DecompilationType.TypeMethods, options);
            }, state.CancellationToken));
        }
Пример #6
0
        protected override Task <DecompileAsyncResult> DecompileAsync(DecompileCodeState decompileCodeState)
        {
            var state = (EditMethodDecompileCodeState)decompileCodeState;

            state.CancellationToken.ThrowIfCancellationRequested();

            var type = methodToEdit.DeclaringType;

            while (type.DeclaringType != null)
            {
                type = type.DeclaringType;
            }

            DecompileTypeMethods options;

            state.DecompilationContext.CalculateBinSpans = true;
            options = new DecompileTypeMethods(state.MainOutput, state.DecompilationContext, type);
            options.Methods.Add(methodToEdit);
            options.DecompileHidden      = false;
            options.MakeEverythingPublic = makeEverythingPublic;
            decompiler.Decompile(DecompilationType.TypeMethods, options);

            state.CancellationToken.ThrowIfCancellationRequested();

            state.DecompilationContext.CalculateBinSpans = false;
            options = new DecompileTypeMethods(state.HiddenOutput, state.DecompilationContext, type);
            options.Methods.Add(methodToEdit);
            options.DecompileHidden      = true;
            options.MakeEverythingPublic = makeEverythingPublic;
            decompiler.Decompile(DecompilationType.TypeMethods, options);

            state.CancellationToken.ThrowIfCancellationRequested();

            var result = new DecompileAsyncResult();

            result.AddDocument(MAIN_CODE_NAME, state.MainOutput.ToString(), state.MainOutput.Span);
            result.AddDocument(MAIN_G_CODE_NAME, state.HiddenOutput.ToString(), null);
            return(Task.FromResult(result));
        }