[generator.base] Fix clean up of generation directory

The GeneratorFileIO object of the generator is a singleton and must be
reset on each generation pass.

Bug 572360

Change-Id: Ifbbd45ac368e628894e600dbdbfe70bfd548e6e8
diff --git a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/GeneratorApplication.java b/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/GeneratorApplication.java
index bc705bc..6240d90 100644
--- a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/GeneratorApplication.java
+++ b/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/GeneratorApplication.java
@@ -193,15 +193,15 @@
 
 	private Logger createLogger(Arguments arguments, ILineOutput out) {
 		Logger logger = loggerProvider.get();
-		logger.setLoglevel(arguments.get(GeneratorApplicationOptions.LOGLEVEL));
-		logger.setOutput(out);
+		Loglevel loglevel = arguments.get(GeneratorApplicationOptions.LOGLEVEL);
+		logger.init(loglevel, out);
 		return logger;
 	}
 
 	private GeneratorFileIO createGeneratorFileIO(Arguments arguments, Logger logger) {
 		GeneratorFileIO fileIO = fileIOProvider.get();
-		fileIO.setOutputDirectory(arguments.get(GeneratorApplicationOptions.GEN_DIR));
-		fileIO.setLogger(logger);
+		String genDir = arguments.get(GeneratorApplicationOptions.GEN_DIR);
+		fileIO.init(genDir, logger);
 		return fileIO;
 	}
 
diff --git a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/io/GeneratorFileIO.java b/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/io/GeneratorFileIO.java
index 4340875..ba07300 100644
--- a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/io/GeneratorFileIO.java
+++ b/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/io/GeneratorFileIO.java
@@ -34,6 +34,8 @@
 import org.eclipse.etrice.generator.base.logging.NullLogger;
 import org.eclipse.xtext.util.RuntimeIOException;
 
+import com.google.inject.Inject;
+
 /**
  * Incrementally writes files to an output directory.
  * 
@@ -49,20 +51,10 @@
 	private Path outputPath;
 	private ILogger logger;
 	
-	/**
-	 * Creates a new generator file io instance that writes to the working directory.
-	 */
-	public GeneratorFileIO() {
-		this("");
-	}
-	
-	/**
-	 * Creates a new generator file io that writes to the specified output directory.
-	 * 
-	 * @param outputPath the path to the output directory
-	 */
-	public GeneratorFileIO(String outputPath) {
-		this(outputPath, new NullLogger());
+	@Inject
+	@Deprecated
+	private GeneratorFileIO() {
+		init("", new NullLogger());
 	}
 	
 	/**
@@ -72,19 +64,20 @@
 	 * @param logger the logger
 	 */
 	public GeneratorFileIO(String outputPath, ILogger logger) {
-		generatedFiles = new HashSet<>();
-		
-		setOutputDirectory(outputPath);
-		setLogger(logger);
+		init(outputPath, logger);
 	}
 	
 	/**
-	 * Sets to logger.
+	 * Sets the output directory and logger for this file io and
+	 * clears the record of already generated files.
 	 * 
-	 * @param logger the logger
+	 * @param outputPath the path to the output directory
+	 * @param logger a logger
 	 */
-	public void setLogger(ILogger logger) {
+	public void init(String outputPath, ILogger logger) {
+		this.outputPath = Paths.get(outputPath).normalize();
 		this.logger = logger;
+		generatedFiles = new HashSet<>();
 	}
 	
 	/**
@@ -96,24 +89,6 @@
 		return outputPath;
 	}
 	
-	/**
-	 * Sets the output directory.
-	 * 
-	 * @param path the path to the new output directory
-	 */
-	public void setOutputDirectory(Path path) {
-		outputPath = path.normalize();
-	}
-	
-	/**
-	 * Sets the output directory.
-	 * 
-	 * @param path the path to the new output directory
-	 */
-	public void setOutputDirectory(String path) {
-		setOutputDirectory(Paths.get(path));
-	}
-	
 	@Override
 	public void generateFile(String file, CharSequence content) {
 		generateFile("generating file", file, content);
diff --git a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/ILineOutputLogger.java b/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/ILineOutputLogger.java
deleted file mode 100644
index 3bb421d..0000000
--- a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/ILineOutputLogger.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2011 protos software gmbh (http://www.protos.de).
-* All rights reserved.
-*
-* This program and the accompanying materials are made
-* available under the terms of the Eclipse Public License 2.0
-* which is available at https://www.eclipse.org/legal/epl-2.0/
-*
-* SPDX-License-Identifier: EPL-2.0
-*
-* CONTRIBUTORS:
-*           Thomas Schuetz and Henrik Rentz-Reichert (initial contribution)
-*
- *******************************************************************************/
-
-package org.eclipse.etrice.generator.base.logging;
-
-import org.eclipse.etrice.generator.base.io.ILineOutput;
-
-import com.google.inject.ImplementedBy;
-
-/**
- * An ILineOutputLogger will send its output to the specified {@link ILineOutput} if one is set.
- * 
- * @author Henrik Rentz-Reichert
- *
- */
-@ImplementedBy(Logger.class)
-public interface ILineOutputLogger extends ILogger {
-
-	/**
-	 * @param lo a line output to be used by the logger
-	 */
-	void setOutput(ILineOutput lo);
-}
diff --git a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/ILogger.java b/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/ILogger.java
index 1f4bc17..db6f649 100644
--- a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/ILogger.java
+++ b/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/ILogger.java
@@ -51,9 +51,4 @@
 	 */
 	Loglevel getLoglevel();
 	
-	/**
-	 * @param loglevel the loglevel
-	 */
-	void setLoglevel(Loglevel loglevel);
-	
 }
diff --git a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/Logger.java b/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/Logger.java
index 85b506e..5b24306 100644
--- a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/Logger.java
+++ b/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/Logger.java
@@ -18,6 +18,8 @@
 import org.eclipse.etrice.generator.base.io.ILineOutput;
 import org.eclipse.etrice.generator.base.io.LineOutput;
 
+import com.google.inject.Inject;
+
 /**
  * A simple logger class implementing the
  * {@link ILineOutputLogger ILineOutputLogger}
@@ -27,7 +29,7 @@
  * @author Henrik Rentz-Reichert
  * 
  */
-public class Logger implements ILineOutputLogger, ILineOutput {
+public class Logger implements ILogger, ILineOutput {
 
 	private static final String DEBUG_PREFIX =		"[DEBUG]   ";
 	private static final String INFO_PREFIX =		"[INFO]    ";
@@ -38,21 +40,19 @@
 	private Loglevel loglevel;
 	private ILineOutput output;
 	
-	public Logger() {
-		this(Loglevel.WARNING, new LineOutput());
-	}
-	
-	public Logger(Loglevel loglevel) {
-		this(loglevel, new LineOutput());
-	}
-	
-	public Logger(ILineOutput out) {
-		this(Loglevel.WARNING, out);
+	@Inject
+	@Deprecated
+	private Logger() {
+		init(Loglevel.WARNING, new LineOutput());
 	}
 	
 	public Logger(Loglevel loglevel, ILineOutput out) {
-		setLoglevel(loglevel);
-		setOutput(out);
+		init(loglevel, out);
+	}
+	
+	public void init(Loglevel loglevel, ILineOutput output) {
+		this.loglevel = loglevel;
+		this.output = output;
 	}
 	
 	@Override
@@ -89,16 +89,6 @@
 	}
 	
 	@Override
-	public void setLoglevel(Loglevel loglevel) {
-		this.loglevel = loglevel;
-	}
-	
-	@Override
-	public void setOutput(ILineOutput out) {
-		output = out;
-	}
-
-	@Override
 	public void println(String txt) {
 		output.println(txt);
 	}
diff --git a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/NullLogger.java b/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/NullLogger.java
index 54ea2cc..9eddcdc 100644
--- a/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/NullLogger.java
+++ b/plugins/org.eclipse.etrice.generator.base/src/org/eclipse/etrice/generator/base/logging/NullLogger.java
@@ -15,9 +15,6 @@
 
 package org.eclipse.etrice.generator.base.logging;
 
-import org.eclipse.etrice.generator.base.logging.ILogger;
-import org.eclipse.etrice.generator.base.logging.Loglevel;
-
 /**
  * @author Henrik Rentz-Reichert
  *
@@ -48,10 +45,6 @@
 		return Loglevel.OFF;
 	}
 
-	@Override
-	public void setLoglevel(Loglevel loglevel) {
-	}
-
 	public boolean hasErrors() {
 		return hasErrors;
 	}
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java
index 8d6d1b3..b5423df 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java
@@ -68,6 +68,8 @@
 	public void configure(Binder binder) {
 		binder.bind(ResourceSet.class).to(XtextResourceSet.class);
 
+		// Logger and GeneratorFileIO objects should *not* be injected by dependency injection.
+		// However, in order to avoid rewriting a lot of code we still provide these singletons.
 		binder.bind(Logger.class).in(Singleton.class);
 		binder.bind(GeneratorFileIO.class).in(Singleton.class);