/**
 * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0 
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *         Florian Pirchner - Initial implementation
 */
package org.eclipse.osbp.xtext.oxtype.serializer;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.osbp.xtext.oxtype.linking.JvmTypeAwareLinkingHelper;
import org.eclipse.xtext.serializer.sequencer.LegacyTransientValueService;

import com.google.inject.Inject;

/**
 * Ensures, that jvm links will not be serialized.
 */
@SuppressWarnings("restriction")
public class JvmTypeAwareTransientValueService extends
		LegacyTransientValueService {

	@Inject
	JvmTypeAwareLinkingHelper linkingHelper;

	@Override
	public ValueTransient isValueTransient(EObject semanticObject,
			EStructuralFeature feature) {
		if (linkingHelper.isJvmLink(feature)) {
			// JvmHelperLinks must not be serialized
			return ValueTransient.YES;
		}

		return super.isValueTransient(semanticObject, feature);
	}

}
