Overview of “getting my hands dirty with scala”

Since a while now, I have been trying to get into scala, because I think its a very interesting language with promising concepts. But as usual the scala books just kept lying around, waiting for a better time to come by. But waiting on better times will never result in anything so I decided to just start doing it. In this blog I will post the things that I ran into, hopefully for others to learn from, or otherwise, just for me to read and laugh about again.



To get my hands dirty with scala, I want to implement a code generation tool for java. In my daily work job I have to do a lot of repititive work, so I created a small project to generate some of the fields and methods and testcases automatically. This is done using freemarker templates and java code. Since this project has no dependencies on a spring context or databases it looks like a natural fit to learn some more of scala.

Today I was reading in “Programming in Scala” from Martin Odersky, Lex Spoon and Bill Venners, when I read in chapter 6 that if you place code inside a class (and not within a method) these lines will automatically be included in the constructor. That seemed like a nice feature to me, to check if a fieldDefinition that gets constructed has a classDefinition owner that is not null. So I tried the following:

class ScalaFieldDefinition(classDefinition: ScalaClassDefinition) { val templateName: String = "default/fieldDefinition.ftl" var defaultInfo: ScalaDefaultInfo = new ScalaDefaultInfo() val fieldType: String = defaultInfo.fieldType println("in class") }

After creating a test for this, I saw that indeed the “in class” was printed. So next I wanted to check if the given classDefinition was not null.

Creating the testcase (using scalatest from Bill Venners) resulted in the following

@Test def shouldThrowIllegalArgumentException { intercept[IllegalArgumentException] { new ScalaFieldDefinition(null) } }

and I updated the scalaFieldDefinition to:

class ScalaFieldDefinition(classDefinition: ScalaClassDefinition) { require(classDefinition != null) val templateName: String = "default/fieldDefinition.ftl" var defaultInfo: ScalaDefaultInfo = new ScalaDefaultInfo() val fieldType: String = defaultInfo.fieldType println("in class") }

After running the testcase, I was greeted with a red bar, indicating no error had been thrown. That was not what I expected, so after a lot of deletions and trials I found out that I should not mix the declarations with the content. So when changed to :

class ScalaFieldDefinition(classDefinition: ScalaClassDefinition) { val templateName: String = "default/fieldDefinition.ftl" var defaultInfo: ScalaDefaultInfo = new ScalaDefaultInfo() val fieldType: String = defaultInfo.fieldType require(classDefinition != null) println("in class") }

And that did the trick. Now the check on the required classDefinition did throw an exception.