Package ideah.module

Source Code of ideah.module.HaskellModuleBuilder

package ideah.module;

import com.intellij.ide.util.projectWizard.JavaModuleBuilder;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkTypeId;
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ProjectRootManager;
import ideah.sdk.HaskellSdkType;
import ideah.util.GHCUtil;
import ideah.util.GHCVersion;

import java.util.Comparator;

// todo: setup page?
public final class HaskellModuleBuilder extends JavaModuleBuilder {

    @Override
    public HaskellModuleType getModuleType() {
        return HaskellModuleType.INSTANCE;
    }

    @Override
    public boolean isSuitableSdkType(SdkTypeId sdkType) {
        return sdkType == HaskellSdkType.INSTANCE;
    }

    @Override
    public void setupRootModel(ModifiableRootModel rootModel) throws ConfigurationException {
        ProjectJdkTable table = ProjectJdkTable.getInstance();
        Sdk[] sdks = table.getAllJdks();
        Sdk ghc = null;
        for (Sdk sdk : sdks) {
            if (sdk.getSdkType().equals(HaskellSdkType.INSTANCE)) {
                ghc = sdk;
                break;
            }
        }
        if (ghc == null) {
            Comparator<Sdk> sdkComparator = new Comparator<Sdk>() {
                public int compare(Sdk s1, Sdk s2) {
                    GHCVersion v1 = GHCUtil.getVersion(s1.getVersionString());
                    GHCVersion v2 = GHCUtil.getVersion(s2.getVersionString());
                    return -v1.compareTo(v2);
                }
            };
            ghc = SdkConfigurationUtil.findOrCreateSdk(sdkComparator, HaskellSdkType.INSTANCE);
        }
        if (ghc != null) {
            Project project = rootModel.getProject();
            // todo: do not reset if overriden by user?
            ProjectRootManager.getInstance(project).setProjectSdk(ghc);
            setModuleJdk(ghc); // todo: inherit SDK from project?
        }
        // todo: do not use tabs in project
        super.setupRootModel(rootModel);
    }
}
TOP

Related Classes of ideah.module.HaskellModuleBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.