blob: c85bd4a06bd3aa9a7dbb8f06a383d52256a84683 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 itemis AG (http://www.itemis.eu) and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.xtend.lib.macro.services;
import org.eclipse.xtend.lib.macro.declaration.CompilationUnit;
import org.eclipse.xtend.lib.macro.declaration.Element;
import com.google.common.annotations.Beta;
/**
*
* Support for navigating between the primary AST structure representing the Xtend code
* and the corresponding Java elements derived from that.
*
* @author Sven Efftinge
* @noimplement This interface is not intended to be implemented by clients.
* @see Associator
*/
@Beta
public interface Tracability {
/**
* @param element
* @return whether the given element is a source (i.e Xtend) element.
* @since 2.7
*/
boolean isSource(Element element);
/**
* @param element
* @return whether the given element is a Java element derived from the currently processed {@link CompilationUnit}
* @since 2.7
*/
boolean isGenerated(Element element);
/**
* @param element
* @return whether the given element is a Java element <b>not</b> derived from the currently processed {@link CompilationUnit}
* @since 2.7
*/
boolean isExternal(Element element);
/**
* @param source
* @return the primary generated element (Java) derived from the given source element (Xtend).
* @since 2.7
*/
Element getPrimaryGeneratedJavaElement(Element source);
/**
* @since 2.7
* @param target
* @return whether this element was already present in the Xtend source AST.
*/
boolean isThePrimaryGeneratedJavaElement(Element target);
/**
* @param target
* @return the source element (Xtend) the given target (Java) element is derived from
* @since 2.7
*/
Element getPrimarySourceElement(Element target);
}