package com.redhat.ceylon.eclipse.core.builder;
import static com.redhat.ceylon.eclipse.core.builder.CeylonBuilder.BUILDER_ID;
import static com.redhat.ceylon.eclipse.java2ceylon.Java2CeylonProxies.modelJ2C;
import static com.redhat.ceylon.eclipse.ui.CeylonPlugin.PLUGIN_ID;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import com.redhat.ceylon.eclipse.core.classpath.CeylonLanguageModuleContainer;
import com.redhat.ceylon.eclipse.core.classpath.CeylonProjectModulesContainer;
public class CeylonNature extends ProjectNatureBase {
public static final String NATURE_ID = PLUGIN_ID + ".ceylonNature";
public static boolean isEnabled(IProject project) {
try {
return project != null &&
project.isAccessible() &&
project.hasNature(NATURE_ID);
} catch (CoreException e) {
e.printStackTrace();
return false;
}
}
private String systemRepo;
boolean astAwareIncrementalBuilds;
boolean keepSettings;
boolean compileJs;
boolean compileJava;
String verbose;
public CeylonNature() {
keepSettings=true;
}
public CeylonNature(String systemRepo,
boolean enableJdtClasses,
boolean java,
boolean js,
boolean astAwareIncrementalBuilds,
String verbose) {
this.systemRepo = systemRepo;
compileJs = js;
compileJava = java;
this.astAwareIncrementalBuilds = astAwareIncrementalBuilds;
this.verbose = verbose;
}
public String getNatureID() {
return NATURE_ID;
}
public String getBuilderID() {
return BUILDER_ID;
}
public void addToProject(final IProject project) {
modelJ2C().ceylonModel().addProject(project);
super.addToProject(project);
try {
new CeylonLanguageModuleContainer(project).install();
} catch (JavaModelException e) {
e.printStackTrace();
}
new CeylonProjectModulesContainer(project).runReconfigure();
}
protected void refreshPrefs() {
// TODO implement preferences and hook in here
}
/**
* Run the Java builder before the Ceylon builder, since
* it's more common for Ceylon to call Java than the
* other way around, and because the Java builder erases
* the output directory during a full build.
*/
protected String getUpstreamBuilderID() {
return JavaCore.BUILDER_ID;
}
@Override
protected Map<String, String> getBuilderArguments() {
Map<String, String> args = super.getBuilderArguments();
if (!keepSettings) {
if (!"${ceylon.repo}".equals(systemRepo)) {
args.put("systemRepo", systemRepo);
} else {
args.remove("systemRepo");
}
if (astAwareIncrementalBuilds) {
args.remove("astAwareIncrementalBuilds");
} else {
args.put("astAwareIncrementalBuilds", "false");
}
if (compileJava) {
args.remove("compileJava");
} else {
args.put("compileJava", "false");
}
if (compileJs) {
args.put("compileJs", "true");
} else {
args.remove("compileJs");
}
if (verbose==null) {
args.remove("verbose");
}
else {
args.put("verbose", verbose);
}
}
return args;
}
}