/** * <copyright> * </copyright> * * */ package org.reuseware.air.language.abstractsyntax.resource.as.analysis; /** * A default implementation for token resolvers. It tries to resolve lexems using * Java methods. */ public class AsDefaultTokenResolver implements org.reuseware.air.language.abstractsyntax.resource.as.IAsTokenResolver { private java.util.Map<?, ?> options; public String deResolve(java.lang.Object value, org.eclipse.emf.ecore.EStructuralFeature feature, org.eclipse.emf.ecore.EObject container) { if (value == null) { return "null"; } return value.toString(); } public void resolve(String lexem, org.eclipse.emf.ecore.EStructuralFeature feature, org.reuseware.air.language.abstractsyntax.resource.as.IAsTokenResolveResult result) { if (feature instanceof org.eclipse.emf.ecore.EAttribute) { if (feature.getEType() instanceof org.eclipse.emf.ecore.EEnum) { org.eclipse.emf.ecore.EEnumLiteral literal = ((org.eclipse.emf.ecore.EEnum) feature.getEType()).getEEnumLiteralByLiteral(lexem); if (literal != null) { result.setResolvedToken(literal.getInstance()); return; } else { result.setErrorMessage("Could not map lexem '" + lexem + "' to enum '" + feature.getEType().getName() + "'."); return; } } else if (feature.getEType() instanceof org.eclipse.emf.ecore.EDataType) { try { result.setResolvedToken(org.eclipse.emf.ecore.util.EcoreUtil.createFromString((org.eclipse.emf.ecore.EDataType) feature.getEType(), lexem)); } catch (Exception e) { result.setErrorMessage("Could not convert '" + lexem + "' to '" + feature.getEType().getName() + "'."); } } else { assert false; } } else { result.setResolvedToken(lexem); return; } } public void setOptions(java.util.Map<?, ?> options) { this.options = options; } public java.util.Map<?, ?> getOptions() { return options; } }