All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jnario.compiler.JnarioExpressionHelper Maven / Gradle / Ivy

The newest version!
package org.jnario.compiler;

import static com.google.common.collect.Iterators.concat;
import static com.google.common.collect.Iterators.filter;
import static org.jnario.jvmmodel.DoubleArrowSupport.isDoubleArrow;
import static org.jnario.util.EObjects.allParents;

import java.util.Iterator;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtend.core.typing.XtendExpressionHelper;
import org.eclipse.xtext.xbase.XAbstractFeatureCall;
import org.eclipse.xtext.xbase.XBinaryOperation;
import org.eclipse.xtext.xbase.XBooleanLiteral;
import org.eclipse.xtext.xbase.XClosure;
import org.eclipse.xtext.xbase.XExpression;
import org.eclipse.xtext.xbase.XNullLiteral;
import org.eclipse.xtext.xbase.XNumberLiteral;
import org.eclipse.xtext.xbase.XStringLiteral;
import org.eclipse.xtext.xbase.XTypeLiteral;
import org.eclipse.xtext.xbase.annotations.xAnnotations.XAnnotation;
import org.jnario.Assertion;

public class JnarioExpressionHelper extends XtendExpressionHelper {

	@Override
	public boolean isShortCircuitOperation(XAbstractFeatureCall featureCall) {
//		if (!(featureCall instanceof XBinaryOperation)) {
//			return false;
//		}
		if (isInAssertion(featureCall)) {
			return false;
		}
		return super.isShortCircuitOperation(featureCall);
	}

	protected boolean isInAssertion(XAbstractFeatureCall featureCall) {
		Iterator context = concat(filterExpressions(featureCall.eAllContents()), filterExpressions(allParents(featureCall)));
		while(context.hasNext()){
			XExpression current = context.next();
			if(isDoubleArrow((XExpression)current)){
				return true;
			}else if(current instanceof Assertion){
				return true;
			}else if (current instanceof XClosure) {
				return false;
			}
		}
		return false;
	}

	private Iterator filterExpressions(
			Iterator elements) {
		return filter(elements, XExpression.class);
	}


	public boolean isLiteral(XExpression expr) {
		return expr instanceof XClosure
				|| expr instanceof XStringLiteral
				|| expr instanceof XTypeLiteral
				|| expr instanceof XBooleanLiteral
				|| expr instanceof XNumberLiteral
				|| expr instanceof XNullLiteral
				|| expr instanceof XAnnotation;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy