Fixed not generated empty lines.

Change-Id: I3f08d8623021eb6595fab29c798dac84a6d1056d
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/parser/AcceleoParser.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/parser/AcceleoParser.java
index ea43adf..7776f96 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/parser/AcceleoParser.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/parser/AcceleoParser.java
@@ -2173,7 +2173,8 @@
 			} else {
 				needNewLine = false;
 			}
-			if (localStartOfText < localEndOfText) {
+			final boolean isEmptyLine = columns[localStartOfText] == significantTextColumn && needNewLine;
+			if (localStartOfText < localEndOfText || isEmptyLine) {
 				res = AcceleoPackage.eINSTANCE.getAcceleoFactory().createTextStatement();
 				res.setValue(text.substring(localStartOfText, localEndOfText));
 				res.setNewLineNeeded(needNewLine);
diff --git a/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine-expected-ast.txt b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine-expected-ast.txt
new file mode 100644
index 0000000..273e42e
--- /dev/null
+++ b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine-expected-ast.txt
@@ -0,0 +1,14 @@
+
+header position 0..59
+module myModule
+  metamodel http://www.eclipse.org/emf/2002/Ecore (18..56)
+  [comment @main  (70..76) /] (61..78)
+  
+  public template myTemplate(myParam : EPackage (107..132))
+  @main
+    [file url .add(.aqlFeatureAccess(myParam, 'name'), '.txt') (144..165) mode overwrite
+      before empty line true (183..200)
+       true (205..205)
+      after empty line true (210..226) (178..229)
+    [/file] (137..236) (134..237)
+  [/template] (79..248) (0..248)
\ No newline at end of file
diff --git a/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine-expected-runtimeMessages.txt b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine-expected-runtimeMessages.txt
new file mode 100644
index 0000000..0be6fd3
--- /dev/null
+++ b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine-expected-runtimeMessages.txt
@@ -0,0 +1 @@
+ (null 0 0) null[]
diff --git a/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine-expected-validation.txt b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine-expected-validation.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine-expected-validation.txt
diff --git a/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine.mtl b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine.mtl
new file mode 100644
index 0000000..69ac98e
--- /dev/null
+++ b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine.mtl
@@ -0,0 +1,10 @@
+[module myModule('http://www.eclipse.org/emf/2002/Ecore')/]
+
+[comment @main /]
+[template public myTemplate(myParam : ecore::EPackage)]
+  [file (myParam.name + '.txt', overwrite)]
+    before empty line
+    
+    after empty line
+  [/file]
+[/template]
\ No newline at end of file
diff --git a/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine.xmi b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine.xmi
new file mode 100644
index 0000000..ad60384
--- /dev/null
+++ b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/emptyLine.xmi
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="anydsl" nsURI="http://www.eclipse.org/acceleo/anydsl" nsPrefix="anydsl">
+  <eClassifiers xsi:type="ecore:EClass" name="World">
+    <eAnnotations source="http://www.obeo.fr/dsl/dnc/archetype">
+      <details key="archetype" value="MomentInterval"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="companies" upperBound="-1"
+        eType="#//Company" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="foods" upperBound="-1"
+        eType="#//Food" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="sources" upperBound="-1"
+        eType="#//Source" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MultiNamedElement" abstract="true" interface="true">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" upperBound="-1" eType="#//SingleString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true" interface="true">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//SingleString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Producer" eSuperTypes="#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="adress" eType="#//Adress"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="company" eType="#//Company"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="foods" upperBound="-1"
+        eType="#//Food" eOpposite="#//Food/producers"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Adress">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="zipCode" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="city" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="country" eType="#//CountryData"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Company" abstract="true" interface="true"
+      eSuperTypes="#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="adress" eType="#//Adress"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="world" eType="#//World"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ProductionCompany" eSuperTypes="#//Company">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="producers" upperBound="-1"
+        eType="#//Producer" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Restaurant" eSuperTypes="#//Company">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="chefs" upperBound="-1"
+        eType="#//Chef" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="menu" upperBound="-1" eType="#//EStringToRecipeMap"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Chef" eSuperTypes="#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="adress" eType="#//Adress"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="recipes" upperBound="-1"
+        eType="#//Recipe" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Recipe" eSuperTypes="#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ingredients" upperBound="-1"
+        eType="#//Food"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Food" eSuperTypes="#//NamedElement">
+    <eOperations name="ripen" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+      <eParameters name="color" eType="#//Color"/>
+    </eOperations>
+    <eOperations name="preferredColor" eType="#//Color"/>
+    <eOperations name="newFood" eType="#//Food"/>
+    <eOperations name="setColor">
+      <eParameters name="food" eType="#//Food"/>
+      <eParameters name="newColor" eType="#//Color"/>
+    </eOperations>
+    <eOperations name="setCaliber">
+      <eParameters name="food" eType="#//Food"/>
+      <eParameters name="newCaliber" upperBound="-1" eType="#//Caliber"/>
+    </eOperations>
+    <eOperations name="acceptedCaliber" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+      <eParameters name="caliber" eType="#//Caliber"/>
+    </eOperations>
+    <eOperations name="label">
+      <eParameters name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eOperations>
+    <eOperations name="preferredLabel" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eParameters name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="color" upperBound="-1"
+        eType="#//Color"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="caliber" eType="#//Caliber"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="relatedFoods" upperBound="-1"
+        eType="#//Food"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group" eType="#//Group"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="label" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" eType="#//Source"
+        eOpposite="#//Source/foods"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="producers" upperBound="-1"
+        eType="#//Producer" eOpposite="#//Producer/foods"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Source" abstract="true" interface="true"
+      eSuperTypes="#//MultiNamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="foods" upperBound="-1"
+        eType="#//Food" eOpposite="#//Food/source"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="origin" upperBound="-1"
+        eType="#//CountryData"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Plant" eSuperTypes="#//Source">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//Kind"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Animal" eSuperTypes="#//Source">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="part" upperBound="-1" eType="#//Part"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Color">
+    <eLiterals name="black"/>
+    <eLiterals name="red" value="1"/>
+    <eLiterals name="green" value="2"/>
+    <eLiterals name="yellow" value="3"/>
+    <eLiterals name="orange" value="4"/>
+    <eLiterals name="brown" value="5"/>
+    <eLiterals name="pink" value="6"/>
+    <eLiterals name="palPink" value="7" literal="palPink"/>
+    <eLiterals name="veryYellow" value="8"/>
+    <eLiterals name="white" value="9"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Caliber">
+    <eLiterals name="S"/>
+    <eLiterals name="M" value="1"/>
+    <eLiterals name="L" value="2"/>
+    <eLiterals name="XL" value="3"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Group">
+    <eLiterals name="Water"/>
+    <eLiterals name="Dairy" value="1"/>
+    <eLiterals name="Fruit" value="2"/>
+    <eLiterals name="Grain" value="3"/>
+    <eLiterals name="Protein" value="4"/>
+    <eLiterals name="Sweet" value="5"/>
+    <eLiterals name="Vegetable" value="6"/>
+    <eLiterals name="Alcohol" value="7"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Continent">
+    <eLiterals name="Europe"/>
+    <eLiterals name="Asia" value="1"/>
+    <eLiterals name="Africa" value="2"/>
+    <eLiterals name="America" value="3"/>
+    <eLiterals name="Australia" value="4"/>
+    <eLiterals name="Antarctica" value="5"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Kind">
+    <eLiterals name="Other"/>
+    <eLiterals name="Seed" value="1"/>
+    <eLiterals name="Oilseed" value="2"/>
+    <eLiterals name="Tree" value="3"/>
+    <eLiterals name="Root" value="4"/>
+    <eLiterals name="Bulb" value="5"/>
+    <eLiterals name="Leaf" value="6"/>
+    <eLiterals name="Stem" value="7"/>
+    <eLiterals name="Flower" value="8"/>
+    <eLiterals name="Inflorescence" value="9"/>
+    <eLiterals name="Spice" value="10"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Part">
+    <eLiterals name="Other"/>
+    <eLiterals name="Muscle" value="1"/>
+    <eLiterals name="Organ" value="2"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="CountryData" instanceClassName="anydsl.Country"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="SingleString" instanceClassName="java.lang.String"/>
+  <eClassifiers xsi:type="ecore:EClass" name="EStringToRecipeMap" instanceClassName="java.util.Map$Entry">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Recipe"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/generated/anydsl.txt-expected.txt b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/generated/anydsl.txt-expected.txt
new file mode 100644
index 0000000..100dbef
--- /dev/null
+++ b/tests/org.eclipse.acceleo.aql.tests/resources/evaluation/textStatement/emptyLine/generated/anydsl.txt-expected.txt
@@ -0,0 +1,3 @@
+before empty line
+
+after empty line