protected override Action <ITextControl> ExecutePsiTransaction(ISolution solution, IProgressIndicator progress)
        {
            string           type   = _currentStruct.DeclaredName;
            ICSharpStatement anchor = null;             // I wish there was documentation on this haha :)

            var factory = CSharpElementFactory.GetInstance(_currentStruct);

            var method = factory.CreateTypeMemberDeclaration("public static " + type + " Read( BinaryReader br ) {}") as IMethodDeclaration;

            var st = factory.CreateStatement("long start = br.BaseStream.Position;" + Environment.NewLine);

            method.Body.AddStatementAfter(st, anchor);

            st = factory.CreateStatement($"{type} ret = new {type}();");
            method.Body.AddStatementAfter(st, anchor);

            IFieldDeclaration lastMember = null;

            foreach (var member in _currentStruct.FieldDeclarationsEnumerable)
            {
                string typeName = member.Type.GetPresentableName(member.Language);

                if (typeDict.TryGetValue(typeName, out string readStmt))
                {
                    st = factory.CreateStatement($"ret.{member.DeclaredName} = {readStmt}");
                    method.Body.AddStatementAfter(st, anchor);
                }
                else
                {
                    // sorry lumina
                    // string call = member.Type.IsArray() ? $"br.ReadStructures<{typeName}>(  );" : $"br.ReadStructure<{typeName}>();";
                    st = factory.CreateStatement($"ret.{member.DeclaredName} = {typeName}.Read( br );");
                    method.Body.AddStatementAfter(st, anchor);
                }
                lastMember = member;
            }

            st = factory.CreateStatement("return ret;");
            method.Body.AddStatementAfter(st, anchor);

            using (WriteLockCookie.Create()) {
                ModificationUtil.AddChild(_currentStruct, method);
            }

            if (lastMember != null)
            {
                return(control => control.Caret.MoveTo(lastMember.GetDocumentStartOffset().Offset, CaretVisualPlacement.DontScrollIfVisible));
            }
            return(control => control.Caret.MoveTo(method.GetDocumentStartOffset().Offset, CaretVisualPlacement.DontScrollIfVisible));
        }