Fixed proxy enum literal serialization (AstSerializer).
Change-Id: I059d47556d86734d3fab68740b9704ffbab363df
diff --git a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/parser/AstSerializer.java b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/parser/AstSerializer.java
index 1956e0d..ad25d33 100644
--- a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/parser/AstSerializer.java
+++ b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/parser/AstSerializer.java
@@ -73,6 +73,8 @@
*/
private StringBuilder builder;
+ final Map<String, String> ePackagesURItoName = new HashMap<>();
+
/**
* Serializes the given {@link Expression}.
*
@@ -711,11 +713,25 @@
@Override
public Object caseEnumLiteral(EnumLiteral enumLiteral) {
- builder.append(enumLiteral.getLiteral().getEEnum().getEPackage().getName());
- builder.append(ECORE_SEPARATOR);
- builder.append(enumLiteral.getLiteral().getEEnum().getName());
- builder.append(ECORE_SEPARATOR);
- builder.append(enumLiteral.getLiteral().getName());
+ if (!enumLiteral.getLiteral().eIsProxy()) {
+ builder.append(enumLiteral.getLiteral().getEEnum().getEPackage().getName());
+ builder.append(ECORE_SEPARATOR);
+ builder.append(enumLiteral.getLiteral().getEEnum().getName());
+ builder.append(ECORE_SEPARATOR);
+ builder.append(enumLiteral.getLiteral().getName());
+ } else {
+ final URI proxyURI = ((org.eclipse.emf.ecore.impl.EEnumLiteralImpl)enumLiteral.getLiteral())
+ .eProxyURI();
+ final String packageName = ePackagesURItoName.getOrDefault(removeFragment(proxyURI),
+ "packageName");
+ final String[] segments = proxyURI.fragment().split("/");
+ builder.append(packageName);
+ builder.append(ECORE_SEPARATOR);
+ builder.append(segments[segments.length - 2]);
+ builder.append(ECORE_SEPARATOR);
+ builder.append(segments[segments.length - 1]);
+ }
+
return DUMMY;
}
@@ -879,6 +895,7 @@
} else {
final URI proxyURI = ((EClassifierImpl)eClassifier).eProxyURI();
final String[] segments = proxyURI.fragment().split("/");
+ ePackagesURItoName.put(removeFragment(proxyURI), segments[segments.length - 2]);
builder.append(segments[segments.length - 2]);
builder.append(ECORE_SEPARATOR);
builder.append(segments[segments.length - 1]);
@@ -889,6 +906,10 @@
return DUMMY;
}
+ private String removeFragment(URI uri) {
+ return uri.toString().substring(0, uri.toString().length() - uri.fragment().length());
+ }
+
@Override
public Object caseVariableDeclaration(VariableDeclaration variableDeclaration) {
builder.append(variableDeclaration.getName());