void (BuildTargetType<?> type, CompileContext context) { List<Pair<String, Integer>> targetIds = myProjectDescriptor.dataManager.getTargetsState().getStaleTargetIds(type); if (targetIds.isEmpty()) return; context.processMessage(new ProgressMessage(JpsBuildBundle.message("progress.message.cleaning.old.output.directories"))); for (Pair<String, Integer> ids : targetIds) { String stringId = ids.first; try { SourceToOutputMappingImpl mapping = null; try { mapping = myProjectDescriptor.dataManager.createSourceToOutputMapForStaleTarget(type, stringId); clearOutputFiles(context, mapping, type, ids.second); } finally { if (mapping != null) { mapping.close(); } } FileUtil.delete(myProjectDescriptor.dataManager.getDataPaths().getTargetDataRoot(type, stringId)); myProjectDescriptor.dataManager.getTargetsState().cleanStaleTarget(type, stringId); } catch (IOException e) { LOG.warn(e); myMessageDispatcher.processMessage(new CompilerMessage("", BuildMessage.Kind.WARNING, JpsBuildBundle.message("build.message.failed.to.delete.output.files.from.obsolete.0.target.1", stringId, e.toString()))); } } }