package org.jnario.ui.smap;
import java.util.Set;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.emf.common.util.URI;
import org.eclipse.xtext.builder.EclipseOutputConfigurationProvider;
import org.eclipse.xtext.builder.smap.DebugSourceInstallingCompilationParticipant;
import org.eclipse.xtext.generator.IFileSystemAccess;
import org.eclipse.xtext.generator.OutputConfiguration;
import org.eclipse.xtext.resource.IResourceServiceProvider;
import org.eclipse.xtext.ui.util.ResourceUtil;
import org.jnario.util.FileExtensions;
import com.google.inject.Inject;
public class JnarioDebugSourceInstallingCompilationParticipant extends
DebugSourceInstallingCompilationParticipant {
@Inject
private IResourceServiceProvider.Registry serviceProviderRegistry;
@Override
protected OutputConfiguration findOutputConfiguration(URI dslSourceFile,
IFile generatedJavaFile) {
if(!FileExtensions.isJnarioSpec(dslSourceFile)){
return super.findOutputConfiguration(dslSourceFile, generatedJavaFile);
}
IResourceServiceProvider serviceProvider = serviceProviderRegistry.getResourceServiceProvider(dslSourceFile);
if (serviceProvider == null)
return null;
EclipseOutputConfigurationProvider cfgProvider = serviceProvider.get(EclipseOutputConfigurationProvider.class);
IProject project = generatedJavaFile.getProject();
Set<OutputConfiguration> configurations = cfgProvider.getOutputConfigurations(project);
if (!configurations.isEmpty()) {
if (configurations.size() == 1)
return configurations.iterator().next();
for (OutputConfiguration out : configurations) {
if(IFileSystemAccess.DEFAULT_OUTPUT.equals(out.getName())){
return out;
}
}
}
return null;
}
}