IDEA-84162 do not regenerate R.java if resource files were not changed at all

This commit is contained in:
Eugene Kudelevsky
2012-04-05 20:31:05 +04:00
parent cff1289fe5
commit f17081deb4
2 changed files with 19 additions and 4 deletions
@@ -115,6 +115,7 @@ public class AndroidFacet extends Facet<AndroidFacetConfiguration> {
private final Object myClassMapLock = new Object();
private final Set<AndroidAutogeneratorMode> myDirtyModes = EnumSet.noneOf(AndroidAutogeneratorMode.class);
private final Set<AndroidAutogeneratorMode> myGeneratedWithErrorsModes = EnumSet.noneOf(AndroidAutogeneratorMode.class);
private final Map<AndroidAutogeneratorMode, Set<String>> myAutogeneratedFiles = new HashMap<AndroidAutogeneratorMode, Set<String>>();
private volatile boolean myAutogenerationEnabled = false;
@@ -141,9 +142,16 @@ public class AndroidFacet extends Facet<AndroidFacetConfiguration> {
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<AndroidFacetConfiguration> {
myDirtyModes.add(mode);
}
}
public boolean areSourcesGeneratedWithErrors(@NotNull AndroidAutogeneratorMode mode) {
synchronized (myDirtyModes) {
return myGeneratedWithErrorsModes.contains(mode);
}
}
}
@@ -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;