Skip to content

Commit bfc8103

Browse files
authored
refactor: remove unnecessary DirectPrinterHelper (#3425)
1 parent b52925f commit bfc8103

File tree

5 files changed

+42
-58
lines changed

5 files changed

+42
-58
lines changed

src/main/java/spoon/reflect/visitor/PrinterHelper.java

+4
Original file line numberDiff line numberDiff line change
@@ -298,4 +298,8 @@ public void setLineSeparator(String lineSeparator) {
298298
public void writeSpace() {
299299
this.write(' ');
300300
}
301+
302+
public void setShouldWriteTabs(boolean b) {
303+
this.shouldWriteTabs = b;
304+
}
301305
}

src/main/java/spoon/support/sniper/SniperJavaPrettyPrinter.java

+3-8
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ public void printSourceFragment(SourceFragment fragment, ModificationStatus isMo
173173
//push the context of this collection
174174
pushContext(listContext);
175175
}
176-
mutableTokenWriter.getPrinterHelper().directPrint(fragment.getSourceCode());
176+
mutableTokenWriter.directPrint(fragment.getSourceCode());
177177
}
178178
}
179179
});
@@ -266,7 +266,7 @@ public void printSourceFragment(SourceFragment fragment, ModificationStatus isMo
266266
//and scan first element of that collection again in new context of that collection
267267
if (ModificationStatus.NOT_MODIFIED.equals(isModified)) {
268268
// we print the original source code
269-
mutableTokenWriter.getPrinterHelper().directPrint(fragment.getSourceCode());
269+
mutableTokenWriter.directPrint(fragment.getSourceCode());
270270
} else {
271271
// we print with the new list context
272272
listContext.print(this);
@@ -275,7 +275,7 @@ public void printSourceFragment(SourceFragment fragment, ModificationStatus isMo
275275
ElementSourceFragment sourceFragment = (ElementSourceFragment) fragment;
276276
if (isModified == ModificationStatus.NOT_MODIFIED) {
277277
//nothing is changed, we can print origin sources of this element
278-
mutableTokenWriter.getPrinterHelper().directPrint(fragment.getSourceCode());
278+
mutableTokenWriter.directPrint(fragment.getSourceCode());
279279
return;
280280
}
281281

@@ -304,11 +304,6 @@ private void executePrintEventInContext(PrinterEvent event) {
304304
if (sfc == null) {
305305
throw new SpoonException("Missing SourceFragmentContext");
306306
}
307-
if (mutableTokenWriter.isMuted()) {
308-
// the printer may require to update its state based on this event
309-
sfc.update(event);
310-
return;
311-
}
312307
// the context-dependent printer handles the event
313308
sfc.print(event);
314309
}

src/main/java/spoon/support/sniper/internal/AbstractSourceFragmentPrinter.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ protected AbstractSourceFragmentPrinter(MutableTokenWriter mutableTokenWriter, C
4949

5050
@Override
5151
public void print(PrinterEvent event) {
52+
if (mutableTokenWriter.isMuted()) {
53+
return;
54+
}
55+
5256
int prevIndex = childFragmentIdx;
5357
int index = update(event);
5458
if (index != -1) { // means we have found a source code fragment corresponding to this event
@@ -183,7 +187,7 @@ protected void printOriginSpacesUntilFragmentIndex(int fromIndex, int toIndex) {
183187
mutableTokenWriter.writeComment(comment);
184188
} else {
185189
//comment is not modified write origin sources
186-
mutableTokenWriter.getPrinterHelper().directPrint(fragment.getSourceCode());
190+
mutableTokenWriter.write(fragment.getSourceCode());
187191
}
188192
//we printed the comment, so we can print next space too
189193
canPrintSpace = true;
@@ -195,7 +199,7 @@ protected void printOriginSpacesUntilFragmentIndex(int fromIndex, int toIndex) {
195199
}
196200
} else if (isSpaceFragment(fragment) && canPrintSpace) {
197201
if (!skipSpaceAfterDeletedElement) {
198-
mutableTokenWriter.getPrinterHelper().directPrint(fragment.getSourceCode());
202+
mutableTokenWriter.write(fragment.getSourceCode());
199203
} else {
200204
skipSpaceAfterDeletedElement = false;
201205
}

src/main/java/spoon/support/sniper/internal/DirectPrinterHelper.java

-45
This file was deleted.

src/main/java/spoon/support/sniper/internal/MutableTokenWriter.java

+29-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import spoon.compiler.Environment;
1111
import spoon.reflect.code.CtComment;
1212
import spoon.reflect.visitor.DefaultTokenWriter;
13+
import spoon.reflect.visitor.PrinterHelper;
1314
import spoon.reflect.visitor.TokenWriter;
1415

1516
/**
@@ -22,7 +23,7 @@ public class MutableTokenWriter implements TokenWriter {
2223
private boolean muted = false;
2324

2425
public MutableTokenWriter(Environment env) {
25-
this.delegate = new DefaultTokenWriter(new DirectPrinterHelper(env));
26+
this.delegate = new DefaultTokenWriter(new PrinterHelper(env));
2627
}
2728

2829
/**
@@ -129,8 +130,8 @@ public TokenWriter decTab() {
129130
return this;
130131
}
131132
@Override
132-
public DirectPrinterHelper getPrinterHelper() {
133-
return (DirectPrinterHelper) delegate.getPrinterHelper();
133+
public PrinterHelper getPrinterHelper() {
134+
return delegate.getPrinterHelper();
134135
}
135136
@Override
136137
public void reset() {
@@ -152,4 +153,29 @@ public TokenWriter writeSpace() {
152153
public String toString() {
153154
return delegate.toString();
154155
}
156+
157+
/**
158+
* Prints a piece of text regardless of mute status
159+
* Don't call this, this is dangerous and irregular design.
160+
*/
161+
public void directPrint(String text) {
162+
int len = text.length();
163+
// we do it char by char because there is no write(String) in PrinterHelper
164+
for (int i = 0; i < len; i++) {
165+
char c = text.charAt(i);
166+
//avoid automatic writing of tabs in the middle of text, because write(char) keeps putting it back to true
167+
getPrinterHelper().setShouldWriteTabs(false);
168+
getPrinterHelper().write(c);
169+
}
170+
}
171+
172+
/** writes the piece of text if not muted */
173+
public TokenWriter write(String text) {
174+
if (isMuted()) {
175+
return this;
176+
}
177+
directPrint(text);
178+
return this;
179+
}
180+
155181
}

0 commit comments

Comments
 (0)