diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/FileProcessor.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/FileProcessor.java index e818f86b68d6..ab4ca9a725ca 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/FileProcessor.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/FileProcessor.java @@ -1,7 +1,5 @@ package org.jetbrains.jps.incremental; -import org.jetbrains.jps.model.module.JpsModule; - import java.io.File; import java.io.IOException; @@ -13,5 +11,5 @@ public interface FileProcessor { /** * @return true if processing should continue, false if should stop */ - boolean apply(JpsModule module, File file, String sourceRoot) throws IOException; + boolean apply(ModuleBuildTarget target, File file, String sourceRoot) throws IOException; } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/FilesCollector.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/FilesCollector.java index b79567479e87..f06d32fe727c 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/FilesCollector.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/FilesCollector.java @@ -1,7 +1,5 @@ package org.jetbrains.jps.incremental; -import org.jetbrains.jps.model.module.JpsModule; - import java.io.File; import java.io.FileFilter; import java.io.IOException; @@ -38,7 +36,7 @@ public class FilesCollector implements FileProcessor{ return myContainer; } - public boolean apply(JpsModule module, File file, String sourceRoot) throws IOException { + public boolean apply(ModuleBuildTarget target, File file, String sourceRoot) throws IOException { if (myFilter.accept(file)) { myContainer.add(file); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java index 19a6c6827598..8e620f153a34 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -7,6 +7,8 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.concurrency.BoundedTaskExecutor; import com.intellij.util.containers.ConcurrentHashSet; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.MultiMap; +import com.intellij.util.containers.MultiMapBasedOnSet; import com.intellij.util.io.MappingFailedException; import com.intellij.util.io.PersistentEnumerator; import org.jetbrains.annotations.NotNull; @@ -269,10 +271,8 @@ public class IncProjectBuilder { clearOutputs(context); } else { - for (JpsModule module : context.getProjectDescriptor().jpsProject.getModules()) { - final String moduleName = module.getName(); - clearOutputFiles(context, moduleName, true); - clearOutputFiles(context, moduleName, false); + for (ModuleBuildTarget target : context.getChunks().getAllTargets()) { + clearOutputFiles(context, target); } } } @@ -295,8 +295,8 @@ public class IncProjectBuilder { myProjectDescriptor.fsState.clearAll(); } - private static void clearOutputFiles(CompileContext context, final String moduleName, boolean forTests) throws IOException { - final SourceToOutputMapping map = context.getProjectDescriptor().dataManager.getSourceToOutputMap(moduleName, forTests); + private static void clearOutputFiles(CompileContext context, ModuleBuildTarget target) throws IOException { + final SourceToOutputMapping map = context.getProjectDescriptor().dataManager.getSourceToOutputMap(target); for (String srcPath : map.getKeys()) { final Collection outs = map.getState(srcPath); if (outs != null && !outs.isEmpty()) { @@ -309,37 +309,29 @@ public class IncProjectBuilder { } private void clearOutputs(CompileContext context) throws ProjectBuildException, IOException { - final Collection modulesToClean = context.getProjectDescriptor().jpsProject.getModules(); - final Map>> rootsToDelete = new HashMap>>(); // map: outputRoot-> setOfPairs([module, isTest]) + final MultiMap rootsToDelete = new MultiMapBasedOnSet(); final Set annotationOutputs = new HashSet(); // separate collection because no root intersection checks needed for annotation generated sources final Set allSourceRoots = new HashSet(); final ProjectPaths paths = context.getProjectPaths(); - for (JpsModule module : modulesToClean) { - final File out = paths.getModuleOutputDir(module, false); + for (ModuleBuildTarget target : context.getChunks().getAllTargets()) { + final File out = paths.getModuleOutputDir(target.getModule(), target.isTests()); if (out != null) { - appendRootInfo(rootsToDelete, out, module, false); - } - final File testOut = paths.getModuleOutputDir(module, true); - if (testOut != null) { - appendRootInfo(rootsToDelete, testOut, module, true); + rootsToDelete.putValue(out, target); } - final AnnotationProcessingProfile profile = context.getAnnotationProcessingProfile(module); + final AnnotationProcessingProfile profile = context.getAnnotationProcessingProfile(target.getModule()); if (profile.isEnabled()) { File annotationOut = - paths.getAnnotationProcessorGeneratedSourcesOutputDir(module, false, profile.getGeneratedSourcesDirName()); - if (annotationOut != null) { - annotationOutputs.add(annotationOut); - } - annotationOut = - paths.getAnnotationProcessorGeneratedSourcesOutputDir(module, true, profile.getGeneratedSourcesDirName()); + paths.getAnnotationProcessorGeneratedSourcesOutputDir(target.getModule(), target.isTests(), profile.getGeneratedSourcesDirName()); if (annotationOut != null) { annotationOutputs.add(annotationOut); } } + } + for (JpsModule module : context.getProjectDescriptor().jpsProject.getModules()) { final List moduleRoots = context.getProjectDescriptor().rootsIndex.getModuleRoots(context, module); for (RootDescriptor d : moduleRoots) { allSourceRoots.add(d.root); @@ -348,7 +340,7 @@ public class IncProjectBuilder { // check that output and source roots are not overlapping final List filesToDelete = new ArrayList(); - for (Map.Entry>> entry : rootsToDelete.entrySet()) { + for (Map.Entry> entry : rootsToDelete.entrySet()) { context.checkCanceled(); boolean okToDelete = true; final File outputRoot = entry.getKey(); @@ -370,8 +362,8 @@ public class IncProjectBuilder { else { context.processMessage(new CompilerMessage(BUILD_NAME, BuildMessage.Kind.WARNING, "Output path " + outputRoot.getPath() + " intersects with a source root. The output cannot be cleaned.")); // clean only those files we are aware of - for (Pair info : entry.getValue()) { - clearOutputFiles(context, info.first, info.second); + for (ModuleBuildTarget target : entry.getValue()) { + clearOutputFiles(context, target); } } } @@ -386,13 +378,13 @@ public class IncProjectBuilder { ); } - private static void appendRootInfo(Map>> rootsToDelete, File out, JpsModule module, boolean isTest) { - Set> infos = rootsToDelete.get(out); + private static void appendRootInfo(Map> rootsToDelete, File out, ModuleBuildTarget target) { + Set infos = rootsToDelete.get(out); if (infos == null) { - infos = new HashSet>(); + infos = new HashSet(); rootsToDelete.put(out, infos); } - infos.add(Pair.create(module.getName(), isTest)); + infos.add(target); } private static void runTasks(CompileContext context, final List tasks) throws ProjectBuildException { @@ -636,7 +628,7 @@ public class IncProjectBuilder { } removedSources.put(target, deletedPaths); - final SourceToOutputMapping sourceToOutputStorage = context.getProjectDescriptor().dataManager.getSourceToOutputMap(target.getModuleName(), target.isTests()); + final SourceToOutputMapping sourceToOutputStorage = context.getProjectDescriptor().dataManager.getSourceToOutputMap(target); // actually delete outputs associated with removed paths for (String deletedSource : deletedPaths) { // deleting outputs corresponding to non-existing source @@ -786,19 +778,18 @@ public class IncProjectBuilder { private static void syncOutputFiles(final CompileContext context, ModuleChunk chunk) throws ProjectBuildException { final BuildDataManager dataManager = context.getProjectDescriptor().dataManager; - final boolean compilingTests = chunk.isTests(); try { final Collection allOutputs = new LinkedList(); FSOperations.processFilesToRecompile(context, chunk, new FileProcessor() { - private final Map storageMap = new HashMap(); + private final Map storageMap = new HashMap(); @Override - public boolean apply(JpsModule module, File file, String sourceRoot) throws IOException { - SourceToOutputMapping srcToOut = storageMap.get(module); + public boolean apply(ModuleBuildTarget target, File file, String sourceRoot) throws IOException { + SourceToOutputMapping srcToOut = storageMap.get(target); if (srcToOut == null) { - srcToOut = dataManager.getSourceToOutputMap(module.getName(), compilingTests); - storageMap.put(module, srcToOut); + srcToOut = dataManager.getSourceToOutputMap(target); + storageMap.put(target, srcToOut); } final String srcPath = FileUtil.toSystemIndependentName(file.getPath()); final Collection outputs = srcToOut.getState(srcPath); @@ -959,7 +950,7 @@ public class IncProjectBuilder { // handle deleted paths final BuildFSState fsState = pd.fsState; fsState.clearDeletedPaths(target); - final SourceToOutputMapping sourceToOutputMap = pd.dataManager.getSourceToOutputMap(target.getModuleName(), target.isTests()); + final SourceToOutputMapping sourceToOutputMap = pd.dataManager.getSourceToOutputMap(target); for (final Iterator it = sourceToOutputMap.getKeysIterator(); it.hasNext();) { final String path = it.next(); // can check if the file exists diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java index b5b8ff0c6aa6..a5f688f837d1 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java @@ -247,8 +247,7 @@ public abstract class ModuleLevelBuilder extends Builder { for (ModuleBuildTarget target : chunk.getTargets()) { final Collection paths = map.remove(target); if (paths != null) { - final SourceToOutputMapping storage = context.getProjectDescriptor().dataManager.getSourceToOutputMap(target.getModuleName(), - target.isTests()); + final SourceToOutputMapping storage = context.getProjectDescriptor().dataManager.getSourceToOutputMap(target); for (String path : paths) { storage.remove(path); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java index 1a3525397f49..3b61bd5e8174 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java @@ -131,7 +131,7 @@ public class BuildFSState extends FSState { if (excludes.isExcluded(file)) { continue; } - if (!processor.apply(target.getModule(), file, root)) { + if (!processor.apply(target, file, root)) { return false; } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index 0a22dfbf1b1e..9370c451b20b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -104,7 +104,7 @@ public class JavaBuilder extends ModuleLevelBuilder { isTemp = rootDescriptor.isTemp; if (!isTemp) { try { - dataManager.getSourceToOutputMap(rootDescriptor.module, rootDescriptor.target.isTests()).appendData(sourcePath, outputPath); + dataManager.getSourceToOutputMap(rootDescriptor.target).appendData(sourcePath, outputPath); } catch (Exception e) { context.processMessage(new CompilerMessage(BUILDER_NAME, e)); @@ -149,7 +149,7 @@ public class JavaBuilder extends ModuleLevelBuilder { final Set formsToCompile = new HashSet(); FSOperations.processFilesToRecompile(context, chunk, new FileProcessor() { - public boolean apply(JpsModule module, File file, String sourceRoot) throws IOException { + public boolean apply(ModuleBuildTarget target, File file, String sourceRoot) throws IOException { if (JAVA_SOURCES_FILTER.accept(file)) { filesToCompile.add(file); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java index b2616d77b217..e1dd4f048278 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java @@ -62,14 +62,14 @@ public class ResourcesBuilder extends ModuleLevelBuilder { }; FSOperations.processFilesToRecompile(context, chunk, moduleFilter, new FileProcessor() { - public boolean apply(final JpsModule module, final File file, final String sourceRoot) throws IOException { + public boolean apply(final ModuleBuildTarget target, final File file, final String sourceRoot) throws IOException { if (patterns.isResourceFile(file, sourceRoot)) { try { context.processMessage(new ProgressMessage("Copying " + file.getPath())); doneSomething.set(true); copyResource( - context, module, file, sourceRoot, - context.getProjectDescriptor().dataManager.getSourceToOutputMap(module.getName(), chunk.isTests()), chunk.isTests() + context, target.getModule(), file, sourceRoot, + context.getProjectDescriptor().dataManager.getSourceToOutputMap(target), target.isTests() ); } catch (IOException e) { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java index c270527243d7..6f768610da0c 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java @@ -5,6 +5,7 @@ import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.Nullable; import org.jetbrains.ether.dependencyView.Mappings; import org.jetbrains.jps.ModuleChunk; +import org.jetbrains.jps.builders.BuildTarget; import org.jetbrains.jps.incremental.ModuleBuildTarget; import org.jetbrains.jps.incremental.artifacts.ArtifactsBuildData; @@ -26,8 +27,7 @@ public class BuildDataManager implements StorageOwner { private static final String MAPPINGS_STORAGE = "mappings"; private final Object mySourceToOutputLock = new Object(); - private final Map myProductionSourceToOutputs = new HashMap(); - private final Map myTestSourceToOutputs = new HashMap(); + private final Map mySourceToOutputs = new HashMap(); private final SourceToFormMapping mySrcToFormMap; private final ArtifactsBuildData myArtifactsBuildData; @@ -49,15 +49,15 @@ public class BuildDataManager implements StorageOwner { return new File(myDataStorageRoot, "output-roots"); } - public SourceToOutputMapping getSourceToOutputMap(final String moduleName, final boolean testSources) throws IOException { - String lowerCaseModuleName = moduleName.toLowerCase(Locale.US); - final Map storageMap = testSources ? myTestSourceToOutputs : myProductionSourceToOutputs; + public SourceToOutputMapping getSourceToOutputMap(final ModuleBuildTarget target) throws IOException { + final boolean testSources = target.isTests(); SourceToOutputMapping mapping; synchronized (mySourceToOutputLock) { - mapping = storageMap.get(lowerCaseModuleName); + mapping = mySourceToOutputs.get(target); if (mapping == null) { + String lowerCaseModuleName = target.getModuleName().toLowerCase(Locale.US); mapping = new SourceToOutputMapping(new File(getSourceToOutputRoot(lowerCaseModuleName, testSources), "data")); - storageMap.put(lowerCaseModuleName, mapping); + mySourceToOutputs.put(target, mapping); } } return mapping; @@ -122,12 +122,7 @@ public class BuildDataManager implements StorageOwner { public void flush(boolean memoryCachesOnly) { myArtifactsBuildData.flush(memoryCachesOnly); synchronized (mySourceToOutputLock) { - for (Map.Entry entry : myProductionSourceToOutputs.entrySet()) { - final SourceToOutputMapping mapping = entry.getValue(); - mapping.flush(memoryCachesOnly); - } - for (Map.Entry entry : myTestSourceToOutputs.entrySet()) { - final SourceToOutputMapping mapping = entry.getValue(); + for (SourceToOutputMapping mapping : mySourceToOutputs.values()) { mapping.flush(memoryCachesOnly); } } @@ -183,9 +178,7 @@ public class BuildDataManager implements StorageOwner { synchronized (mySourceToOutputLock) { for (ModuleChunk chunk : chunks) { for (ModuleBuildTarget target : chunk.getTargets()) { - final Map storageMap = target.isTests() ? myTestSourceToOutputs : myProductionSourceToOutputs; - final String moduleName = target.getModuleName().toLowerCase(Locale.US); - final SourceToOutputMapping mapping = storageMap.remove(moduleName); + final SourceToOutputMapping mapping = mySourceToOutputs.remove(target); if (mapping != null) { mapping.close(); } @@ -197,19 +190,9 @@ public class BuildDataManager implements StorageOwner { private void closeSourceToOutputStorages() throws IOException { IOException ex = null; try { - for (Map.Entry entry : myProductionSourceToOutputs.entrySet()) { + for (SourceToOutputMapping mapping : mySourceToOutputs.values()) { try { - entry.getValue().close(); - } - catch (IOException e) { - if (e != null) { - ex = e; - } - } - } - for (Map.Entry entry : myTestSourceToOutputs.entrySet()) { - try { - entry.getValue().close(); + mapping.close(); } catch (IOException e) { if (e != null) { @@ -219,8 +202,7 @@ public class BuildDataManager implements StorageOwner { } } finally { - myProductionSourceToOutputs.clear(); - myTestSourceToOutputs.clear(); + mySourceToOutputs.clear(); } if (ex != null) { throw ex; diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/SourceToOutputMapping.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/SourceToOutputMapping.java index dfbc9bae28fe..05e94abefbfd 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/SourceToOutputMapping.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/SourceToOutputMapping.java @@ -53,7 +53,7 @@ public final class SourceToOutputMapping extends AbstractStateStorage normalizePaths(Collection outputs) { + private static Collection normalizePaths(Collection outputs) { Collection normalized = new ArrayList(outputs.size()); for (String out : outputs) { normalized.add(FileUtil.toSystemIndependentName(out)); diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidSourceGeneratingBuilder.java b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidSourceGeneratingBuilder.java index 21580e28f93e..e7a8fbcb8ca2 100644 --- a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidSourceGeneratingBuilder.java +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidSourceGeneratingBuilder.java @@ -101,13 +101,13 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { } } - final Map idlFilesToCompile = new HashMap(); - final Map rsFilesToCompile = new HashMap(); + final Map idlFilesToCompile = new HashMap(); + final Map rsFilesToCompile = new HashMap(); FSOperations.processFilesToRecompile(context, chunk, new FileProcessor() { @Override - public boolean apply(JpsModule module, File file, String sourceRoot) throws IOException { - final JpsAndroidModuleExtension extension = AndroidJpsUtil.getExtension(module); + public boolean apply(ModuleBuildTarget target, File file, String sourceRoot) throws IOException { + final JpsAndroidModuleExtension extension = AndroidJpsUtil.getExtension(target.getModule()); if (extension == null) { return true; @@ -115,10 +115,10 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { final String ext = FileUtil.getExtension(file.getName()); if (AIDL_EXTENSION.equals(ext)) { - idlFilesToCompile.put(file, module); + idlFilesToCompile.put(file, target); } else if (RENDERSCRIPT_EXTENSION.equals(ext)) { - rsFilesToCompile.put(file, module); + rsFilesToCompile.put(file, target); } return true; @@ -363,7 +363,7 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { } private static boolean runAidlCompiler(@NotNull final CompileContext context, - @NotNull Map files, + @NotNull Map files, @NotNull Map moduleDataMap) { if (files.size() > 0) { context.processMessage(new ProgressMessage(AndroidJpsBundle.message("android.jps.progress.aidl"))); @@ -371,12 +371,12 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { boolean success = true; - for (Map.Entry entry : files.entrySet()) { + for (Map.Entry entry : files.entrySet()) { final File file = entry.getKey(); - final JpsModule module = entry.getValue(); + final ModuleBuildTarget buildTarget = entry.getValue(); final String filePath = file.getPath(); - final MyModuleData moduleData = moduleDataMap.get(module); + final MyModuleData moduleData = moduleDataMap.get(buildTarget.getModule()); if (!LOG.assertTrue(moduleData != null)) { context.processMessage( @@ -384,7 +384,7 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { success = false; continue; } - final File generatedSourcesDir = AndroidJpsUtil.getGeneratedSourcesStorage(module, context.getProjectDescriptor().dataManager); + final File generatedSourcesDir = AndroidJpsUtil.getGeneratedSourcesStorage(buildTarget.getModule(), context.getProjectDescriptor().dataManager); final File aidlOutputDirectory = new File(generatedSourcesDir, AndroidJpsUtil.AIDL_GENERATED_SOURCE_ROOT_NAME); if (!aidlOutputDirectory.exists() && !aidlOutputDirectory.mkdirs()) { @@ -398,7 +398,7 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { final IAndroidTarget target = moduleData.getPlatform().getTarget(); try { - final File[] sourceRoots = AndroidJpsUtil.getSourceRootsForModuleAndDependencies(module); + final File[] sourceRoots = AndroidJpsUtil.getSourceRootsForModuleAndDependencies(buildTarget.getModule()); final String[] sourceRootPaths = AndroidJpsUtil.toPaths(sourceRoots); final String packageName = computePackageForFile(context, file); @@ -421,7 +421,7 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { success = false; } else { - final SourceToOutputMapping sourceToOutputMap = context.getProjectDescriptor().dataManager.getSourceToOutputMap(module.getName(), false); + final SourceToOutputMapping sourceToOutputMap = context.getProjectDescriptor().dataManager.getSourceToOutputMap(buildTarget); sourceToOutputMap.update(filePath, outputFilePath); FSOperations.markDirty(context, outputFile); } @@ -435,7 +435,7 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { } private static boolean runRenderscriptCompiler(@NotNull final CompileContext context, - @NotNull Map files, + @NotNull Map files, @NotNull Map moduleDataMap) { if (files.size() > 0) { context.processMessage(new ProgressMessage(AndroidJpsBundle.message("android.jps.progress.renderscript"))); @@ -443,11 +443,11 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { boolean success = true; - for (Map.Entry entry : files.entrySet()) { + for (Map.Entry entry : files.entrySet()) { final File file = entry.getKey(); - final JpsModule module = entry.getValue(); + final ModuleBuildTarget buildTarget = entry.getValue(); - final MyModuleData moduleData = moduleDataMap.get(module); + final MyModuleData moduleData = moduleDataMap.get(buildTarget.getModule()); if (!LOG.assertTrue(moduleData != null)) { context.processMessage(new CompilerMessage(ANDROID_RENDERSCRIPT_COMPILER, BuildMessage.Kind.ERROR, AndroidJpsBundle.message("android.jps.internal.error"))); @@ -456,7 +456,7 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { } final BuildDataManager dataManager = context.getProjectDescriptor().dataManager; - final File generatedSourcesDir = AndroidJpsUtil.getGeneratedSourcesStorage(module, dataManager); + final File generatedSourcesDir = AndroidJpsUtil.getGeneratedSourcesStorage(buildTarget.getModule(), dataManager); final File rsOutputDirectory = new File(generatedSourcesDir, AndroidJpsUtil.RENDERSCRIPT_GENERATED_SOURCE_ROOT_NAME); if (!rsOutputDirectory.exists() && !rsOutputDirectory.mkdirs()) { context.processMessage(new CompilerMessage(ANDROID_RENDERSCRIPT_COMPILER, BuildMessage.Kind.ERROR, AndroidJpsBundle @@ -465,7 +465,7 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { continue; } - final File generatedResourcesDir = AndroidJpsUtil.getGeneratedResourcesStorage(module, dataManager); + final File generatedResourcesDir = AndroidJpsUtil.getGeneratedResourcesStorage(buildTarget.getModule(), dataManager); final File rawDir = new File(generatedResourcesDir, "raw"); if (!rawDir.exists() && !rawDir.mkdirs()) { @@ -504,7 +504,7 @@ public class AndroidSourceGeneratingBuilder extends ModuleLevelBuilder { } final List newFilePaths = Arrays.asList(AndroidJpsUtil.toPaths(newFiles.toArray(new File[newFiles.size()]))); - final SourceToOutputMapping sourceToOutputMap = dataManager.getSourceToOutputMap(module.getName(), false); + final SourceToOutputMapping sourceToOutputMap = dataManager.getSourceToOutputMap(buildTarget); sourceToOutputMap.update(filePath, newFilePaths); for (File newFile : newFiles) { diff --git a/plugins/groovy/rt/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java b/plugins/groovy/rt/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java index b2ddbbe0273b..4bf2560a3e00 100644 --- a/plugins/groovy/rt/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java +++ b/plugins/groovy/rt/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java @@ -235,7 +235,7 @@ public class GroovyBuilder extends ModuleLevelBuilder { assert patterns != null; final List toCompile = new ArrayList(); FSOperations.processFilesToRecompile(context, chunk, new FileProcessor() { - public boolean apply(JpsModule module, File file, String sourceRoot) throws IOException { + public boolean apply(ModuleBuildTarget target, File file, String sourceRoot) throws IOException { final String path = file.getPath(); if (isGroovyFile(path) && !patterns.isResourceFile(file, sourceRoot)) { //todo file type check toCompile.add(file); @@ -264,7 +264,7 @@ public class GroovyBuilder extends ModuleLevelBuilder { final RootDescriptor moduleAndRoot = context.getProjectDescriptor().rootsIndex.getModuleAndRoot(context, new File(sourcePath)); if (moduleAndRoot != null) { final String moduleName = moduleAndRoot.module; - context.getProjectDescriptor().dataManager.getSourceToOutputMap(moduleName, moduleAndRoot.isTestRoot).appendData(sourcePath, outputPath); + context.getProjectDescriptor().dataManager.getSourceToOutputMap(moduleAndRoot.target).appendData(sourcePath, outputPath); String moduleOutputPath = generationOutputs.get(context.getProjectDescriptor().rootsIndex.getModuleByName(moduleName)); generatedEvent.add(moduleOutputPath, FileUtil.getRelativePath(moduleOutputPath, outputPath, '/')); } @@ -299,7 +299,7 @@ public class GroovyBuilder extends ModuleLevelBuilder { final Map class2Src = new HashMap(); for (ModuleBuildTarget target : chunk.getTargets()) { String moduleOutputPath = finalOutputs.get(target.getModule()); - final SourceToOutputMapping srcToOut = context.getProjectDescriptor().dataManager.getSourceToOutputMap(target.getModuleName(), target.isTests()); + final SourceToOutputMapping srcToOut = context.getProjectDescriptor().dataManager.getSourceToOutputMap(target); for (String src : srcToOut.getKeys()) { if (!toCompilePaths.contains(src) && isGroovyFile(src) && !context.getProjectDescriptor().project.getCompilerConfiguration().getExcludes().isExcluded(new File(src))) {