package com.framsticks.framclipse.resource; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.xtext.resource.IDefaultResourceDescriptionStrategy; import org.eclipse.xtext.resource.IEObjectDescription; import org.eclipse.xtext.resource.impl.DefaultResourceDescription; import com.framsticks.framclipse.framScript.Code; import com.framsticks.framclipse.framScript.Property; import com.framsticks.framclipse.framScript.State; import com.framsticks.framclipse.framScript.VariableDeclaration; import com.framsticks.framclipse.framScript.VariableDeclarations; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; public class FramScriptResourceDescription extends DefaultResourceDescription { private Resource resource; public FramScriptResourceDescription(Resource resource, IDefaultResourceDescriptionStrategy resourceDescriptionStrategy) { super(resource, resourceDescriptionStrategy); this.resource = resource; } @Override protected List computeExportedObjects() { List objects = super.computeExportedObjects(); Iterable filter = Iterables.filter(objects, new Predicate() { @Override public boolean apply(IEObjectDescription desc) { EObject input = desc.getEObjectOrProxy(); return shouldExport(input); } }); return Lists.newArrayList(filter); } protected boolean shouldExport(EObject input) { return input instanceof com.framsticks.framclipse.framScript.Function || input instanceof Property || input instanceof State || isGlobal(input); } private boolean isGlobal(EObject input) { if (input instanceof VariableDeclaration) { VariableDeclaration dec = (VariableDeclaration) input; EObject decs = dec.eContainer(); return decs instanceof VariableDeclarations && (decs.eContainer() instanceof Code || "inc".equals(resource.getURI().fileExtension()) && decs.eContainer().eContainer() == null); } return false; } }