public void cacheBC( final Module module, final FlexBuildConfiguration bc, final List<VirtualFile> configFiles) { Collection<BCInfo> infosForModule = myCache.get(module); if (infosForModule == null) { infosForModule = new ArrayList<BCInfo>(); myCache.put(module, infosForModule); } else { final BCInfo existingInfo = findCacheForBC(infosForModule, bc); if (existingInfo != null) { infosForModule.remove(existingInfo); } } final VirtualFile outputFile = FlexCompilationManager.refreshAndFindFileInWriteAction(bc.getActualOutputFilePath()); if (outputFile == null) return; final BCInfo bcInfo = new BCInfo(Factory.getCopy(bc), ModuleRootManager.getInstance(module).getSourceRootUrls()); infosForModule.add(bcInfo); bcInfo.addFileDependency(outputFile.getPath()); final String workDirPath = FlexUtils.getFlexCompilerWorkDirPath(module.getProject(), null); for (VirtualFile configFile : configFiles) { addFileDependencies(bcInfo, configFile, workDirPath); } if (bc.isTempBCForCompilation() && !bc.getCompilerOptions().getAdditionalConfigFilePath().isEmpty()) { bcInfo.addFileDependency(bc.getCompilerOptions().getAdditionalConfigFilePath()); } final BuildConfigurationNature nature = bc.getNature(); if (nature.isApp() && !nature.isWebPlatform()) { if (nature.isDesktopPlatform()) { if (!bc.getAirDesktopPackagingOptions().isUseGeneratedDescriptor()) { bcInfo.addFileDependency(bc.getAirDesktopPackagingOptions().getCustomDescriptorPath()); } } else { if (bc.getAndroidPackagingOptions().isEnabled() && !bc.getAndroidPackagingOptions().isUseGeneratedDescriptor()) { bcInfo.addFileDependency(bc.getAndroidPackagingOptions().getCustomDescriptorPath()); } if (bc.getIosPackagingOptions().isEnabled() && !bc.getIosPackagingOptions().isUseGeneratedDescriptor()) { bcInfo.addFileDependency(bc.getIosPackagingOptions().getCustomDescriptorPath()); } } } }
@NotNull public List<BuildRootDescriptor> computeRootDescriptors( final JpsModel model, final ModuleExcludeIndex index, final IgnoredFileIndex ignoredFileIndex, final BuildDataPaths dataPaths) { final List<BuildRootDescriptor> result = new ArrayList<BuildRootDescriptor>(); final Collection<File> srcRoots = new ArrayList<File>(); for (JpsModuleSourceRoot sourceRoot : myBC.getModule().getSourceRoots(JavaSourceRootType.SOURCE)) { final File root = JpsPathUtil.urlToFile(sourceRoot.getUrl()); result.add(new FlexSourceRootDescriptor(this, root)); srcRoots.add(root); } if (FlexCommonUtils.isFlexUnitBC(myBC)) { for (JpsModuleSourceRoot sourceRoot : myBC.getModule().getSourceRoots(JavaSourceRootType.TEST_SOURCE)) { final File root = JpsPathUtil.urlToFile(sourceRoot.getUrl()); result.add(new FlexSourceRootDescriptor(this, root)); srcRoots.add(root); } } for (final JpsFlexDependencyEntry entry : myBC.getDependencies().getEntries()) { if (entry instanceof JpsFlexBCDependencyEntry) { final JpsFlexBuildConfiguration dependencyBC = ((JpsFlexBCDependencyEntry) entry).getBC(); if (dependencyBC != null) { result.add( new FlexSourceRootDescriptor(this, new File(dependencyBC.getActualOutputFilePath()))); } } else if (entry instanceof JpsLibraryDependencyEntry) { final JpsLibrary library = ((JpsLibraryDependencyEntry) entry).getLibrary(); if (library != null) { for (String rootUrl : library.getRootUrls(JpsOrderRootType.COMPILED)) { result.add(new FlexSourceRootDescriptor(this, JpsPathUtil.urlToFile(rootUrl))); } } } } final BuildConfigurationNature nature = myBC.getNature(); if (nature.isWebPlatform() && nature.isApp() && myBC.isUseHtmlWrapper() && !myBC.getWrapperTemplatePath().isEmpty()) { addIfNotUnderRoot(result, new File(myBC.getWrapperTemplatePath()), srcRoots); } if (FlexCommonUtils.canHaveRLMsAndRuntimeStylesheets(myBC)) { for (String cssPath : myBC.getCssFilesToCompile()) { if (!cssPath.isEmpty()) { addIfNotUnderRoot(result, new File(cssPath), srcRoots); } } } if (!myBC.getCompilerOptions().getAdditionalConfigFilePath().isEmpty()) { addIfNotUnderRoot( result, new File(myBC.getCompilerOptions().getAdditionalConfigFilePath()), srcRoots); } if (nature.isApp()) { if (nature.isDesktopPlatform()) { addAirDescriptorPathIfCustom(result, myBC.getAirDesktopPackagingOptions(), srcRoots); } else if (nature.isMobilePlatform()) { if (myBC.getAndroidPackagingOptions().isEnabled()) { addAirDescriptorPathIfCustom(result, myBC.getAndroidPackagingOptions(), srcRoots); } if (myBC.getIosPackagingOptions().isEnabled()) { addAirDescriptorPathIfCustom(result, myBC.getIosPackagingOptions(), srcRoots); } } } return result; }