package org.dlangplugin.run; import com.intellij.execution.ExecutionException; import com.intellij.execution.Executor; import com.intellij.execution.configurations.*; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.util.xmlb.XmlSerializer; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; public class DLangRunDmdConfiguration extends ModuleBasedConfiguration<RunConfigurationModule> implements RunConfiguration { //Compiler settings properties private boolean release; private boolean debug; private boolean unitTest; private boolean link; private boolean coverageAnalysis; private boolean allowDeprecated; private boolean ignorePragmas; private boolean functionInlining; private boolean library; private boolean noArrayBoundsCheck; private boolean noFloatingPointReferences; private boolean optimize; private boolean enforcePropertySyntax; private boolean quiet; private boolean verbose; private boolean listThreadLocalStorage; private boolean warnings; private boolean infoWarnings; private String defaultLibrary; private String importsPath; private String stringImportsPath; private String linkerArgs; //Output settings properties private boolean generateDocs; private String docsFilename; private String docsPath; private String moduleDepsFilename; private boolean generateHeader; private String headerDir; private String headerFilename; private boolean generateMap; private boolean noObjectFiles; private boolean noStripPaths; private boolean generateJson; private String jsonFilename; //Debug settings properties private boolean addSymbolicDebugInfo; private boolean addSymbolicDebugInfoC; private boolean generateStandardStackFrame; private String symbolicLibrary; private boolean profile; public DLangRunDmdConfiguration(String name, Project project, ConfigurationFactory factory) { super(name, new RunConfigurationModule(project), factory); Collection<Module> modules = this.getValidModules(); if(!modules.isEmpty()) { //Get first valid module and use it this.setModule(modules.iterator().next()); } } @Override public Collection<Module> getValidModules() { Module[] modules = ModuleManager.getInstance(getProject()).getModules(); final DMDRunner appRunner = new DMDRunner(); ArrayList<Module> res = new ArrayList<Module>(); for (Module module : modules) { if (appRunner.isValidModule(module)) { res.add(module); } } return res; } @Override protected ModuleBasedConfiguration createInstance() { return new DLangRunDmdConfiguration(getName(), getProject(), getFactory()); } @NotNull @Override public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() { return new DLangRunDmdConfigurationEditor(); } @Nullable @Override public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) throws ExecutionException { return new DLangRunDmdState(env, this); } @Override public void writeExternal(@NotNull Element element) throws WriteExternalException { super.writeExternal(element); writeModule(element); XmlSerializer.serializeInto(this, element); } @Override public void readExternal(@NotNull Element element) throws InvalidDataException { super.readExternal(element); readModule(element); XmlSerializer.deserializeInto(this, element); } /** Getters and Setters. Autogenerated by IntelliJ IDEA **/ public boolean isRelease() { return release; } public void setRelease(boolean release) { this.release = release; } public boolean isDebug() { return debug; } public void setDebug(boolean debug) { this.debug = debug; } public boolean isUnitTest() { return unitTest; } public void setUnitTest(boolean unitTest) { this.unitTest = unitTest; } public boolean isLink() { return link; } public void setLink(boolean link) { this.link = link; } public boolean isCoverageAnalysis() { return coverageAnalysis; } public void setCoverageAnalysis(boolean coverageAnalysis) { this.coverageAnalysis = coverageAnalysis; } public boolean isAllowDeprecated() { return allowDeprecated; } public void setAllowDeprecated(boolean allowDeprecated) { this.allowDeprecated = allowDeprecated; } public boolean isIgnorePragmas() { return ignorePragmas; } public void setIgnorePragmas(boolean ignorePragmas) { this.ignorePragmas = ignorePragmas; } public boolean isFunctionInlining() { return functionInlining; } public void setFunctionInlining(boolean functionInlining) { this.functionInlining = functionInlining; } public boolean isLibrary() { return library; } public void setLibrary(boolean library) { this.library = library; } public boolean isNoArrayBoundsCheck() { return noArrayBoundsCheck; } public void setNoArrayBoundsCheck(boolean noArrayBoundsCheck) { this.noArrayBoundsCheck = noArrayBoundsCheck; } public boolean isNoFloatingPointReferences() { return noFloatingPointReferences; } public void setNoFloatingPointReferences(boolean noFloatingPointReferences) { this.noFloatingPointReferences = noFloatingPointReferences; } public boolean isOptimize() { return optimize; } public void setOptimize(boolean optimize) { this.optimize = optimize; } public boolean isEnforcePropertySyntax() { return enforcePropertySyntax; } public void setEnforcePropertySyntax(boolean enforcePropertySyntax) { this.enforcePropertySyntax = enforcePropertySyntax; } public boolean isQuiet() { return quiet; } public void setQuiet(boolean quiet) { this.quiet = quiet; } public boolean isVerbose() { return verbose; } public void setVerbose(boolean verbose) { this.verbose = verbose; } public boolean isListThreadLocalStorage() { return listThreadLocalStorage; } public void setListThreadLocalStorage(boolean listThreadLocalStorage) { this.listThreadLocalStorage = listThreadLocalStorage; } public boolean isWarnings() { return warnings; } public void setWarnings(boolean warnings) { this.warnings = warnings; } public boolean isInfoWarnings() { return infoWarnings; } public void setInfoWarnings(boolean infoWarnings) { this.infoWarnings = infoWarnings; } public String getDefaultLibrary() { return defaultLibrary; } public void setDefaultLibrary(String defaultLibrary) { this.defaultLibrary = defaultLibrary; } public String getImportsPath() { return importsPath; } public void setImportsPath(String importsPath) { this.importsPath = importsPath; } public String getStringImportsPath() { return stringImportsPath; } public void setStringImportsPath(String stringImportsPath) { this.stringImportsPath = stringImportsPath; } public String getLinkerArgs() { return linkerArgs; } public void setLinkerArgs(String linkerArgs) { this.linkerArgs = linkerArgs; } public String getJsonFilename() { return jsonFilename; } public void setJsonFilename(String jsonFilename) { this.jsonFilename = jsonFilename; } public boolean isGenerateJson() { return generateJson; } public void setGenerateJson(boolean generateJson) { this.generateJson = generateJson; } public boolean isNoStripPaths() { return noStripPaths; } public void setNoStripPaths(boolean noStripPaths) { this.noStripPaths = noStripPaths; } public boolean isNoObjectFiles() { return noObjectFiles; } public void setNoObjectFiles(boolean noObjectFiles) { this.noObjectFiles = noObjectFiles; } public boolean isGenerateMap() { return generateMap; } public void setGenerateMap(boolean generateMap) { this.generateMap = generateMap; } public String getHeaderFilename() { return headerFilename; } public void setHeaderFilename(String headerFilename) { this.headerFilename = headerFilename; } public String getHeaderDir() { return headerDir; } public void setHeaderDir(String headerDir) { this.headerDir = headerDir; } public boolean isGenerateHeader() { return generateHeader; } public void setGenerateHeader(boolean generateHeader) { this.generateHeader = generateHeader; } public String getModuleDepsFilename() { return moduleDepsFilename; } public void setModuleDepsFilename(String moduleDepsFilename) { this.moduleDepsFilename = moduleDepsFilename; } public String getDocsPath() { return docsPath; } public void setDocsPath(String docsPath) { this.docsPath = docsPath; } public String getDocsFilename() { return docsFilename; } public void setDocsFilename(String docsFilename) { this.docsFilename = docsFilename; } public boolean isGenerateDocs() { return generateDocs; } public void setGenerateDocs(boolean generateDocs) { this.generateDocs = generateDocs; } public boolean isAddSymbolicDebugInfo() { return addSymbolicDebugInfo; } public void setAddSymbolicDebugInfo(boolean addSymbolicDebugInfo) { this.addSymbolicDebugInfo = addSymbolicDebugInfo; } public boolean isAddSymbolicDebugInfoC() { return addSymbolicDebugInfoC; } public void setAddSymbolicDebugInfoC(boolean addSymbolicDebugInfoC) { this.addSymbolicDebugInfoC = addSymbolicDebugInfoC; } public boolean isGenerateStandardStackFrame() { return generateStandardStackFrame; } public void setGenerateStandardStackFrame(boolean generateStandardStackFrame) { this.generateStandardStackFrame = generateStandardStackFrame; } public String getSymbolicLibrary() { return symbolicLibrary; } public void setSymbolicLibrary(String symbolicLibrary) { this.symbolicLibrary = symbolicLibrary; } public boolean isProfile() { return profile; } public void setProfile(boolean profile) { this.profile = profile; } }