diff --git a/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java b/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java index 5d94112553d4..3642a15280e7 100644 --- a/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java +++ b/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java @@ -115,6 +115,7 @@ public class AndroidFacet extends Facet { private final Object myClassMapLock = new Object(); private final Set myDirtyModes = EnumSet.noneOf(AndroidAutogeneratorMode.class); + private final Set myGeneratedWithErrorsModes = EnumSet.noneOf(AndroidAutogeneratorMode.class); private final Map> myAutogeneratedFiles = new HashMap>(); private volatile boolean myAutogenerationEnabled = false; @@ -141,9 +142,16 @@ public class AndroidFacet extends Facet { regenerate = regenerate || isGeneratedFileRemoved(mode); if (myAutogenerationEnabled && regenerate) { - if (AndroidCompileUtil.doGenerate(getModule(), mode)) { - synchronized (myDirtyModes) { - myDirtyModes.remove(mode); + final boolean result = AndroidCompileUtil.doGenerate(getModule(), mode); + + synchronized (myDirtyModes) { + myDirtyModes.remove(mode); + + if (result) { + myGeneratedWithErrorsModes.remove(mode); + } + else { + myGeneratedWithErrorsModes.add(mode); } } } @@ -817,4 +825,10 @@ public class AndroidFacet extends Facet { myDirtyModes.add(mode); } } + + public boolean areSourcesGeneratedWithErrors(@NotNull AndroidAutogeneratorMode mode) { + synchronized (myDirtyModes) { + return myGeneratedWithErrorsModes.contains(mode); + } + } } diff --git a/plugins/android/src/org/jetbrains/android/facet/AndroidResourceFilesListener.java b/plugins/android/src/org/jetbrains/android/facet/AndroidResourceFilesListener.java index 2b01d6bf9ce2..733a27394c50 100644 --- a/plugins/android/src/org/jetbrains/android/facet/AndroidResourceFilesListener.java +++ b/plugins/android/src/org/jetbrains/android/facet/AndroidResourceFilesListener.java @@ -166,7 +166,8 @@ class AndroidResourceFilesListener extends VirtualFileAdapter { AndroidCompileUtil.collectAllResources(myFacet, resourceSet); synchronized (RESOURCES_SET_LOCK) { - if (resourceSet.equals(myResourceSet)) { + if (resourceSet.equals(myResourceSet) && + !myFacet.areSourcesGeneratedWithErrors(AndroidAutogeneratorMode.AAPT)) { return; } myResourceSet = resourceSet;