package org.xtest.linking; import org.eclipse.emf.ecore.EReference; import org.eclipse.xtext.common.types.JvmField; import org.eclipse.xtext.common.types.JvmOperation; import org.eclipse.xtext.xbase.XAssignment; import org.eclipse.xtext.xbase.XFeatureCall; import org.eclipse.xtext.xbase.jvmmodel.IJvmModelAssociations; import org.eclipse.xtext.xbase.linking.FeatureCallChecker; import org.eclipse.xtext.xbase.scoping.featurecalls.JvmFeatureDescription; import com.google.inject.Inject; /** * Feature call checker allowing assignments to final instance variables * * @author Michael Barry */ @SuppressWarnings("restriction") public class XtestFeatureCallChecker extends FeatureCallChecker { @Inject private IJvmModelAssociations associations; @Override protected String _case(JvmField input, XAssignment context, EReference ref, JvmFeatureDescription jvmFeatureDescription) { String result; if (input.isFinal()) { result = null; } else { result = super._case(input, context, ref, jvmFeatureDescription); } return result; } @Override protected String _case(JvmOperation input, XFeatureCall context, EReference reference, JvmFeatureDescription jvmFeatureDescription) { if (associations.getPrimarySourceElement(input) != null) { return checkJvmOperation(input, context, context.isExplicitOperationCallOrBuilderSyntax(), jvmFeatureDescription); } return super._case(input, context, reference, jvmFeatureDescription); } }