diff --git a/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java b/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java index 787ad7a2ceb5..f02eb36984fa 100644 --- a/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java +++ b/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java @@ -112,7 +112,6 @@ public class AndroidFacet extends Facet { private final Set myDirtyModes = EnumSet.noneOf(AndroidAutogeneratorMode.class); private final Map> myAutogeneratedFiles = new HashMap>(); - private final Set myInitializedModes = EnumSet.noneOf(AndroidAutogeneratorMode.class); private volatile boolean myAutogenerationEnabled = false; @@ -130,10 +129,18 @@ public class AndroidFacet extends Facet { alarm.addRequest(new Runnable() { @Override public void run() { + boolean regenerate; + synchronized (myDirtyModes) { - if (myAutogenerationEnabled && myDirtyModes.contains(mode)) { - myDirtyModes.remove(mode); - AndroidCompileUtil.doGenerate(getModule(), mode); + regenerate = myDirtyModes.contains(mode); + } + regenerate = regenerate || isGeneratedFileRemoved(mode); + + if (myAutogenerationEnabled && regenerate) { + if (AndroidCompileUtil.doGenerate(getModule(), mode)) { + synchronized (myDirtyModes) { + myDirtyModes.remove(mode); + } } } alarm.addRequest(this, 2000); @@ -142,6 +149,23 @@ public class AndroidFacet extends Facet { return alarm; } + private boolean isGeneratedFileRemoved(@NotNull AndroidAutogeneratorMode mode) { + synchronized (myAutogeneratedFiles) { + final Set filePaths = myAutogeneratedFiles.get(mode); + + if (filePaths != null) { + for (String path : filePaths) { + final VirtualFile file = LocalFileSystem.getInstance().findFileByPath(path); + + if (file == null) { + return true; + } + } + } + } + return false; + } + public void clearAutogeneratedFiles(@NotNull AndroidAutogeneratorMode mode) { synchronized (myAutogeneratedFiles) { final Set set = myAutogeneratedFiles.get(mode);