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());