Support alternate indent widths for code generation.

This commit is contained in:
Ray J. Greenwell
2025-09-09 16:03:31 -07:00
parent 1361e237ef
commit c8996bedf0
4 changed files with 50 additions and 6 deletions
@@ -62,7 +62,7 @@ public class GenDObjectTask extends GenTask
} }
// slurp our source file into newline separated strings // slurp our source file into newline separated strings
SourceFile sfile = new SourceFile(); SourceFile sfile = new SourceFile(_indentWidth);
sfile.readFrom(source); sfile.readFrom(source);
// generate our fields section and our methods section // generate our fields section and our methods section
@@ -117,7 +117,7 @@ public class GenStreamableTask extends GenTask
readbuf.append(READ_CLOSE); readbuf.append(READ_CLOSE);
writebuf.append(WRITE_CLOSE); writebuf.append(WRITE_CLOSE);
SourceFile sfile = new SourceFile(); SourceFile sfile = new SourceFile(_indentWidth);
try { try {
sfile.readFrom(source); sfile.readFrom(source);
} catch (IOException ioe) { } catch (IOException ioe) {
@@ -7,12 +7,14 @@ package com.threerings.presents.tools;
import static com.google.common.base.Charsets.UTF_8; import static com.google.common.base.Charsets.UTF_8;
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.Reader; import java.io.Reader;
import java.io.StringReader;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -91,6 +93,14 @@ public abstract class GenTask extends Task
_checking = checking; _checking = checking;
} }
/**
* Configure an alternate indent width to the normal 4-space indent.
*/
public void setIndentWidth (int width)
{
_indentWidth = width;
}
/** /**
* Performs the actual work of the task. * Performs the actual work of the task.
*/ */
@@ -203,6 +213,7 @@ public abstract class GenTask extends Task
{ {
Reader reader = Reader reader =
new InputStreamReader(getClass().getClassLoader().getResourceAsStream(template), UTF_8); new InputStreamReader(getClass().getClassLoader().getResourceAsStream(template), UTF_8);
reader = reindent(reader);
return convertEols(Mustache.compiler().escapeHTML(false).compile(reader).execute(data)); return convertEols(Mustache.compiler().escapeHTML(false).compile(reader).execute(data));
} }
@@ -254,8 +265,33 @@ public abstract class GenTask extends Task
return str.replace("\n", EOL); return str.replace("\n", EOL);
} }
protected Reader reindent (Reader reader)
throws IOException
{
if (_indentWidth == STANDARD_INDENT) return reader;
StringBuilder buf = new StringBuilder();
try (BufferedReader br = new BufferedReader(reader)) {
String line;
while ((line = br.readLine()) != null) {
int spaces = 0, len = line.length();
while (spaces < len && line.charAt(spaces) == ' ') spaces++;
if (spaces > 0) {
int newSpaces = ((spaces / STANDARD_INDENT) * _indentWidth) +
((spaces % STANDARD_INDENT) % _indentWidth);
for (int ii = 0; ii < newSpaces; ++ii) buf.append(' ');
}
buf.append(line, spaces, len);
buf.append('\n');
}
}
return new StringReader(buf.toString());
}
protected static String EOL = System.getProperty("line.separator"); protected static String EOL = System.getProperty("line.separator");
protected int _indentWidth = STANDARD_INDENT;
/** A list of filesets that contain java source to be processed. */ /** A list of filesets that contain java source to be processed. */
protected List<FileSet> _filesets = Lists.newArrayList(); protected List<FileSet> _filesets = Lists.newArrayList();
@@ -267,4 +303,6 @@ public abstract class GenTask extends Task
protected boolean _checking; protected boolean _checking;
protected Set<String> _modifiedPaths = Sets.newHashSet(); protected Set<String> _modifiedPaths = Sets.newHashSet();
protected static final int STANDARD_INDENT = 4;
} }
@@ -24,6 +24,11 @@ import com.samskivert.util.StringUtil;
*/ */
public class SourceFile public class SourceFile
{ {
public SourceFile (int indent)
{
_indent = StringUtil.spaces(indent);
}
/** /**
* Reads the code from the supplied source file. * Reads the code from the supplied source file.
*/ */
@@ -132,9 +137,9 @@ public class SourceFile
if (!StringUtil.isBlank(prev) && !prev.equals("{")) { if (!StringUtil.isBlank(prev) && !prev.equals("{")) {
bout.newLine(); bout.newLine();
} }
writeln(bout, " " + FIELDS_START); writeln(bout, _indent + FIELDS_START);
bout.write(fsection); bout.write(fsection);
writeln(bout, " " + FIELDS_END); writeln(bout, _indent + FIELDS_END);
if (!StringUtil.isBlank(safeGetLine(_nend))) { if (!StringUtil.isBlank(safeGetLine(_nend))) {
bout.newLine(); bout.newLine();
} }
@@ -150,9 +155,9 @@ public class SourceFile
if (!StringUtil.isBlank(safeGetLine(_mstart-1))) { if (!StringUtil.isBlank(safeGetLine(_mstart-1))) {
bout.newLine(); bout.newLine();
} }
writeln(bout, " " + METHODS_START); writeln(bout, _indent + METHODS_START);
bout.write(msection); bout.write(msection);
writeln(bout, " " + METHODS_END); writeln(bout, _indent + METHODS_END);
String next = safeGetLine(_mend); String next = safeGetLine(_mend);
if (!StringUtil.isBlank(next) && !next.equals("}")) { if (!StringUtil.isBlank(next) && !next.equals("}")) {
bout.newLine(); bout.newLine();
@@ -246,6 +251,7 @@ public class SourceFile
} }
protected List<String> _lines; protected List<String> _lines;
protected String _indent;
protected int _nstart = -1, _nend = -1; protected int _nstart = -1, _nend = -1;
protected int _mstart = -1, _mend = -1; protected int _mstart = -1, _mend = -1;