Skip to content

Commit

Permalink
Merge pull request #63 from dnadolny/no-linebreak
Browse files Browse the repository at this point in the history
Make splitting long lines optional
  • Loading branch information
timowest committed Sep 18, 2013
2 parents ebe8733 + 7e0da6f commit 3920918
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 17 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.mysema.scalagen

case class ConversionSettings(splitLongLines: Boolean = true)

object ConversionSettings {
def defaultSettings = ConversionSettings()
}
8 changes: 4 additions & 4 deletions scalagen/src/main/scala/com/mysema/scalagen/Converter.scala
Original file line number Diff line number Diff line change
Expand Up @@ -102,17 +102,17 @@ class Converter(encoding: String, transformers: List[UnitTransformer]) {
}
}

def convert(javaSource: String): String = {
def convert(javaSource: String, settings: ConversionSettings = ConversionSettings()): String = {
val compilationUnit = JavaParser.parse(new ByteArrayInputStream(javaSource.getBytes(encoding)), encoding)
toScala(compilationUnit)
toScala(compilationUnit, settings)
}

def toScala(unit: CompilationUnit): String = {
def toScala(unit: CompilationUnit, settings: ConversionSettings = ConversionSettings()): String = {
if (unit.getImports == null) {
unit.setImports(new ArrayList[ImportDeclaration]())
}
val transformed = transformers.foldLeft(unit) { case (u,t) => t.transform(u) }
var visitor = new ScalaDumpVisitor()
var visitor = new ScalaDumpVisitor(settings)
transformed.accept(visitor, new ScalaDumpVisitor.Context())
visitor.getSource
}
Expand Down
26 changes: 13 additions & 13 deletions scalagen/src/main/scala/com/mysema/scalagen/ScalaDumpVisitor.scala
Original file line number Diff line number Diff line change
Expand Up @@ -78,15 +78,15 @@ object ScalaDumpVisitor {
* ScalaDumpVisitor is a serializing visitor for CompilationUnit instances
*
*/
class ScalaDumpVisitor extends VoidVisitor[ScalaDumpVisitor.Context] with Helpers {
class ScalaDumpVisitor(settings: ConversionSettings) extends VoidVisitor[ScalaDumpVisitor.Context] with Helpers {
import ScalaDumpVisitor._

private val printer = new SourcePrinter()

def getSource: String = printer.source

private def print(node: Node, arg: Context): String = {
val v = new ScalaDumpVisitor()
val v = new ScalaDumpVisitor(settings)
node.accept(v, arg)
v.getSource
}
Expand Down Expand Up @@ -207,13 +207,13 @@ class ScalaDumpVisitor extends VoidVisitor[ScalaDumpVisitor.Context] with Helper
private def printArguments(args: List[Expression], arg: Context) {
printer.print("(")
if (args != null) {
var i = args.iterator()
val i = args.iterator()
while (i.hasNext) {
var e = i.next()
e.accept(this, arg)
if (i.hasNext) {
printer.print(", ")
if (printer.lineLength > NL_THRESHOLD) {
if (settings.splitLongLines && printer.lineLength > NL_THRESHOLD) {
printer.printLn()
printer.print(" ")
}
Expand Down Expand Up @@ -366,7 +366,7 @@ class ScalaDumpVisitor extends VoidVisitor[ScalaDumpVisitor.Context] with Helper
if (n.getImplements != null) {
superTypes.addAll(n.getImplements)
}
if (printer.lineLength > 75) {
if (settings.splitLongLines && printer.lineLength > 75) {
printer.printLn()
printer.print(" ")
}
Expand Down Expand Up @@ -638,7 +638,7 @@ class ScalaDumpVisitor extends VoidVisitor[ScalaDumpVisitor.Context] with Helper
}
printer.print(symbol)
printer.print(" ")
if (print(n.getLeft, arg).length > 50 || print(n.getRight, arg).length > 50) {
if (settings.splitLongLines && (print(n.getLeft, arg).length > 50 || print(n.getRight, arg).length > 50)) {
printer.printLn()
printer.print(" ")
}
Expand Down Expand Up @@ -773,7 +773,7 @@ class ScalaDumpVisitor extends VoidVisitor[ScalaDumpVisitor.Context] with Helper
var args = if (n.getArgs == null) 0 else n.getArgs.size
val shortForm = (SHORT_FORM.contains(n.getName) && args < 2) || (NO_ARGS_SHORT.contains(n.getName) && args == 0)
if (n.getScope != null) {
val split = print(n.getScope, arg).length > 50
val split = settings.splitLongLines && print(n.getScope, arg).length > 50
n.getScope.accept(this, arg)
if (split) {
printer.printLn()
Expand Down Expand Up @@ -870,8 +870,8 @@ class ScalaDumpVisitor extends VoidVisitor[ScalaDumpVisitor.Context] with Helper
}
printer.print("(")
if (n.getParameters != null) {
var lineBreaks = n.getParameters.size > 3
var i = n.getParameters.iterator()
val lineBreaks = settings.splitLongLines && n.getParameters.size > 3
val i = n.getParameters.iterator()
while (i.hasNext) {
i.next().accept(this, arg)
if (i.hasNext) {
Expand Down Expand Up @@ -903,8 +903,8 @@ class ScalaDumpVisitor extends VoidVisitor[ScalaDumpVisitor.Context] with Helper
printTypeParameters(n.getTypeParameters, arg)
printer.print("(")
if (n.getParameters != null) {
var lineBreaks = n.getParameters.size > 3
var i = n.getParameters.iterator()
val lineBreaks = settings.splitLongLines && n.getParameters.size > 3
val i = n.getParameters.iterator()
while (i.hasNext) {
i.next().accept(this, arg)
if (i.hasNext) {
Expand Down Expand Up @@ -1302,7 +1302,7 @@ class ScalaDumpVisitor extends VoidVisitor[ScalaDumpVisitor.Context] with Helper
Types.extract(body) match {
case fe: ForeachStmt => {
printer.print("; ")
if (printer.lineLength > NL_THRESHOLD) {
if (settings.splitLongLines && printer.lineLength > NL_THRESHOLD) {
printer.printLn()
printer.print(" ")
}
Expand All @@ -1312,7 +1312,7 @@ class ScalaDumpVisitor extends VoidVisitor[ScalaDumpVisitor.Context] with Helper
body = fe.getBody
}
case ifStmt: IfStmt => {
if (printer.lineLength > NL_THRESHOLD) {
if (settings.splitLongLines && printer.lineLength > NL_THRESHOLD) {
printer.printLn()
printer.print(" ")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.mysema.examples;

public class LongLinesIncludingAVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongClassName extends LongClassToExtendAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa {
LongLinesIncludingAVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongClassName x = new LongLinesIncludingAVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongClassName(444, 2, 3, 4, 5, 6, 7, 8, 9, 10);

public LongLinesIncludingAVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongClassName(int... nums) {
}

public LongLinesIncludingAVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongClassName(int a, int b, int c, int d, int e) {
this(a, b, c, d, e, 1, 2, 3, 4, 5);
}

public void a(int... nums) {
if ("very long condition ........................".length() > 0 || "other long condition".length() > 0) {
a(555, 2, 3, 4, 5, 6, 7, 8, 9);
}
int[] aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = nums;
for (int n : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {
if ("long condition goes here ........................".length() > 0) {
System.out.println(n);
}
}
}
}

class LongClassToExtendAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa {
public LongClassToExtendAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa() {
}

public LongClassToExtendAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(int... nums) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ abstract class AbstractParserTest {

def toScala[T](implicit mf: Manifest[T]): String = toScala(getCompilationUnit(mf.erasure))

def toScala[T](settings: ConversionSettings)(implicit mf: Manifest[T]): String =
toScala(getCompilationUnit(mf.erasure), settings)

def toScala(unit: CompilationUnit): String = Converter.getInstance().toScala(unit)

def toScala(unit: CompilationUnit, settings: ConversionSettings): String = Converter.getInstance().toScala(unit, settings)

}
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,16 @@ class SerializationTest extends AbstractParserTest {
assertContains(sources, "private class LoopContext private () {")
}

@Test
def LongLines {
val sources = toScala[LongLinesIncludingAVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongClassName](ConversionSettings(splitLongLines = false))
assertContains(sources, "class LongLinesIncludingAVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongClassName(nums: Int*) extends LongClassToExtendAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa {")
assertContains(sources, "var x: LongLinesIncludingAVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongClassName = new LongLinesIncludingAVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongClassName(444, 2, 3, 4, 5, 6, 7, 8, 9, 10)")
assertContains(sources, "def this(a: Int, b: Int, c: Int, d: Int, e: Int)")
assertContains(sources, """if ("very long condition ........................".length > 0 || "other long condition".length > 0)""")
assertContains(sources, """for (n <- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa if "long condition goes here ........................".length > 0)""")
}

@Test
def LazyInitBeanAccessor {
val sources = toScala[LazyInitBeanAccessor]
Expand Down

0 comments on commit 3920918

Please sign in to comment.