diff --git a/build/scripts/utils.gant b/build/scripts/utils.gant index 0913128f69f4..9d5739cb4ef0 100644 --- a/build/scripts/utils.gant +++ b/build/scripts/utils.gant @@ -112,10 +112,9 @@ binding.setVariable("guessHome", { binding.setVariable("loadProject", { requireProperty("jdkHome", requireProperty("jdk16.home", guessJdk())) def mac = isMac() - jdk("IDEA jdk", jdkHome) { - if (!mac) { - classpath "$jdkHome/lib/tools.jar" - } + def sdk = jdk("IDEA jdk", jdkHome) { } + if (!mac) { + sdk.addClaspath "$jdkHome/lib/tools.jar" } IdeaProjectLoader.loadFromPath(project, "${home}") }) diff --git a/jps/build.gant b/jps/build.gant index 1b050123fd9f..d34f0cb25fd2 100644 --- a/jps/build.gant +++ b/jps/build.gant @@ -10,19 +10,15 @@ def gantHome = GANT_HOME projectBuilder.targetFolder = "${projectHome}/build" -library("ANT") { - classpath "$libs/ant-1.7.1.jar" +library("ANT") {}.addClasspath("$libs/ant-1.7.1.jar") + +library("groovy") {}.addClasspath("$libs/groovy-all-1.7.1.jar") + +def gantLib = library("gant") {} +new File("$gantHome/lib").eachFile { + gantLib.addClasspath it } -library("groovy") { - classpath "$libs/groovy-all-1.7.1.jar" -} - -library("gant") { - new File("$gantHome/lib").eachFile { - classpath it - } -} module("JPS") { targetLevel ="1.5" diff --git a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java index 4c0bd5dd6479..0bde98391973 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java +++ b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java @@ -130,7 +130,6 @@ public abstract class ArtifactBuilderTestCase extends UsefulTestCase { } } final Module module = myProject.createModule(moduleName, Closure.IDENTITY); - module.forceInit(); module.setSdk(myJdk); module.addDependency(myJdk, PredefinedDependencyScopes.getCOMPILE(), false); if (srcPaths.length > 0) { @@ -145,7 +144,6 @@ public abstract class ArtifactBuilderTestCase extends UsefulTestCase { protected Library addProjectLibrary(String name, String jarPath) { final Library library = myProject.createLibrary(name, Closure.IDENTITY); - library.forceInit(); library.getClasspath().add(jarPath); return library; } diff --git a/jps/model/src/org/jetbrains/jps/LazyInitializeableObject.groovy b/jps/model/src/org/jetbrains/jps/LazyInitializeableObject.groovy deleted file mode 100644 index a296030bd727..000000000000 --- a/jps/model/src/org/jetbrains/jps/LazyInitializeableObject.groovy +++ /dev/null @@ -1,50 +0,0 @@ -package org.jetbrains.jps - -/** - * @author max - */ -class LazyInitializeableObject { - private Intializing initializer - - def setInitializer(Closure init) { - def meta = ProxyMetaClass.getInstance(getClass()) - initializer = new Intializing(initializer: init) - meta.setInterceptor(initializer) - setMetaClass(meta) - } - - def forceInit () { - if (initializer != null) initializer.init() - } -} - -private class Intializing implements PropertyAccessInterceptor { - private Closure initializer - - Object beforeInvoke(Object object, String methodName, Object[] arguments) { - init() - } - - Object afterInvoke(Object object, String methodName, Object[] arguments, Object result) { - return result - } - - Object beforeGet(Object object, String property) { - init() - } - - void beforeSet(Object object, String property, Object newValue) { - init() - } - - boolean doInvoke() { - true - } - - def init() { - if (initializer == null) return - def i = initializer - initializer = null - i.call() - } -} diff --git a/jps/model/src/org/jetbrains/jps/Library.groovy b/jps/model/src/org/jetbrains/jps/Library.groovy index eb60360b6504..aed0ec2f6ef0 100644 --- a/jps/model/src/org/jetbrains/jps/Library.groovy +++ b/jps/model/src/org/jetbrains/jps/Library.groovy @@ -5,7 +5,7 @@ import com.intellij.openapi.util.io.FileUtil /** * @author max */ -class Library extends LazyInitializeableObject implements ClasspathItem { +class Library implements ClasspathItem { Project project; String name; @@ -14,42 +14,17 @@ class Library extends LazyInitializeableObject implements ClasspathItem { private Map props = [:] - def Library(project, name, initializer) { - this(project, name, false, initializer) - } - - def Library(project, name, forceInitialization, initializer) { + def Library(project, name) { this.project = project; this.name = name; + } - Closure lazyInit = { - def meta = new InitializingExpando() - meta.classpath = {Object[] arg -> - arg.each { classpath << FileUtil.toCanonicalPath(it.toString()) } - } + void addClasspath(Object[] arg) { + arg.each { classpath << FileUtil.toCanonicalPath(it.toString()) } + } - meta.src = {Object[] arg -> - arg.each { sourceRoots << FileUtil.toCanonicalPath(it.toString()) } - } - - initializer.delegate = meta - initializer.setResolveStrategy Closure.DELEGATE_FIRST - initializer.call() - - def wrongProperties = ["classpath", "src"] as Set - meta.getProperties().each {String key, Object value -> - if (!wrongProperties.contains(key)) { - props[key] = value - } - } - } - - if (forceInitialization) { - lazyInit.call() - } - else { - setInitializer(lazyInit) - } + void src(Object[] arg) { + arg.each { sourceRoots << FileUtil.toCanonicalPath(it.toString()) } } def String toString() { @@ -57,7 +32,6 @@ class Library extends LazyInitializeableObject implements ClasspathItem { } def List getClasspathRoots(ClasspathKind kind) { - forceInit() classpath } diff --git a/jps/model/src/org/jetbrains/jps/Module.groovy b/jps/model/src/org/jetbrains/jps/Module.groovy index d6e19d81521f..f5e47bd18708 100644 --- a/jps/model/src/org/jetbrains/jps/Module.groovy +++ b/jps/model/src/org/jetbrains/jps/Module.groovy @@ -7,7 +7,7 @@ import org.jetbrains.annotations.TestOnly /** * @author max */ -class Module extends LazyInitializeableObject implements ClasspathItem {//}, Comparable { +class Module implements ClasspathItem {//}, Comparable { Project project; String name; Sdk sdk; @@ -109,7 +109,6 @@ class Module extends LazyInitializeableObject implements ClasspathItem {//}, Com } def List getClasspath(ClasspathKind kind, boolean exportedOnly) { - forceInit() return dependencies.findAll({it.scope.isIncludedIn(kind) && (!exportedOnly || it.exported)})*.item; } diff --git a/jps/model/src/org/jetbrains/jps/Project.groovy b/jps/model/src/org/jetbrains/jps/Project.groovy index 69898b12ccf1..d08da5c5ed64 100644 --- a/jps/model/src/org/jetbrains/jps/Project.groovy +++ b/jps/model/src/org/jetbrains/jps/Project.groovy @@ -41,7 +41,7 @@ class Project { } protected def Library createLibrary(String name, Closure initializer, Map libraries, String accessor) { - Library lib = new Library(this, name, initializer) + Library lib = new Library(this, name) libraries.put(name, lib) lib } diff --git a/jps/model/src/org/jetbrains/jps/Sdk.groovy b/jps/model/src/org/jetbrains/jps/Sdk.groovy index 93300f023248..bb41343ad91d 100644 --- a/jps/model/src/org/jetbrains/jps/Sdk.groovy +++ b/jps/model/src/org/jetbrains/jps/Sdk.groovy @@ -5,6 +5,6 @@ package org.jetbrains.jps */ class Sdk extends Library { Sdk(project, name, initializer) { - super(project, name, true, initializer); + super(project, name); } } diff --git a/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy b/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy index 4c5cc928aeae..bf1cda3d2ed9 100644 --- a/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy +++ b/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy @@ -329,8 +329,8 @@ public class IdeaProjectLoader { } private NodeList loadProjectLibraries(Node librariesComponent) { - return librariesComponent?.library?.each {Node libTag -> - project.createLibrary(libTag."@name", libraryInitializer(libTag, projectMacroExpander)) + return (NodeList)librariesComponent?.library?.each {Node libTag -> + initLibrary(libTag, projectMacroExpander, project.createLibrary(libTag."@name", Closure.IDENTITY)) } } @@ -378,11 +378,10 @@ public class IdeaProjectLoader { } private Library loadLibrary(Project project, String name, Node libraryTag, MacroExpander macroExpander) { - return new Library(project, name, true, libraryInitializer(libraryTag, macroExpander)) + return initLibrary(new Library(project, name)) } - private Closure libraryInitializer(Node libraryTag, MacroExpander macroExpander) { - return { + private Library initLibrary(Node libraryTag, MacroExpander macroExpander, Library library) { Map jarDirs = [:] libraryTag.jarDirectory.each {Node dirNode -> jarDirs[dirNode.@url] = Boolean.parseBoolean(dirNode.@recursive) @@ -395,18 +394,18 @@ public class IdeaProjectLoader { def paths = [] collectChildJars(path, jarDirs[url], paths) paths.each { - classpath it + library.addClasspath it } } else { - classpath path + library.addClasspath path } } libraryTag.SOURCES.root.each {Node rootTag -> - src macroExpander.expandMacros(rootTag.@url) + library.src macroExpander.expandMacros(rootTag.@url) } - } + return library } private def collectChildJars(String path, boolean recursively, List paths) { diff --git a/jps/src/org/jetbrains/jps/Jps.groovy b/jps/src/org/jetbrains/jps/Jps.groovy index e8eafd45700c..ee15668a1a58 100644 --- a/jps/src/org/jetbrains/jps/Jps.groovy +++ b/jps/src/org/jetbrains/jps/Jps.groovy @@ -20,10 +20,6 @@ final class Jps { return project.createLibrary(name, initializer) }) - binding.setVariable("globalLibrary", {String name, Closure initializer -> - return project.createGlobalLibrary(name, initializer) - }) - binding.setVariable("jdk", {Object[] args -> if (!(args.length in [2,3])) { projectBuilder.error("expected 2 to 3 parameters for jdk() but ${args.length} found") diff --git a/jps/testSrc/org/jetbrains/jps/BuildFromIdeaProjectTest.groovy b/jps/testSrc/org/jetbrains/jps/BuildFromIdeaProjectTest.groovy index ffbb656f81d5..7f3951df9b81 100644 --- a/jps/testSrc/org/jetbrains/jps/BuildFromIdeaProjectTest.groovy +++ b/jps/testSrc/org/jetbrains/jps/BuildFromIdeaProjectTest.groovy @@ -15,9 +15,7 @@ class BuildFromIdeaProjectTest extends JpsBuildTestCase { private Closure getGlobalLib() { return {Project project, ProjectBuilder projectBuilder -> - project.createGlobalLibrary("jdom") { - classpath "testData/iprProject/lib/jdom.jar" - } + project.createGlobalLibrary("jdom") { }.addClasspath("testData/iprProject/lib/jdom.jar") } } diff --git a/jps/testSrc/org/jetbrains/jps/ModuleClasspathTest.groovy b/jps/testSrc/org/jetbrains/jps/ModuleClasspathTest.groovy index 8e1591e67577..478842ca06dc 100644 --- a/jps/testSrc/org/jetbrains/jps/ModuleClasspathTest.groovy +++ b/jps/testSrc/org/jetbrains/jps/ModuleClasspathTest.groovy @@ -13,12 +13,8 @@ public class ModuleClasspathTest extends JpsBuildTestCase { protected void setUp() { super.setUp() project = loadProject(getProjectPath(), [:], {Project project -> - project.createJavaSdk("1.6", "jdk16") { - classpath "/jdk.jar" - } - project.createJavaSdk("1.5", "jdk15") { - classpath "/jdk15.jar" - } + project.createJavaSdk("1.6", "jdk16") { }.addClasspath("/jdk.jar") + project.createJavaSdk("1.5", "jdk15") { }.addClasspath("/jdk15.jar") }) builder = createBuilder(project) }