Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -7,6 +7,9 @@ import com.intellij.openapi.util.io.FileUtil;
|
|||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
import com.intellij.util.Function;
|
import com.intellij.util.Function;
|
||||||
import com.intellij.util.Processor;
|
import com.intellij.util.Processor;
|
||||||
|
import jet.ExtensionFunction0;
|
||||||
|
import jet.ExtensionFunction10;
|
||||||
|
import jet.Function1;
|
||||||
import jet.modules.IModuleBuilder;
|
import jet.modules.IModuleBuilder;
|
||||||
import jet.modules.IModuleSetBuilder;
|
import jet.modules.IModuleSetBuilder;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -18,6 +21,7 @@ import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
|||||||
import org.jetbrains.jet.plugin.JetMainDetector;
|
import org.jetbrains.jet.plugin.JetMainDetector;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
@@ -198,17 +202,19 @@ public class CompileEnvironment {
|
|||||||
final IModuleSetBuilder moduleSetBuilder = (IModuleSetBuilder) moduleSetBuilderClass.newInstance();
|
final IModuleSetBuilder moduleSetBuilder = (IModuleSetBuilder) moduleSetBuilderClass.newInstance();
|
||||||
|
|
||||||
Class namespaceClass = loader.loadClass("namespace");
|
Class namespaceClass = loader.loadClass("namespace");
|
||||||
final Method[] methods = namespaceClass.getMethods();
|
final Field[] fields = namespaceClass.getDeclaredFields();
|
||||||
boolean modulesDefined = false;
|
boolean modulesDefined = false;
|
||||||
for (Method method : methods) {
|
for (Field field : fields) {
|
||||||
if (method.getName().equals("defineModules")) {
|
if (field.getName().equals("modules")) {
|
||||||
method.invoke(null, moduleSetBuilder);
|
field.setAccessible(true);
|
||||||
|
ExtensionFunction0 defineMudules = (ExtensionFunction0) field.get(null);
|
||||||
|
defineMudules.invoke(moduleSetBuilder);
|
||||||
modulesDefined = true;
|
modulesDefined = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!modulesDefined) {
|
if (!modulesDefined) {
|
||||||
throw new CompileEnvironmentException("Module script " + moduleFile + " must define a defineModules() method");
|
throw new CompileEnvironmentException("Module script " + moduleFile + " must define a modules() property");
|
||||||
}
|
}
|
||||||
return moduleSetBuilder;
|
return moduleSetBuilder;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
import kotlin.modules.ModuleSetBuilder
|
import kotlin.modules.*
|
||||||
|
|
||||||
fun ModuleSetBuilder.defineModules() {
|
val modules = module("smoke") {
|
||||||
module("smoke") {
|
source files "Smoke.kt"
|
||||||
source files "Smoke.kt"
|
jar name System.getProperty("java.io.tmpdir") + "/smoke.jar"
|
||||||
jar name System.getProperty("java.io.tmpdir") + "/smoke.jar"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
package kotlin
|
package kotlin.modules
|
||||||
|
|
||||||
package modules {
|
|
||||||
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import jet.modules.*
|
import jet.modules.*
|
||||||
|
|
||||||
|
fun moduleSet(description: ModuleSetBuilder.() -> Unit) = description
|
||||||
|
|
||||||
|
fun module(name: String, description: ModuleBuilder.() -> Unit) = moduleSet {
|
||||||
|
module(name, description)
|
||||||
|
}
|
||||||
|
|
||||||
class ModuleSetBuilder(): IModuleSetBuilder {
|
class ModuleSetBuilder(): IModuleSetBuilder {
|
||||||
val modules: ArrayList<IModuleBuilder?> = ArrayList<IModuleBuilder?>()
|
private val modules = ArrayList<IModuleBuilder?>()
|
||||||
|
|
||||||
fun module(name: String, callback: ModuleBuilder.() -> Unit) {
|
fun module(name: String, callback: ModuleBuilder.() -> Unit) {
|
||||||
val builder = ModuleBuilder(name)
|
val builder = ModuleBuilder(name)
|
||||||
@@ -72,5 +76,4 @@ class ModuleBuilder2(name: String): ModuleBuilder(name) {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user