Removed IAcceleoEnvironment.getDestination().

Change-Id: I617bc617d6cc15d55b59e2b8e8ba8fb32f3da9ee
diff --git a/plugins/org.eclipse.acceleo.aql.launcher/src/org/eclipse/acceleo/aql/launcher/AcceleoLauncher.java b/plugins/org.eclipse.acceleo.aql.launcher/src/org/eclipse/acceleo/aql/launcher/AcceleoLauncher.java
index 22f15ff..89e118a 100644
--- a/plugins/org.eclipse.acceleo.aql.launcher/src/org/eclipse/acceleo/aql/launcher/AcceleoLauncher.java
+++ b/plugins/org.eclipse.acceleo.aql.launcher/src/org/eclipse/acceleo/aql/launcher/AcceleoLauncher.java
@@ -220,7 +220,7 @@
 		final QualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);

 		// TODO generation strategy should be configurable

 		IAcceleoEnvironment acceleoEnvironment = new AcceleoEnvironment(queryEnvironment,

-				new DefaultGenerationStrategy(), URI.createURI(target));

+				new DefaultGenerationStrategy());

 		AcceleoEvaluator evaluator = new AcceleoEvaluator(acceleoEnvironment, queryEnvironment

 				.getLookupEngine());

 

@@ -241,7 +241,7 @@
 

 	private void evaluate(AcceleoEvaluator evaluator, IAcceleoEnvironment environment,

 			IQualifiedNameLookupEngine lookupEngine, Module mainModule, ResourceSet modelResourceSet) {

-		AcceleoUtil.generate(evaluator, environment, mainModule, modelResourceSet);

+		AcceleoUtil.generate(evaluator, environment, mainModule, modelResourceSet, URI.createURI(target));

 	}

 

 	private void printDiagnostic(PrintStream stream, Diagnostic diagnostic, String indentation) {

diff --git a/plugins/org.eclipse.acceleo.aql.ls.debug/src/org/eclipse/acceleo/aql/ls/debug/AcceleoDebugger.java b/plugins/org.eclipse.acceleo.aql.ls.debug/src/org/eclipse/acceleo/aql/ls/debug/AcceleoDebugger.java
index 4be56bb..8813229 100644
--- a/plugins/org.eclipse.acceleo.aql.ls.debug/src/org/eclipse/acceleo/aql/ls/debug/AcceleoDebugger.java
+++ b/plugins/org.eclipse.acceleo.aql.ls.debug/src/org/eclipse/acceleo/aql/ls/debug/AcceleoDebugger.java
@@ -91,7 +91,7 @@
 					resolver.addLoader(QueryPlugin.getPlugin().createJavaLoader(
 							AcceleoParser.QUALIFIER_SEPARATOR));
 
-					AcceleoUtil.generate(evaluator, environment, module, model);
+					AcceleoUtil.generate(evaluator, environment, module, model, getDestination());
 				}
 			} finally {
 				// FIXME workaround: UI jobs are coming from core.debug even if the gen has finished,
@@ -110,8 +110,8 @@
 
 			IWorkspace workspace = ResourcesPlugin.getWorkspace();
 			if (workspace != null) {
-				IContainer container = workspace.getRoot().getContainerForLocation(new Path(environment
-						.getDestination().toFileString()));
+				IContainer container = workspace.getRoot().getContainerForLocation(new Path(destination
+						.toFileString()));
 				if (container != null) {
 					try {
 						container.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
@@ -144,11 +144,6 @@
 		}
 
 		@Override
-		public Object generate(ASTNode node, Map<String, Object> variables) {
-			return super.generate(node, variables);
-		}
-
-		@Override
 		public Object doSwitch(EObject eObject) {
 			if (isTerminated()) {
 				return null;
@@ -196,6 +191,11 @@
 	private IAcceleoEnvironment environment;
 
 	/**
+	 * The destination {@link URI}.
+	 */
+	private URI destination;
+
+	/**
 	 * The {@link AcceleoAstResult}.
 	 */
 	private AcceleoAstResult astResult;
@@ -227,14 +227,14 @@
 		setNoDebug(noDebug);
 		final URI moduleURI = URI.createURI((String)arguments.get(MODULE));
 		final URI modelURI = URI.createURI((String)arguments.get(MODEL));
-		final URI destination = URI.createURI((String)arguments.get(DESTINATION));
+		destination = URI.createURI((String)arguments.get(DESTINATION));
 
 		final IProject project = LSPEclipseUtils.findResourceFor((String)arguments.get(MODULE)).getProject();
 		final IQualifiedNameResolver resolver = QueryPlugin.getPlugin().createQualifiedNameResolver(
 				AcceleoPlugin.getPlugin().getClass().getClassLoader(), project,
 				AcceleoParser.QUALIFIER_SEPARATOR);
 		final IQualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
-		environment = new AcceleoEnvironment(queryEnvironment, new DefaultGenerationStrategy(), destination);
+		environment = new AcceleoEnvironment(queryEnvironment, new DefaultGenerationStrategy());
 		for (String nsURI : new ArrayList<String>(EPackage.Registry.INSTANCE.keySet())) {
 			registerEPackage(queryEnvironment, EPackage.Registry.INSTANCE.getEPackage(nsURI));
 		}
@@ -325,7 +325,7 @@
 		resolver.addLoader(new ModuleLoader(new AcceleoParser(), noDebugEvaluator));
 		resolver.addLoader(QueryPlugin.getPlugin().createJavaLoader(AcceleoParser.QUALIFIER_SEPARATOR));
 
-		AcceleoUtil.generate(noDebugEvaluator, env, module, modelResource);
+		AcceleoUtil.generate(noDebugEvaluator, env, module, modelResource, getDestination());
 	}
 
 	@Override
@@ -470,4 +470,14 @@
 
 		return res;
 	}
+
+	/**
+	 * Gets the destination {@link URI}.
+	 * 
+	 * @return the destination {@link URI}
+	 */
+	protected URI getDestination() {
+		return destination;
+	}
+
 }
diff --git a/plugins/org.eclipse.acceleo.aql.ls/src/org/eclipse/acceleo/aql/ls/services/textdocument/AcceleoTextDocument.java b/plugins/org.eclipse.acceleo.aql.ls/src/org/eclipse/acceleo/aql/ls/services/textdocument/AcceleoTextDocument.java
index b7ddbf2..18de02d 100644
--- a/plugins/org.eclipse.acceleo.aql.ls/src/org/eclipse/acceleo/aql/ls/services/textdocument/AcceleoTextDocument.java
+++ b/plugins/org.eclipse.acceleo.aql.ls/src/org/eclipse/acceleo/aql/ls/services/textdocument/AcceleoTextDocument.java
@@ -178,7 +178,7 @@
 
 		final IQualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(getProject()
 				.getResolver());
-		acceleoEnvironment = new AcceleoEnvironment(queryEnvironment, null, null);
+		acceleoEnvironment = new AcceleoEnvironment(queryEnvironment, null);
 
 		for (Metamodel metamodel : parsingResult.getModule().getMetamodels()) {
 			if (metamodel.getReferencedPackage() != null) {
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoEnvironment.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoEnvironment.java
index 3075527..e75c707 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoEnvironment.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoEnvironment.java
@@ -39,11 +39,6 @@
 	private final IAcceleoGenerationStrategy generationStrategy;
 
 	/**
-	 * The destination {@link URI}.
-	 */
-	private final URI destination;
-
-	/**
 	 * The {@link GenerationResult}.
 	 */
 	private final GenerationResult generationResult = new GenerationResult();
@@ -55,13 +50,10 @@
 	 *            the {@link IQualifiedNameQueryEnvironment}
 	 * @param generationStrategy
 	 *            the {@link IAcceleoGenerationStrategy}
-	 * @param destination
-	 *            the destination {@link URI}
 	 */
 	public AcceleoEnvironment(IQualifiedNameQueryEnvironment aqlEnvironment,
-			IAcceleoGenerationStrategy generationStrategy, URI destination) {
+			IAcceleoGenerationStrategy generationStrategy) {
 		this.generationStrategy = generationStrategy;
-		this.destination = destination;
 
 		this.aqlEnvironment = aqlEnvironment;
 		/* FIXME we need a cross reference provider, and we need to make it configurable */
@@ -95,11 +87,6 @@
 	}
 
 	@Override
-	public URI getDestination() {
-		return destination;
-	}
-
-	@Override
 	public GenerationResult getGenerationResult() {
 		return generationResult;
 	}
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoUtil.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoUtil.java
index d1f60be..3d2d412 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoUtil.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoUtil.java
@@ -27,6 +27,7 @@
 import org.eclipse.acceleo.query.runtime.IQueryEnvironment;
 import org.eclipse.acceleo.query.services.EObjectServices;
 import org.eclipse.acceleo.util.AcceleoSwitch;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EObject;
@@ -94,10 +95,12 @@
 	 *            the {@link Module}
 	 * @param model
 	 *            the {@link Resource} containing the model
+	 * @param destination
+	 *            destination {@link URI}
 	 */
 	public static void generate(AcceleoEvaluator evaluator, IAcceleoEnvironment acceleoEnvironment,
-			Module module, Resource model) {
-		generate(evaluator, acceleoEnvironment, module, Collections.singletonList(model));
+			Module module, Resource model, URI destination) {
+		generate(evaluator, acceleoEnvironment, module, Collections.singletonList(model), destination);
 	}
 
 	/**
@@ -111,14 +114,16 @@
 	 *            the {@link Module}
 	 * @param resourceSet
 	 *            the {@link ResourceSet} containing the input model(s)
+	 * @param destination
+	 *            the destination {@link URI}
 	 */
 	public static void generate(AcceleoEvaluator evaluator, IAcceleoEnvironment acceleoEnvironment,
-			Module module, ResourceSet resourceSet) {
-		generate(evaluator, acceleoEnvironment, module, resourceSet.getResources());
+			Module module, ResourceSet resourceSet, URI destination) {
+		generate(evaluator, acceleoEnvironment, module, resourceSet.getResources(), destination);
 	}
 
 	private static void generate(AcceleoEvaluator evaluator, IAcceleoEnvironment acceleoEnvironment,
-			Module module, List<Resource> resources) {
+			Module module, List<Resource> resources, URI destination) {
 		final IQueryEnvironment queryEnvironment = acceleoEnvironment.getQueryEnvironment();
 
 		final EObjectServices services = new EObjectServices(queryEnvironment, null, null);
@@ -148,7 +153,7 @@
 			final Map<String, Object> variables = new HashMap<String, Object>();
 			for (EObject value : values) {
 				variables.put(parameterName, value);
-				evaluator.generate(module, variables);
+				evaluator.generate(module, variables, destination);
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/IAcceleoEnvironment.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/IAcceleoEnvironment.java
index b1af7ad..ccb8828 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/IAcceleoEnvironment.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/IAcceleoEnvironment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2017, 2020 Obeo.
+ * Copyright (c) 2017, 2021 Obeo.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,13 +26,6 @@
 public interface IAcceleoEnvironment {
 
 	/**
-	 * Gets the destination {@link URI}.
-	 * 
-	 * @return the destination {@link URI}
-	 */
-	URI getDestination();
-
-	/**
 	 * Gets the {@link IQualifiedNameQueryEnvironment}.
 	 * 
 	 * @return the {@link IQualifiedNameQueryEnvironment}
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/AcceleoEvaluator.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/AcceleoEvaluator.java
index 561b8e1..a85e9e2 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/AcceleoEvaluator.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/AcceleoEvaluator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2020  Obeo.
+ * Copyright (c) 2016, 2021  Obeo.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -115,6 +115,11 @@
 	private boolean inlinedBlock;
 
 	/**
+	 * The destination {@link URI}.
+	 */
+	private URI destination;
+
+	/**
 	 * Constructor.
 	 * 
 	 * @param other
@@ -122,6 +127,7 @@
 	 */
 	public AcceleoEvaluator(AcceleoEvaluator other) {
 		this(other.environment, other.lookupEngine);
+		destination = other.destination;
 	}
 
 	/**
@@ -146,12 +152,15 @@
 	 *            the {@link ASTNode} to generate
 	 * @param variables
 	 *            the variables
+	 * @param destinationURI
+	 *            the destination {@link URI}
 	 * @return the generated {@link Object}, can be <code>null</code>
 	 */
-	public Object generate(ASTNode node, Map<String, Object> variables) {
+	public Object generate(ASTNode node, Map<String, Object> variables, URI destinationURI) {
 
 		final Object res;
 
+		destination = destinationURI;
 		lastLineOfLastStatement = "";
 		pushVariables(variables);
 		try {
@@ -499,7 +508,7 @@
 		} else {
 			final OpenModeKind mode = fileStatement.getMode();
 			final Charset charset = getCharset(fileStatement);
-			final URI uri = URI.createURI(toString(uriObject), true).resolve(environment.getDestination());
+			final URI uri = URI.createURI(toString(uriObject), true).resolve(destination);
 			try {
 				// FIXME line delimiter
 				environment.openWriter(uri, mode, charset, NEW_LINE);
@@ -674,4 +683,13 @@
 		return buffer.toString();
 	}
 
+	/**
+	 * Gets the destination {@link URI}.
+	 * 
+	 * @return the destination {@link URI}
+	 */
+	public URI getDestination() {
+		return destination;
+	}
+
 }
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/QueryService.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/QueryService.java
index 0071752..18b02bf 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/QueryService.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/QueryService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2017  Obeo.
+ * Copyright (c) 2016, 2021  Obeo.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -101,7 +101,8 @@
 			variables.put(var.getName(), arguments[i]);
 		}
 
-		return getEvaluator().generate(getOrigin(), variables);
+		final AcceleoEvaluator evaluator = getEvaluator();
+		return evaluator.generate(getOrigin(), variables, evaluator.getDestination());
 	}
 
 	@Override
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/TemplateService.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/TemplateService.java
index d506bfb..664fe09 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/TemplateService.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/TemplateService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2017  Obeo.
+ * Copyright (c) 2016, 2021  Obeo.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -99,7 +99,8 @@
 			variables.put(var.getName(), arguments[i]);
 		}
 
-		return getEvaluator().generate(getOrigin(), variables);
+		final AcceleoEvaluator evaluator = getEvaluator();
+		return evaluator.generate(getOrigin(), variables, evaluator.getDestination());
 	}
 
 	@Override
diff --git a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/completion/CompletionTests.java b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/completion/CompletionTests.java
index 0233ed8..e6c0ff4 100644
--- a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/completion/CompletionTests.java
+++ b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/completion/CompletionTests.java
@@ -45,7 +45,6 @@
 import org.eclipse.acceleo.query.runtime.namespace.IQualifiedNameQueryEnvironment;
 import org.eclipse.acceleo.query.runtime.namespace.IQualifiedNameResolver;
 import org.eclipse.acceleo.tests.utils.AbstractLanguageTestSuite;
-import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -124,7 +123,7 @@
 				.getClassLoader(), AcceleoParser.QUALIFIER_SEPARATOR);
 		final IQualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
 		final IAcceleoEnvironment acceleoEnvironment = new AcceleoEnvironment(queryEnvironment,
-				new DefaultGenerationStrategy(), URI.createURI(""));
+				new DefaultGenerationStrategy());
 
 		final AcceleoEvaluator evaluator = new AcceleoEvaluator(acceleoEnvironment, queryEnvironment
 				.getLookupEngine());
diff --git a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractEvaluationTestSuite.java b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractEvaluationTestSuite.java
index d95a132..e153f7d 100644
--- a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractEvaluationTestSuite.java
+++ b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractEvaluationTestSuite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2020 Obeo.
+ * Copyright (c) 2016, 2021 Obeo.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -103,7 +103,7 @@
 		final URI generatedFolderURI = URI.createURI("generated/").resolve(model.getURI());
 		final List<URI> expectedGeneratedFiles = getExpectedGeneratedFiles(generatedFolderURI);
 		final List<URI> unexpectedGeneratedFiles = new ArrayList<URI>();
-		AcceleoUtil.generate(evaluator, environment, module, model);
+		AcceleoUtil.generate(evaluator, environment, module, model, memoryDestination);
 
 		assertGenerationMessages(environment.getGenerationResult());
 
diff --git a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractLanguageTestSuite.java b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractLanguageTestSuite.java
index d383ec8..b6d2cf8 100644
--- a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractLanguageTestSuite.java
+++ b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractLanguageTestSuite.java
@@ -144,8 +144,7 @@
 		final IQualifiedNameResolver resolver = new ClassLoaderQualifiedNameResolver(classLoader,
 				AcceleoParser.QUALIFIER_SEPARATOR);
 		final IQualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
-		this.environment = new AcceleoEnvironment(queryEnvironment, new DefaultGenerationStrategy(),
-				memoryDestination);
+		this.environment = new AcceleoEnvironment(queryEnvironment, new DefaultGenerationStrategy());
 
 		evaluator = new AcceleoEvaluator(this.environment, queryEnvironment.getLookupEngine());
 		resolver.addLoader(new ModuleLoader(new AcceleoParser(), evaluator));