package com.sap.runlet.interpreter; import java.lang.reflect.Method; import org.eclipse.emf.ecore.EObject; import com.sap.ap.metamodel.utils.StringFormatter; import com.sap.runlet.abstractinterpreter.AbstractObjectFormatter; import com.sap.runlet.abstractinterpreter.objects.RunletObject; import data.classes.AssociationEnd; import data.classes.ClassTypeDefinition; import data.classes.Signature; import data.classes.SignatureImplementation; import data.classes.TypeDefinition; public class RunletObjectFormatter implements AbstractObjectFormatter<AssociationEnd, TypeDefinition, ClassTypeDefinition, SignatureImplementation> { @Override public String formatSignatureOfImpl(SignatureImplementation currentlyExecutingImplementation) { return StringFormatter.toString(currentlyExecutingImplementation.getImplementedSignature()); } @Override public String formatType(RunletObject<AssociationEnd, TypeDefinition, ClassTypeDefinition> value) { return StringFormatter.toString(value.getType()); } @Override public String formatOwnerOfSignatureOfImpl(SignatureImplementation signatureImpl) { return signatureImpl.getImplements_().getOwner().getName(); } @Override public String formatCurrentlyEvaluatingEObject(EObject currentlyEvaluating) { StringBuilder result = new StringBuilder(); if (currentlyEvaluating instanceof Signature) { result.append(StringFormatter.toString((Signature) currentlyEvaluating)); } else { Method getName; try { getName = currentlyEvaluating.getClass().getMethod("getName"); if (getName != null) { result.append(getName.invoke(currentlyEvaluating)); } } catch (Exception e) { // just don't add result of getName() then... } result.append(':'); result.append((currentlyEvaluating.eClass()).getName()); } return result.toString(); } }