
org.jnario.feature.jvmmodel.ExpressionCopier Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.jnario.standalone Show documentation
Show all versions of org.jnario.standalone Show documentation
The required libraries to execute Jnario specifications without Eclipse.
The newest version!
package org.jnario.feature.jvmmodel;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil.Copier;
import org.eclipse.xtend.core.xtend.XtendField;
import org.eclipse.xtext.common.types.JvmIdentifiableElement;
import org.eclipse.xtext.xbase.XAbstractFeatureCall;
import org.eclipse.xtext.xbase.XExpression;
import org.eclipse.xtext.xbase.XFeatureCall;
import org.eclipse.xtext.xbase.XMemberFeatureCall;
import org.eclipse.xtext.xbase.jvmmodel.IJvmModelAssociator;
import org.jnario.util.SourceAdapter;
import com.google.inject.Inject;
@SuppressWarnings("serial")
public class ExpressionCopier{
private class Implementation extends Copier{
public Implementation() {
super(true);
}
@Override
public EObject copy(EObject source) {
EObject target = super.copy(source);
// modelAssociator.associate(source, target);
if (source instanceof XAbstractFeatureCall) {
XAbstractFeatureCall sourceFeatureCall = (XAbstractFeatureCall) source;
XAbstractFeatureCall targetFeatureCall = (XAbstractFeatureCall) target;
targetFeatureCall.setFeature(sourceFeatureCall.getFeature());
targetFeatureCall.setImplicitFirstArgument((XExpression) copy(sourceFeatureCall.getImplicitFirstArgument()));
targetFeatureCall.setImplicitReceiver((XExpression) copy(sourceFeatureCall.getImplicitReceiver()));
}
if (source instanceof XMemberFeatureCall) {
XMemberFeatureCall sourceFeatureCall = (XMemberFeatureCall) source;
XMemberFeatureCall targetFeatureCall = (XMemberFeatureCall) target;
targetFeatureCall.setExplicitOperationCall(sourceFeatureCall.isExplicitOperationCall());
targetFeatureCall.setExplicitStatic(sourceFeatureCall.isExplicitStatic());
targetFeatureCall.setTypeLiteral(sourceFeatureCall.isTypeLiteral());
targetFeatureCall.setStaticWithDeclaringType(sourceFeatureCall.isStaticWithDeclaringType());
}
if (source instanceof XFeatureCall) {
XFeatureCall sourceFeatureCall = (XFeatureCall) source;
XFeatureCall targetFeatureCall = (XFeatureCall) target;
targetFeatureCall.setExplicitOperationCall(sourceFeatureCall.isExplicitOperationCall());
targetFeatureCall.setTypeLiteral(sourceFeatureCall.isTypeLiteral());
}
if(source instanceof XExpression || source instanceof XtendField){
SourceAdapter.adapt(target, source);
}
return target;
}
}
@Inject IJvmModelAssociator modelAssociator;
public T cloneWithProxies(T original) {
if (original == null)
return original;
Implementation copier = new Implementation();
@SuppressWarnings("unchecked")
T copy = (T) copier.copy(original);
copier.copyReferences();
return copy;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy