package de.lynorics.eclipse.jangaroo.ui.contentassist;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IProject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.xtext.resource.XtextResourceSet;
import org.eclipse.xtext.ui.resource.IResourceSetProvider;
import org.eclipse.xtext.ui.resource.XtextResourceSetProvider;
import org.eclipse.xtext.ui.util.JdtClasspathUriResolver;
import com.google.inject.Inject;
import com.google.inject.Provider;
/**
* @author Aaron Digulla - Initial contribution
* @see https://gist.github.com/digulla/3754363
*/
public class FastXtextResourceSetProvider implements IResourceSetProvider {
private final static Logger LOG = Logger.getLogger(FastXtextResourceSetProvider.class);
@Inject
private Provider<XtextResourceSet> resourceSetProvider;
@Inject
private PlatformURIMapCache platformURIMapCache;
@Inject
private XtextResourceSetProvider slowProvider;
private boolean slow = Boolean.getBoolean( "slowXtextResourceSetProvider" );
public ResourceSet get(IProject project) {
long start = System.nanoTime();
try {
XtextResourceSet result;
if( slow ) {
result = (XtextResourceSet) slowProvider.get( project );
} else {
result = resourceSetProvider.get();
IJavaProject javaProject = JavaCore.create(project);
if (javaProject != null && javaProject.exists()) {
result.getURIConverter().getURIMap().putAll(platformURIMapCache.computePlatformURIMap(javaProject));
result.setClasspathURIContext(javaProject);
result.setClasspathUriResolver(new JdtClasspathUriResolver());
}
}
LOG.debug( "FastXtextResourceSetProvider: map size: " + result.getURIConverter().getURIMap().size() );
return result;
} finally {
long end = System.nanoTime();
LOG.debug( "FastXtextResourceSetProvider: " + slow + " " + (end-start)/1000 + " us" );
LOG.debug(platformURIMapCache.getStats().toString());
}
}
}