From 2d5a4f3fe263a0f01eebbd7d0a0ee93b1550772f Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Fri, 31 Aug 2012 16:10:25 +0400 Subject: [PATCH] IDEA-89176 mark generated files dirty manually, because they can be marked by native fs listener too late --- .../android/compiler/AndroidAptCompiler.java | 1 + .../AndroidBuildConfigGeneratingCompiler.java | 2 +- .../android/compiler/AndroidCompileUtil.java | 19 +++++++++++++++++++ ...droidExternalApklibExtractingCompiler.java | 2 +- .../android/compiler/AndroidIdlCompiler.java | 2 +- .../compiler/AndroidIncludingCompiler.java | 2 +- .../AndroidMavenResourcesCompiler.java | 9 ++++----- .../compiler/AndroidRenderscriptCompiler.java | 1 + 8 files changed, 29 insertions(+), 9 deletions(-) diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidAptCompiler.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidAptCompiler.java index d96622392322..213323fd480e 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidAptCompiler.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidAptCompiler.java @@ -131,6 +131,7 @@ public class AndroidAptCompiler implements SourceGeneratingCompiler { // we use copyDir instead of moveDirWithContent here, because tmp directory may be located on other disk and // moveDirWithContent doesn't work for such case FileUtil.copyDir(tmpOutputDir, genRootDir); + AndroidCompileUtil.markDirty(outputRootDirectory, true); } results.add(aptItem); } diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidBuildConfigGeneratingCompiler.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidBuildConfigGeneratingCompiler.java index 20a79be60a6c..36142482cfb7 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidBuildConfigGeneratingCompiler.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidBuildConfigGeneratingCompiler.java @@ -113,7 +113,7 @@ public class AndroidBuildConfigGeneratingCompiler implements SourceGeneratingCom } if (result.size() > 0) { - outputRootDirectory.refresh(false, true); + AndroidCompileUtil.markDirtyAndRefresh(outputRootDirectory, true); } return result.toArray(new GenerationItem[result.size()]); } diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java index 79c21de7a9ca..f11134d4e9a0 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java @@ -42,6 +42,7 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.*; +import com.intellij.openapi.vfs.newvfs.NewVirtualFile; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.artifacts.ArtifactProperties; import com.intellij.packaging.impl.compiler.ArtifactCompileScope; @@ -887,4 +888,22 @@ public class AndroidCompileUtil { public static void reportException(@NotNull CompileContext context, @NotNull String messagePrefix, @NotNull Exception e) { context.addMessage(CompilerMessageCategory.ERROR, messagePrefix + e.getClass().getSimpleName() + ": " + e.getMessage(), null, -1, -1); } + + public static void markDirtyAndRefresh(VirtualFile f, boolean recursively) { + markDirty(f, recursively); + f.refresh(false, recursively); + } + + public static void markDirty(VirtualFile f, boolean recursively) { + if (f instanceof NewVirtualFile) { + final NewVirtualFile newF = (NewVirtualFile)f; + + if (recursively) { + newF.markDirtyRecursively(); + } + else { + newF.markDirty(); + } + } + } } \ No newline at end of file diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidExternalApklibExtractingCompiler.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidExternalApklibExtractingCompiler.java index dbaa2e9cda46..31a11780f8cb 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidExternalApklibExtractingCompiler.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidExternalApklibExtractingCompiler.java @@ -108,7 +108,7 @@ public class AndroidExternalApklibExtractingCompiler implements SourceGenerating final VirtualFile vSrcRoot = LocalFileSystem.getInstance().findFileByIoFile(srcRoot); if (vSrcRoot != null) { - vSrcRoot.getParent().refresh(false, true); + AndroidCompileUtil.markDirtyAndRefresh(vSrcRoot, true); AndroidUtils.collectFiles(vSrcRoot, visited, generatedVFiles); } } diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidIdlCompiler.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidIdlCompiler.java index 072bce300872..045ed5492c9f 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidIdlCompiler.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidIdlCompiler.java @@ -233,7 +233,7 @@ public class AndroidIdlCompiler implements SourceGeneratingCompiler { } if (toRefresh) { - outputRootDirectory.refresh(false, true); + AndroidCompileUtil.markDirtyAndRefresh(outputRootDirectory, true); } return results.toArray(new GenerationItem[results.size()]); } diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidIncludingCompiler.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidIncludingCompiler.java index ac9d297ef759..6b5fec166335 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidIncludingCompiler.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidIncludingCompiler.java @@ -187,7 +187,7 @@ public class AndroidIncludingCompiler implements SourceGeneratingCompiler { } if (toRefresh) { - outputRootDirectory.refresh(false, true); + AndroidCompileUtil.markDirtyAndRefresh(outputRootDirectory, true); } return result.toArray(new GenerationItem[result.size()]); } diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidMavenResourcesCompiler.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidMavenResourcesCompiler.java index a31f6172d142..3dd46f20a332 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidMavenResourcesCompiler.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidMavenResourcesCompiler.java @@ -15,7 +15,6 @@ */ package org.jetbrains.android.compiler; -import com.intellij.compiler.impl.CompilerUtil; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.compiler.*; import com.intellij.openapi.compiler.ex.CompileContextEx; @@ -77,10 +76,10 @@ public class AndroidMavenResourcesCompiler implements SourceGeneratingCompiler { for (GenerationItem item : generationItems) { File generatedFile = ((MyGenerationItem)item).myGeneratedFile; if (generatedFile != null) { - CompilerUtil.refreshIOFile(generatedFile); - VirtualFile generatedVFile = LocalFileSystem.getInstance().findFileByIoFile(generatedFile); - if (generatedVFile != null) { - generatedVFiles.add(generatedVFile); + final VirtualFile vFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(generatedFile); + if (vFile != null) { + AndroidCompileUtil.markDirtyAndRefresh(vFile, false); + generatedVFiles.add(vFile); } } } diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidRenderscriptCompiler.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidRenderscriptCompiler.java index b554fa8de67f..77a8c43d8f34 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidRenderscriptCompiler.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidRenderscriptCompiler.java @@ -197,6 +197,7 @@ public class AndroidRenderscriptCompiler implements SourceGeneratingCompiler { .execute(genItem.mySdkLocation, genItem.myAndroidTarget, sourceFile.getPath(), genRootPath, depFolderOsPath, genItem.myRawDirPath)); + AndroidCompileUtil.markDirty(outputRootDirectory, true); ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() {