package com.redhat.ceylon.eclipse.util; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.ui.PlatformUI; import com.redhat.ceylon.cmr.api.ModuleQuery; import com.redhat.ceylon.cmr.api.ModuleSearchResult; import com.redhat.ceylon.cmr.api.ModuleVersionQuery; import com.redhat.ceylon.common.Backend; import com.redhat.ceylon.common.Backends; import com.redhat.ceylon.common.Versions; import com.redhat.ceylon.compiler.typechecker.TypeChecker; import com.redhat.ceylon.eclipse.core.builder.CeylonBuilder; import com.redhat.ceylon.model.typechecker.model.Module; public class ModuleQueries { public static ModuleQuery getModuleQuery(String prefix, IProject project) { if (project!=null) { boolean compileToJava = CeylonBuilder.compileToJava(project); boolean compileToJs = CeylonBuilder.compileToJs(project); if (compileToJava&&!compileToJs) { return new ModuleQuery(prefix, ModuleQuery.Type.JVM); } if (compileToJs&&!compileToJava) { return new ModuleQuery(prefix, ModuleQuery.Type.JS); } } return new ModuleQuery(prefix, ModuleQuery.Type.CODE); } public static ModuleQuery getModuleQuery(String prefix, Module module, IProject project) { if (module!=null) { Backends backends = module.getNativeBackends(); if (backends!=null) { boolean compileToJava = backends.supports(Backend.Java); boolean compileToJs = backends.supports(Backend.JavaScript); if (compileToJava&&!compileToJs) { return new ModuleQuery(prefix, ModuleQuery.Type.JVM); } if (compileToJs&&!compileToJava) { return new ModuleQuery(prefix, ModuleQuery.Type.JS); } } } return getModuleQuery(prefix, project); } public static ModuleVersionQuery getModuleVersionQuery(String name, String version, IProject project) { if (project!=null) { boolean compileToJava = CeylonBuilder.compileToJava(project); boolean compileToJs = CeylonBuilder.compileToJs(project); if (compileToJava&&!compileToJs) { return new ModuleVersionQuery(name, version, ModuleQuery.Type.JVM); } if (compileToJs&&!compileToJava) { return new ModuleVersionQuery(name, version, ModuleQuery.Type.JS); } } return new ModuleVersionQuery(name, version, ModuleQuery.Type.CODE); } static class Runnable implements IRunnableWithProgress { private String prefix; private TypeChecker typeChecker; private IProject project; private Module module; ModuleSearchResult result; Runnable(String prefix, TypeChecker typeChecker, Module module, IProject project) { this.prefix = prefix; this.typeChecker = typeChecker; this.project = project; this.module = module; } @Override public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { monitor.beginTask("Querying module repositories...", IProgressMonitor.UNKNOWN); ModuleQuery query = getModuleQuery(prefix, module, project); query.setJvmBinaryMajor(Versions.JVM_BINARY_MAJOR_VERSION); query.setJvmBinaryMinor(Versions.JVM_BINARY_MINOR_VERSION); query.setJsBinaryMajor(Versions.JS_BINARY_MAJOR_VERSION); query.setJsBinaryMinor(Versions.JS_BINARY_MINOR_VERSION); result = typeChecker.getContext().getRepositoryManager().completeModules(query); monitor.done(); } } public static ModuleSearchResult getModuleSearchResults( String prefix, Module module, TypeChecker typeChecker, IProject project) { Runnable runnable = new Runnable(prefix, typeChecker, module, project); try { PlatformUI.getWorkbench().getActiveWorkbenchWindow().run(true, true, runnable); } catch (Exception e) { e.printStackTrace(); } return runnable.result; } }