diff --git a/plugins/android/common/src/org/jetbrains/android/util/BufferingFileWrapper.java b/plugins/android/common/src/org/jetbrains/android/util/BufferingFileWrapper.java index dd0b9bd3946d..72ca2c121d07 100644 --- a/plugins/android/common/src/org/jetbrains/android/util/BufferingFileWrapper.java +++ b/plugins/android/common/src/org/jetbrains/android/util/BufferingFileWrapper.java @@ -3,6 +3,7 @@ package org.jetbrains.android.util; import com.android.io.IAbstractFile; import com.android.io.IAbstractFolder; import com.android.io.StreamException; +import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -26,7 +27,7 @@ public class BufferingFileWrapper implements IAbstractFile { return new ByteArrayInputStream(content); } catch (IOException e) { - throw new StreamException(e); + throw new StreamException(e, this); } } @@ -89,4 +90,19 @@ public class BufferingFileWrapper implements IAbstractFile { public boolean delete() { throw new UnsupportedOperationException(); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + BufferingFileWrapper wrapper = (BufferingFileWrapper)o; + + return FileUtil.filesEqual(myFile, wrapper.myFile); + } + + @Override + public int hashCode() { + return FileUtil.fileHashCode(myFile); + } } diff --git a/plugins/android/common/src/org/jetbrains/android/util/BufferingFolderWrapper.java b/plugins/android/common/src/org/jetbrains/android/util/BufferingFolderWrapper.java index cf833cc92af5..b173eadba700 100644 --- a/plugins/android/common/src/org/jetbrains/android/util/BufferingFolderWrapper.java +++ b/plugins/android/common/src/org/jetbrains/android/util/BufferingFolderWrapper.java @@ -4,6 +4,7 @@ import com.android.io.FolderWrapper; import com.android.io.IAbstractFile; import com.android.io.IAbstractFolder; import com.android.io.IAbstractResource; +import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -86,4 +87,19 @@ public class BufferingFolderWrapper implements IAbstractFolder { public boolean delete() { throw new UnsupportedOperationException(); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + BufferingFolderWrapper wrapper = (BufferingFolderWrapper)o; + + return FileUtil.filesEqual(myFile, wrapper.myFile); + } + + @Override + public int hashCode() { + return FileUtil.fileHashCode(myFile); + } } diff --git a/plugins/android/lib/common.jar b/plugins/android/lib/common.jar index b037f324950a..330c795cc3d1 100644 Binary files a/plugins/android/lib/common.jar and b/plugins/android/lib/common.jar differ diff --git a/plugins/android/lib/ide_common.jar b/plugins/android/lib/ide_common.jar index 2bb63be76656..c6c4d7cc18f2 100644 Binary files a/plugins/android/lib/ide_common.jar and b/plugins/android/lib/ide_common.jar differ diff --git a/plugins/android/lib/layoutlib_api.jar b/plugins/android/lib/layoutlib_api.jar index 8503ba261b8e..287beee5a572 100644 Binary files a/plugins/android/lib/layoutlib_api.jar and b/plugins/android/lib/layoutlib_api.jar differ diff --git a/plugins/android/lib/src/common_src.zip b/plugins/android/lib/src/common_src.zip index 1f400fc1789d..1ed3678b2622 100644 Binary files a/plugins/android/lib/src/common_src.zip and b/plugins/android/lib/src/common_src.zip differ diff --git a/plugins/android/lib/src/ide_common_src.zip b/plugins/android/lib/src/ide_common_src.zip index 0bb2c86fef82..a88397966ee3 100644 Binary files a/plugins/android/lib/src/ide_common_src.zip and b/plugins/android/lib/src/ide_common_src.zip differ diff --git a/plugins/android/lib/src/layoutlib_api_src.zip b/plugins/android/lib/src/layoutlib_api_src.zip index ff78e06336b9..ee742ae6652e 100644 Binary files a/plugins/android/lib/src/layoutlib_api_src.zip and b/plugins/android/lib/src/layoutlib_api_src.zip differ diff --git a/plugins/android/src/org/jetbrains/android/uipreview/ProjectResources.java b/plugins/android/src/org/jetbrains/android/uipreview/ProjectResources.java index a3f75e480da6..5097c90b0653 100644 --- a/plugins/android/src/org/jetbrains/android/uipreview/ProjectResources.java +++ b/plugins/android/src/org/jetbrains/android/uipreview/ProjectResources.java @@ -6,6 +6,7 @@ import com.android.ide.common.resources.ResourceItem; import com.android.ide.common.resources.ResourceRepository; import com.android.resources.ResourceType; import com.android.util.Pair; +import com.intellij.util.containers.HashMap; import gnu.trove.TIntObjectHashMap; import gnu.trove.TObjectIntHashMap; import org.jetbrains.annotations.Nullable; @@ -120,42 +121,39 @@ public class ProjectResources extends ResourceRepository { return; } - List resources = mResourceMap.get(ResourceType.ID); + Map resources = mResourceMap.get(ResourceType.ID); final TObjectIntHashMap name2id = myResourceValueMap.get(ResourceType.ID); if (name2id != null) { final TObjectIntHashMap copy; if (resources == null) { - resources = new ArrayList(name2id.size()); + resources = new HashMap(name2id.size()); mResourceMap.put(ResourceType.ID, resources); copy = name2id; } else { copy = new TObjectIntHashMap(name2id); - int i = 0; - while (i < resources.size()) { - ResourceItem item = resources.get(i); + final List resList = new ArrayList(resources.values()); + for (ResourceItem item : resList) { String name = item.getName(); if (item.isDeclaredInline()) { if (copy.contains(name)) { copy.remove(name); - i++; } else { - resources.remove(i); + resources.remove(item.getName()); } } else { copy.remove(name); - i++; } } } for (Object name : copy.keys()) { - resources.add(new InlineResourceItem((String)name)); + resources.put((String)name, new InlineResourceItem((String)name)); } } }