Removed IAcceleoEnvironment writer and strategy.
Change-Id: I4c8b122cf4156bb355489cfdf5cbdc624f40d9f2
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 89e118a..60939ab 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
@@ -22,7 +22,6 @@
import org.eclipse.acceleo.aql.IAcceleoEnvironment;
import org.eclipse.acceleo.aql.evaluation.AcceleoEvaluator;
import org.eclipse.acceleo.aql.evaluation.GenerationResult;
-import org.eclipse.acceleo.aql.evaluation.writer.DefaultGenerationStrategy;
import org.eclipse.acceleo.aql.parser.AcceleoParser;
import org.eclipse.acceleo.aql.parser.ModuleLoader;
import org.eclipse.acceleo.query.ide.QueryPlugin;
@@ -219,8 +218,7 @@
AcceleoParser.QUALIFIER_SEPARATOR);
final QualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
// TODO generation strategy should be configurable
- IAcceleoEnvironment acceleoEnvironment = new AcceleoEnvironment(queryEnvironment,
- new DefaultGenerationStrategy());
+ IAcceleoEnvironment acceleoEnvironment = new AcceleoEnvironment(queryEnvironment);
AcceleoEvaluator evaluator = new AcceleoEvaluator(acceleoEnvironment, queryEnvironment
.getLookupEngine());
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 8813229..4f04a64 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
@@ -30,7 +30,6 @@
import org.eclipse.acceleo.aql.AcceleoUtil;
import org.eclipse.acceleo.aql.IAcceleoEnvironment;
import org.eclipse.acceleo.aql.evaluation.AcceleoEvaluator;
-import org.eclipse.acceleo.aql.evaluation.writer.DefaultGenerationStrategy;
import org.eclipse.acceleo.aql.ide.AcceleoPlugin;
import org.eclipse.acceleo.aql.parser.AcceleoAstResult;
import org.eclipse.acceleo.aql.parser.AcceleoParser;
@@ -234,7 +233,7 @@
AcceleoPlugin.getPlugin().getClass().getClassLoader(), project,
AcceleoParser.QUALIFIER_SEPARATOR);
final IQualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
- environment = new AcceleoEnvironment(queryEnvironment, new DefaultGenerationStrategy());
+ environment = new AcceleoEnvironment(queryEnvironment);
for (String nsURI : new ArrayList<String>(EPackage.Registry.INSTANCE.keySet())) {
registerEPackage(queryEnvironment, EPackage.Registry.INSTANCE.getEPackage(nsURI));
}
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 18de02d..ea4d278 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);
+ acceleoEnvironment = new AcceleoEnvironment(queryEnvironment);
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 e75c707..e6358f1 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
@@ -10,17 +10,8 @@
*******************************************************************************/
package org.eclipse.acceleo.aql;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.util.ArrayDeque;
-import java.util.Deque;
-
-import org.eclipse.acceleo.OpenModeKind;
import org.eclipse.acceleo.aql.evaluation.GenerationResult;
-import org.eclipse.acceleo.aql.evaluation.writer.IAcceleoGenerationStrategy;
-import org.eclipse.acceleo.aql.evaluation.writer.IAcceleoWriter;
import org.eclipse.acceleo.query.runtime.namespace.IQualifiedNameQueryEnvironment;
-import org.eclipse.emf.common.util.URI;
/**
* This environment will keep track of Acceleo's evaluation context. TODO doc.
@@ -32,12 +23,6 @@
/** The AQL environment that will be used to evaluate aql expressions from this Acceleo context. */
private IQualifiedNameQueryEnvironment aqlEnvironment;
- /** This will hold the writer stack for the file blocks. */
- private final Deque<IAcceleoWriter> writers = new ArrayDeque<IAcceleoWriter>();
-
- /** The current generation strategy. */
- private final IAcceleoGenerationStrategy generationStrategy;
-
/**
* The {@link GenerationResult}.
*/
@@ -48,13 +33,8 @@
*
* @param aqlEnvironment
* the {@link IQualifiedNameQueryEnvironment}
- * @param generationStrategy
- * the {@link IAcceleoGenerationStrategy}
*/
- public AcceleoEnvironment(IQualifiedNameQueryEnvironment aqlEnvironment,
- IAcceleoGenerationStrategy generationStrategy) {
- this.generationStrategy = generationStrategy;
-
+ public AcceleoEnvironment(IQualifiedNameQueryEnvironment aqlEnvironment) {
this.aqlEnvironment = aqlEnvironment;
/* FIXME we need a cross reference provider, and we need to make it configurable */
org.eclipse.acceleo.query.runtime.Query.configureEnvironment(aqlEnvironment, null, null);
@@ -66,27 +46,6 @@
}
@Override
- public void openWriter(URI uri, OpenModeKind openMode, Charset charset, String lineDelimiter)
- throws IOException {
- final IAcceleoWriter writer = generationStrategy.createWriterFor(uri, openMode, charset,
- lineDelimiter);
- writers.addLast(writer);
- generationResult.getGeneratedFiles().add(uri);
- }
-
- @Override
- public void closeWriter() throws IOException {
- final IAcceleoWriter writer = writers.removeLast();
- writer.close();
- }
-
- @Override
- public void write(String text) throws IOException {
- IAcceleoWriter writer = writers.peekLast();
- writer.append(text);
- }
-
- @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 3d2d412..467d588 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
@@ -23,6 +23,7 @@
import org.eclipse.acceleo.ModuleElement;
import org.eclipse.acceleo.Template;
import org.eclipse.acceleo.aql.evaluation.AcceleoEvaluator;
+import org.eclipse.acceleo.aql.evaluation.writer.DefaultGenerationStrategy;
import org.eclipse.acceleo.query.ast.EClassifierTypeLiteral;
import org.eclipse.acceleo.query.runtime.IQueryEnvironment;
import org.eclipse.acceleo.query.services.EObjectServices;
@@ -153,7 +154,7 @@
final Map<String, Object> variables = new HashMap<String, Object>();
for (EObject value : values) {
variables.put(parameterName, value);
- evaluator.generate(module, variables, destination);
+ evaluator.generate(module, variables, new DefaultGenerationStrategy(), 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 ccb8828..9426285 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
@@ -10,13 +10,8 @@
*******************************************************************************/
package org.eclipse.acceleo.aql;
-import java.io.IOException;
-import java.nio.charset.Charset;
-
-import org.eclipse.acceleo.OpenModeKind;
import org.eclipse.acceleo.aql.evaluation.GenerationResult;
import org.eclipse.acceleo.query.runtime.namespace.IQualifiedNameQueryEnvironment;
-import org.eclipse.emf.common.util.URI;
/**
* Acceleo environment.
@@ -33,41 +28,6 @@
IQualifiedNameQueryEnvironment getQueryEnvironment();
/**
- * Opens a writer for the given file uri.
- *
- * @param uri
- * The {@link URI} for which we need a writer.
- * @param openMode
- * The mode in which to open the file.
- * @param charset
- * The {@link Charset} for the target file.
- * @param lineDelimiter
- * Line delimiter that should be used for that file.
- * @throws IOException
- * if the writed can't be opened
- */
- void openWriter(URI uri, OpenModeKind openMode, Charset charset, String lineDelimiter) throws IOException;
-
- /**
- * Closes the last {@link #openWriter(String, OpenModeKind, String, String) opened} writer.
- *
- * @throws IOException
- * if the writer can't be closed
- */
- void closeWriter() throws IOException;
-
- /**
- * Writes the given {@link String} to the last {@link #openWriter(String, OpenModeKind, String, String)
- * opened} writer.
- *
- * @param text
- * the text to write
- * @throws IOException
- * if the writer can't be written
- */
- void write(String text) throws IOException;
-
- /**
* Gets the {@link GenerationResult}.
*
* @return the {@link GenerationResult}
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 a85e9e2..37fcc93 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
@@ -46,6 +46,8 @@
import org.eclipse.acceleo.TextStatement;
import org.eclipse.acceleo.aql.AcceleoUtil;
import org.eclipse.acceleo.aql.IAcceleoEnvironment;
+import org.eclipse.acceleo.aql.evaluation.writer.IAcceleoGenerationStrategy;
+import org.eclipse.acceleo.aql.evaluation.writer.IAcceleoWriter;
import org.eclipse.acceleo.query.parser.AstResult;
import org.eclipse.acceleo.query.runtime.EvaluationResult;
import org.eclipse.acceleo.query.runtime.IQueryEnvironment;
@@ -119,6 +121,12 @@
*/
private URI destination;
+ /** This will hold the writer stack for the file blocks. */
+ private final Deque<IAcceleoWriter> writers = new ArrayDeque<IAcceleoWriter>();
+
+ /** The current generation strategy. */
+ private IAcceleoGenerationStrategy generationStrategy;
+
/**
* Constructor.
*
@@ -128,6 +136,7 @@
public AcceleoEvaluator(AcceleoEvaluator other) {
this(other.environment, other.lookupEngine);
destination = other.destination;
+ generationStrategy = other.generationStrategy;
}
/**
@@ -152,15 +161,19 @@
* the {@link ASTNode} to generate
* @param variables
* the variables
+ * @param strategy
+ * the IAcceleoGenerationStrategy
* @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, URI destinationURI) {
+ public Object generate(ASTNode node, Map<String, Object> variables, IAcceleoGenerationStrategy strategy,
+ URI destinationURI) {
final Object res;
destination = destinationURI;
+ generationStrategy = strategy;
lastLineOfLastStatement = "";
pushVariables(variables);
try {
@@ -511,15 +524,15 @@
final URI uri = URI.createURI(toString(uriObject), true).resolve(destination);
try {
// FIXME line delimiter
- environment.openWriter(uri, mode, charset, NEW_LINE);
+ openWriter(uri, mode, charset, NEW_LINE);
lastLineOfLastStatement = "";
pushIndentation(fileStatement.getBody(), lastLineOfLastStatement);
try {
final String content = (String)doSwitch(fileStatement.getBody());
- environment.write(content);
+ write(content);
} finally {
popIndentation();
- environment.closeWriter();
+ closeWriter();
}
} catch (IOException e) {
final BasicDiagnostic diagnostic = new BasicDiagnostic(Diagnostic.ERROR, ID, 0, e
@@ -535,6 +548,53 @@
}
/**
+ * Opens a writer for the given file uri.
+ *
+ * @param uri
+ * The {@link URI} for which we need a writer.
+ * @param openMode
+ * The mode in which to open the file.
+ * @param charset
+ * The {@link Charset} for the target file.
+ * @param lineDelimiter
+ * Line delimiter that should be used for that file.
+ * @throws IOException
+ * if the writed can't be opened
+ */
+ private void openWriter(URI uri, OpenModeKind openMode, Charset charset, String lineDelimiter)
+ throws IOException {
+ final IAcceleoWriter writer = generationStrategy.createWriterFor(uri, openMode, charset,
+ lineDelimiter);
+ writers.addLast(writer);
+ environment.getGenerationResult().getGeneratedFiles().add(uri);
+ }
+
+ /**
+ * Closes the last {@link #openWriter(String, OpenModeKind, String, String) opened} writer.
+ *
+ * @throws IOException
+ * if the writer can't be closed
+ */
+ private void closeWriter() throws IOException {
+ final IAcceleoWriter writer = writers.removeLast();
+ writer.close();
+ }
+
+ /**
+ * Writes the given {@link String} to the last {@link #openWriter(String, OpenModeKind, String, String)
+ * opened} writer.
+ *
+ * @param text
+ * the text to write
+ * @throws IOException
+ * if the writer can't be written
+ */
+ private void write(String text) throws IOException {
+ IAcceleoWriter writer = writers.peekLast();
+ writer.append(text);
+ }
+
+ /**
* Gets the {@link Charset} of the given {@link FileStatement}.
*
* @param fileStatement
@@ -692,4 +752,13 @@
return destination;
}
+ /**
+ * Gets the {@link IAcceleoGenerationStrategy}.
+ *
+ * @return the {@link IAcceleoGenerationStrategy}
+ */
+ public IAcceleoGenerationStrategy getGenerationStrategy() {
+ return generationStrategy;
+ }
+
}
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 18b02bf..3a6449a 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
@@ -102,7 +102,8 @@
}
final AcceleoEvaluator evaluator = getEvaluator();
- return evaluator.generate(getOrigin(), variables, evaluator.getDestination());
+ return evaluator.generate(getOrigin(), variables, evaluator.getGenerationStrategy(), 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 664fe09..146c963 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
@@ -100,7 +100,8 @@
}
final AcceleoEvaluator evaluator = getEvaluator();
- return evaluator.generate(getOrigin(), variables, evaluator.getDestination());
+ return evaluator.generate(getOrigin(), variables, evaluator.getGenerationStrategy(), 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 e6c0ff4..900b638 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
@@ -35,7 +35,6 @@
import org.eclipse.acceleo.aql.completion.AcceleoCompletor;
import org.eclipse.acceleo.aql.completion.proposals.AcceleoCompletionProposal;
import org.eclipse.acceleo.aql.evaluation.AcceleoEvaluator;
-import org.eclipse.acceleo.aql.evaluation.writer.DefaultGenerationStrategy;
import org.eclipse.acceleo.aql.parser.AcceleoAstResult;
import org.eclipse.acceleo.aql.parser.AcceleoParser;
import org.eclipse.acceleo.aql.parser.ModuleLoader;
@@ -122,8 +121,7 @@
final IQualifiedNameResolver resolver = new ClassLoaderQualifiedNameResolver(getClass()
.getClassLoader(), AcceleoParser.QUALIFIER_SEPARATOR);
final IQualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
- final IAcceleoEnvironment acceleoEnvironment = new AcceleoEnvironment(queryEnvironment,
- new DefaultGenerationStrategy());
+ final IAcceleoEnvironment acceleoEnvironment = new AcceleoEnvironment(queryEnvironment);
final AcceleoEvaluator evaluator = new AcceleoEvaluator(acceleoEnvironment, queryEnvironment
.getLookupEngine());
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 b6d2cf8..41d4759 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
@@ -37,7 +37,6 @@
import org.eclipse.acceleo.aql.AcceleoEnvironment;
import org.eclipse.acceleo.aql.IAcceleoEnvironment;
import org.eclipse.acceleo.aql.evaluation.AcceleoEvaluator;
-import org.eclipse.acceleo.aql.evaluation.writer.DefaultGenerationStrategy;
import org.eclipse.acceleo.aql.parser.AcceleoAstResult;
import org.eclipse.acceleo.aql.parser.AcceleoParser;
import org.eclipse.acceleo.aql.parser.ModuleLoader;
@@ -144,7 +143,7 @@
final IQualifiedNameResolver resolver = new ClassLoaderQualifiedNameResolver(classLoader,
AcceleoParser.QUALIFIER_SEPARATOR);
final IQualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
- this.environment = new AcceleoEnvironment(queryEnvironment, new DefaultGenerationStrategy());
+ this.environment = new AcceleoEnvironment(queryEnvironment);
evaluator = new AcceleoEvaluator(this.environment, queryEnvironment.getLookupEngine());
resolver.addLoader(new ModuleLoader(new AcceleoParser(), evaluator));