diff --git a/IDEHelper/Compiler/BfPrinter.cpp b/IDEHelper/Compiler/BfPrinter.cpp index 2d1d06ca..84bee3f6 100644 --- a/IDEHelper/Compiler/BfPrinter.cpp +++ b/IDEHelper/Compiler/BfPrinter.cpp @@ -2385,7 +2385,7 @@ void BfPrinter::Visit(BfPropertyMethodDeclaration* propertyMethodDeclaration) } void BfPrinter::Visit(BfPropertyDeclaration* propertyDeclaration) -{ +{ auto indexerDeclaration = BfNodeDynCast(propertyDeclaration); ExpectNewLine(); @@ -2436,13 +2436,14 @@ void BfPrinter::Visit(BfPropertyDeclaration* propertyDeclaration) if (auto block = BfNodeDynCast(propertyDeclaration->mDefinitionBlock)) { bool doInlineBlock = false; - DoBlockOpen(block, true, &doInlineBlock); + int indentStart = 0; + DoBlockOpen(block, true, &doInlineBlock, &indentStart); for (auto method : propertyDeclaration->mMethods) { Visit(method); } FlushVisitChild(); - DoBlockClose(block, true, doInlineBlock); + DoBlockClose(block, true, doInlineBlock, indentStart); } else { @@ -2461,6 +2462,11 @@ void BfPrinter::Visit(BfPropertyDeclaration* propertyDeclaration) FlushVisitChild(); } +void BfPrinter::Visit(BfIndexerDeclaration* indexerDeclaration) +{ + Visit((BfPropertyDeclaration*)indexerDeclaration); +} + void BfPrinter::Visit(BfFieldDeclaration* fieldDeclaration) { if (fieldDeclaration->mPrecedingComma != NULL) @@ -2749,8 +2755,10 @@ void BfPrinter::Visit(BfNamespaceDeclaration* namespaceDeclaration) VisitChild(namespaceDeclaration->mBlock); } -void BfPrinter::DoBlockOpen(BfBlock* block, bool queue, bool* outDoInlineBlock) -{ +void BfPrinter::DoBlockOpen(BfBlock* block, bool queue, bool* outDoInlineBlock, int* outIdentStart) +{ + *outIdentStart = mNextStateModify.mWantVirtualIndent; + bool doInlineBlock = true; if (block->mCloseBrace != NULL) { @@ -2781,11 +2789,12 @@ void BfPrinter::DoBlockOpen(BfBlock* block, bool queue, bool* outDoInlineBlock) *outDoInlineBlock = doInlineBlock; } -void BfPrinter::DoBlockClose(BfBlock* block, bool queue, bool doInlineBlock) +void BfPrinter::DoBlockClose(BfBlock* block, bool queue, bool doInlineBlock, int indentStart) { if (!doInlineBlock) { ExpectUnindent(); + mNextStateModify.mWantVirtualIndent = indentStart; mNextStateModify.mDoingBlockClose = true; } else @@ -2799,7 +2808,8 @@ void BfPrinter::DoBlockClose(BfBlock* block, bool queue, bool doInlineBlock) void BfPrinter::Visit(BfBlock* block) { bool doInlineBlock; - DoBlockOpen(block, false, &doInlineBlock); + int indentStart = 0; + DoBlockOpen(block, false, &doInlineBlock, &indentStart); for (auto& childNodeRef : *block) { BfAstNode* child = childNodeRef; @@ -2811,7 +2821,7 @@ void BfPrinter::Visit(BfBlock* block) SetAndRestoreValue prevBlockMember(mCurBlockMember, child); child->Accept(this); } - DoBlockClose(block, false, doInlineBlock); + DoBlockClose(block, false, doInlineBlock, indentStart); ExpectNewLine(); } diff --git a/IDEHelper/Compiler/BfPrinter.h b/IDEHelper/Compiler/BfPrinter.h index c393b2ea..322b988a 100644 --- a/IDEHelper/Compiler/BfPrinter.h +++ b/IDEHelper/Compiler/BfPrinter.h @@ -95,11 +95,11 @@ public: void ExpectIndent(); void ExpectUnindent(); void VisitChildNextLine(BfAstNode* node); - void DoBlockOpen(BfBlock* block, bool queue, bool* outDoInlineBlock); - void DoBlockClose(BfBlock* block, bool queue, bool doInlineBlock); + void DoBlockOpen(BfBlock* block, bool queue, bool* outDoInlineBlock, int* outIdentStart); + void DoBlockClose(BfBlock* block, bool queue, bool doInlineBlock, int identStart); void QueueMethodDeclaration(BfMethodDeclaration* methodDeclaration); int CalcOrigLineSpacing(BfAstNode* bfAstNode, int* lineStartIdx); - void WriteIgnoredNode(BfAstNode* node); + void WriteIgnoredNode(BfAstNode* node); virtual void Visit(BfAstNode* bfAstNode) override; virtual void Visit(BfErrorNode* bfErrorNode) override; @@ -197,6 +197,7 @@ public: virtual void Visit(BfOperatorDeclaration* opreratorDeclaration) override; virtual void Visit(BfPropertyMethodDeclaration* propertyDeclaration) override; virtual void Visit(BfPropertyDeclaration* propertyDeclaration) override; + virtual void Visit(BfIndexerDeclaration* indexerDeclaration) override; virtual void Visit(BfFieldDeclaration* fieldDeclaration) override; virtual void Visit(BfEnumCaseDeclaration* enumCaseDeclaration) override; virtual void Visit(BfTypeAliasDeclaration* typeDeclaration) override;