From 25320dc7cc0719a88a925fd9a9caa8d8f7c9868c Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 10 Jan 2013 16:49:06 +0400 Subject: [PATCH] auto generate artifact name, ability to get main artifact, dependsOnAndExports, straightforward dispose name counter --- .../incremental/artifacts/ModuleBuilder.java | 47 +++++++++++++++---- .../testFramework/UsefulTestCase.java | 2 +- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ModuleBuilder.java b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ModuleBuilder.java index dd3f6d11853c..3d2b28eed009 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ModuleBuilder.java +++ b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ModuleBuilder.java @@ -1,11 +1,15 @@ package org.jetbrains.jps.incremental.artifacts; +import com.intellij.openapi.Disposable; +import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.util.containers.SoftHashMap; +import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.model.JpsModuleRootModificationUtil; import org.jetbrains.jps.model.artifact.JpsArtifact; import org.jetbrains.jps.model.artifact.elements.JpsPackagingElement; +import org.jetbrains.jps.model.java.JpsJavaDependencyScope; import org.jetbrains.jps.model.module.JpsModule; import java.io.File; @@ -16,6 +20,8 @@ import java.util.concurrent.atomic.AtomicInteger; import static org.jetbrains.jps.incremental.artifacts.LayoutElementTestUtil.root; public class ModuleBuilder { + private static Map> testCaseToNameCounter = new THashMap>(); + private final ArtifactBuilderTestCase testCase; private final String builderName; @@ -25,7 +31,7 @@ public class ModuleBuilder { private String fromSourceRoot; - private static Map testCaseToModuleNameCounter = new SoftHashMap(); + private JpsArtifact mainArtifact; public ModuleBuilder(String builderName, ArtifactBuilderTestCase testCase) { this(builderName, testCase, null); @@ -55,7 +61,11 @@ public class ModuleBuilder { } public JpsArtifact createArtifact() { - return testCase.addArtifact(getOrCreateModuleName(), root().element(createPackagingElement(get()))); + JpsArtifact artifact = testCase.addArtifact(generateName(false), root().element(createPackagingElement(get()))); + if (mainArtifact == null) { + mainArtifact = artifact; + } + return artifact; } public ModuleBuilder artifact() { @@ -63,6 +73,10 @@ public class ModuleBuilder { return this; } + public JpsArtifact getArtifact() { + return mainArtifact; + } + protected JpsPackagingElement createPackagingElement(JpsModule module) { throw new AbstractMethodError(); } @@ -83,16 +97,26 @@ public class ModuleBuilder { private String getOrCreateModuleName() { if (name == null) { - AtomicInteger counter = testCaseToModuleNameCounter.get(testCase); - if (counter == null) { - counter = new AtomicInteger(0); - testCaseToModuleNameCounter.put(testCase, counter); - } - name = "m" + counter.getAndIncrement(); + name = generateName(true); } return name; } + private String generateName(boolean module) { + Pair counter = testCaseToNameCounter.get(testCase); + if (counter == null) { + counter = Pair.create(new AtomicInteger(0), new AtomicInteger(0)); + testCaseToNameCounter.put(testCase, counter); + Disposer.register(testCase.getTestRootDisposable(), new Disposable() { + @Override + public void dispose() { + testCaseToNameCounter.remove(testCase); + } + }); + } + return (module ? "m" : "a") + (module ? counter.first : counter.second).getAndIncrement(); + } + public ModuleBuilder copy(String file) throws IOException { FileUtil.copy(fromSourceRoot == null ? new File(file) : new File(fromSourceRoot, file), new File(getSourceRoot(), file)); return this; @@ -126,4 +150,9 @@ public class ModuleBuilder { JpsModuleRootModificationUtil.addDependency(get(), dependency.get()); return this; } + + public ModuleBuilder dependsOnAndExports(ModuleBuilder dependency) { + JpsModuleRootModificationUtil.addDependency(get(), dependency.get(), JpsJavaDependencyScope.COMPILE, true); + return this; + } } diff --git a/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java b/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java index 51ee186c3bc2..1ee4293aad8b 100644 --- a/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java @@ -227,7 +227,7 @@ public abstract class UsefulTestCase extends TestCase { return CodeStyleSettingsManager.getInstance().getCurrentSettings(); } - protected Disposable getTestRootDisposable() { + public Disposable getTestRootDisposable() { return myTestRootDisposable; }