Merge "Now Gradle plug-in "quick fix" uses the "recommended version", instead of "latest version"." into idea133
automerge: bb7c7bd

* commit 'bb7c7bdd119da6de85b6013e0c60dc34f0844f2b':
  Now Gradle plug-in "quick fix" uses the "recommended version", instead of "latest version".
diff --git a/adt-branding/src/idea/AndroidStudioApplicationInfo.xml b/adt-branding/src/idea/AndroidStudioApplicationInfo.xml
index d5db933..540521c 100755
--- a/adt-branding/src/idea/AndroidStudioApplicationInfo.xml
+++ b/adt-branding/src/idea/AndroidStudioApplicationInfo.xml
@@ -16,7 +16,7 @@
 <component>
   <version codename="Preview" major="0" minor="6.2" eap="true"/>
   <company name="Google Inc." url="http://developer.android.com"/>
-  <build number="__BUILD_NUMBER__" date="__BUILD_DATE__" apiVersion="135.909"/>
+  <build number="__BUILD_NUMBER__" date="__BUILD_DATE__" apiVersion="138.538"/>
   <install-over minbuild="0.1" maxbuild="999.999999" version="0"/>
   <logo url="/artwork/studio_splash.png" textcolor="cccccc" progressColor="ffaa16" progressY="238" progressTailIcon="/community_progress_tail.png"/>
   <about url="/artwork/studio_about.png" foreground="cccccc"/>
diff --git a/android/android.iml b/android/android.iml
index eecdd96..cbdec53 100755
--- a/android/android.iml
+++ b/android/android.iml
@@ -74,6 +74,7 @@
     </orderEntry>
     <orderEntry type="module" module-name="testutils" scope="TEST" />
     <orderEntry type="library" scope="TEST" name="Eclipse" level="project" />
+    <orderEntry type="module" module-name="properties-psi-api" />
   </component>
 </module>
 
diff --git a/android/common/android-common.iml b/android/common/android-common.iml
index e5e2a70..c333245 100644
--- a/android/common/android-common.iml
+++ b/android/common/android-common.iml
@@ -4,8 +4,7 @@
     <exclude-output />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/../rt/resources" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/resources" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/testSrc" isTestSource="true" />
     </content>
     <orderEntry type="inheritedJdk" />
diff --git a/android/common/src/org/jetbrains/android/util/AndroidCommonUtils.java b/android/common/src/org/jetbrains/android/util/AndroidCommonUtils.java
index 70956af..41f11ee 100644
--- a/android/common/src/org/jetbrains/android/util/AndroidCommonUtils.java
+++ b/android/common/src/org/jetbrains/android/util/AndroidCommonUtils.java
@@ -286,7 +286,7 @@
         path = path.substring(1);
       }
 
-      files.add(new Pair<File, String>(file, path));
+      files.add(Pair.create(file, path));
     }
   }
 
diff --git a/android/jps-plugin/testSrc/org/jetbrains/jps/android/AndroidBuilderTest.java b/android/jps-plugin/testSrc/org/jetbrains/jps/android/AndroidBuilderTest.java
index ca42b78..d0a2a2f 100644
--- a/android/jps-plugin/testSrc/org/jetbrains/jps/android/AndroidBuilderTest.java
+++ b/android/jps-plugin/testSrc/org/jetbrains/jps/android/AndroidBuilderTest.java
@@ -1253,7 +1253,7 @@
     executor.addRegexPathPatternPrefix("COMBINED_ASSETS_TMP", FileUtil.toSystemIndependentName(tempDirectory) +
                                                               "/android_combined_assets\\d*tmp");
     executor.addRegexPathPatternPrefix("COMBINED_RESOURCES_TMP", FileUtil.toSystemIndependentName(tempDirectory) +
-                                                                 "/android_combined_resources\\d*tmp");
+                                                              "/android_combined_resources\\d*tmp");
     executor.addRegexPathPatternPrefix("CLASSPATH_TMP", FileUtil.toSystemIndependentName(tempDirectory) + "/classpath\\d*\\.tmp");
     executor.addRegexPathPattern("JAVA_PATH", ".*/java");
     executor.addRegexPathPattern("IDEA_RT_PATH", ".*/idea_rt.jar");
diff --git a/android/src/META-INF/eclipse.xml b/android/src/META-INF/eclipse.xml
index 7c724d1..f360d6e 100644
--- a/android/src/META-INF/eclipse.xml
+++ b/android/src/META-INF/eclipse.xml
@@ -1,5 +1,5 @@
 <idea-plugin url="http://www.jetbrains.com/idea">
-  <extensions xmlns="org.jetbrains.idea.eclipse">
+  <extensions defaultExtensionNs="org.jetbrains.idea.eclipse">
     <natureImporter implementation="org.jetbrains.android.newProject.AndroidEclipseNatureImporter"/>
   </extensions>
 </idea-plugin>
diff --git a/android/src/META-INF/maven-support.xml b/android/src/META-INF/maven-support.xml
index 20d9537..2285902 100644
--- a/android/src/META-INF/maven-support.xml
+++ b/android/src/META-INF/maven-support.xml
@@ -1,12 +1,8 @@
 <idea-plugin url="http://www.jetbrains.com/idea">
-  <extensions xmlns="org.jetbrains.idea.maven">
+  <extensions defaultExtensionNs="org.jetbrains.idea.maven">
     <importer implementation="org.jetbrains.android.maven.AndroidFacetImporter1"/>
     <importer implementation="org.jetbrains.android.maven.AndroidFacetImporter2"/>
   </extensions>
-  <extensions defaultExtensionNs="com.intellij">
-    <compiler implementation="org.jetbrains.android.compiler.AndroidExternalApklibExtractingCompiler" order="first"/>
-    <compiler implementation="org.jetbrains.android.compiler.AndroidMavenResourcesCompiler" order="first"/>
-  </extensions>
   <extensions defaultExtensionNs="org.jetbrains">
     <android.mavenProvider implementation="org.jetbrains.android.maven.AndroidMavenProviderImpl"/>
   </extensions>
diff --git a/android/src/META-INF/plugin.xml b/android/src/META-INF/plugin.xml
index 03ec8fe..6f4cdd0 100755
--- a/android/src/META-INF/plugin.xml
+++ b/android/src/META-INF/plugin.xml
@@ -1,4 +1,4 @@
-<idea-plugin version="2" xmlns:xi="http://www.w3.org/2001/XInclude">
+<idea-plugin version="2">
   <name>Android Support</name>
   <id>org.jetbrains.android</id>
   <description>
@@ -217,19 +217,6 @@
     <projectTemplatesFactory implementation="com.android.tools.idea.wizard.TemplateWizardProjectTemplateFactory"/>
     <projectTemplatesFactory implementation="org.jetbrains.android.newProject.AndroidProjectTemplatesFactory"/>
 
-    <compiler implementation="org.jetbrains.android.compiler.AndroidIncludingCompiler"/>
-    <compiler implementation="org.jetbrains.android.compiler.AndroidRenderscriptCompiler"/>
-    <compiler implementation="org.jetbrains.android.compiler.AndroidBuildConfigGeneratingCompiler"/>
-    <compiler implementation="org.jetbrains.android.compiler.AndroidAptCompiler"/>
-    <compiler implementation="org.jetbrains.android.compiler.AndroidIdlCompiler"/>
-    <compiler implementation="org.jetbrains.android.compiler.AndroidLibraryPackagingCompiler"/>
-    <compiler implementation="org.jetbrains.android.compiler.AndroidProguardCompiler"/>
-    <compiler implementation="org.jetbrains.android.compiler.AndroidDexCompiler"/>
-    <compiler implementation="org.jetbrains.android.compiler.AndroidPngFilesCachingCompiler"/>
-    <compiler implementation="org.jetbrains.android.compiler.AndroidResourcesPackagingCompiler"/>
-    <compiler implementation="org.jetbrains.android.compiler.AndroidPackagingCompiler"/>
-    <compiler.makeDependencyProcessor implementation="org.jetbrains.android.compiler.AndroidDependencyProcessor"/>
-
     <completion.contributor language="XML" implementationClass="org.jetbrains.android.AndroidCompletionContributor"
                             id="compositieAttributeValues" order="first"/>
     <completion.contributor language="JAVA" implementationClass="org.jetbrains.android.AndroidJavaCompletionContributor" order="first"/>
@@ -583,7 +570,7 @@
     <editorNotificationProvider implementation="org.jetbrains.android.projectView.ResourceQualifierSwitcher"/>
     -->
 
-    <treeStructureProvider implementation="com.android.tools.idea.gradle.projectView.AndroidTreeStructureProvider" order="last"/>
+    <treeStructureProvider id="android" implementation="com.android.tools.idea.gradle.projectView.AndroidTreeStructureProvider" order="last"/>
     <treeStructureProvider implementation="com.android.tools.idea.navigator.packageview.AndroidPackageViewProvider" order="last"/>
 
     <spellchecker.bundledDictionaryProvider implementation="org.jetbrains.android.spellchecker.AndroidBundledDictionaryProvider"/>
@@ -616,8 +603,6 @@
 
   <!-- Layout editor -->
 
-  <xi:include href="/META-INF/DesignerCorePlugin.xml" xpointer="xpointer(/idea-plugin/*)"/>
-
   <extensions defaultExtensionNs="com.intellij">
     <fileEditorProvider implementation="com.intellij.android.designer.AndroidDesignerEditorProvider"/>
 
diff --git a/android/src/com/android/tools/idea/configurations/Configuration.java b/android/src/com/android/tools/idea/configurations/Configuration.java
index 8f95741..8e567b6 100644
--- a/android/src/com/android/tools/idea/configurations/Configuration.java
+++ b/android/src/com/android/tools/idea/configurations/Configuration.java
@@ -30,6 +30,7 @@
 import com.intellij.openapi.Disposable;
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vfs.VirtualFile;
@@ -271,7 +272,7 @@
    */
   @NotNull
   public static Configuration copyCompatible(@NotNull Configuration source, @NotNull Configuration destination) {
-    assert source.myFile != destination.myFile; // This method is intended to sync configurations for resource variations
+    assert !Comparing.equal(source.myFile, destination.myFile); // This method is intended to sync configurations for resource variations
 
     FolderConfiguration editedConfig = destination.getEditedConfig();
 
diff --git a/android/src/com/android/tools/idea/configurations/ConfigurationAction.java b/android/src/com/android/tools/idea/configurations/ConfigurationAction.java
index 6568ebb..e6635c5 100644
--- a/android/src/com/android/tools/idea/configurations/ConfigurationAction.java
+++ b/android/src/com/android/tools/idea/configurations/ConfigurationAction.java
@@ -27,6 +27,7 @@
 import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.vfs.VirtualFile;
 import icons.AndroidIcons;
 import org.jetbrains.android.facet.AndroidFacet;
@@ -144,7 +145,7 @@
     sb.append(FILE_ARROW);
     String folderName = better.getParent().getName();
     if (folderName.equals(FD_RES_LAYOUT)) {
-      if (file != null && file.getParent() != better.getParent()) {
+      if (file != null && !Comparing.equal(file.getParent(), better.getParent())) {
         sb.append(FD_RES_LAYOUT);
         sb.append(File.separatorChar);
       }
diff --git a/android/src/com/android/tools/idea/configurations/ConfigurationMatcher.java b/android/src/com/android/tools/idea/configurations/ConfigurationMatcher.java
index f13edad..b845798 100644
--- a/android/src/com/android/tools/idea/configurations/ConfigurationMatcher.java
+++ b/android/src/com/android/tools/idea/configurations/ConfigurationMatcher.java
@@ -561,7 +561,7 @@
       if (activeEditor != null) {
         FileDocumentManager documentManager = FileDocumentManager.getInstance();
         VirtualFile file = documentManager.getFile(activeEditor.getDocument());
-        if (file != null && file != myFile && file.getFileType() == StdFileTypes.XML
+        if (file != null && !file.equals(myFile) && file.getFileType() == StdFileTypes.XML
             && ResourceHelper.getFolderType(myFile) == ResourceHelper.getFolderType(file)) {
           Configuration configuration = myManager.getConfiguration(file);
           FolderConfiguration fullConfig = configuration.getFullConfig();
diff --git a/android/src/com/android/tools/idea/configurations/ConfigurationMenuAction.java b/android/src/com/android/tools/idea/configurations/ConfigurationMenuAction.java
index 86912d0..517929c 100644
--- a/android/src/com/android/tools/idea/configurations/ConfigurationMenuAction.java
+++ b/android/src/com/android/tools/idea/configurations/ConfigurationMenuAction.java
@@ -89,7 +89,7 @@
       if (variations.size() > 1) {
         for (VirtualFile file : variations) {
           String title = String.format("Switch to %1$s", file.getParent().getName());
-          group.add(new SwitchToVariationAction(title, project, file, virtualFile == file));
+          group.add(new SwitchToVariationAction(title, project, file, virtualFile.equals(file)));
         }
         group.addSeparator();
       }
diff --git a/android/src/com/android/tools/idea/ddms/screenshot/DeviceArtPainter.java b/android/src/com/android/tools/idea/ddms/screenshot/DeviceArtPainter.java
index 1ccb4ea..7c906ba 100644
--- a/android/src/com/android/tools/idea/ddms/screenshot/DeviceArtPainter.java
+++ b/android/src/com/android/tools/idea/ddms/screenshot/DeviceArtPainter.java
@@ -24,6 +24,7 @@
 import com.google.common.collect.Maps;
 import com.intellij.openapi.application.PathManager;
 import com.intellij.reference.SoftReference;
+import com.intellij.ui.Gray;
 import com.intellij.util.PathUtil;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -290,7 +291,7 @@
       @SuppressWarnings("UndesirableClassUsage") // Don't need Retina image here, and it's more expensive
       BufferedImage result = new BufferedImage(framedWidth, framedHeight, BufferedImage.TYPE_INT_ARGB);
       Graphics2D g = result.createGraphics();
-      g.setColor(new Color(128, 0, 0, 0));
+      g.setColor(Gray.TRANSPARENT);
       g.fillRect(0, 0, result.getWidth(), result.getHeight());
       g.drawImage(scaledImage, screenX, screenY, null);
       BufferedImage scaledFrameImage = ImageUtils.scale(frameImage, downScale, downScale, 0, 0);
@@ -349,7 +350,7 @@
     @SuppressWarnings("UndesirableClassUsage") // Don't need Retina image here, and it's more expensive
     BufferedImage composite = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
     Graphics2D g = composite.createGraphics();
-    g.setColor(new Color(0, 0, 0, 0));
+    g.setColor(Gray.TRANSPARENT);
     g.fillRect(0, 0, composite.getWidth(), composite.getHeight());
 
     NinePatch ninePatch = NinePatch.load(image, true, false);
@@ -787,7 +788,7 @@
       @SuppressWarnings("UndesirableClassUsage") // Don't need Retina image here, and it's more expensive
       BufferedImage composite = new BufferedImage(myFrameWidth, myFrameHeight, BufferedImage.TYPE_INT_ARGB);
       Graphics g = composite.createGraphics();
-      g.setColor(new Color(0, 0, 0, 0));
+      g.setColor(Gray.TRANSPARENT);
       g.fillRect(0, 0, composite.getWidth(), composite.getHeight());
 
       Graphics2D g2d = (Graphics2D)g;
diff --git a/android/src/com/android/tools/idea/gradle/eclipse/AdtImportLocationStep.java b/android/src/com/android/tools/idea/gradle/eclipse/AdtImportLocationStep.java
index ab8c4ec..42c4803 100644
--- a/android/src/com/android/tools/idea/gradle/eclipse/AdtImportLocationStep.java
+++ b/android/src/com/android/tools/idea/gradle/eclipse/AdtImportLocationStep.java
@@ -74,8 +74,8 @@
     descriptor.setDescription("Pick a directory to import the given Eclipse Android project into");
     myDestDirText.addBrowseFolderListener(new TextBrowseFolderListener(descriptor) {
       @Override
-      protected void onFileChoosen(@NotNull VirtualFile chosenFile) {
-        super.onFileChoosen(chosenFile);
+      protected void onFileChosen(@NotNull VirtualFile chosenFile) {
+        super.onFileChosen(chosenFile);
         myIsPathChangedByUser = true;
       }
 
diff --git a/android/src/com/android/tools/idea/gradle/projectView/AndroidTreeStructureProvider.java b/android/src/com/android/tools/idea/gradle/projectView/AndroidTreeStructureProvider.java
index 2aa3451..819ef0f 100644
--- a/android/src/com/android/tools/idea/gradle/projectView/AndroidTreeStructureProvider.java
+++ b/android/src/com/android/tools/idea/gradle/projectView/AndroidTreeStructureProvider.java
@@ -16,10 +16,13 @@
 package com.android.tools.idea.gradle.projectView;
 
 import com.google.common.collect.Lists;
+import com.intellij.facet.ProjectFacetManager;
 import com.intellij.ide.projectView.TreeStructureProvider;
 import com.intellij.ide.projectView.ViewSettings;
 import com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode;
 import com.intellij.ide.util.treeView.AbstractTreeNode;
+import com.intellij.openapi.project.Project;
+import org.jetbrains.android.facet.AndroidFacet;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -32,6 +35,11 @@
   public Collection<AbstractTreeNode> modify(@NotNull AbstractTreeNode parent,
                                              @NotNull Collection<AbstractTreeNode> children,
                                              ViewSettings settings) {
+    final Project project = parent.getProject();
+
+    if (project == null || !ProjectFacetManager.getInstance(project).hasFacets(AndroidFacet.ID)) {
+      return children;
+    }
     List<AbstractTreeNode> newChildren = Lists.newArrayList();
     for (AbstractTreeNode child : children) {
       // We replace the default "directory node" with our own, to control the text displayed by the node.
diff --git a/android/src/com/android/tools/idea/gradle/util/Projects.java b/android/src/com/android/tools/idea/gradle/util/Projects.java
index 940f8dd..0a4db63 100644
--- a/android/src/com/android/tools/idea/gradle/util/Projects.java
+++ b/android/src/com/android/tools/idea/gradle/util/Projects.java
@@ -22,8 +22,6 @@
 import com.android.tools.idea.gradle.facet.JavaGradleFacet;
 import com.android.tools.idea.gradle.messages.ProjectSyncMessages;
 import com.android.tools.idea.startup.AndroidStudioSpecificInitializer;
-import com.intellij.compiler.CompilerWorkspaceConfiguration;
-import com.intellij.compiler.options.ExternalBuildOptionListener;
 import com.intellij.ide.DataManager;
 import com.intellij.ide.impl.ProjectUtil;
 import com.intellij.ide.projectView.ProjectView;
@@ -42,7 +40,6 @@
 import com.intellij.openapi.wm.WindowManager;
 import com.intellij.openapi.wm.ex.IdeFrameEx;
 import com.intellij.openapi.wm.impl.IdeFrameImpl;
-import com.intellij.util.messages.MessageBus;
 import org.jetbrains.android.facet.AndroidFacet;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -191,17 +188,6 @@
       if (!AndroidStudioSpecificInitializer.isAndroidStudio()) {
         AndroidGradleBuildConfiguration.getInstance(project).USE_EXPERIMENTAL_FASTER_BUILD = false;
       }
-
-      CompilerWorkspaceConfiguration workspaceConfiguration = CompilerWorkspaceConfiguration.getInstance(project);
-      boolean wasUsingExternalMake = workspaceConfiguration.useOutOfProcessBuild();
-      if (!wasUsingExternalMake) {
-        String format = "Enabled 'External Build' for Android project '%1$s'. Otherwise, the project will not be built with Gradle";
-        String msg = String.format(format, project.getName());
-        LOG.info(msg);
-        workspaceConfiguration.USE_OUT_OF_PROCESS_BUILD = true;
-        MessageBus messageBus = project.getMessageBus();
-        messageBus.syncPublisher(ExternalBuildOptionListener.TOPIC).externalBuildOptionChanged(true);
-      }
     }
   }
 
diff --git a/android/src/com/android/tools/idea/rendering/GutterIconCache.java b/android/src/com/android/tools/idea/rendering/GutterIconCache.java
index 9efef0b..7710531 100644
--- a/android/src/com/android/tools/idea/rendering/GutterIconCache.java
+++ b/android/src/com/android/tools/idea/rendering/GutterIconCache.java
@@ -17,6 +17,7 @@
 
 import com.google.common.collect.Maps;
 import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.ui.Gray;
 import com.intellij.util.RetinaImage;
 import com.intellij.util.ui.UIUtil;
 import icons.AndroidIcons;
@@ -111,7 +112,7 @@
             BufferedImage bg = UIUtil.createImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB);
             Graphics g = bg.getGraphics();
             //noinspection UseJBColor
-            g.setColor(new Color(255, 255, 255, 0));
+            g.setColor(Gray.TRANSPARENT);
             g.fillRect(0, 0, bg.getWidth(), bg.getHeight());
             //noinspection ConstantConditions
             UIUtil.drawImage(g, image, 0, 0, null);
diff --git a/android/src/com/android/tools/idea/rendering/IncludeReference.java b/android/src/com/android/tools/idea/rendering/IncludeReference.java
index e1e208d..f117074 100644
--- a/android/src/com/android/tools/idea/rendering/IncludeReference.java
+++ b/android/src/com/android/tools/idea/rendering/IncludeReference.java
@@ -135,7 +135,7 @@
     // consider prepending layout/ on ids that don't have it (to make the display
     // more uniform) or ripping out all layout[-constraint] prefixes out and
     // instead prepending @ etc.
-    if (myToFile != null && myToFile.getParent() == myFromFile.getParent()) {
+    if (myToFile != null && myToFile.getParent() != null && myToFile.getParent().equals(myFromFile.getParent())) {
       return myFromFile.getName();
     }
 
diff --git a/android/src/com/android/tools/idea/rendering/RenderService.java b/android/src/com/android/tools/idea/rendering/RenderService.java
index 2e08172..e215840 100644
--- a/android/src/com/android/tools/idea/rendering/RenderService.java
+++ b/android/src/com/android/tools/idea/rendering/RenderService.java
@@ -44,6 +44,7 @@
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.projectRoots.Sdk;
 import com.intellij.openapi.roots.ModuleRootManager;
+import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService;
 import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.vfs.VirtualFile;
@@ -610,7 +611,7 @@
       myIncludedWithin = layout != null ? IncludeReference.get(myModule, myPsiFile, resolver) : IncludeReference.NONE;
     }
     if (myIncludedWithin != IncludeReference.NONE) {
-      assert myIncludedWithin.getToFile() == myPsiFile.getVirtualFile();
+      assert Comparing.equal(myIncludedWithin.getToFile(), myPsiFile.getVirtualFile());
       // TODO: Validate that we're really including the same layout here!
       //ResourceValue contextLayout = resolver.findResValue(myIncludedWithin.getFromResourceUrl(), false  /* forceFrameworkOnly*/);
       //if (contextLayout != null) {
diff --git a/android/src/com/android/tools/idea/rendering/ResourceFolderRepository.java b/android/src/com/android/tools/idea/rendering/ResourceFolderRepository.java
index 2818270..e058fa1 100644
--- a/android/src/com/android/tools/idea/rendering/ResourceFolderRepository.java
+++ b/android/src/com/android/tools/idea/rendering/ResourceFolderRepository.java
@@ -375,7 +375,7 @@
       PsiDirectory parentDirectory = directory.getParentDirectory();
       if (parentDirectory != null) {
         VirtualFile dir = parentDirectory.getVirtualFile();
-        return dir == myResourceDir;
+        return dir.equals(myResourceDir);
       }
     }
     return false;
diff --git a/android/src/com/android/tools/idea/rendering/multi/RenderPreview.java b/android/src/com/android/tools/idea/rendering/multi/RenderPreview.java
index e8e0d32..1a110e7 100644
--- a/android/src/com/android/tools/idea/rendering/multi/RenderPreview.java
+++ b/android/src/com/android/tools/idea/rendering/multi/RenderPreview.java
@@ -36,7 +36,7 @@
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.ui.Messages;
-import com.intellij.openapi.util.Pair;
+import com.intellij.openapi.util.Couple;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.PsiFile;
 import com.intellij.psi.xml.XmlFile;
@@ -971,10 +971,10 @@
       }
       final int xf = x + 5;
       final int yf = y + HEADER_HEIGHT + fontBaseline;
-      painter.draw(gc, new PairFunction<Integer, Integer, Pair<Integer, Integer>>() {
+      painter.draw(gc, new PairFunction<Integer, Integer, Couple<Integer>>() {
         @Override
-        public Pair<Integer, Integer> fun(Integer width, Integer height) {
-          return Pair.create(xf, yf);
+        public Couple<Integer> fun(Integer width, Integer height) {
+          return Couple.of(xf, yf);
         }
       });
       gc.setClip(prevClip);
diff --git a/android/src/com/android/tools/idea/rendering/multi/RenderPreviewManager.java b/android/src/com/android/tools/idea/rendering/multi/RenderPreviewManager.java
index ad1defc..9719633 100644
--- a/android/src/com/android/tools/idea/rendering/multi/RenderPreviewManager.java
+++ b/android/src/com/android/tools/idea/rendering/multi/RenderPreviewManager.java
@@ -42,6 +42,7 @@
 import com.intellij.openapi.fileEditor.OpenFileDescriptor;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Disposer;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.xml.XmlFile;
@@ -1279,7 +1280,7 @@
    * Updates the configuration preview thumbnails
    */
   public void renderPreviews() {
-    if (myRenderContext.getVirtualFile() != myCurrentFile) {
+    if (!Comparing.equal(myRenderContext.getVirtualFile(), myCurrentFile)) {
       recomputePreviews(true);
       return;
     }
diff --git a/android/src/com/android/tools/idea/templates/TemplateManager.java b/android/src/com/android/tools/idea/templates/TemplateManager.java
index 03f5022..d7eaa6b 100644
--- a/android/src/com/android/tools/idea/templates/TemplateManager.java
+++ b/android/src/com/android/tools/idea/templates/TemplateManager.java
@@ -22,6 +22,7 @@
 import com.google.common.collect.*;
 import com.google.common.io.Files;
 import com.intellij.ide.actions.NonEmptyActionGroup;
+import com.intellij.ide.IdeView;
 import com.intellij.openapi.actionSystem.*;
 import com.intellij.openapi.application.PathManager;
 import com.intellij.openapi.diagnostic.Logger;
@@ -412,12 +413,13 @@
       NonEmptyActionGroup categoryGroup = new NonEmptyActionGroup() {
         @Override
         public void update(AnActionEvent e) {
+          IdeView view = LangDataKeys.IDE_VIEW.getData(e.getDataContext());
           final Module module = LangDataKeys.MODULE.getData(e.getDataContext());
           final AndroidFacet facet = module != null ? AndroidFacet.getInstance(module) : null;
           Presentation presentation = e.getPresentation();
           boolean isProjectReady = facet != null && facet.getIdeaAndroidProject() != null;
           presentation.setText(category + (isProjectReady ? "" : " (Project not ready)"));
-          presentation.setVisible(getChildrenCount() > 0 && facet != null && facet.isGradleProject());
+          presentation.setVisible(getChildrenCount() > 0 && view != null && facet != null && facet.isGradleProject());
         }
       };
       categoryGroup.setPopup(true);
@@ -480,8 +482,8 @@
     if (newMetadata != null) {
       String title = newMetadata.getTitle();
       if (title == null || (newMetadata.getCategory() == null &&
-          myCategoryTable.columnKeySet().contains(title) &&
-          myCategoryTable.get(CATEGORY_OTHER, title) == null)) {
+                            myCategoryTable.columnKeySet().contains(title) &&
+                            myCategoryTable.get(CATEGORY_OTHER, title) == null)) {
         // If this template is uncategorized, and we already have a template of this name that has a category,
         // that is NOT "Other," then ignore this new template since it's undoubtedly older.
         return;
diff --git a/android/src/com/intellij/android/designer/AndroidDesignerEditor.java b/android/src/com/intellij/android/designer/AndroidDesignerEditor.java
index adaa209..f77e5a5 100644
--- a/android/src/com/intellij/android/designer/AndroidDesignerEditor.java
+++ b/android/src/com/intellij/android/designer/AndroidDesignerEditor.java
@@ -22,6 +22,7 @@
 import com.intellij.designer.designSurface.DesignerEditorPanel;
 import com.intellij.designer.inspection.DesignerBackgroundEditorHighlighter;
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModuleUtilCore;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.vfs.VirtualFile;
 import org.jetbrains.annotations.NotNull;
@@ -39,11 +40,14 @@
 
   @Override
   @Nullable
-  protected Module findModule(final Project project, final VirtualFile file) {
-    Module module = super.findModule(project, file);
+  protected Module findModule(Project project, VirtualFile file) {
+    Module module = ModuleUtilCore.findModuleForFile(file, project);
     if (module == null) {
       module = AndroidPsiUtils.getModuleSafely(project, file);
     }
+    if (module == null) {
+      throw new IllegalArgumentException("No module for file " + file + " in project " + project);
+    }
     return module;
   }
 
diff --git a/android/src/com/intellij/android/designer/inspection/ErrorAnalyzer.java b/android/src/com/intellij/android/designer/inspection/ErrorAnalyzer.java
index 41bda64..67a9b3e 100644
--- a/android/src/com/intellij/android/designer/inspection/ErrorAnalyzer.java
+++ b/android/src/com/intellij/android/designer/inspection/ErrorAnalyzer.java
@@ -184,7 +184,7 @@
       }
     }
 
-    return new Pair<RadComponent, String>(result[0], propertyName);
+    return Pair.create(result[0], propertyName);
   }
 
   private static Pair<XmlTag, XmlAttribute> extractTag(PsiElement element) {
@@ -203,6 +203,6 @@
       element = element.getParent();
     }
 
-    return new Pair<XmlTag, XmlAttribute>(tag, attribute);
+    return Pair.create(tag, attribute);
   }
 }
diff --git a/android/src/com/intellij/android/designer/model/IdManager.java b/android/src/com/intellij/android/designer/model/IdManager.java
index 648aa00..ad73333 100644
--- a/android/src/com/intellij/android/designer/model/IdManager.java
+++ b/android/src/com/intellij/android/designer/model/IdManager.java
@@ -160,7 +160,7 @@
             }
             else if (idValue != null && myIdList.contains(idValue)) {
               createId(viewComponent);
-              replaceList.add(new Pair<Pair<String, String>, String>(
+              replaceList.add(Pair.create(
                 new Pair<String, String>(ID_PREFIX + idValue, NEW_ID_PREFIX + idValue),
                 viewComponent.getId()));
             }
diff --git a/android/src/org/jetbrains/android/AndroidPlugin.java b/android/src/org/jetbrains/android/AndroidPlugin.java
index d2ae876..5c9a5d9 100644
--- a/android/src/org/jetbrains/android/AndroidPlugin.java
+++ b/android/src/org/jetbrains/android/AndroidPlugin.java
@@ -15,8 +15,6 @@
  */
 package org.jetbrains.android;
 
-import com.android.tools.idea.templates.TemplateManager;
-import com.intellij.openapi.actionSystem.*;
 import com.intellij.openapi.components.ApplicationComponent;
 import org.jetbrains.android.sdk.AndroidSdkData;
 import org.jetbrains.annotations.NotNull;
@@ -34,17 +32,6 @@
 
   @Override
   public void initComponent() {
-    createDynamicTemplateMenu();
-  }
-
-  public static void createDynamicTemplateMenu() {
-    DefaultActionGroup newGroup = (DefaultActionGroup)ActionManager.getInstance().getAction("NewGroup");
-    newGroup.addSeparator();
-    final ActionGroup menu = TemplateManager.getInstance().getTemplateCreationMenu(null);
-
-    if (menu != null) {
-      newGroup.add(menu, new Constraints(Anchor.AFTER, "NewFromTemplate"));
-    }
   }
 
   @Override
diff --git a/android/src/org/jetbrains/android/AndroidSdkResolveScopeProvider.java b/android/src/org/jetbrains/android/AndroidSdkResolveScopeProvider.java
index 91d364b..22d5ea8 100644
--- a/android/src/org/jetbrains/android/AndroidSdkResolveScopeProvider.java
+++ b/android/src/org/jetbrains/android/AndroidSdkResolveScopeProvider.java
@@ -11,7 +11,6 @@
 import org.jetbrains.android.augment.AndroidInternalRClass;
 import org.jetbrains.android.sdk.AndroidSdkType;
 import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
 
 /**
  * @author Eugene.Kudelevsky
@@ -39,19 +38,6 @@
       mySdk = jdkOrderEntry.getJdk();
     }
 
-    @Nullable
-    @Override
-    protected VirtualFile getFileRoot(@NotNull VirtualFile file) {
-      final VirtualFile resultFromSuper = super.getFileRoot(file);
-
-      if (resultFromSuper != null) {
-        return resultFromSuper;
-      }
-      return myIndex.isInLibrarySource(file)
-             ? myIndex.getSourceRootForFile(file)
-             : null;
-    }
-
     @Override
     public boolean isForceSearchingInLibrarySources() {
       return true;
diff --git a/android/src/org/jetbrains/android/actions/AndroidProcessChooserDialog.java b/android/src/org/jetbrains/android/actions/AndroidProcessChooserDialog.java
index 3af93ae..d001f6e 100644
--- a/android/src/org/jetbrains/android/actions/AndroidProcessChooserDialog.java
+++ b/android/src/org/jetbrains/android/actions/AndroidProcessChooserDialog.java
@@ -39,7 +39,6 @@
 import com.intellij.psi.xml.XmlElement;
 import com.intellij.ui.DoubleClickListener;
 import com.intellij.ui.JBDefaultTreeCellRenderer;
-import com.intellij.ui.ListSpeedSearch;
 import com.intellij.ui.TreeSpeedSearch;
 import com.intellij.ui.components.JBCheckBox;
 import com.intellij.ui.content.Content;
@@ -464,10 +463,6 @@
   private static RunnerAndConfigurationSettings createRunConfiguration(Project project, String debugPort) {
     final RemoteConfigurationType remoteConfigurationType = RemoteConfigurationType.getInstance();
 
-    if (remoteConfigurationType == null) {
-      LOG.error("Cannot create remote configuration");
-    }
-
     final ConfigurationFactory factory = remoteConfigurationType.getFactory();
     final RunnerAndConfigurationSettings runSettings =
       RunManager.getInstance(project).createRunConfiguration(getRunConfigurationName(debugPort), factory);
diff --git a/android/src/org/jetbrains/android/compiler/AndroidAptCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidAptCompiler.java
deleted file mode 100644
index 45c3e5e..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidAptCompiler.java
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * Copyright 2000-2010 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jetbrains.android.compiler;
-
-import com.android.SdkConstants;
-import com.android.sdklib.IAndroidTarget;
-import com.intellij.compiler.CompilerWorkspaceConfiguration;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.util.Comparing;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.LocalFileSystem;
-import com.intellij.openapi.vfs.VirtualFile;
-import org.jetbrains.android.compiler.tools.AndroidApt;
-import org.jetbrains.android.dom.manifest.Manifest;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.facet.AndroidFacetConfiguration;
-import org.jetbrains.android.facet.AndroidRootUtil;
-import org.jetbrains.android.maven.AndroidMavenUtil;
-import org.jetbrains.android.sdk.AndroidPlatform;
-import org.jetbrains.android.util.AndroidBundle;
-import org.jetbrains.android.util.AndroidCommonUtils;
-import org.jetbrains.android.util.AndroidUtils;
-import org.jetbrains.android.util.JavaFilesFilter;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * Apt compiler.
- *
- * @author Alexey Efimov
- */
-public class AndroidAptCompiler implements SourceGeneratingCompiler {
-  private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidAptCompiler");
-  private static final GenerationItem[] EMPTY_GENERATION_ITEM_ARRAY = {};
-
-  @Nullable
-  @Override
-  public VirtualFile getPresentableFile(CompileContext context, Module module, VirtualFile outputRoot, VirtualFile generatedFile) {
-    return null;
-  }
-
-  public static boolean isToCompileModule(Module module, AndroidFacetConfiguration configuration) {
-    if (CompilerWorkspaceConfiguration.getInstance(module.getProject()).useOutOfProcessBuild()) {
-      return true;
-    }
-    if (!(configuration.getState().RUN_PROCESS_RESOURCES_MAVEN_TASK && AndroidMavenUtil.isMavenizedModule(module))) {
-      return true;
-    }
-    return false;
-  }
-
-  @Override
-  public GenerationItem[] getGenerationItems(CompileContext context) {
-    return ApplicationManager.getApplication().runReadAction(new PrepareAction(context));
-  }
-
-  @Override
-  public GenerationItem[] generate(final CompileContext context, final GenerationItem[] items, VirtualFile outputRootDirectory) {
-    if (items != null && items.length > 0) {
-      context.getProgressIndicator().setText(AndroidBundle.message("android.compile.messages.generating.r.java"));
-
-      if (!context.getProject().isDisposed()) {
-        return doGenerate(context, items, outputRootDirectory);
-      }
-    }
-    return EMPTY_GENERATION_ITEM_ARRAY;
-  }
-
-  private static GenerationItem[] doGenerate(final CompileContext context, GenerationItem[] items, VirtualFile outputRootDirectory) {
-    if (items == null || items.length == 0) {
-      return EMPTY_GENERATION_ITEM_ARRAY;
-    }
-
-    final String genRootPath = FileUtil.toSystemDependentName(outputRootDirectory.getPath());
-    final File genRootDir = new File(genRootPath);
-
-    List<GenerationItem> results = new ArrayList<GenerationItem>(items.length);
-    boolean toRefresh = false;
-
-    for (GenerationItem item : items) {
-      if (item instanceof AptGenerationItem) {
-        final AptGenerationItem aptItem = (AptGenerationItem)item;
-
-        if (!AndroidCompileUtil.isModuleAffected(context, aptItem.myModule)) {
-          continue;
-        }
-
-        File tmpOutputDir = null;
-        try {
-          tmpOutputDir = FileUtil.createTempDirectory("android_apt_output", "tmp");
-          Map<CompilerMessageCategory, List<String>> messages = AndroidCompileUtil.toCompilerMessageCategoryKeys(AndroidApt.compile(
-            aptItem.myAndroidTarget, aptItem.myPlatformToolsRevision, aptItem.myManifestFile.getPath(),
-            aptItem.myPackage, tmpOutputDir.getPath(), aptItem.myResourcesPaths, aptItem.myLibraryPackages,
-            aptItem.myNonConstantFields, aptItem.myProguardCfgOutputFileOsPath));
-
-          if (aptItem.myProguardCfgOutputFileOsPath != null) {
-            LocalFileSystem.getInstance().refreshAndFindFileByIoFile(new File(aptItem.myProguardCfgOutputFileOsPath));
-          }
-          toRefresh = true;
-          AndroidCompileUtil.addMessages(context, messages, aptItem.myModule);
-
-          if (messages.get(CompilerMessageCategory.ERROR).isEmpty()) {
-            if (!AndroidCommonUtils.directoriesContainSameContent(tmpOutputDir, genRootDir, JavaFilesFilter.INSTANCE)) {
-              if (genRootDir.exists() && !FileUtil.delete(genRootDir)) {
-                context.addMessage(CompilerMessageCategory.ERROR, "Cannot delete directory " + genRootPath, null, -1, -1);
-                continue;
-              }
-              final File parent = genRootDir.getParentFile();
-              if (parent != null && !parent.exists() && !parent.mkdirs()) {
-                context.addMessage(CompilerMessageCategory.ERROR, "Cannot create directory " + parent.getPath(), null, -1, -1);
-                continue;
-              }
-              // 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);
-          }
-        }
-        catch (final IOException e) {
-          LOG.info(e);
-          ApplicationManager.getApplication().runReadAction(new Runnable() {
-            @Override
-            public void run() {
-              if (context.getProject().isDisposed()) return;
-              context.addMessage(CompilerMessageCategory.ERROR, "I/O error: " + e.getMessage(), null, -1, -1);
-            }
-          });
-        }
-        finally {
-          if (tmpOutputDir != null) {
-            FileUtil.delete(tmpOutputDir);
-          }
-        }
-      }
-    }
-
-    if (toRefresh) {
-      outputRootDirectory.refresh(false, true);
-    }
-    return results.toArray(new GenerationItem[results.size()]);
-  }
-
-  @Override
-  @NotNull
-  public String getDescription() {
-    return FileUtil.getNameWithoutExtension(SdkConstants.FN_AAPT);
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Override
-  public ValidityState createValidityState(DataInput is) throws IOException {
-    return new MyValidityState(is);
-  }
-
-  @Nullable
-  public static VirtualFile getResourceDirForApkCompiler(@NotNull AndroidFacet facet) {
-    return facet.getProperties().USE_CUSTOM_APK_RESOURCE_FOLDER
-           ? getCustomResourceDirForApt(facet)
-           : AndroidRootUtil.getResourceDir(facet);
-  }
-
-  final static class AptGenerationItem implements GenerationItem {
-    final Module myModule;
-    final VirtualFile myManifestFile;
-    final String[] myResourcesPaths;
-    final IAndroidTarget myAndroidTarget;
-    
-    final String myPackage;
-    final String[] myLibraryPackages;
-    final boolean myNonConstantFields;
-
-    final int myPlatformToolsRevision;
-    private final MyValidityState myValidityState;
-    private final String myProguardCfgOutputFileOsPath;
-
-    private AptGenerationItem(@NotNull Module module,
-                              @NotNull VirtualFile manifestFile,
-                              @NotNull String[] resourcesPaths,
-                              @NotNull IAndroidTarget target,
-                              int platformToolsRevision,
-                              @NotNull String aPackage,
-                              @NotNull String[] libPackages,
-                              boolean nonConstantFields,
-                              @Nullable String proguardCfgOutputFileOsPath) {
-      myModule = module;
-      myManifestFile = manifestFile;
-      myResourcesPaths = resourcesPaths;
-      myAndroidTarget = target;
-      myPackage = aPackage;
-      myLibraryPackages = libPackages;
-      myNonConstantFields = nonConstantFields;
-      myPlatformToolsRevision = platformToolsRevision;
-      myProguardCfgOutputFileOsPath = proguardCfgOutputFileOsPath;
-      myValidityState = new MyValidityState(myModule, Collections.<String>emptySet(), myPlatformToolsRevision, myNonConstantFields,
-                                            proguardCfgOutputFileOsPath != null ? proguardCfgOutputFileOsPath : "");
-    }
-
-    @Override
-    public String getPath() {
-      return "FAKE";
-    }
-
-    @Override
-    public ValidityState getValidityState() {
-      return myValidityState;
-    }
-
-    @Override
-    public Module getModule() {
-      return myModule;
-    }
-
-    @Override
-    public boolean isTestSource() {
-      return false;
-    }
-  }
-
-  @Nullable
-  public static VirtualFile getCustomResourceDirForApt(@NotNull AndroidFacet facet) {
-    return AndroidRootUtil.getFileByRelativeModulePath(facet.getModule(), facet.getProperties().CUSTOM_APK_RESOURCE_FOLDER, false);
-  }
-
-  private static final class PrepareAction implements Computable<GenerationItem[]> {
-    private final CompileContext myContext;
-
-    public PrepareAction(CompileContext context) {
-      myContext = context;
-    }
-
-    @Override
-    public GenerationItem[] compute() {
-      if (myContext.getProject().isDisposed()) {
-        return EMPTY_GENERATION_ITEM_ARRAY;
-      }
-      Module[] modules = ModuleManager.getInstance(myContext.getProject()).getModules();
-      List<GenerationItem> items = new ArrayList<GenerationItem>();
-      for (Module module : modules) {
-        AndroidFacet facet = AndroidFacet.getInstance(module);
-        if (facet != null) {
-          AndroidFacetConfiguration configuration = facet.getConfiguration();
-          if (!isToCompileModule(module, configuration) ||
-              AndroidCompileUtil.isLibraryWithBadCircularDependency(facet)) {
-            continue;
-          }
-
-          final AndroidPlatform platform = configuration.getAndroidPlatform();
-          if (platform == null) {
-            myContext.addMessage(CompilerMessageCategory.ERROR,
-                                 AndroidBundle.message("android.compilation.error.specify.platform", module.getName()), null, -1, -1);
-            continue;
-          }
-
-          final IAndroidTarget target = platform.getTarget();
-          final int platformToolsRevision = platform.getSdkData().getPlatformToolsRevision();
-
-          String[] resPaths = AndroidCompileUtil.collectResourceDirs(facet, false, myContext);
-          if (resPaths.length <= 0) {
-            continue;
-          }
-
-          VirtualFile manifestFile = AndroidRootUtil.getManifestFileForCompiler(facet);
-          if (manifestFile == null) {
-            myContext.addMessage(CompilerMessageCategory.ERROR,
-                                 AndroidBundle.message("android.compilation.error.manifest.not.found", module.getName()), null, -1, -1);
-            continue;
-          }
-
-          Manifest manifest = AndroidUtils.loadDomElement(module, manifestFile, Manifest.class);
-          if (manifest == null) {
-            myContext.addMessage(CompilerMessageCategory.ERROR, "Cannot parse file", manifestFile.getUrl(), -1, -1);
-            continue;
-          }
-
-          String packageName = manifest.getPackage().getValue();
-          if (packageName != null) {
-            packageName = packageName.trim();
-          }
-          if (packageName == null || packageName.length() <= 0) {
-            myContext.addMessage(CompilerMessageCategory.ERROR, AndroidBundle.message("package.not.found.error"), manifestFile.getUrl(),
-                                 -1, -1);
-            continue;
-          }
-
-          if (!AndroidCommonUtils.contains2Identifiers(packageName)) {
-            final String message = "[" + module.getName() + "] Package name must contain at least 2 segments";
-            myContext.addMessage(facet.isLibraryProject() ? CompilerMessageCategory.WARNING : CompilerMessageCategory.ERROR,
-                                 message, manifestFile.getUrl(), -1, -1);
-            continue;
-          }
-          final String[] libPackages = AndroidCompileUtil.getLibPackages(module, packageName);
-
-          final Module circularDepLibWithSamePackage = AndroidCompileUtil.findCircularDependencyOnLibraryWithSamePackage(facet);
-          if (circularDepLibWithSamePackage != null && !facet.isLibraryProject()) {
-            myContext.addMessage(CompilerMessageCategory.WARNING,
-                                 AndroidBundle.message("android.compilation.warning.circular.app.dependency",
-                                                       packageName, module.getName(),
-                                                       circularDepLibWithSamePackage.getName()), null, -1, -1);
-          }
-          final boolean generateNonFinalFields = facet.isLibraryProject() || circularDepLibWithSamePackage != null;
-
-          final VirtualFile outputDirForDex = AndroidDexCompiler.getOutputDirectoryForDex(module);
-          final String proguardCfgOutputFileOsPath =
-            AndroidCompileUtil.getProguardConfigFilePathIfShouldRun(facet, myContext) != null
-            ? FileUtil.toSystemDependentName(outputDirForDex.getPath() + '/' + AndroidCommonUtils.PROGUARD_CFG_OUTPUT_FILE_NAME)
-            : null;
-
-          items.add(new AptGenerationItem(module, manifestFile, resPaths, target, platformToolsRevision, packageName, libPackages,
-                                          generateNonFinalFields, proguardCfgOutputFileOsPath));
-        }
-      }
-      return items.toArray(new GenerationItem[items.size()]);
-    }
-  }
-
-  private static class MyValidityState extends ResourceNamesValidityState {
-    private final String myCustomGenPathR;
-    private final Set<String> myNonExistingFiles;
-    private final int myPlatformToolsRevision;
-    private final boolean myNonConstantFields;
-    private final String myProguardCfgOutputFileOsPath;
-
-    MyValidityState(@NotNull Module module,
-                    @NotNull Set<String> nonExistingFiles,
-                    int platformToolsRevision,
-                    boolean nonConstantFields,
-                    @NotNull String proguardCfgOutputFileOsPath) {
-      super(module);
-      myNonExistingFiles = nonExistingFiles;
-      myPlatformToolsRevision = platformToolsRevision;
-      myNonConstantFields = nonConstantFields;
-      myProguardCfgOutputFileOsPath = proguardCfgOutputFileOsPath;
-      AndroidFacet facet = AndroidFacet.getInstance(module);
-      if (facet == null) {
-        myCustomGenPathR = "";
-        return;
-      }
-      AndroidFacetConfiguration configuration = facet.getConfiguration();
-      myCustomGenPathR = configuration.getState().GEN_FOLDER_RELATIVE_PATH_APT;
-    }
-
-    public MyValidityState(DataInput is) throws IOException {
-      super(is);
-      String path = is.readUTF();
-      myCustomGenPathR = path != null ? path : "";
-
-      myNonExistingFiles = Collections.emptySet();
-      myPlatformToolsRevision = is.readInt();
-      myNonConstantFields = is.readBoolean();
-      myProguardCfgOutputFileOsPath = is.readUTF();
-    }
-
-    @Override
-    public boolean equalsTo(ValidityState otherState) {
-      if (!(otherState instanceof MyValidityState)) {
-        return false;
-      }
-
-      final MyValidityState otherState1 = (MyValidityState)otherState;
-      if (!otherState1.myNonExistingFiles.equals(myNonExistingFiles)) {
-        return false;
-      }
-      if (myPlatformToolsRevision != otherState1.myPlatformToolsRevision) {
-        return false;
-      }
-      if (myNonConstantFields != otherState1.myNonConstantFields) {
-        return false;
-      }
-      if (!Comparing.equal(myProguardCfgOutputFileOsPath, otherState1.myProguardCfgOutputFileOsPath)) {
-        return false;
-      }
-      if (!super.equalsTo(otherState)) {
-        return false;
-      }
-      return Comparing.equal(myCustomGenPathR, otherState1.myCustomGenPathR);
-    }
-
-    @Override
-    public void save(DataOutput os) throws IOException {
-      super.save(os);
-      os.writeUTF(myCustomGenPathR);
-      os.writeInt(myPlatformToolsRevision);
-      os.writeBoolean(myNonConstantFields);
-      os.writeUTF(myProguardCfgOutputFileOsPath);
-    }
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/AndroidAutogenerator.java b/android/src/org/jetbrains/android/compiler/AndroidAutogenerator.java
index d022de3..ba84ba0 100644
--- a/android/src/org/jetbrains/android/compiler/AndroidAutogenerator.java
+++ b/android/src/org/jetbrains/android/compiler/AndroidAutogenerator.java
@@ -15,13 +15,11 @@
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.DumbService;
 import com.intellij.openapi.project.Project;
+import com.intellij.openapi.roots.*;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.LocalFileSystem;
-import com.intellij.openapi.vfs.ReadonlyStatusHandler;
-import com.intellij.openapi.vfs.VfsUtilCore;
-import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.openapi.vfs.*;
 import com.intellij.psi.search.FilenameIndex;
 import com.intellij.util.containers.HashMap;
 import com.intellij.util.containers.HashSet;
@@ -62,7 +60,6 @@
     }
     switch (mode) {
       case AAPT:
-        return AndroidAptCompiler.isToCompileModule(facet.getModule(), facet.getConfiguration());
       case AIDL:
       case RENDERSCRIPT:
       case BUILDCONFIG:
@@ -487,7 +484,7 @@
             return null;
           }
 
-          final VirtualFile[] sourceRoots = AndroidPackagingCompiler.getSourceRootsForModuleAndDependencies(module, false);
+          final VirtualFile[] sourceRoots = getSourceRootsForModuleAndDependencies(module, false);
           final String[] sourceRootOsPaths = AndroidCompileUtil.toOsPaths(sourceRoots);
 
           final String outFileOsPath = FileUtil.toSystemDependentName(
@@ -618,7 +615,7 @@
         final VirtualFile vTempOutDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(tempOutDir);
 
         final String depFolderPath =
-          vTempOutDir != null ? AndroidRenderscriptCompiler.getDependencyFolder(context.getProject(), file, vTempOutDir) : null;
+          vTempOutDir != null ? getDependencyFolder(context.getProject(), file, vTempOutDir) : null;
 
         final Map<CompilerMessageCategory, List<String>> messages = AndroidCompileUtil.toCompilerMessageCategoryKeys(
           AndroidRenderscript
@@ -693,13 +690,8 @@
     ApplicationManager.getApplication().invokeAndWait(new Runnable() {
       @Override
       public void run() {
-        ApplicationManager.getApplication().runReadAction(new Runnable() {
-          @Override
-          public void run() {
-            run[0] = !project.isDisposed() &&
-                     ReadonlyStatusHandler.ensureFilesWritable(project, filesToCheck.toArray(new VirtualFile[filesToCheck.size()]));
-          }
-        });
+        run[0] = !project.isDisposed() &&
+                 ReadonlyStatusHandler.ensureFilesWritable(project, filesToCheck.toArray(new VirtualFile[filesToCheck.size()]));
       }
     }, ModalityState.defaultModalityState());
 
@@ -724,6 +716,61 @@
     }
   }
 
+  private static void fillSourceRoots(@NotNull Module module,
+                                      @NotNull Set<Module> visited,
+                                      @NotNull Set<VirtualFile> result,
+                                      boolean includingTests) {
+    visited.add(module);
+    final AndroidFacet facet = AndroidFacet.getInstance(module);
+    VirtualFile resDir = facet != null ? AndroidRootUtil.getResourceDir(facet) : null;
+    ModuleRootManager manager = ModuleRootManager.getInstance(module);
+    for (VirtualFile sourceRoot : manager.getSourceRoots(includingTests)) {
+      if (!Comparing.equal(resDir, sourceRoot)) {
+        result.add(sourceRoot);
+      }
+    }
+    for (OrderEntry entry : manager.getOrderEntries()) {
+      if (entry instanceof ModuleOrderEntry) {
+        ModuleOrderEntry moduleOrderEntry = (ModuleOrderEntry)entry;
+        DependencyScope scope = moduleOrderEntry.getScope();
+        if (scope == DependencyScope.COMPILE) {
+          Module depModule = moduleOrderEntry.getModule();
+          if (depModule != null && !visited.contains(depModule)) {
+            fillSourceRoots(depModule, visited, result, false);
+          }
+        }
+      }
+    }
+  }
+
+  @NotNull
+  public static VirtualFile[] getSourceRootsForModuleAndDependencies(@NotNull Module module, boolean includingTests) {
+    Set<VirtualFile> result = new HashSet<VirtualFile>();
+    fillSourceRoots(module, new HashSet<Module>(), result, includingTests);
+    return VfsUtil.toVirtualFileArray(result);
+  }
+
+  @Nullable
+  static String getDependencyFolder(@NotNull final Project project,
+                                    @NotNull final VirtualFile sourceFile,
+                                    @NotNull final VirtualFile genFolder) {
+    final ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex();
+
+    final VirtualFile sourceRoot = index.getSourceRootForFile(sourceFile);
+    if (sourceRoot == null) {
+      return null;
+    }
+
+    final VirtualFile parent = sourceFile.getParent();
+    if (Comparing.equal(parent, sourceRoot)) {
+      return genFolder.getPath();
+    }
+
+    final String relativePath = VfsUtilCore.getRelativePath(sourceFile.getParent(), sourceRoot, '/');
+    assert relativePath != null;
+    return genFolder.getPath() + '/' + relativePath;
+  }
+
   private static class AptAutogenerationItem {
     final String myPackage;
     final String myOutputDirOsPath;
diff --git a/android/src/org/jetbrains/android/compiler/AndroidBuildConfigGeneratingCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidBuildConfigGeneratingCompiler.java
deleted file mode 100644
index 3614248..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidBuildConfigGeneratingCompiler.java
+++ /dev/null
@@ -1,224 +0,0 @@
-package org.jetbrains.android.compiler;
-
-import com.android.sdklib.internal.build.BuildConfigGenerator;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.Ref;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.xml.NanoXmlUtil;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.facet.AndroidRootUtil;
-import org.jetbrains.android.util.AndroidBundle;
-import org.jetbrains.android.util.AndroidCommonUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Eugene.Kudelevsky
- */
-public class AndroidBuildConfigGeneratingCompiler implements SourceGeneratingCompiler {
-  private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidBuildConfigGeneratingCompiler");
-  private static final String MANIFEST_LOCATION = NanoXmlUtil.createLocation("manifest");
-
-  @Nullable
-  @Override
-  public VirtualFile getPresentableFile(CompileContext context, Module module, VirtualFile outputRoot, VirtualFile generatedFile) {
-    return null;
-  }
-
-  @Override
-  public GenerationItem[] getGenerationItems(final CompileContext context) {
-    return ApplicationManager.getApplication().runReadAction(new Computable<GenerationItem[]>() {
-      @Override
-      public GenerationItem[] compute() {
-        final List<GenerationItem> result = new ArrayList<GenerationItem>();
-
-        for (Module module : ModuleManager.getInstance(context.getProject()).getModules()) {
-          final AndroidFacet facet = AndroidFacet.getInstance(module);
-          if (facet == null || AndroidCompileUtil.isLibraryWithBadCircularDependency(facet)) {
-            continue;
-          }
-
-          final VirtualFile manifestFile = AndroidRootUtil.getManifestFileForCompiler(facet);
-          if (manifestFile == null) {
-            context.addMessage(CompilerMessageCategory.ERROR,
-                               AndroidBundle.message("android.compilation.error.manifest.not.found", module.getName()), null, -1, -1);
-            continue;
-          }
-
-          String packageName;
-          try {
-            // we cannot use DOM here because custom manifest file can be excluded (ex. it can be located in /target/ folder)
-            packageName = parsePackageName(manifestFile);
-          }
-          catch (IOException e) {
-            context.addMessage(CompilerMessageCategory.ERROR, "I/O error: " + e.getMessage(), null, -1, -1);
-            continue;
-          }
-
-          if (packageName != null) {
-            packageName = packageName.trim();
-          }
-          if (packageName == null || packageName.length() <= 0) {
-            context.addMessage(CompilerMessageCategory.ERROR, AndroidBundle.message("package.not.found.error"), manifestFile.getUrl(),
-                               -1, -1);
-            continue;
-          }
-          final boolean debug = !AndroidCompileUtil.isReleaseBuild(context);
-          result.add(new MyGenerationItem(module, packageName, debug));
-
-          for (String libPackage : AndroidCompileUtil.getLibPackages(module, packageName)) {
-            result.add(new MyGenerationItem(module, libPackage, debug));
-          }
-        }
-        return result.toArray(new GenerationItem[result.size()]);
-      }
-    });
-  }
-
-  @Override
-  public GenerationItem[] generate(CompileContext context,
-                                   GenerationItem[] items,
-                                   VirtualFile outputRootDirectory) {
-    if (items == null || items.length == 0) {
-      return new GenerationItem[0];
-    }
-    context.getProgressIndicator().setText("Generating BuildConfig.java...");
-
-    final String genFolderOsPath = FileUtil.toSystemDependentName(outputRootDirectory.getPath());
-    final List<GenerationItem> result = new ArrayList<GenerationItem>();
-
-    for (GenerationItem item : items) {
-      final MyGenerationItem genItem = (MyGenerationItem)item;
-      final BuildConfigGenerator generator = new BuildConfigGenerator(genFolderOsPath, genItem.myPackage, genItem.myDebug);
-      try {
-        generator.generate();
-        result.add(genItem);
-      }
-      catch (IOException e) {
-        context.addMessage(CompilerMessageCategory.ERROR, "I/O error: " + e.getMessage(), null, -1, -1);
-        LOG.info(e);
-      }
-    }
-
-    if (result.size() > 0) {
-      AndroidCompileUtil.markDirtyAndRefresh(outputRootDirectory, true);
-    }
-    return result.toArray(new GenerationItem[result.size()]);
-  }
-
-  @Nullable
-  private static String parsePackageName(@NotNull VirtualFile manifestFile) throws IOException {
-    final Ref<String> packageNameRef = Ref.create(null);
-
-    NanoXmlUtil.parse(manifestFile.getInputStream(), new NanoXmlUtil.BaseXmlBuilder() {
-      @Override
-      public void addAttribute(String key, String nsPrefix, String nsURI, String value, String type)
-        throws Exception {
-        super.addAttribute(key, nsPrefix, nsURI, value, type);
-
-        if (AndroidCommonUtils.PACKAGE_MANIFEST_ATTRIBUTE.equals(key) &&
-            MANIFEST_LOCATION.equals(getLocation())) {
-          packageNameRef.set(value);
-          stop();
-        }
-      }
-
-      @Override
-      public void elementAttributesProcessed(String name, String nsPrefix, String nsURI) throws Exception {
-        super.elementAttributesProcessed(name, nsPrefix, nsURI);
-        stop();
-      }
-    });
-    return packageNameRef.get();
-  }
-
-  @NotNull
-  @Override
-  public String getDescription() {
-    return "Android BuildConfig Generator";
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Override
-  public ValidityState createValidityState(DataInput in) throws IOException {
-    return new MyValidityState(in);
-  }
-
-  private static class MyGenerationItem implements GenerationItem {
-    final Module myModule;
-    final String myPackage;
-    final boolean myDebug;
-
-    private MyGenerationItem(@NotNull Module module, @NotNull String aPackage, boolean debug) {
-      myModule = module;
-      myPackage = aPackage;
-      myDebug = debug;
-    }
-
-    @Override
-    public String getPath() {
-      return myPackage.replace('.', '/') + '/' + BuildConfigGenerator.BUILD_CONFIG_NAME;
-    }
-
-    @Override
-    public ValidityState getValidityState() {
-      return new MyValidityState(myPackage, myDebug);
-    }
-
-    @Override
-    public Module getModule() {
-      return myModule;
-    }
-
-    @Override
-    public boolean isTestSource() {
-      return false;
-    }
-  }
-
-  private static class MyValidityState implements ValidityState {
-    private final String myPackage;
-    private boolean myDebug;
-
-    private MyValidityState(DataInput in) throws IOException {
-      myPackage = in.readUTF();
-      myDebug = in.readBoolean();
-    }
-
-    private MyValidityState(@NotNull String aPackage, boolean debug) {
-      myPackage = aPackage;
-      myDebug = debug;
-    }
-
-    @Override
-    public boolean equalsTo(ValidityState otherState) {
-      if (!(otherState instanceof MyValidityState)) {
-        return false;
-      }
-      final MyValidityState otherState1 = (MyValidityState)otherState;
-      return otherState1.myPackage.equals(myPackage) && otherState1.myDebug == myDebug;
-    }
-
-    @Override
-    public void save(DataOutput out) throws IOException {
-      out.writeUTF(myPackage);
-      out.writeBoolean(myDebug);
-    }
-  }
-}
\ No newline at end of file
diff --git a/android/src/org/jetbrains/android/compiler/AndroidBuildTargetScopeProvider.java b/android/src/org/jetbrains/android/compiler/AndroidBuildTargetScopeProvider.java
index 7ec9b17..e786b8c 100644
--- a/android/src/org/jetbrains/android/compiler/AndroidBuildTargetScopeProvider.java
+++ b/android/src/org/jetbrains/android/compiler/AndroidBuildTargetScopeProvider.java
@@ -35,7 +35,7 @@
         return true;
       }
     }
-    final String proguardCfgPathsStr = scope.getUserData(AndroidProguardCompiler.PROGUARD_CFG_PATHS_KEY);
+    final String proguardCfgPathsStr = scope.getUserData(AndroidCompileUtil.PROGUARD_CFG_PATHS_KEY);
     if (proguardCfgPathsStr != null && proguardCfgPathsStr.length() > 0) {
       return true;
     }
diff --git a/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java b/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java
index 19ea7f9..0592afc 100644
--- a/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java
+++ b/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java
@@ -30,12 +30,13 @@
 import com.intellij.notification.NotificationType;
 import com.intellij.notification.Notifications;
 import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.compiler.Compiler;
+import com.intellij.openapi.compiler.CompileContext;
+import com.intellij.openapi.compiler.CompileScope;
+import com.intellij.openapi.compiler.CompilerManager;
+import com.intellij.openapi.compiler.CompilerMessageCategory;
 import com.intellij.openapi.compiler.options.ExcludeEntryDescription;
 import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration;
 import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.extensions.Extensions;
 import com.intellij.openapi.module.ModifiableModuleModel;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.ModuleManager;
@@ -52,7 +53,6 @@
 import com.intellij.openapi.util.Ref;
 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;
@@ -99,6 +99,7 @@
 
   @NonNls public static final String OLD_PROGUARD_CFG_FILE_NAME = "proguard.cfg";
   public static final String UNSIGNED_SUFFIX = ".unsigned";
+  public static Key<String> PROGUARD_CFG_PATHS_KEY = Key.create(AndroidCommonUtils.PROGUARD_CFG_PATHS_OPTION);
 
   private AndroidCompileUtil() {
   }
@@ -459,7 +460,7 @@
         if (project.isDisposed()) return;
         CompilerTask task = new CompilerTask(project, "Android auto-generation", true, false, true, true);
         CompileScope scope = new ModuleCompileScope(module, false);
-        contextWrapper[0] = new CompileContextImpl(project, task, scope, null, false, false);
+        contextWrapper[0] = new CompileContextImpl(project, task, scope, false, false);
       }
     });
     CompileContext context = contextWrapper[0];
@@ -526,51 +527,6 @@
     }
   }
 
-  @NotNull
-  public static String[] collectResourceDirs(AndroidFacet facet, boolean collectResCacheDirs, @Nullable CompileContext context) {
-    final Project project = facet.getModule().getProject();
-    final IntermediateOutputCompiler pngFilesCachingCompiler =
-      collectResCacheDirs ? Extensions.findExtension(Compiler.EP_NAME, project, AndroidPngFilesCachingCompiler.class) : null;
-
-    if (collectResCacheDirs) {
-      assert pngFilesCachingCompiler != null;
-    }
-
-    final List<String> result = new ArrayList<String>();
-
-    doCollectResourceDirs(facet, collectResCacheDirs, result, context);
-
-    for (AndroidFacet depFacet : AndroidUtils.getAllAndroidDependencies(facet.getModule(), true)) {
-      doCollectResourceDirs(depFacet, collectResCacheDirs, result, context);
-    }
-    return ArrayUtil.toStringArray(result);
-  }
-
-  private static void doCollectResourceDirs(AndroidFacet facet, boolean collectResCacheDirs, List<String> result, CompileContext context) {
-    final Module module = facet.getModule();
-
-    if (collectResCacheDirs) {
-      final AndroidPlatform platform = facet.getConfiguration().getAndroidPlatform();
-      final int platformToolsRevision = platform != null ? platform.getSdkData().getPlatformToolsRevision() : -1;
-
-      if (platformToolsRevision < 0 || platformToolsRevision > 7) {
-        // png cache is supported since platform-tools-r8
-        final String resCacheDirOsPath = findResourcesCacheDirectory(module, false, context);
-        if (resCacheDirOsPath != null) {
-          result.add(resCacheDirOsPath);
-        }
-        else {
-          LOG.info("PNG cache not found for module " + module.getName());
-        }
-      }
-    }
-
-    final VirtualFile resourcesDir = AndroidAptCompiler.getResourceDirForApkCompiler(facet);
-    if (resourcesDir != null) {
-      result.add(resourcesDir.getPath());
-    }
-  }
-
   @Nullable
   public static String findResourcesCacheDirectory(@NotNull Module module, boolean createIfNotFound, @Nullable CompileContext context) {
     final Project project = module.getProject();
@@ -685,22 +641,10 @@
       (createIfNotExist ? genRootsToCreate : genRootsToInit).add(renderscriptGenRootPath);
     }
 
-    if (AndroidAptCompiler.isToCompileModule(module, facet.getConfiguration())) {
-      final String aptGenRootPath = AndroidRootUtil.getAptGenSourceRootPath(facet);
+    final String aptGenRootPath = AndroidRootUtil.getAptGenSourceRootPath(facet);
 
-      if (aptGenRootPath != null) {
-        genRootsToCreate.add(aptGenRootPath);
-      }
-    }
-    else {
-      // we need to include generated-sources/r to compilation, because it contains R.java generated by Maven,
-      // which should be used in Maven-based resource processing mode
-      final VirtualFile aptSourceRoot = initializeGenSourceRoot(model, AndroidRootUtil.getAptGenSourceRootPath(facet),
-                                                                true, false, modelChangedFlag);
-      if (aptSourceRoot != null) {
-        excludeAllBuildConfigsFromCompilation(facet, aptSourceRoot);
-      }
-      includeAaptGenSourceRootToCompilation(facet);
+    if (aptGenRootPath != null) {
+      genRootsToCreate.add(aptGenRootPath);
     }
     final String aidlGenRootPath = AndroidRootUtil.getAidlGenSourceRootPath(facet);
 
@@ -773,12 +717,6 @@
     if (sourceRoot != null && excludeInNonExternalMode) {
       final Module module = model.getModule();
       final CompilerWorkspaceConfiguration config = CompilerWorkspaceConfiguration.getInstance(module.getProject());
-
-      // In JPS generated roots are excluded by AndroidExcludeJavaSourceRootProvider,
-      // so we don't need to mark them in the project model
-      if (!config.useOutOfProcessBuild()) {
-        excludeFromCompilation(module.getProject(), sourceRoot);
-      }
     }
     return sourceRoot;
   }
@@ -850,7 +788,7 @@
   @Nullable
   public static ProguardRunningOptions getProguardConfigFilePathIfShouldRun(@NotNull AndroidFacet facet, CompileContext context) {
     // wizard
-    String pathsStr = context.getCompileScope().getUserData(AndroidProguardCompiler.PROGUARD_CFG_PATHS_KEY);
+    String pathsStr = context.getCompileScope().getUserData(PROGUARD_CFG_PATHS_KEY);
     if (pathsStr != null) {
       final String[] paths = pathsStr.split(File.pathSeparator);
 
@@ -965,48 +903,13 @@
 
   @Nullable
   public static String getUnsignedApkPath(@NotNull AndroidFacet facet) {
-    final boolean useCompileServer = CompilerWorkspaceConfiguration.getInstance(
-      facet.getModule().getProject()).useOutOfProcessBuild();
-    final String apkPath = AndroidRootUtil.getApkPath(facet);
-
-    if (apkPath != null) {
-      return useCompileServer
-             ? apkPath
-             : AndroidCommonUtils.addSuffixToFileName(apkPath, UNSIGNED_SUFFIX);
-    }
-    return null;
-  }
-
-  @Nullable
-  public static <T> T handleExceptionError(@NotNull CompileContext context,
-                                           @NotNull String messagePrefix,
-                                           @NotNull Exception e) {
-    reportException(context, messagePrefix, e);
-    return null;
+    return AndroidRootUtil.getApkPath(facet);
   }
 
   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();
-      }
-    }
-  }
-
   @Nullable
   public static String getAaptManifestPackage(@NotNull AndroidFacet facet) {
     if (facet.getProperties().USE_CUSTOM_MANIFEST_PACKAGE) {
diff --git a/android/src/org/jetbrains/android/compiler/AndroidDependencyProcessor.java b/android/src/org/jetbrains/android/compiler/AndroidDependencyProcessor.java
deleted file mode 100644
index 024e099..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidDependencyProcessor.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.jetbrains.android.compiler;
-
-import com.intellij.compiler.DependencyProcessor;
-import com.intellij.compiler.make.*;
-import com.intellij.facet.ProjectFacetManager;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.CompileContext;
-import com.intellij.openapi.compiler.ex.CompileContextEx;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.*;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.util.containers.HashSet;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.util.AndroidCommonUtils;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Set;
-
-/**
- * @author Eugene.Kudelevsky
- */
-public class AndroidDependencyProcessor implements DependencyProcessor {
-  @Override
-  public void processDependencies(final CompileContext context, int classQualifiedName, final CachingSearcher searcher)
-    throws CacheCorruptedException {
-    if (!(context instanceof CompileContextEx)) {
-      return;
-    }
-    final Project project = context.getProject();
-
-    if (!ProjectFacetManager.getInstance(project).hasFacets(AndroidFacet.ID)) {
-      return;
-    }
-    final DependencyCache depCache = ((CompileContextEx)context).getDependencyCache();
-    final Cache cache = depCache.getCache();
-    final String path = cache.getPath(classQualifiedName);
-    final String classFileName = new File(path).getName();
-
-    if (!AndroidCommonUtils.R_PATTERN.matcher(classFileName).matches()) {
-      return;
-    }
-    final String qName = depCache.resolve(classQualifiedName);
-    final int idx = qName.indexOf('$');
-    final String topLevelClassName = idx < 0 ? qName : qName.substring(0, idx);
-    final Set<String> qNamesToMark = new HashSet<String>();
-
-    ApplicationManager.getApplication().runReadAction(new Runnable() {
-      @Override
-      public void run() {
-        final PsiClass[] classes =
-          JavaPsiFacade.getInstance(project).findClasses(topLevelClassName, GlobalSearchScope.projectScope(project));
-
-        for (PsiClass aClass : classes) {
-          final Collection<PsiReference> references = searcher.findReferences(aClass, true);
-
-          for (PsiReference reference : references) {
-            final PsiClass ownerClass = getOwnerClass(reference.getElement());
-            if (ownerClass != null && !ownerClass.equals(aClass)) {
-              final String ownerClassQName = ownerClass.getQualifiedName();
-
-              if (ownerClassQName != null) {
-                qNamesToMark.add(ownerClassQName);
-              }
-            }
-          }
-        }
-      }
-    });
-
-    for (String toMark : qNamesToMark) {
-      final int qualifiedName = depCache.getSymbolTable().getId(toMark);
-      depCache.markClass(qualifiedName);
-    }
-  }
-
-  @Nullable
-  private static PsiClass getOwnerClass(PsiElement element) {
-    while (!(element instanceof PsiFile) && element != null) {
-      if (element instanceof PsiClass && element.getParent() instanceof PsiJavaFile) {
-        return (PsiClass)element;
-      }
-      element = element.getParent();
-    }
-    return null;
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/AndroidExternalApklibExtractingCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidExternalApklibExtractingCompiler.java
deleted file mode 100644
index c6235be..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidExternalApklibExtractingCompiler.java
+++ /dev/null
@@ -1,249 +0,0 @@
-package org.jetbrains.android.compiler;
-
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.compiler.ex.CompileContextEx;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.LocalFileSystem;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.containers.HashSet;
-import com.intellij.util.io.ZipUtil;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.facet.AndroidRootUtil;
-import org.jetbrains.android.maven.AndroidExternalApklibDependenciesManager;
-import org.jetbrains.android.maven.AndroidMavenUtil;
-import org.jetbrains.android.util.AndroidBundle;
-import org.jetbrains.android.util.AndroidUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.DataInput;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-/**
- * @author Eugene.Kudelevsky
- */
-public class AndroidExternalApklibExtractingCompiler implements SourceGeneratingCompiler {
-  private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidExternalApklibExtractingCompiler");
-  
-  @Nullable
-  @Override
-  public VirtualFile getPresentableFile(CompileContext context, Module module, VirtualFile outputRoot, VirtualFile generatedFile) {
-    return null;
-  }
-
-  @Override
-  public GenerationItem[] getGenerationItems(final CompileContext context) {
-    return ApplicationManager.getApplication().runReadAction(new Computable<GenerationItem[]>() {
-      @Override
-      public GenerationItem[] compute() {
-        final List<GenerationItem> result = new ArrayList<GenerationItem>();
-
-        for (Module module : ModuleManager.getInstance(context.getProject()).getModules()) {
-          final AndroidFacet facet = AndroidFacet.getInstance(module);
-          if (facet == null || !facet.isLibraryProject()) {
-            continue;
-          }
-
-          final String mavenIdStr = AndroidMavenUtil.getMavenIdStringByExtApklibModule(facet.getModule());
-          if (mavenIdStr == null) {
-            continue;
-          }
-
-          final AndroidExternalApklibDependenciesManager manager =
-            AndroidExternalApklibDependenciesManager.getInstance(context.getProject());
-          final String artifactFilePath = manager.getArtifactFilePath(mavenIdStr);
-          
-          if (artifactFilePath == null) {
-            context.addMessage(CompilerMessageCategory.ERROR,
-                               "Cannot find artifact file for generated module " + module.getName() + ". Try to force reimport Maven model",
-                               null, -1, -1);
-            continue;
-          }
-
-          final VirtualFile root = AndroidRootUtil.getMainContentRoot(facet);
-          if (root == null) {
-            context.addMessage(CompilerMessageCategory.ERROR, "Cannot find main root in generated module containing AndroidManifest.xml" +
-                                                              module.getName() +
-                                                              ". Try to force reimport Maven model", null, -1, -1);
-            continue;
-          }
-
-          result.add(new MyGenerationItem(module, FileUtil.toSystemDependentName(root.getPath()),
-                                          FileUtil.toSystemDependentName(artifactFilePath)));
-        }
-
-        return result.toArray(new GenerationItem[result.size()]);
-      }
-    });
-  }
-
-  @Override
-  public GenerationItem[] generate(CompileContext context,
-                                   GenerationItem[] items,
-                                   VirtualFile outputRootDirectory) {
-    if (items == null || items.length == 0) {
-      return new GenerationItem[0];
-    }
-
-    context.getProgressIndicator().setText(AndroidBundle.message("android.compile.messages.processing.external.apklib.dependencies"));
-
-    final GenerationItem[] generatedItems = doGenerate(context, items);
-    final Set<VirtualFile> generatedVFiles = new HashSet<VirtualFile>();
-    final HashSet<VirtualFile> visited = new HashSet<VirtualFile>();
-
-    for (GenerationItem item : generatedItems) {
-      final MyGenerationItem genItem = (MyGenerationItem)item;
-      final File contentRoot = new File(genItem.getGenContentRootPath());
-      final VirtualFile vContentRoot = LocalFileSystem.getInstance().findFileByIoFile(contentRoot);
-
-      if (vContentRoot != null) {
-        vContentRoot.refresh(false, true);
-        final VirtualFile vSrcRoot = vContentRoot.findChild(AndroidMavenUtil.APK_LIB_ARTIFACT_SOURCE_ROOT);
-
-        if (vSrcRoot != null) {
-          AndroidCompileUtil.markDirty(vSrcRoot, true);
-          AndroidUtils.collectFiles(vSrcRoot, visited, generatedVFiles);
-        }
-      }
-    }
-    
-    if (context instanceof CompileContextEx) {
-      ((CompileContextEx)context).markGenerated(generatedVFiles);
-    }
-    
-    return generatedItems;
-  }
-
-  private static GenerationItem[] doGenerate(CompileContext context, GenerationItem[] items) {
-    final List<GenerationItem> result = new ArrayList<GenerationItem>();
-
-    for (GenerationItem item : items) {
-      final Module module = item.getModule();
-
-      if (!AndroidCompileUtil.isModuleAffected(context, module)) {
-        continue;
-      }
-
-      final MyGenerationItem genItem = (MyGenerationItem)item;
-
-      final String artifactPath = genItem.getArtifactPath();
-      final File artifactFile = new File(artifactPath);
-
-      if (!artifactFile.exists()) {
-        context.addMessage(CompilerMessageCategory.ERROR, "Cannot find file " + artifactPath, null, -1, -1);
-        continue;
-      }
-
-      if (!artifactFile.isFile()) {
-        context.addMessage(CompilerMessageCategory.ERROR, artifactPath + " is not file", null, -1, -1);
-        continue;
-      }
-
-      final String genContentRootPath = ((MyGenerationItem)item).getGenContentRootPath();
-      final File genContentRootFile = new File(genContentRootPath);
-
-      if (genContentRootFile.exists()) {
-        if (!FileUtil.delete(genContentRootFile)) {
-          context.addMessage(CompilerMessageCategory.ERROR, "Cannot delete old directory: " + genContentRootPath, null, -1, -1);
-          continue;
-        }
-      }
-      
-      if (!genContentRootFile.mkdir()) {
-        context.addMessage(CompilerMessageCategory.ERROR, "Cannot create directory " + genContentRootPath, null, -1, -1);
-        continue;
-      }
-
-      try {
-        ZipUtil.extract(artifactFile, genContentRootFile, null);
-      }
-      catch (IOException e) {
-        final String message = e.getMessage();
-        if (message == null) {
-          context.addMessage(CompilerMessageCategory.ERROR, "Unknown I/O error", null, -1, -1);
-          LOG.error(e);
-        }
-        else {
-          context.addMessage(CompilerMessageCategory.ERROR, message, null, -1, -1);
-          LOG.info(e);
-        }
-        continue;
-      }
-
-      result.add(genItem);
-    }
-
-    return result.toArray(new GenerationItem[result.size()]);
-  }
-
-  @NotNull
-  @Override
-  public String getDescription() {
-    return "Android External Apklib Extracting Compiler";
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Override
-  public ValidityState createValidityState(DataInput in) throws IOException {
-    return TimestampValidityState.load(in);
-  }
-
-  private static class MyGenerationItem implements GenerationItem {
-    private final Module myModule;
-    private final String myGenContentRootPath;
-    private final String myArtifactPath;
-    private final TimestampValidityState myValidityState;
-
-    private MyGenerationItem(@NotNull Module module, @NotNull String genContentRootPath, @NotNull String artifactPath) {
-      myModule = module;
-      myGenContentRootPath = genContentRootPath;
-      myArtifactPath = artifactPath;
-      myValidityState = new TimestampValidityState(new File(myArtifactPath).lastModified());
-    }
-
-    @Nullable
-    @Override
-    public String getPath() {
-      return myGenContentRootPath;
-    }
-
-    @Override
-    public ValidityState getValidityState() {
-      return myValidityState;
-    }
-
-    @Override
-    @NotNull
-    public Module getModule() {
-      return myModule;
-    }
-
-    @Override
-    public boolean isTestSource() {
-      return false;
-    }
-
-    @NotNull
-    public String getGenContentRootPath() {
-      return myGenContentRootPath;
-    }
-
-    @NotNull
-    public String getArtifactPath() {
-      return myArtifactPath;
-    }
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/AndroidIdlCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidIdlCompiler.java
deleted file mode 100644
index 90d7e5c..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidIdlCompiler.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright 2000-2010 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jetbrains.android.compiler;
-
-import com.android.sdklib.IAndroidTarget;
-import com.android.SdkConstants;
-import com.intellij.facet.FacetManager;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.ProjectFileIndex;
-import com.intellij.openapi.roots.ProjectRootManager;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.VirtualFile;
-import org.jetbrains.android.compiler.tools.AndroidIdl;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.facet.AndroidRootUtil;
-import org.jetbrains.android.fileTypes.AndroidIdlFileType;
-import org.jetbrains.android.util.AndroidBundle;
-import org.jetbrains.android.util.AndroidUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.DataInput;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Android IDL compiler.
- *
- * @author Alexey Efimov
- */
-public class AndroidIdlCompiler implements SourceGeneratingCompiler {
-  private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidIdlCompiler");
-
-  private static final GenerationItem[] EMPTY_GENERATION_ITEM_ARRAY = {};
-
-  private final Project myProject;
-
-  public AndroidIdlCompiler(Project project) {
-    myProject = project;
-  }
-
-  @Nullable
-  @Override
-  public VirtualFile getPresentableFile(CompileContext context, Module module, VirtualFile outputRoot, VirtualFile generatedFile) {
-    return null;
-  }
-
-  @Override
-  public GenerationItem[] getGenerationItems(CompileContext context) {
-    return ApplicationManager.getApplication().runReadAction(new PrepareAction(context));
-  }
-
-  @Override
-  public GenerationItem[] generate(CompileContext context, GenerationItem[] items, VirtualFile outputRootDirectory) {
-    if (items != null && items.length > 0) {
-      context.getProgressIndicator().setText("Generating AIDL files...");
-      return doGenerate(context, items, outputRootDirectory);
-    }
-    return EMPTY_GENERATION_ITEM_ARRAY;
-  }
-
-  @Override
-  @NotNull
-  public String getDescription() {
-    return FileUtil.getNameWithoutExtension(SdkConstants.FN_AIDL);
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Override
-  @Nullable
-  public ValidityState createValidityState(DataInput is) throws IOException {
-    return TimestampValidityState.load(is);
-  }
-
-  private final static class IdlGenerationItem implements GenerationItem {
-    final Module myModule;
-    final VirtualFile myFile;
-    final boolean myTestSource;
-    final IAndroidTarget myAndroidTarget;
-    final String myPackageName;
-    private final TimestampValidityState myValidityState;
-
-    public IdlGenerationItem(@NotNull Module module,
-                             @NotNull VirtualFile file,
-                             boolean testSource,
-                             @NotNull IAndroidTarget androidTarget,
-                             @NotNull String packageName) {
-      myModule = module;
-      myFile = file;
-      myTestSource = testSource;
-      myAndroidTarget = androidTarget;
-      myPackageName = packageName;
-      myValidityState = new TimestampValidityState(myFile.getTimeStamp());
-    }
-
-    @Override
-    @Nullable
-    public String getPath() {
-      return myPackageName.replace('.', '/') + '/' + myFile.getNameWithoutExtension() + ".java";
-    }
-
-    @Override
-    @Nullable
-    public ValidityState getValidityState() {
-      return myValidityState;
-    }
-
-    @Override
-    public Module getModule() {
-      return myModule;
-    }
-
-    @Override
-    public boolean isTestSource() {
-      return myTestSource;
-    }
-  }
-
-  private final class PrepareAction implements Computable<GenerationItem[]> {
-    private final CompileContext myContext;
-
-    public PrepareAction(CompileContext context) {
-      myContext = context;
-    }
-
-    @Override
-    public GenerationItem[] compute() {
-      if (myContext.getProject().isDisposed()) {
-        return EMPTY_GENERATION_ITEM_ARRAY;
-      }
-      VirtualFile[] files = myContext.getProjectCompileScope().getFiles(AndroidIdlFileType.ourFileType, true);
-      List<GenerationItem> items = new ArrayList<GenerationItem>(files.length);
-      for (VirtualFile file : files) {
-        Module module = myContext.getModuleByFile(file);
-        AndroidFacet facet = FacetManager.getInstance(module).getFacetByType(AndroidFacet.ID);
-        if (facet != null) {
-          IAndroidTarget target = facet.getConfiguration().getAndroidTarget();
-          if (target == null) {
-            myContext.addMessage(CompilerMessageCategory.ERROR,
-                                 AndroidBundle.message("android.compilation.error.specify.platform", module.getName()), null, -1, -1);
-            continue;
-          }
-          String packageName = AndroidUtils.computePackageName(module, file);
-          if (packageName == null) {
-            myContext.addMessage(CompilerMessageCategory.ERROR, "Cannot compute package for file", file.getUrl(), -1, -1);
-            continue;
-          }
-
-          addItem(file, facet, target, packageName, items);
-        }
-      }
-      return items.toArray(new GenerationItem[items.size()]);
-    }
-
-    private void addItem(VirtualFile file,
-                         AndroidFacet facet,
-                         IAndroidTarget target,
-                         String packageName,
-                         List<GenerationItem> items) {
-      Module module = facet.getModule();
-      String sourceRootPath = AndroidRootUtil.getAidlGenSourceRootPath(facet);
-      if (sourceRootPath == null) {
-        myContext.addMessage(CompilerMessageCategory.ERROR,
-                             AndroidBundle.message("android.compilation.error.apt.gen.not.specified", module.getName()), null, -1, -1);
-        return;
-      }
-      ProjectFileIndex fileIndex = ProjectRootManager.getInstance(myProject).getFileIndex();
-      items.add(new IdlGenerationItem(module, file, fileIndex.isInTestSourceContent(file), target, packageName));
-    }
-  }
-
-  private static GenerationItem[] doGenerate(final CompileContext context, GenerationItem[] items, VirtualFile outputRootDirectory) {
-    if (context.getProject().isDisposed()) {
-      return EMPTY_GENERATION_ITEM_ARRAY;
-    }
-    List<GenerationItem> results = new ArrayList<GenerationItem>(items.length);
-    boolean toRefresh = false;
-
-    for (GenerationItem item : items) {
-      if (item instanceof IdlGenerationItem) {
-        final IdlGenerationItem idlItem = (IdlGenerationItem)item;
-
-        if (!AndroidCompileUtil.isModuleAffected(context, idlItem.myModule)) {
-          continue;
-        }
-
-        try {
-          VirtualFile[] sourceRoots = AndroidPackagingCompiler.getSourceRootsForModuleAndDependencies(idlItem.myModule, false);
-          final String[] sourceRootPaths = AndroidCompileUtil.toOsPaths(sourceRoots);
-
-          final String outFilePath = FileUtil.toSystemDependentName(
-            outputRootDirectory.getPath() + '/' + idlItem.myPackageName.replace('.', '/') + '/' +
-            idlItem.myFile.getNameWithoutExtension() + ".java");
-
-          final Map<CompilerMessageCategory, List<String>> messages = AndroidCompileUtil.toCompilerMessageCategoryKeys(
-            AndroidIdl.execute(idlItem.myAndroidTarget, idlItem.myFile.getPath(), outFilePath, sourceRootPaths));
-
-          ApplicationManager.getApplication().runReadAction(new Runnable() {
-            @Override
-            public void run() {
-              if (context.getProject().isDisposed()) return;
-              addMessages(context, messages, idlItem.myFile.getUrl());
-            }
-          });
-          if (messages.get(CompilerMessageCategory.ERROR).isEmpty()) {
-            toRefresh = true;
-            results.add(idlItem);
-          }
-        }
-        catch (final IOException e) {
-          LOG.info(e);
-          ApplicationManager.getApplication().runReadAction(new Runnable() {
-            @Override
-            public void run() {
-              if (context.getProject().isDisposed()) return;
-              context.addMessage(CompilerMessageCategory.ERROR, e.getMessage(), idlItem.myFile.getUrl(), -1, -1);
-            }
-          });
-        }
-      }
-    }
-
-    if (toRefresh) {
-      AndroidCompileUtil.markDirtyAndRefresh(outputRootDirectory, true);
-    }
-    return results.toArray(new GenerationItem[results.size()]);
-  }
-
-  private static void addMessages(CompileContext context, Map<CompilerMessageCategory, List<String>> messages, String url) {
-    for (CompilerMessageCategory category : messages.keySet()) {
-      List<String> messageList = messages.get(category);
-      for (String message : messageList) {
-        context.addMessage(category, message, url, -1, -1);
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/android/src/org/jetbrains/android/compiler/AndroidIncludingCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidIncludingCompiler.java
deleted file mode 100644
index 2d41738..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidIncludingCompiler.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright 2000-2010 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jetbrains.android.compiler;
-
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.fileTypes.StdFileTypes;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.roots.ContentIterator;
-import com.intellij.openapi.roots.ModuleFileIndex;
-import com.intellij.openapi.roots.ModuleRootManager;
-import com.intellij.openapi.util.Comparing;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.LocalFileSystem;
-import com.intellij.openapi.vfs.VfsUtilCore;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.containers.HashMap;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.facet.AndroidRootUtil;
-import org.jetbrains.android.sdk.AndroidPlatform;
-import org.jetbrains.android.util.AndroidBundle;
-import org.jetbrains.android.util.AndroidUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.DataInput;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Eugene.Kudelevsky
- */
-public class AndroidIncludingCompiler implements SourceGeneratingCompiler {
-  private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidIncludingCompiler");
-
-  @Nullable
-  @Override
-  public VirtualFile getPresentableFile(CompileContext context, Module module, VirtualFile outputRoot, VirtualFile generatedFile) {
-    String generatedFileRelativePath = VfsUtilCore.getRelativePath(generatedFile, outputRoot, '/');
-    if (generatedFileRelativePath == null) {
-      return null;
-    }
-
-    for (AndroidFacet depFacet : AndroidUtils.getAllAndroidDependencies(module, true)) {
-      String genSrcRootPath = AndroidRootUtil.getAptGenSourceRootPath(depFacet);
-      VirtualFile genSrcRoot = genSrcRootPath != null ? LocalFileSystem.getInstance().findFileByPath(genSrcRootPath) : null;
-      VirtualFile[] srcRoots = ModuleRootManager.getInstance(depFacet.getModule()).getSourceRoots();
-
-      for (VirtualFile depSourceRoot : srcRoots) {
-        if (!Comparing.equal(depSourceRoot, genSrcRoot)) {
-          VirtualFile file = depSourceRoot.findFileByRelativePath(generatedFileRelativePath);
-          if (file != null) {
-            return file;
-          }
-        }
-      }
-    }
-
-    return null;
-  }
-
-  @Override
-  public GenerationItem[] getGenerationItems(final CompileContext context) {
-    return ApplicationManager.getApplication().runReadAction(new Computable<GenerationItem[]>() {
-      @Override
-      public GenerationItem[] compute() {
-        List<MyItem> result = new ArrayList<MyItem>();
-
-        for (Module module : context.getProjectCompileScope().getAffectedModules()) {
-          AndroidFacet facet = AndroidFacet.getInstance(module);
-          if (facet != null && facet.isLibraryProject()) {
-            continue;
-          }
-
-          Map<String, MyItem> qName2Item = new HashMap<String, MyItem>();
-          for (AndroidFacet depFacet : AndroidUtils.getAllAndroidDependencies(module, true)) {
-            final AndroidPlatform platform = depFacet.getConfiguration().getAndroidPlatform();
-
-            final int platformToolsRevision = platform != null ? platform.getSdkData().getPlatformToolsRevision() : -1;
-            if (platformToolsRevision < 0 || platformToolsRevision > 7) {
-              // "including" style building of library projects is deprecated since platform-tools-r8
-              continue;
-            }
-
-            final String aptGenSrcRootPath = AndroidRootUtil.getAptGenSourceRootPath(depFacet);
-            final VirtualFile aptGenSrcRoot = aptGenSrcRootPath != null
-                                              ? LocalFileSystem.getInstance().findFileByPath(aptGenSrcRootPath)
-                                              : null;
-
-            final String aidlGenSrcRootPath = AndroidRootUtil.getAidlGenSourceRootPath(depFacet);
-            final VirtualFile aidlGenSrcRoot = aidlGenSrcRootPath != null
-                                               ? LocalFileSystem.getInstance().findFileByPath(aidlGenSrcRootPath)
-                                               : null;
-
-            VirtualFile[] srcRoots = ModuleRootManager.getInstance(depFacet.getModule()).getSourceRoots();
-
-            for (VirtualFile depSourceRoot : srcRoots) {
-              if (!Comparing.equal(depSourceRoot, aptGenSrcRoot) && !Comparing.equal(depSourceRoot, aidlGenSrcRoot)) {
-                collectCompilableFiles(module, depFacet.getModule(), context, depSourceRoot, qName2Item);
-              }
-            }
-          }
-          result.addAll(qName2Item.values());
-        }
-        return result.toArray(new MyItem[result.size()]);
-      }
-    });
-  }
-
-  private static void collectCompilableFiles(final Module module,
-                                             final Module depModule,
-                                             final CompileContext context,
-                                             @NotNull final VirtualFile sourceRoot,
-                                             final Map<String, MyItem> relativePath2GenItem) {
-
-    ModuleFileIndex fileIndex = ModuleRootManager.getInstance(depModule).getFileIndex();
-
-    fileIndex.iterateContentUnderDirectory(sourceRoot, new ContentIterator() {
-      @Override
-      public boolean processFile(VirtualFile fileOrDir) {
-        if (fileOrDir.isDirectory()) {
-          return true;
-        }
-        if (fileOrDir.getFileType() == StdFileTypes.JAVA) {
-          String relativePath = VfsUtilCore.getRelativePath(fileOrDir, sourceRoot, '/');
-          LOG.assertTrue(relativePath != null);
-          MyItem existingItem = relativePath2GenItem.get(relativePath);
-          if (existingItem != null) {
-            String path1 = FileUtil.toSystemDependentName(existingItem.mySourceFile.getPath());
-            String path2 = FileUtil.toSystemDependentName(fileOrDir.getPath());
-            context.addMessage(CompilerMessageCategory.ERROR, "Duplicate file for " + relativePath +
-                                                              "\nOrigin 1: " + path1 +
-                                                              "\nOrigin 2: " + path2, null, -1, -1);
-            return false;
-          }
-          relativePath2GenItem.put(relativePath, new MyItem(module, fileOrDir, relativePath));
-        }
-        return true;
-      }
-    });
-  }
-
-  @Override
-  public GenerationItem[] generate(CompileContext context, GenerationItem[] items, VirtualFile outputRootDirectory) {
-    if (items.length > 0) {
-      context.getProgressIndicator().setText(AndroidBundle.message("android.compile.messages.copying.sources.from.libraries"));
-    }
-    List<GenerationItem> result = new ArrayList<GenerationItem>();
-    boolean toRefresh = false;
-    for (GenerationItem item : items) {
-
-      if (!AndroidCompileUtil.isModuleAffected(context, ((MyItem)item).myModule)) {
-        continue;
-      }
-      toRefresh = true;
-      String fromPath = ((MyItem)item).mySourceFile.getPath();
-      File from = new File(fromPath);
-      File to = new File(outputRootDirectory.getPath() + '/' + item.getPath());
-      try {
-        FileUtil.copy(from, to);
-        result.add(item);
-      }
-      catch (IOException e) {
-        LOG.info(e);
-        String message = "Cannot copy file " + from.getPath() + " to " + to.getPath() + "\nI/O error" +
-                         (e.getMessage() != null ? ": " + e.getMessage() : "");
-        context.addMessage(CompilerMessageCategory.ERROR, message, null, -1, -1);
-      }
-    }
-
-    if (toRefresh) {
-      AndroidCompileUtil.markDirtyAndRefresh(outputRootDirectory, true);
-    }
-    return result.toArray(new GenerationItem[result.size()]);
-  }
-
-  @NotNull
-  @Override
-  public String getDescription() {
-    return "Android Including Compiler";
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Override
-  public ValidityState createValidityState(DataInput in) throws IOException {
-    return TimestampValidityState.load(in);
-  }
-
-  private static class MyItem implements GenerationItem {
-    final Module myModule;
-    final VirtualFile mySourceFile;
-    final String mySourceRelativePath;
-    private final TimestampValidityState myValidityState;
-
-    private MyItem(Module module, VirtualFile sourceFile, String sourceRelativePath) {
-      myModule = module;
-      mySourceFile = sourceFile;
-      mySourceRelativePath = sourceRelativePath;
-      myValidityState = new TimestampValidityState(mySourceFile.getTimeStamp());
-    }
-
-    @Override
-    public String getPath() {
-      return mySourceRelativePath;
-    }
-
-    @Nullable
-    @Override
-    public ValidityState getValidityState() {
-      return myValidityState;
-    }
-
-    @Override
-    public Module getModule() {
-      return myModule;
-    }
-
-    @Override
-    public boolean isTestSource() {
-      return false;
-    }
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/AndroidLibraryPackagingCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidLibraryPackagingCompiler.java
deleted file mode 100644
index 85a113a..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidLibraryPackagingCompiler.java
+++ /dev/null
@@ -1,170 +0,0 @@
-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.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.roots.CompilerModuleExtension;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.ArrayUtil;
-import com.intellij.util.containers.HashSet;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.util.AndroidCommonUtils;
-import org.jetbrains.annotations.NotNull;
-
-import java.io.DataInput;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * @author Eugene.Kudelevsky
- */
-public class AndroidLibraryPackagingCompiler implements ClassPostProcessingCompiler {
-  private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidLibraryPackagingCompiler");
-
-  @NotNull
-  @Override
-  public ProcessingItem[] getProcessingItems(final CompileContext context) {
-    return ApplicationManager.getApplication().runReadAction(new Computable<ProcessingItem[]>() {
-      @Override
-      public ProcessingItem[] compute() {
-        final List<ProcessingItem> result = new ArrayList<ProcessingItem>();
-        
-        for (Module module : ModuleManager.getInstance(context.getProject()).getModules()) {
-          final AndroidFacet facet = AndroidFacet.getInstance(module);
-          if (facet == null || !facet.isLibraryProject()) {
-            continue;
-          }
-          
-          final CompilerModuleExtension extension = CompilerModuleExtension.getInstance(module);
-          LOG.assertTrue(extension != null);
-          
-          final VirtualFile classesDir = extension.getCompilerOutputPath();
-          if (classesDir == null) {
-            continue;
-          }
-          final HashSet<VirtualFile> firstPackageDirs = new HashSet<VirtualFile>();
-          AndroidDexCompiler.addModuleOutputDir(firstPackageDirs, classesDir);
-          
-          if (firstPackageDirs.size() == 0) {
-            continue;
-          }
-
-          final VirtualFile outputDirectory = AndroidDexCompiler.getOutputDirectoryForDex(module);
-          if (outputDirectory == null) {
-            LOG.error("Cannot find output directory for dex");
-            continue;
-          }
-          result.add(new MyProcessingItem(module, firstPackageDirs.toArray(new VirtualFile[firstPackageDirs.size()]), outputDirectory));
-        }
-        return result.toArray(new ProcessingItem[result.size()]);
-      }
-    });
-  }
-
-  @Override
-  public ProcessingItem[] process(CompileContext context, ProcessingItem[] items) {
-    if (!AndroidCompileUtil.isFullBuild(context) || items == null || items.length == 0) {
-      return ProcessingItem.EMPTY_ARRAY;
-    }
-
-    context.getProgressIndicator().setText("Packaging library modules...");
-    final List<MyProcessingItem> result = new ArrayList<MyProcessingItem>();
-    
-    for (ProcessingItem item : items) {
-      final MyProcessingItem processingItem = (MyProcessingItem)item;
-      
-      if (!AndroidCompileUtil.isModuleAffected(context, processingItem.getModule())) {
-        continue;
-      }
-
-      final String[] classesDirOsPaths = AndroidCompileUtil.toOsPaths(processingItem.getClassDirectories());
-      final String outputJarOsPath = FileUtil.toSystemDependentName(processingItem.getOutputDirectory().getPath() + '/' +
-                                                                    AndroidCommonUtils.CLASSES_JAR_FILE_NAME);
-
-      final File outputJarFile = new File(outputJarOsPath);
-      try {
-        AndroidCommonUtils.packClassFilesIntoJar(ArrayUtil.EMPTY_STRING_ARRAY, classesDirOsPaths, outputJarFile);
-        CompilerUtil.refreshIOFile(outputJarFile);
-        result.add(processingItem);
-      }
-      catch (IOException e) {
-        if (e.getMessage() == null) {
-          LOG.error(e);
-        }
-        else {
-          LOG.info(e);
-          context.addMessage(CompilerMessageCategory.ERROR, "Cannot pack sources of module " +
-                                                            processingItem.getModule().getName() +
-                                                            " to " +
-                                                            outputJarFile.getName() +
-                                                            ": " +
-                                                            e.getMessage(), null, -1, -1);
-        }
-      }
-    }
-    return result.toArray(new MyProcessingItem[result.size()]);
-  }
-
-  @NotNull
-  @Override
-  public String getDescription() {
-    return "Android Library Packaging Compiler";
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Override
-  public ValidityState createValidityState(DataInput in) throws IOException {
-    return new ClassesAndJarsValidityState(in);
-  }
-  
-  private static class MyProcessingItem implements ProcessingItem {
-    private final Module myModule;
-    private final VirtualFile[] myClassDirectories;
-    private final VirtualFile myOutputDirectory;
-
-    private MyProcessingItem(@NotNull Module module, @NotNull VirtualFile[] classDirectories, @NotNull VirtualFile directory) {
-      assert classDirectories.length > 0;
-      myOutputDirectory = directory;
-      myClassDirectories = classDirectories;
-      myModule = module;
-    }
-
-    @NotNull
-    @Override
-    public VirtualFile getFile() {
-      return myClassDirectories[0].getParent();
-    }
-
-    @Override
-    public ValidityState getValidityState() {
-      return new ClassesAndJarsValidityState(Arrays.asList(myClassDirectories));
-    }
-                               
-    @NotNull
-    public Module getModule() {
-      return myModule;
-    }
-
-    @NotNull
-    public VirtualFile[] getClassDirectories() {
-      return myClassDirectories;
-    }
-
-    @NotNull
-    public VirtualFile getOutputDirectory() {
-      return myOutputDirectory;
-    }
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/AndroidMavenResourcesCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidMavenResourcesCompiler.java
deleted file mode 100644
index d8f6b86..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidMavenResourcesCompiler.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright 2000-2010 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jetbrains.android.compiler;
-
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.compiler.ex.CompileContextEx;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.LocalFileSystem;
-import com.intellij.openapi.vfs.VirtualFile;
-import org.jetbrains.android.compiler.tools.AndroidMavenExecutor;
-import org.jetbrains.android.dom.manifest.Manifest;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.facet.AndroidRootUtil;
-import org.jetbrains.android.maven.AndroidMavenProvider;
-import org.jetbrains.android.maven.AndroidMavenUtil;
-import org.jetbrains.android.util.AndroidCommonUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import org.jetbrains.idea.maven.project.MavenProject;
-import org.jetbrains.idea.maven.project.MavenProjectsManager;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Eugene.Kudelevsky
- */
-public class AndroidMavenResourcesCompiler implements SourceGeneratingCompiler {
-  private static final GenerationItem[] EMPTY_GENERATION_ITEM_ARRAY = {};
-
-  @Override
-  public VirtualFile getPresentableFile(CompileContext context, Module module, VirtualFile outputRoot, VirtualFile generatedFile) {
-    return null;
-  }
-
-  @Override
-  public GenerationItem[] getGenerationItems(CompileContext context) {
-    return ApplicationManager.getApplication().runReadAction(new PrepareAction(context));
-  }
-
-  @Override
-  public GenerationItem[] generate(final CompileContext context, final GenerationItem[] items, VirtualFile outputRootDirectory) {
-    if (items != null && items.length > 0) {
-      context.getProgressIndicator().setText("Processing resources by Maven...");
-      Computable<GenerationItem[]> computation = new Computable<GenerationItem[]>() {
-        @Override
-        public GenerationItem[] compute() {
-          if (context.getProject().isDisposed()) {
-            return EMPTY_GENERATION_ITEM_ARRAY;
-          }
-          return doGenerate(context, items);
-        }
-      };
-      GenerationItem[] generationItems = computation.compute();
-      List<VirtualFile> generatedVFiles = new ArrayList<VirtualFile>();
-      for (GenerationItem item : generationItems) {
-        File generatedFile = ((MyGenerationItem)item).myGeneratedFile;
-        if (generatedFile != null) {
-          final VirtualFile vFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(generatedFile);
-          if (vFile != null) {
-            AndroidCompileUtil.markDirtyAndRefresh(vFile, false);
-            generatedVFiles.add(vFile);
-          }
-        }
-      }
-      if (context instanceof CompileContextEx) {
-        ((CompileContextEx)context).markGenerated(generatedVFiles);
-      }
-      return generationItems;
-    }
-    return EMPTY_GENERATION_ITEM_ARRAY;
-  }
-
-  private static GenerationItem[] doGenerate(final CompileContext context, GenerationItem[] items) {
-    List<GenerationItem> results = new ArrayList<GenerationItem>(items.length);
-    for (GenerationItem item : items) {
-      if (item instanceof MyGenerationItem) {
-        final MyGenerationItem genItem = (MyGenerationItem)item;
-
-        if (!AndroidCompileUtil.isModuleAffected(context, genItem.myModule)) {
-          continue;
-        }
-
-        Map<CompilerMessageCategory, List<String>> messages = AndroidMavenExecutor.generateResources(genItem.myModule);
-        AndroidCompileUtil.addMessages(context, messages, genItem.myModule);
-        if (messages.get(CompilerMessageCategory.ERROR).isEmpty()) {
-          results.add(genItem);
-        }
-        if (genItem.myGeneratedFile.exists()) {
-          ApplicationManager.getApplication().runReadAction(new Runnable() {
-            @Override
-            public void run() {
-              String className = FileUtil.getNameWithoutExtension(genItem.myGeneratedFile);
-              AndroidCompileUtil.removeDuplicatingClasses(genItem.myModule, genItem.myPackage, className, genItem.myGeneratedFile,
-                                                          genItem.mySourceRootPath);
-            }
-          });
-        }
-      }
-    }
-    return results.toArray(new GenerationItem[results.size()]);
-  }
-
-  @Override
-  @NotNull
-  public String getDescription() {
-    return "Android Maven Resources Compiler";
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Override
-  public ValidityState createValidityState(DataInput is) throws IOException {
-    return new MyValidityState(is);
-  }
-
-  private final static class MyGenerationItem implements GenerationItem {
-    final Module myModule;
-    final String myPackage;
-    final File myGeneratedFile;
-    final String mySourceRootPath;
-    private final MyValidityState myValidityState;
-
-    private MyGenerationItem(@NotNull Module module, @NotNull String aPackage, @NotNull String sourceRootPath) {
-      myModule = module;
-      myPackage = aPackage;
-      myGeneratedFile =
-        new File(sourceRootPath, aPackage.replace('.', File.separatorChar) + File.separator + AndroidCommonUtils.R_JAVA_FILENAME);
-      mySourceRootPath = sourceRootPath;
-      myValidityState = new MyValidityState(myModule);
-    }
-
-    @Override
-    @Nullable
-    public String getPath() {
-      return myPackage.replace('.', '/') + '/' + AndroidCommonUtils.R_JAVA_FILENAME;
-    }
-
-    @Override
-    public ValidityState getValidityState() {
-      return myValidityState;
-    }
-
-    @Override
-    public Module getModule() {
-      return myModule;
-    }
-
-    @Override
-    public boolean isTestSource() {
-      return false;
-    }
-  }
-
-  private static class MyValidityState extends ResourceNamesValidityState {
-    private final long[] myMavenArtifactsTimespamps;
-
-    private MyValidityState(Module module) {
-      super(module);
-      AndroidMavenProvider mavenProvider = AndroidMavenUtil.getMavenProvider();
-      assert mavenProvider != null;
-      List<File> files = mavenProvider.getMavenDependencyArtifactFiles(module);
-      myMavenArtifactsTimespamps = new long[files.size()];
-      for (int i = 0, filesSize = files.size(); i < filesSize; i++) {
-        myMavenArtifactsTimespamps[i] = files.get(i).lastModified();
-      }
-    }
-
-    public MyValidityState(DataInput is) throws IOException {
-      super(is);
-      int c = is.readInt();
-      myMavenArtifactsTimespamps = new long[c];
-      for (int i = 0; i < c; i++) {
-        myMavenArtifactsTimespamps[i] = is.readLong();
-      }
-    }
-
-    @Override
-    public boolean equalsTo(ValidityState otherState) {
-      if (!super.equalsTo(otherState)) {
-        return false;
-      }
-      if (!(otherState instanceof MyValidityState)) {
-        return false;
-      }
-      return Arrays.equals(myMavenArtifactsTimespamps, ((MyValidityState)otherState).myMavenArtifactsTimespamps);
-    }
-
-    @Override
-    public void save(DataOutput out) throws IOException {
-      super.save(out);
-      out.writeInt(myMavenArtifactsTimespamps.length);
-      for (long timespamp : myMavenArtifactsTimespamps) {
-        out.writeLong(timespamp);
-      }
-    }
-  }
-
-  private static final class PrepareAction implements Computable<GenerationItem[]> {
-    private final CompileContext myContext;
-
-    public PrepareAction(CompileContext context) {
-      myContext = context;
-    }
-
-    @Override
-    public GenerationItem[] compute() {
-      if (myContext.getProject().isDisposed()) {
-        return EMPTY_GENERATION_ITEM_ARRAY;
-      }
-      Module[] modules = ModuleManager.getInstance(myContext.getProject()).getModules();
-      List<GenerationItem> items = new ArrayList<GenerationItem>();
-      for (Module module : modules) {
-        MavenProjectsManager mavenProjectsManager = MavenProjectsManager.getInstance(myContext.getProject());
-        if (mavenProjectsManager != null && mavenProjectsManager.isMavenizedModule(module)) {
-          AndroidFacet facet = AndroidFacet.getInstance(module);
-          if (facet != null && facet.getProperties().RUN_PROCESS_RESOURCES_MAVEN_TASK) {
-            MavenProject mavenProject = mavenProjectsManager.findProject(module);
-            if (mavenProject != null) {
-              Manifest manifest = facet.getManifest();
-              String aPackage = manifest != null ? manifest.getPackage().getValue() : null;
-              if (aPackage == null) {
-                VirtualFile manifestFile = AndroidRootUtil.getManifestFile(facet);
-                myContext.addMessage(CompilerMessageCategory.ERROR,
-                                     "Cannot find package value in AndroidManifest.xml for module " + module.getName(),
-                                     manifestFile != null ? manifestFile.getUrl() : null, -1, -1);
-                continue;
-              }
-              items.add(new MyGenerationItem(module, aPackage, mavenProject.getGeneratedSourcesDirectory(false) + "/r"));
-            }
-          }
-        }
-      }
-      return items.toArray(new GenerationItem[items.size()]);
-    }
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/AndroidPackagingCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidPackagingCompiler.java
deleted file mode 100644
index 1ef02af..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidPackagingCompiler.java
+++ /dev/null
@@ -1,532 +0,0 @@
-/*
- * Copyright 2000-2010 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jetbrains.android.compiler;
-
-import com.intellij.compiler.CompilerIOUtil;
-import com.intellij.compiler.impl.CompilerUtil;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.DependencyScope;
-import com.intellij.openapi.roots.ModuleOrderEntry;
-import com.intellij.openapi.roots.ModuleRootManager;
-import com.intellij.openapi.roots.OrderEntry;
-import com.intellij.openapi.util.Comparing;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.JarFileSystem;
-import com.intellij.openapi.vfs.VfsUtil;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.containers.HashSet;
-import org.jetbrains.android.compiler.tools.AndroidApkBuilder;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.facet.AndroidFacetConfiguration;
-import org.jetbrains.android.facet.AndroidRootUtil;
-import org.jetbrains.android.sdk.AndroidPlatform;
-import org.jetbrains.android.util.AndroidBundle;
-import org.jetbrains.android.util.AndroidCommonUtils;
-import org.jetbrains.android.util.AndroidNativeLibData;
-import org.jetbrains.android.util.AndroidUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * @author yole
- */
-public class AndroidPackagingCompiler implements PackagingCompiler {
-  private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidPackagingCompiler");
-
-  @Override
-  public void processOutdatedItem(CompileContext context, String url, @Nullable ValidityState state) {
-  }
-
-  @NotNull
-  private static VirtualFile[] getExternalJars(@NotNull Module module,
-                                               @NotNull AndroidFacetConfiguration configuration) {
-    AndroidPlatform platform = configuration.getAndroidPlatform();
-    if (platform != null) {
-      List<VirtualFile> externalLibsAndModules = AndroidRootUtil.getExternalLibraries(module);
-      return externalLibsAndModules.toArray(new VirtualFile[externalLibsAndModules.size()]);
-    }
-    return VirtualFile.EMPTY_ARRAY;
-  }
-
-  private static void fillSourceRoots(@NotNull Module module,
-                                      @NotNull Set<Module> visited,
-                                      @NotNull Set<VirtualFile> result,
-                                      boolean includingTests) {
-    visited.add(module);
-    final AndroidFacet facet = AndroidFacet.getInstance(module);
-    VirtualFile resDir = facet != null ? AndroidRootUtil.getResourceDir(facet) : null;
-    ModuleRootManager manager = ModuleRootManager.getInstance(module);
-    for (VirtualFile sourceRoot : manager.getSourceRoots(includingTests)) {
-      if (!Comparing.equal(resDir, sourceRoot)) {
-        result.add(sourceRoot);
-      }
-    }
-    for (OrderEntry entry : manager.getOrderEntries()) {
-      if (entry instanceof ModuleOrderEntry) {
-        ModuleOrderEntry moduleOrderEntry = (ModuleOrderEntry)entry;
-        DependencyScope scope = moduleOrderEntry.getScope();
-        if (scope == DependencyScope.COMPILE) {
-          Module depModule = moduleOrderEntry.getModule();
-          if (depModule != null && !visited.contains(depModule)) {
-            fillSourceRoots(depModule, visited, result, false);
-          }
-        }
-      }
-    }
-  }
-
-  @NotNull
-  public static VirtualFile[] getSourceRootsForModuleAndDependencies(@NotNull Module module, boolean includingTests) {
-    Set<VirtualFile> result = new HashSet<VirtualFile>();
-    fillSourceRoots(module, new HashSet<Module>(), result, includingTests);
-    return VfsUtil.toVirtualFileArray(result);
-  }
-
-  @Override
-  @NotNull
-  public ProcessingItem[] getProcessingItems(CompileContext context) {
-    final List<ProcessingItem> items = new ArrayList<ProcessingItem>();
-    for (Module module : ModuleManager.getInstance(context.getProject()).getModules()) {
-      AndroidFacet facet = AndroidFacet.getInstance(module);
-      if (facet != null && !facet.isLibraryProject()) {
-        VirtualFile manifestFile = AndroidRootUtil.getManifestFileForCompiler(facet);
-        VirtualFile[] sourceRoots = getSourceRootsForModuleAndDependencies(module, facet.getProperties().PACK_TEST_CODE);
-        if (manifestFile != null) {
-          AndroidFacetConfiguration configuration = facet.getConfiguration();
-          VirtualFile outputDir = AndroidDexCompiler.getOutputDirectoryForDex(module);
-          if (outputDir != null) {
-            VirtualFile[] externalJars = getExternalJars(module, configuration);
-
-            File resPackage = AndroidResourcesPackagingCompiler.getOutputFile(module, outputDir);
-            String resPackagePath = FileUtil.toSystemDependentName(resPackage.getPath());
-
-            File classesDexFile = new File(outputDir.getPath(), AndroidCommonUtils.CLASSES_FILE_NAME);
-            String classesDexPath = FileUtil.toSystemDependentName(classesDexFile.getPath());
-
-            AndroidPlatform platform = configuration.getAndroidPlatform();
-            if (platform == null) {
-              context.addMessage(CompilerMessageCategory.ERROR,
-                                 AndroidBundle.message("android.compilation.error.specify.platform", module.getName()), null, -1, -1);
-              continue;
-            }
-            String sdkPath = platform.getSdkData().getPath();
-            String outputPath = AndroidRootUtil.getApkPath(facet);
-            if (outputPath == null) {
-              context.addMessage(CompilerMessageCategory.ERROR,
-                                 AndroidBundle.message("android.compilation.error.apk.path.not.specified", module.getName()), null, -1, -1);
-              continue;
-            }
-            final String keystorePath = FileUtil.toSystemDependentName(VfsUtil.urlToPath(configuration.getState().CUSTOM_DEBUG_KEYSTORE_PATH));
-            items.add(
-              createItem(module, facet, manifestFile, sourceRoots, externalJars, resPackagePath, classesDexPath, sdkPath, outputPath,
-                         false, AndroidCompileUtil.isReleaseBuild(context), keystorePath));
-          }
-        }
-      }
-    }
-    return items.toArray(new ProcessingItem[items.size()]);
-  }
-
-  private static AptPackagingItem createItem(Module module,
-                                             AndroidFacet facet,
-                                             VirtualFile manifestFile,
-                                             VirtualFile[] sourceRoots,
-                                             VirtualFile[] externalJars,
-                                             String resPackagePath,
-                                             String classesDexPath,
-                                             String sdkPath,
-                                             String outputPath,
-                                             boolean generateSignedApk,
-                                             boolean releaseBuild,
-                                             String customKeystorePath) {
-    final AptPackagingItem item =
-      new AptPackagingItem(sdkPath, manifestFile, resPackagePath, outputPath, generateSignedApk, releaseBuild, module, customKeystorePath,
-                           facet.getConfiguration().getAdditionalNativeLibraries());
-    item.setNativeLibsFolders(collectNativeLibsFolders(facet));
-    item.setClassesDexPath(classesDexPath);
-    item.setSourceRoots(sourceRoots);
-    item.setExternalLibraries(externalJars);
-    return item;
-  }
-
-  @NotNull
-  private static VirtualFile[] collectNativeLibsFolders(AndroidFacet facet) {
-    List<VirtualFile> result = new ArrayList<VirtualFile>();
-    VirtualFile libsDir = AndroidRootUtil.getLibsDir(facet);
-    if (libsDir != null) {
-      result.add(libsDir);
-    }
-    for (AndroidFacet depFacet : AndroidUtils.getAndroidLibraryDependencies(facet.getModule())) {
-      VirtualFile depLibsDir = AndroidRootUtil.getLibsDir(depFacet);
-      if (depLibsDir != null) {
-        result.add(depLibsDir);
-      }
-    }
-    return result.toArray(new VirtualFile[result.size()]);
-  }
-
-  private static String[] getPaths(@NotNull VirtualFile[] vFiles) {
-    String[] result = new String[vFiles.length];
-    for (int i = 0; i < vFiles.length; i++) {
-      VirtualFile vFile = vFiles[i];
-      result[i] = FileUtil.toSystemDependentName(vFile.getPath());
-    }
-    return result;
-  }
-
-  @Override
-  public ProcessingItem[] process(final CompileContext context, ProcessingItem[] items) {
-    if (!AndroidCompileUtil.isFullBuild(context)) {
-      return ProcessingItem.EMPTY_ARRAY;
-    }
-
-    context.getProgressIndicator().setText("Building Android package...");
-    final List<ProcessingItem> result = new ArrayList<ProcessingItem>();
-    for (ProcessingItem processingItem : items) {
-      AptPackagingItem item = (AptPackagingItem)processingItem;
-
-      if (!AndroidCompileUtil.isModuleAffected(context, item.myModule)) {
-        continue;
-      }
-
-      doProcess(context, item, false);
-
-      if (context.getMessages(CompilerMessageCategory.ERROR).length == 0) {
-        doProcess(context, item, true);
-      }
-
-      if (context.getMessages(CompilerMessageCategory.ERROR).length == 0) {
-        result.add(item);
-      }
-    }
-    return result.toArray(new ProcessingItem[result.size()]);
-  }
-
-  private static void doProcess(final CompileContext context, AptPackagingItem item, boolean unsigned) {
-    if (!shouldGenerateApk(item.myModule, context, unsigned)) {
-      return;
-    }
-
-    try {
-      final String[] externalLibPaths = getPaths(item.getExternalLibraries());
-
-      final String resPackagePath = unsigned
-                                    ? item.getResPackagePath() + AndroidResourcesPackagingCompiler.RELEASE_SUFFIX
-                                    : item.getResPackagePath();
-
-      final String finalPath = unsigned
-                               ? AndroidCommonUtils.addSuffixToFileName(item.getFinalPath(), AndroidCompileUtil.UNSIGNED_SUFFIX)
-                               : item.getFinalPath();
-
-      final String[] sourceRoots = AndroidCompileUtil.toOsPaths(item.getSourceRoots());
-      final String[] nativeLibsFolders = AndroidCompileUtil.toOsPaths(item.getNativeLibsFolders());
-      final Project project = context.getProject();
-
-      final Map<CompilerMessageCategory, List<String>> messages = AndroidCompileUtil.toCompilerMessageCategoryKeys(
-        AndroidApkBuilder.execute(resPackagePath, item.getClassesDexPath(), sourceRoots, externalLibPaths, nativeLibsFolders,
-                                  item.getAdditionalNativeLibs(), finalPath, unsigned, item.mySdkPath, item.getCustomKeystorePath(),
-                                  new ExcludedSourcesFilter(project)));
-
-      if (messages.get(CompilerMessageCategory.ERROR).size() == 0) {
-        if (item.myReleaseBuild == unsigned) {
-          final File dst = new File(
-            AndroidCommonUtils.addSuffixToFileName(item.getFinalPath(), AndroidCommonUtils.ANDROID_FINAL_PACKAGE_FOR_ARTIFACT_SUFFIX));
-          FileUtil.copy(new File(finalPath), dst);
-          CompilerUtil.refreshIOFile(dst);
-          final VirtualFile jar = JarFileSystem.getInstance().refreshAndFindFileByPath(dst.getPath() + "!/");
-          if (jar != null) {
-            jar.refresh(false, true);
-          }
-        }
-      }
-      AndroidCompileUtil.addMessages(context, messages, item.myModule);
-    }
-    catch (final IOException e) {
-      LOG.info(e);
-      ApplicationManager.getApplication().runReadAction(new Runnable() {
-        @Override
-        public void run() {
-          if (context.getProject().isDisposed()) return;
-          context.addMessage(CompilerMessageCategory.ERROR, e.getMessage(), null, -1, -1);
-        }
-      });
-    }
-  }
-
-  public static boolean shouldGenerateApk(Module module, CompileContext context, boolean unsigned) {
-    final boolean releaseBuild = AndroidCompileUtil.isReleaseBuild(context);
-
-    if (!unsigned) {
-      return !releaseBuild;
-    }
-
-    final AndroidFacet facet = AndroidFacet.getInstance(module);
-    if (facet == null) {
-      return true;
-    }
-
-    if (releaseBuild) {
-      return true;
-    }
-    return false;
-  }
-
-  @Override
-  @NotNull
-  public String getDescription() {
-    return "Android Packaging Compiler";
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Override
-  public ValidityState createValidityState(DataInput is) throws IOException {
-    return new MyValidityState(is);
-  }
-
-  private static class AptPackagingItem implements ProcessingItem {
-    private final String mySdkPath;
-    private final VirtualFile myManifestFile;
-    private final String myResPackagePath;
-    private final String myFinalPath;
-    private String myClassesDexPath;
-    private VirtualFile[] myNativeLibsFolders;
-    private final List<AndroidNativeLibData> myAdditionalNativeLibs;
-    private VirtualFile[] mySourceRoots;
-    private VirtualFile[] myExternalLibraries;
-    private final boolean myGenerateUnsigendApk;
-    private final Module myModule;
-    private boolean myReleaseBuild;
-
-    private final String myCustomKeystorePath;
-
-    private AptPackagingItem(String sdkPath,
-                             @NotNull VirtualFile manifestFile,
-                             @NotNull String resPackagePath,
-                             @NotNull String finalPath,
-                             boolean generateUnsigendApk,
-                             boolean releaseBuild,
-                             @NotNull Module module,
-                             @Nullable String customKeystorePath,
-                             @NotNull List<AndroidNativeLibData> additionalNativeLibs) {
-      mySdkPath = sdkPath;
-      myManifestFile = manifestFile;
-      myResPackagePath = resPackagePath;
-      myFinalPath = finalPath;
-      myGenerateUnsigendApk = generateUnsigendApk;
-      myReleaseBuild = releaseBuild;
-      myModule = module;
-      myCustomKeystorePath = customKeystorePath;
-      myAdditionalNativeLibs = additionalNativeLibs;
-    }
-
-    @NotNull
-    public String getResPackagePath() {
-      return myResPackagePath;
-    }
-
-    @NotNull
-    public String getFinalPath() {
-      return myFinalPath;
-    }
-
-    @NotNull
-    public String getClassesDexPath() {
-      return myClassesDexPath;
-    }
-
-    @Nullable
-    public String getCustomKeystorePath() {
-      return myCustomKeystorePath;
-    }
-
-    @NotNull
-    public VirtualFile[] getNativeLibsFolders() {
-      return myNativeLibsFolders;
-    }
-
-    @NotNull
-    public List<AndroidNativeLibData> getAdditionalNativeLibs() {
-      return myAdditionalNativeLibs;
-    }
-
-    @NotNull
-    public VirtualFile[] getSourceRoots() {
-      return mySourceRoots;
-    }
-
-    @NotNull
-    public VirtualFile[] getExternalLibraries() {
-      return myExternalLibraries;
-    }
-
-    public void setSourceRoots(@NotNull VirtualFile[] sourceRoots) {
-      this.mySourceRoots = sourceRoots;
-    }
-
-    public void setExternalLibraries(@NotNull VirtualFile[] externalLibraries) {
-      this.myExternalLibraries = externalLibraries;
-    }
-
-    public void setClassesDexPath(@NotNull String classesDexPath) {
-      myClassesDexPath = classesDexPath;
-    }
-
-    public void setNativeLibsFolders(@NotNull VirtualFile[] nativeLibsFolders) {
-      myNativeLibsFolders = nativeLibsFolders;
-    }
-
-    @Override
-    @NotNull
-    public VirtualFile getFile() {
-      return myManifestFile;
-    }
-
-    @Override
-    @Nullable
-    public ValidityState getValidityState() {
-      return new MyValidityState(myModule.getProject(), myResPackagePath, myClassesDexPath, myFinalPath, myGenerateUnsigendApk,
-                                 myReleaseBuild, mySourceRoots, myExternalLibraries, myNativeLibsFolders, myCustomKeystorePath,
-                                 myAdditionalNativeLibs);
-    }
-  }
-
-  private static class MyValidityState implements ValidityState {
-    private final Map<String, Long> myResourceTimestamps = new HashMap<String, Long>();
-    private final Map<AndroidNativeLibData, Long> myAdditionalNativeLibs = new HashMap<AndroidNativeLibData, Long>();
-    private final String myApkPath;
-    private final boolean myGenerateUnsignedApk;
-    private final boolean myReleaseBuild;
-    private final String myCustomKeystorePath;
-
-    MyValidityState(DataInput is) throws IOException {
-      int size = is.readInt();
-      for (int i = 0; i < size; i++) {
-        String key = is.readUTF();
-        long value = is.readLong();
-        myResourceTimestamps.put(key, value);
-      }
-      myGenerateUnsignedApk = is.readBoolean();
-      myReleaseBuild = is.readBoolean();
-      myApkPath = is.readUTF();
-      myCustomKeystorePath = CompilerIOUtil.readString(is);
-
-      size = is.readInt();
-      for (int i = 0; i < size; i++) {
-        final String architecture = is.readUTF();
-        final String path = is.readUTF();
-        final String targetFileName = is.readUTF();
-        final long timestamp = is.readLong();
-        myAdditionalNativeLibs.put(new AndroidNativeLibData(architecture, path, targetFileName), timestamp);
-      }
-    }
-
-    MyValidityState(Project project,
-                    String resPackagePath,
-                    String classesDexPath,
-                    String apkPath,
-                    boolean generateUnsignedApk,
-                    boolean releaseBuild,
-                    VirtualFile[] sourceRoots,
-                    VirtualFile[] externalLibs,
-                    VirtualFile[] nativeLibFolders,
-                    String customKeystorePath,
-                    List<AndroidNativeLibData> additionalNativeLibs) {
-      myResourceTimestamps.put(FileUtil.toSystemIndependentName(resPackagePath), new File(resPackagePath).lastModified());
-      myResourceTimestamps.put(FileUtil.toSystemIndependentName(classesDexPath), new File(classesDexPath).lastModified());
-      myApkPath = apkPath;
-      myGenerateUnsignedApk = generateUnsignedApk;
-      myReleaseBuild = releaseBuild;
-      myCustomKeystorePath = customKeystorePath != null ? customKeystorePath : "";
-
-      final HashSet<File> resourcesFromSourceRoot = new HashSet<File>();
-      for (VirtualFile sourceRoot : sourceRoots) {
-        AndroidApkBuilder.collectStandardJavaResources(new File(sourceRoot.getPath()), resourcesFromSourceRoot,
-                                                       new ExcludedSourcesFilter(project));
-      }
-      for (File resource : resourcesFromSourceRoot) {
-        myResourceTimestamps.put(FileUtil.toSystemIndependentName(resource.getPath()), resource.lastModified());
-      }
-
-      for (VirtualFile externalLib : externalLibs) {
-        myResourceTimestamps.put(externalLib.getPath(), externalLib.getTimeStamp());
-      }
-      ArrayList<File> nativeLibs = new ArrayList<File>();
-      for (VirtualFile nativeLibFolder : nativeLibFolders) {
-        for (VirtualFile child : nativeLibFolder.getChildren()) {
-          AndroidApkBuilder.collectNativeLibraries(new File(child.getPath()), nativeLibs, !releaseBuild);
-        }
-      }
-      for (File nativeLib : nativeLibs) {
-        myResourceTimestamps.put(FileUtil.toSystemIndependentName(nativeLib.getPath()), nativeLib.lastModified());
-      }
-      for (AndroidNativeLibData lib : additionalNativeLibs) {
-        final String path = lib.getPath();
-        myAdditionalNativeLibs.put(lib, new File(path).lastModified());
-      }
-    }
-
-    @Override
-    public boolean equalsTo(ValidityState otherState) {
-      if (!(otherState instanceof MyValidityState)) {
-        return false;
-      }
-      MyValidityState mvs = (MyValidityState)otherState;
-      return mvs.myGenerateUnsignedApk == myGenerateUnsignedApk &&
-             mvs.myReleaseBuild == myReleaseBuild &&
-             mvs.myResourceTimestamps.equals(myResourceTimestamps) &&
-             mvs.myApkPath.equals(myApkPath) &&
-             mvs.myCustomKeystorePath.equals(myCustomKeystorePath) &&
-             mvs.myAdditionalNativeLibs.equals(myAdditionalNativeLibs);
-    }
-
-    @Override
-    public void save(DataOutput out) throws IOException {
-      out.writeInt(myResourceTimestamps.size());
-      for (Map.Entry<String, Long> entry : myResourceTimestamps.entrySet()) {
-        out.writeUTF(entry.getKey());
-        out.writeLong(entry.getValue());
-      }
-      out.writeBoolean(myGenerateUnsignedApk);
-      out.writeBoolean(myReleaseBuild);
-      out.writeUTF(myApkPath);
-      CompilerIOUtil.writeString(myCustomKeystorePath, out);
-
-      out.writeInt(myAdditionalNativeLibs.size());
-      for (Map.Entry<AndroidNativeLibData, Long> entry : myAdditionalNativeLibs.entrySet()) {
-        final AndroidNativeLibData lib = entry.getKey();
-        out.writeUTF(lib.getArchitecture());
-        out.writeUTF(lib.getPath());
-        out.writeUTF(lib.getTargetFileName());
-        out.writeLong(entry.getValue());
-      }
-    }
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/AndroidPngFilesCachingCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidPngFilesCachingCompiler.java
deleted file mode 100644
index 16b40ce..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidPngFilesCachingCompiler.java
+++ /dev/null
@@ -1,255 +0,0 @@
-package org.jetbrains.android.compiler;
-
-import com.android.sdklib.IAndroidTarget;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.util.Comparing;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.containers.HashMap;
-import com.intellij.util.containers.hash.HashSet;
-import org.jetbrains.android.compiler.tools.AndroidApt;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.sdk.AndroidPlatform;
-import org.jetbrains.android.util.AndroidBundle;
-import org.jetbrains.android.util.AndroidCommonUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * @author Eugene.Kudelevsky
- */
-public class AndroidPngFilesCachingCompiler implements SourceGeneratingCompiler {
-  private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidPngFilesCachingCompiler");
-
-  @NotNull
-  @Override
-  public GenerationItem[] getGenerationItems(final CompileContext context) {
-    return ApplicationManager.getApplication().runReadAction(new Computable<GenerationItem[]>() {
-      @Override
-      public GenerationItem[] compute() {
-        final List<GenerationItem> items = new ArrayList<GenerationItem>();
-        final Module[] modules = ModuleManager.getInstance(context.getProject()).getModules();
-
-        for (Module module : modules) {
-          final AndroidFacet facet = AndroidFacet.getInstance(module);
-          if (facet == null) {
-            continue;
-          }
-
-          final VirtualFile resourcesDir = AndroidAptCompiler.getResourceDirForApkCompiler(facet);
-          if (resourcesDir == null) {
-            continue;
-          }
-
-          final AndroidPlatform platform = facet.getConfiguration().getAndroidPlatform();
-          if (platform == null) {
-            context.addMessage(CompilerMessageCategory.ERROR,
-                               AndroidBundle.message("android.compilation.error.specify.platform", module.getName()), null, -1, -1);
-            continue;
-          }
-
-          final int platformToolsRevision = platform.getSdkData().getPlatformToolsRevision();
-          if (platformToolsRevision > 0 && platformToolsRevision <= 7) {
-            // png files cache is supported since platform-tools-r8
-            continue;
-          }
-
-          items.add(new MyItem(module, platform.getTarget(), resourcesDir));
-        }
-        return items.toArray(new GenerationItem[items.size()]);
-      }
-    });
-  }
-
-  @Override
-  public GenerationItem[] generate(CompileContext context,
-                                   GenerationItem[] items,
-                                   VirtualFile outputRootDirectory) {
-    if (items == null || items.length == 0 || !AndroidCompileUtil.isFullBuild(context)) {
-      return new GenerationItem[0];
-    }
-
-    context.getProgressIndicator().setText("Processing PNG files...");
-
-    final List<GenerationItem> processedItems = new ArrayList<GenerationItem>();
-
-    for (GenerationItem GenerationItem : items) {
-      final MyItem item = (MyItem)GenerationItem;
-      final Module module = item.getModule();
-      
-      if (!AndroidCompileUtil.isModuleAffected(context, module)) {
-        continue;
-      }
-
-      final String resDirOsPath = FileUtil.toSystemDependentName(item.getResourceDir().getPath());
-
-      try {
-        final String resCacheDirOsPath = AndroidCompileUtil.findResourcesCacheDirectory(module, true, context);
-        if (resCacheDirOsPath == null) {
-          continue;
-        }
-
-        final Map<CompilerMessageCategory, List<String>> messages = AndroidCompileUtil.toCompilerMessageCategoryKeys(
-          AndroidApt.crunch(item.getTarget(), Collections.singletonList(resDirOsPath), resCacheDirOsPath));
-        AndroidCompileUtil.addMessages(context, messages, module);
-        if (context.getMessages(CompilerMessageCategory.ERROR).length == 0) {
-          processedItems.add(item);
-        }
-      }
-      catch (IOException e) {
-        final String message = e.getMessage();
-        if (message != null) {
-          LOG.info(e);
-          context.addMessage(CompilerMessageCategory.ERROR, e.getMessage(), null, -1, -1);
-        }
-        else {
-          LOG.error(e);
-        }
-      }
-    }
-
-    return processedItems.toArray(new GenerationItem[processedItems.size()]);
-  }
-
-  @Nullable
-  @Override
-  public VirtualFile getPresentableFile(CompileContext context, Module module, VirtualFile outputRoot, VirtualFile generatedFile) {
-    return null;
-  }
-
-  @NotNull
-  @Override
-  public String getDescription() {
-    return "Android PNG files caching compiler";
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Override
-  public ValidityState createValidityState(DataInput in) throws IOException {
-    return new MyValidityState(in);
-  }
-
-  private static class MyItem implements GenerationItem {
-    private final Module myModule;
-    private final IAndroidTarget myTarget;
-    private final VirtualFile myResourceDir;
-    private final MyValidityState myValidityState;
-
-    private MyItem(@NotNull Module module,
-                   @NotNull IAndroidTarget target,
-                   @NotNull VirtualFile resourceDir) {
-      myModule = module;
-      myTarget = target;
-      myResourceDir = resourceDir;
-      myValidityState = new MyValidityState(myTarget, myResourceDir);
-    }
-
-    @NotNull
-    public IAndroidTarget getTarget() {
-      return myTarget;
-    }
-
-    @NotNull
-    public VirtualFile getResourceDir() {
-      return myResourceDir;
-    }
-
-    @Override
-    @NotNull
-    public Module getModule() {
-      return myModule;
-    }
-
-    @Override
-    public boolean isTestSource() {
-      return false;
-    }
-
-    @Nullable
-    @Override
-    public String getPath() {
-      return null;
-    }
-
-    @Override
-    public ValidityState getValidityState() {
-      return myValidityState;
-    }
-  }
-
-  private static class MyValidityState implements ValidityState {
-    private final String myTargetHashString;
-    private final Map<String, Long> myTimestamps = new HashMap<String, Long>();
-
-    private MyValidityState(@NotNull IAndroidTarget target, @NotNull VirtualFile resourceDir) {
-      myTargetHashString = target.hashString();
-      collectPngFiles(resourceDir, new HashSet<VirtualFile>());
-    }
-
-    public MyValidityState(@NotNull DataInput in) throws IOException {
-      myTargetHashString = in.readUTF();
-
-      final int pairsCount = in.readInt();
-      for (int i = 0; i < pairsCount; i++) {
-        final String path = in.readUTF();
-        final long timestamp = in.readLong();
-        myTimestamps.put(path, timestamp);
-      }
-    }
-
-    private void collectPngFiles(@NotNull VirtualFile file, @NotNull Set<VirtualFile> visited) {
-      if (!visited.add(file)) {
-        return;
-      }
-
-      if (file.isDirectory()) {
-        for (VirtualFile child : file.getChildren()) {
-          collectPngFiles(child, visited);
-        }
-      }
-      else if (AndroidCommonUtils.PNG_EXTENSION.equals(file.getExtension())) {
-        myTimestamps.put(file.getPath(), file.getTimeStamp());
-      }
-    }
-
-    @Override
-    public boolean equalsTo(ValidityState otherState) {
-      if (!(otherState instanceof MyValidityState)) {
-        return false;
-      }
-
-      final MyValidityState other = (MyValidityState)otherState;
-
-      if (!Comparing.equal(myTargetHashString, other.myTargetHashString)) {
-        return false;
-      }
-
-      return myTimestamps.equals(other.myTimestamps);
-    }
-
-    @Override
-    public void save(DataOutput out) throws IOException {
-      out.writeUTF(myTargetHashString);
-
-      out.writeInt(myTimestamps.size());
-      for (Map.Entry<String, Long> e : myTimestamps.entrySet()) {
-        out.writeUTF(e.getKey());
-        out.writeLong(e.getValue());
-      }
-    }
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/AndroidPrecompileTask.java b/android/src/org/jetbrains/android/compiler/AndroidPrecompileTask.java
index 6ada779..256ebba 100644
--- a/android/src/org/jetbrains/android/compiler/AndroidPrecompileTask.java
+++ b/android/src/org/jetbrains/android/compiler/AndroidPrecompileTask.java
@@ -17,7 +17,6 @@
 
 import com.intellij.compiler.CompilerConfiguration;
 import com.intellij.compiler.CompilerConfigurationImpl;
-import com.intellij.compiler.CompilerWorkspaceConfiguration;
 import com.intellij.compiler.options.CompileStepBeforeRun;
 import com.intellij.compiler.server.BuildManager;
 import com.intellij.facet.ProjectFacetManager;
@@ -82,9 +81,6 @@
     // we do it here for internal mode and also to make there roots 'visibly excluded' in IDE settings
     createGenModulesAndSourceRoots(project);
 
-    if (!CompilerWorkspaceConfiguration.getInstance(project).useOutOfProcessBuild()) {
-      return prepareForCompilation(context);
-    }
     return true;
   }
 
diff --git a/android/src/org/jetbrains/android/compiler/AndroidProguardCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidProguardCompiler.java
deleted file mode 100644
index ab13cab..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidProguardCompiler.java
+++ /dev/null
@@ -1,493 +0,0 @@
-package org.jetbrains.android.compiler;
-
-import com.android.sdklib.IAndroidTarget;
-import com.intellij.compiler.CompilerIOUtil;
-import com.intellij.compiler.impl.CompilerUtil;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.fileTypes.StdFileTypes;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.projectRoots.JavaSdkType;
-import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.projectRoots.SdkTypeId;
-import com.intellij.openapi.roots.CompilerModuleExtension;
-import com.intellij.openapi.roots.ModuleRootManager;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.Key;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.LocalFileSystem;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.containers.HashMap;
-import com.intellij.util.containers.HashSet;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.facet.AndroidRootUtil;
-import org.jetbrains.android.sdk.AndroidPlatform;
-import org.jetbrains.android.util.AndroidBundle;
-import org.jetbrains.android.util.AndroidCommonUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author Eugene.Kudelevsky
- */
-public class AndroidProguardCompiler implements ClassPostProcessingCompiler {
-  private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidProguardCompiler");
-  public static Key<String> PROGUARD_CFG_PATHS_KEY = Key.create(AndroidCommonUtils.PROGUARD_CFG_PATHS_OPTION);
-
-  @NotNull
-  @Override
-  public ProcessingItem[] getProcessingItems(final CompileContext context) {
-    return ApplicationManager.getApplication().runReadAction(new Computable<ProcessingItem[]>() {
-      @Override
-      public ProcessingItem[] compute() {
-        final Module[] modules = ModuleManager.getInstance(context.getProject()).getModules();
-        final List<ProcessingItem> items = new ArrayList<ProcessingItem>();
-
-        for (final Module module : modules) {
-          final AndroidFacet facet = AndroidFacet.getInstance(module);
-
-          if (facet == null || facet.isLibraryProject()) {
-            continue;
-          }
-
-          final ProguardRunningOptions proguardRunningOptions = AndroidCompileUtil.getProguardConfigFilePathIfShouldRun(facet, context);
-          if (proguardRunningOptions == null) {
-            continue;
-          }
-          final List<String> proguardCfgPaths = proguardRunningOptions.getProguardCfgFiles();
-
-          if (proguardCfgPaths.size() == 0) {
-            context
-              .addMessage(CompilerMessageCategory.ERROR, "Proguard config file path is not specified for module " + module.getName(), null,
-                          -1, -1);
-            continue;
-          }
-          final List<VirtualFile> proguardConfigFiles = new ArrayList<VirtualFile>();
-          boolean proguardCfgNotFound = false;
-
-          for (String proguardCfgPath : proguardCfgPaths) {
-            final VirtualFile proguardConfigFile =
-              LocalFileSystem.getInstance().findFileByPath(FileUtil.toSystemIndependentName(proguardCfgPath));
-
-            if (proguardConfigFile == null) {
-              context.addMessage(CompilerMessageCategory.ERROR, "Cannot find file " + proguardCfgPath, null, -1, -1);
-              proguardCfgNotFound = true;
-              break;
-            }
-            proguardConfigFiles.add(proguardConfigFile);
-          }
-
-          if (proguardCfgNotFound) {
-            continue;
-          }
-          final CompilerModuleExtension extension = CompilerModuleExtension.getInstance(module);
-          if (extension == null) {
-            LOG.error("Cannot find compiler module extension for module " + module.getName());
-            continue;
-          }
-
-          final VirtualFile classFilesDir = extension.getCompilerOutputPath();
-          if (classFilesDir == null) {
-            context
-              .addMessage(CompilerMessageCategory.INFORMATION, "Output directory is not specified for module " + module.getName(), null,
-                          -1, -1);
-            continue;
-          }
-
-          final VirtualFile mainContentRoot = AndroidRootUtil.getMainContentRoot(facet);
-          if (mainContentRoot == null) {
-            context.addMessage(CompilerMessageCategory.ERROR, "Cannot find main content root for module " + module.getName(), null, -1, -1);
-            continue;
-          }
-
-          final AndroidPlatform platform = facet.getConfiguration().getAndroidPlatform();
-          if (platform == null) {
-            context.addMessage(CompilerMessageCategory.ERROR,
-                               AndroidBundle.message("android.compilation.proguardCfgNotFound.specify.platform", module.getName()), null, -1, -1);
-            continue;
-          }
-
-          final String logsDirOsPath = FileUtil.toSystemDependentName(mainContentRoot.getPath() + '/' + AndroidCommonUtils.DIRECTORY_FOR_LOGS_NAME);
-
-          final File logsDir = new File(logsDirOsPath);
-          if (!logsDir.exists()) {
-            if (!logsDir.mkdirs()) {
-              context.addMessage(CompilerMessageCategory.ERROR, "Cannot find directory " + logsDirOsPath, null, -1, -1);
-              continue;
-            }
-          }
-
-          final List<VirtualFile> externalJars = AndroidRootUtil.getExternalLibraries(module);
-          final Set<VirtualFile> classFilesDirs = new HashSet<VirtualFile>();
-          final Set<VirtualFile> libClassFilesDirs = new HashSet<VirtualFile>();
-
-          AndroidDexCompiler.addModuleOutputDir(classFilesDirs, classFilesDir);
-
-          for (VirtualFile file : AndroidRootUtil.getDependentModules(module, classFilesDir)) {
-            if (file.isDirectory()) {
-              AndroidDexCompiler.addModuleOutputDir(classFilesDirs, file);
-            }
-            else {
-              AndroidDexCompiler.addModuleOutputDir(libClassFilesDirs, file.getParent());
-            }
-          }
-
-          final String sdkPath = platform.getSdkData().getPath();
-
-          final VirtualFile outputDir = AndroidDexCompiler.getOutputDirectoryForDex(module);
-          final String outputJarOsPath = FileUtil.toSystemDependentName(outputDir.getPath() + '/' + AndroidCommonUtils.PROGUARD_OUTPUT_JAR_NAME);
-
-          final VirtualFile proguardCfgGeneratedByAapt = outputDir.findChild(AndroidCommonUtils.PROGUARD_CFG_OUTPUT_FILE_NAME);
-          if (proguardCfgGeneratedByAapt != null) {
-            proguardConfigFiles.add(proguardCfgGeneratedByAapt);
-          }
-
-          items.add(new MyProcessingItem(module, sdkPath, platform.getTarget(), platform.getSdkData().getSdkToolsRevision(),
-                                         proguardConfigFiles, false, outputJarOsPath,
-                                         classFilesDir, classFilesDirs.toArray(new VirtualFile[classFilesDirs.size()]),
-                                         libClassFilesDirs.toArray(new VirtualFile[libClassFilesDirs.size()]),
-                                         externalJars.toArray(new VirtualFile[externalJars.size()]), logsDirOsPath));
-        }
-        return items.toArray(new ProcessingItem[items.size()]);
-      }
-    });
-  }
-
-  @Nullable
-  private static String getJavaExecutablePath(@NotNull Module module) {
-    final Sdk sdk = ModuleRootManager.getInstance(module).getSdk();
-
-    if (sdk == null) {
-      return null;
-    }
-    final SdkTypeId sdkType = sdk.getSdkType();
-
-    if (!(sdkType instanceof JavaSdkType)) {
-      return null;
-    }
-    return ((JavaSdkType)sdkType).getVMExecutablePath(sdk);
-  }
-
-  @Override
-  public ProcessingItem[] process(CompileContext context, ProcessingItem[] items) {
-    final List<ProcessingItem> processedItems = new ArrayList<ProcessingItem>();
-
-    for (ProcessingItem item : items) {
-      final MyProcessingItem processingItem = (MyProcessingItem)item;
-
-      if (!AndroidCompileUtil.isModuleAffected(context, processingItem.myModule)) {
-        continue;
-      }
-      final Module module = ((MyProcessingItem)item).getModule();
-      final String javaExecutablePath = getJavaExecutablePath(module);
-
-      if (javaExecutablePath == null) {
-        context.addMessage(CompilerMessageCategory.ERROR, "Cannot find Java SDK for module " + module.getName(), null, -1, -1);
-        continue;
-      }
-      final List<VirtualFile> cfgFiles = processingItem.getProguardConfigFiles();
-      final String[] proguardCfgOsPaths = AndroidCompileUtil.toOsPaths(cfgFiles.toArray(new VirtualFile[cfgFiles.size()]));
-
-      final String[] classFilesDirOsPaths = AndroidCompileUtil.toOsPaths(processingItem.getClassFilesDirs());
-      final String[] libClassFilesDirOsPaths = AndroidCompileUtil.toOsPaths(processingItem.getLibClassFilesDirs());
-      final String[] externalJarOsPaths = AndroidCompileUtil.toOsPaths(processingItem.getExternalJars());
-
-      try {
-        final String inputJarOsPath = AndroidCommonUtils.buildTempInputJar(classFilesDirOsPaths, libClassFilesDirOsPaths);
-        final String logsDirOsPath = processingItem.getLogsDirectoryOsPath();
-
-        final Map<CompilerMessageCategory, List<String>> messages = AndroidCompileUtil.toCompilerMessageCategoryKeys(
-          AndroidCommonUtils.launchProguard(processingItem.getTarget(), processingItem.getSdkToolsRevision(),
-                                            processingItem.getSdkOsPath(), javaExecutablePath, "", proguardCfgOsPaths,
-                                            inputJarOsPath, externalJarOsPaths, processingItem.getOutputJarOsPath(), logsDirOsPath));
-
-        CompilerUtil.refreshIOFile(new File(processingItem.getOutputJarOsPath()));
-
-        AndroidCompileUtil.addMessages(context, messages, processingItem.myModule);
-
-        if (messages.get(CompilerMessageCategory.ERROR).isEmpty()) {
-          processedItems.add(item);
-        }
-      }
-      catch (IOException e) {
-        if (e.getMessage() == null) {
-          LOG.error(e);
-        }
-        else {
-          LOG.info(e);
-          context.addMessage(CompilerMessageCategory.ERROR, "I/O error: " + e.getMessage(), null, -1, -1);
-        }
-      }
-    }
-
-    return processedItems.toArray(new ProcessingItem[processedItems.size()]);
-  }
-
-  @NotNull
-  @Override
-  public String getDescription() {
-    return "Android Proguard Runner";
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Override
-  public ValidityState createValidityState(DataInput in) throws IOException {
-    return new MyValidityState(in);
-  }
-
-  private static class MyProcessingItem implements ProcessingItem {
-    private final Module myModule;
-    private final IAndroidTarget myTarget;
-    private final int mySdkToolsRevision;
-    private final String myOutputJarOsPath;
-    private final VirtualFile myMainClassFilesDir;
-    private final VirtualFile[] myClassFilesDirs;
-    private final VirtualFile[] myLibClassFilesDirs;
-    private final VirtualFile[] myExternalJars;
-    private final String myLogsDirectoryOsPath;
-    private final List<VirtualFile> myProguardConfigFiles;
-    private final boolean myIncludeSystemProguardFile;
-    private final String mySdkOsPath;
-
-    private MyProcessingItem(@NotNull Module module,
-                             @NotNull String sdkOsPath,
-                             @NotNull IAndroidTarget target,
-                             int sdkToolsRevision,
-                             @NotNull List<VirtualFile> proguardConfigFiles,
-                             boolean includeSystemProguardFile,
-                             @NotNull String outputJarOsPath,
-                             @NotNull VirtualFile mainClassFilesDir,
-                             @NotNull VirtualFile[] classFilesDirs,
-                             @NotNull VirtualFile[] libCLassFilesDirs,
-                             @NotNull VirtualFile[] externalJars,
-                             @Nullable String logsDirectoryOsPath) {
-      myModule = module;
-      myTarget = target;
-      mySdkToolsRevision = sdkToolsRevision;
-      myProguardConfigFiles = proguardConfigFiles;
-      myIncludeSystemProguardFile = includeSystemProguardFile;
-      myOutputJarOsPath = outputJarOsPath;
-      myMainClassFilesDir = mainClassFilesDir;
-      mySdkOsPath = sdkOsPath;
-      myClassFilesDirs = classFilesDirs;
-      myLibClassFilesDirs = libCLassFilesDirs;
-      myExternalJars = externalJars;
-      myLogsDirectoryOsPath = logsDirectoryOsPath;
-    }
-
-    @NotNull
-    public String getOutputJarOsPath() {
-      return myOutputJarOsPath;
-    }
-
-    @NotNull
-    public String getSdkOsPath() {
-      return mySdkOsPath;
-    }
-
-    @NotNull
-    public VirtualFile[] getClassFilesDirs() {
-      return myClassFilesDirs;
-    }
-
-    @NotNull
-    public VirtualFile[] getLibClassFilesDirs() {
-      return myLibClassFilesDirs;
-    }
-
-    @NotNull
-    @Override
-    public VirtualFile getFile() {
-      return myMainClassFilesDir;
-    }
-
-    public List<VirtualFile> getProguardConfigFiles() {
-      return myProguardConfigFiles;
-    }
-
-    public boolean isIncludeSystemProguardFile() {
-      return myIncludeSystemProguardFile;
-    }
-
-    @NotNull
-    public VirtualFile[] getExternalJars() {
-      return myExternalJars;
-    }
-
-    @NotNull
-    public IAndroidTarget getTarget() {
-      return myTarget;
-    }
-
-    public int getSdkToolsRevision() {
-      return mySdkToolsRevision;
-    }
-
-    @Nullable
-    public String getLogsDirectoryOsPath() {
-      return myLogsDirectoryOsPath;
-    }
-
-    @Override
-    public ValidityState getValidityState() {
-      return new MyValidityState(myTarget, mySdkOsPath, myOutputJarOsPath, myClassFilesDirs, myExternalJars,
-                                 myProguardConfigFiles, myIncludeSystemProguardFile, myLogsDirectoryOsPath);
-    }
-
-    @NotNull
-    public Module getModule() {
-      return myModule;
-    }
-  }
-
-  private static class MyValidityState implements ValidityState {
-    private final String myTargetHashString;
-    private final String mySdkPath;
-    private final String myOutputDirPath;
-    private final String myLogsDirectoryPath;
-    private final Map<String, Long> myClassFilesMap;
-    private final Map<String, Long> myExternalJarsMap;
-    private final Map<String, Long> myConfigFileTimestamps;
-    private final boolean myIncludeSystemProguardCfg;
-
-    public MyValidityState(@NotNull IAndroidTarget target,
-                           @NotNull String sdkOsPath,
-                           @NotNull String outputJarOsPath,
-                           @NotNull VirtualFile[] classFilesDirs,
-                           @NotNull VirtualFile[] externalJars,
-                           @NotNull List<VirtualFile> proguardConfigFiles,
-                           boolean includeSystemProguardCfg,
-                           @Nullable String logsDirectoryOsPath) {
-      myTargetHashString = target.hashString();
-      mySdkPath = sdkOsPath;
-      myOutputDirPath = outputJarOsPath;
-      myIncludeSystemProguardCfg = includeSystemProguardCfg;
-
-      myClassFilesMap = new HashMap<String, Long>();
-      final HashSet<VirtualFile> visited = new HashSet<VirtualFile>();
-      for (VirtualFile dir : classFilesDirs) {
-        fillClassFilesMap(dir, visited);
-      }
-
-      myExternalJarsMap = new HashMap<String, Long>();
-      for (VirtualFile jar : externalJars) {
-        myExternalJarsMap.put(jar.getPath(), jar.getTimeStamp());
-      }
-
-      myConfigFileTimestamps = new HashMap<String, Long>();
-      for (VirtualFile file : proguardConfigFiles) {
-        myConfigFileTimestamps.put(file.getPath(), file.getTimeStamp());
-      }
-      myLogsDirectoryPath = logsDirectoryOsPath != null ? logsDirectoryOsPath : "";
-    }
-
-    private void fillClassFilesMap(VirtualFile file, Set<VirtualFile> visited) {
-      if (file.isDirectory() && visited.add(file)) {
-        for (VirtualFile child : file.getChildren()) {
-          fillClassFilesMap(child, visited);
-        }
-      }
-      else if (StdFileTypes.CLASS.equals(file.getFileType())) {
-        myClassFilesMap.put(file.getPath(), file.getTimeStamp());
-      }
-    }
-
-    public MyValidityState(@NotNull DataInput in) throws IOException {
-      myTargetHashString = in.readUTF();
-
-      mySdkPath = CompilerIOUtil.readString(in);
-      myOutputDirPath = CompilerIOUtil.readString(in);
-
-      myClassFilesMap = new HashMap<String, Long>();
-      final int classFilesCount = in.readInt();
-
-      for (int i = 0; i < classFilesCount; i++) {
-        final String path = CompilerIOUtil.readString(in);
-        final long timestamp = in.readLong();
-
-        myClassFilesMap.put(path, timestamp);
-      }
-
-      myExternalJarsMap = new HashMap<String, Long>();
-      final int externalJarsCount = in.readInt();
-
-      for (int i = 0; i < externalJarsCount; i++) {
-        final String path = CompilerIOUtil.readString(in);
-        final long timestamp = in.readLong();
-
-        myExternalJarsMap.put(path, timestamp);
-      }
-
-      myConfigFileTimestamps = new HashMap<String, Long>();
-      final int configFileCounts = in.readInt();
-
-      for (int i = 0; i < configFileCounts; i++) {
-        final String path = CompilerIOUtil.readString(in);
-        final long timestamp = in.readLong();
-        myConfigFileTimestamps.put(path, timestamp);
-      }
-      myIncludeSystemProguardCfg = in.readBoolean();
-      myLogsDirectoryPath = CompilerIOUtil.readString(in);
-    }
-
-    @Override
-    public boolean equalsTo(ValidityState otherState) {
-      if (!(otherState instanceof MyValidityState)) {
-        return false;
-      }
-
-      final MyValidityState other = (MyValidityState)otherState;
-
-      return myTargetHashString.equals(other.myTargetHashString) &&
-             mySdkPath.equals(other.mySdkPath) &&
-             myOutputDirPath.equals(other.myOutputDirPath) &&
-             myClassFilesMap.equals(other.myClassFilesMap) &&
-             myExternalJarsMap.equals(other.myExternalJarsMap) &&
-             myConfigFileTimestamps.equals(other.myConfigFileTimestamps) &&
-             myIncludeSystemProguardCfg == other.myIncludeSystemProguardCfg &&
-             myLogsDirectoryPath.equals(other.myLogsDirectoryPath);
-    }
-
-    @Override
-    public void save(DataOutput out) throws IOException {
-      out.writeUTF(myTargetHashString);
-      CompilerIOUtil.writeString(mySdkPath, out);
-      CompilerIOUtil.writeString(myOutputDirPath, out);
-
-      out.writeInt(myClassFilesMap.size());
-      for (String path : myClassFilesMap.keySet()) {
-        CompilerIOUtil.writeString(path, out);
-        out.writeLong(myClassFilesMap.get(path));
-      }
-
-      out.writeInt(myExternalJarsMap.size());
-      for (String path : myExternalJarsMap.keySet()) {
-        CompilerIOUtil.writeString(path, out);
-        out.writeLong(myExternalJarsMap.get(path));
-      }
-
-      out.writeInt(myConfigFileTimestamps.size());
-      for (String path : myConfigFileTimestamps.keySet()) {
-        CompilerIOUtil.writeString(path, out);
-        out.writeLong(myConfigFileTimestamps.get(path));
-      }
-      out.writeBoolean(myIncludeSystemProguardCfg);
-      CompilerIOUtil.writeString(myLogsDirectoryPath, out);
-    }
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/AndroidRenderscriptCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidRenderscriptCompiler.java
deleted file mode 100644
index 8ace258..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidRenderscriptCompiler.java
+++ /dev/null
@@ -1,353 +0,0 @@
-package org.jetbrains.android.compiler;
-
-
-import com.android.SdkConstants;
-import com.android.sdklib.IAndroidTarget;
-import com.intellij.facet.FacetManager;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.compiler.ex.CompileContextEx;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.ProjectFileIndex;
-import com.intellij.openapi.roots.ProjectRootManager;
-import com.intellij.openapi.util.Comparing;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.VfsUtilCore;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.containers.HashMap;
-import com.intellij.util.containers.HashSet;
-import org.jetbrains.android.compiler.tools.AndroidRenderscript;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.facet.AndroidRootUtil;
-import com.android.tools.idea.fileTypes.AndroidRenderscriptFileType;
-import org.jetbrains.android.sdk.AndroidPlatform;
-import org.jetbrains.android.util.AndroidBundle;
-import org.jetbrains.android.util.AndroidUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * @author Eugene.Kudelevsky
- */
-public class AndroidRenderscriptCompiler implements SourceGeneratingCompiler {
-  private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidRenderscriptCompiler");
-
-  private static final GenerationItem[] EMPTY_GENERATION_ITEM_ARRAY = {};
-
-  @Nullable
-  @Override
-  public VirtualFile getPresentableFile(CompileContext context, Module module, VirtualFile outputRoot, VirtualFile generatedFile) {
-    return null;
-  }
-
-  @Override
-  public GenerationItem[] getGenerationItems(final CompileContext context) {
-    return ApplicationManager.getApplication().runReadAction(new Computable<GenerationItem[]>() {
-      @Override
-      public GenerationItem[] compute() {
-        if (context.getProject().isDisposed()) {
-          return EMPTY_GENERATION_ITEM_ARRAY;
-        }
-
-        final VirtualFile[] files = context.getProjectCompileScope().getFiles(AndroidRenderscriptFileType.INSTANCE, true);
-        final Map<Module, Collection<VirtualFile>> module2files = new HashMap<Module, Collection<VirtualFile>>();
-
-        for (VirtualFile file : files) {
-          final Module module = context.getModuleByFile(file);
-
-          if (module != null) {
-            Collection<VirtualFile> filesForModule = module2files.get(module);
-
-            if (filesForModule == null) {
-              filesForModule = new ArrayList<VirtualFile>();
-              module2files.put(module, filesForModule);
-            }
-
-            filesForModule.add(file);
-          }
-        }
-        final List<GenerationItem> items = new ArrayList<GenerationItem>(files.length);
-
-        for (Map.Entry<Module, Collection<VirtualFile>> entry : module2files.entrySet()) {
-          final Module module = entry.getKey();
-          final AndroidFacet facet = FacetManager.getInstance(module).getFacetByType(AndroidFacet.ID);
-          if (facet == null) {
-            continue;
-          }
-
-          final AndroidPlatform platform = facet.getConfiguration().getAndroidPlatform();
-          if (platform == null) {
-            context.addMessage(CompilerMessageCategory.ERROR,
-                               AndroidBundle.message("android.compilation.error.specify.platform", module.getName()), null, -1, -1);
-            continue;
-          }
-
-          final IAndroidTarget target = platform.getTarget();
-          final String sdkLocation = platform.getSdkData().getPath();
-
-          final String resourceDirPath = AndroidRootUtil.getResourceDirPath(facet);
-          assert resourceDirPath != null;
-
-          addItem(entry.getValue(), facet, resourceDirPath, sdkLocation, target, items);
-        }
-        return items.toArray(new GenerationItem[items.size()]);
-      }
-    });
-  }
-
-  private static void addItem(@NotNull final Collection<VirtualFile> sourceFiles,
-                              @NotNull final AndroidFacet facet,
-                              @NotNull final String resourceDirPath,
-                              @NotNull String sdkLocation,
-                              @NotNull final IAndroidTarget target,
-                              @NotNull final List<GenerationItem> items) {
-    final String sourceRootPath = AndroidRootUtil.getRenderscriptGenSourceRootPath(facet);
-    if (sourceRootPath == null) {
-      return;
-    }
-    final String rawDirPath = resourceDirPath + '/' + SdkConstants.FD_RES_RAW;
-    items.add(new MyGenerationItem(facet.getModule(), sourceFiles, rawDirPath, sdkLocation, target));
-  }
-
-  @Override
-  public GenerationItem[] generate(final CompileContext context,
-                                   final GenerationItem[] items,
-                                   final VirtualFile outputRootDirectory) {
-    if (items == null || items.length <= 0) {
-      return EMPTY_GENERATION_ITEM_ARRAY;
-    }
-
-    context.getProgressIndicator().setText("Compiling RenderScript files...");
-    final GenerationItem[] generationItems = doGenerate(context, items, outputRootDirectory);
-    final Set<VirtualFile> generatedVFiles = new HashSet<VirtualFile>();
-    final HashSet<VirtualFile> visited = new HashSet<VirtualFile>();
-
-    outputRootDirectory.refresh(false, true);
-    AndroidUtils.collectFiles(outputRootDirectory, visited, generatedVFiles);
-
-    if (context instanceof CompileContextEx) {
-      ((CompileContextEx)context).markGenerated(generatedVFiles);
-    }
-    return generationItems;
-  }
-
-  @NotNull
-  @Override
-  public String getDescription() {
-    return AndroidBundle.message("android.renderscript.compiler.description");
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Nullable
-  @Override
-  public ValidityState createValidityState(DataInput in) throws IOException {
-    return new MyValidityState(in);
-  }
-
-  private static GenerationItem[] doGenerate(@NotNull final CompileContext context,
-                                             @NotNull final GenerationItem[] items,
-                                             VirtualFile outputRootDirectory) {
-    if (context.getProject().isDisposed()) {
-      return EMPTY_GENERATION_ITEM_ARRAY;
-    }
-
-    // we have one item per module there, so clear output directory
-    final String genRootPath = FileUtil.toSystemDependentName(outputRootDirectory.getPath());
-    final File genRootDir = new File(genRootPath);
-    if (genRootDir.exists()) {
-      if (!FileUtil.delete(genRootDir)) {
-        context.addMessage(CompilerMessageCategory.ERROR, "Cannot delete directory " + genRootPath, null, -1, -1);
-        return EMPTY_GENERATION_ITEM_ARRAY;
-      }
-      if (!genRootDir.mkdir()) {
-        context.addMessage(CompilerMessageCategory.ERROR, "Cannot create directory " + genRootPath, null, -1, -1);
-        return EMPTY_GENERATION_ITEM_ARRAY;
-      }
-    }
-
-    final List<GenerationItem> results = new ArrayList<GenerationItem>(items.length);
-    for (final GenerationItem item : items) {
-      if (item instanceof MyGenerationItem) {
-        final MyGenerationItem genItem = (MyGenerationItem)item;
-
-        if (!AndroidCompileUtil.isModuleAffected(context, genItem.myModule)) {
-          continue;
-        }
-
-        boolean success = true;
-
-        for (final VirtualFile sourceFile : genItem.myFiles) {
-          final String depFolderOsPath = getDependencyFolder(context.getProject(), sourceFile, outputRootDirectory);
-
-          try {
-            final Map<CompilerMessageCategory, List<String>> messages = AndroidCompileUtil.toCompilerMessageCategoryKeys(
-              AndroidRenderscript
-                .execute(genItem.mySdkLocation, genItem.myAndroidTarget, sourceFile.getPath(), genRootPath,
-                         depFolderOsPath,
-                         genItem.myRawDirPath));
-            AndroidCompileUtil.markDirty(outputRootDirectory, true);
-
-            ApplicationManager.getApplication().runReadAction(new Runnable() {
-              @Override
-              public void run() {
-                if (context.getProject().isDisposed()) {
-                  return;
-                }
-                addMessages(context, messages, sourceFile.getUrl());
-              }
-            });
-
-            if (messages.get(CompilerMessageCategory.ERROR).size() > 0) {
-              success = false;
-            }
-          }
-          catch (final IOException e) {
-            LOG.info(e);
-            ApplicationManager.getApplication().runReadAction(new Runnable() {
-              @Override
-              public void run() {
-                if (context.getProject().isDisposed()) return;
-                context.addMessage(CompilerMessageCategory.ERROR, e.getMessage(), sourceFile.getUrl(), -1, -1);
-              }
-            });
-            success = false;
-          }
-        }
-
-        if (success) {
-          results.add(genItem);
-        }
-      }
-    }
-    outputRootDirectory.refresh(false, true);
-    return results.toArray(new GenerationItem[results.size()]);
-  }
-
-  private static void addMessages(@NotNull final CompileContext context,
-                                  @NotNull final Map<CompilerMessageCategory, List<String>> messages,
-                                  @NotNull final String url) {
-    for (final CompilerMessageCategory category : messages.keySet()) {
-      final List<String> messageList = messages.get(category);
-      for (final String message : messageList) {
-        context.addMessage(category, message, url, -1, -1);
-      }
-    }
-  }
-
-  @Nullable
-  static String getDependencyFolder(@NotNull final Project project,
-                                    @NotNull final VirtualFile sourceFile,
-                                    @NotNull final VirtualFile genFolder) {
-    final ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex();
-
-    final VirtualFile sourceRoot = index.getSourceRootForFile(sourceFile);
-    if (sourceRoot == null) {
-      return null;
-    }
-
-    final VirtualFile parent = sourceFile.getParent();
-    if (Comparing.equal(parent, sourceRoot)) {
-      return genFolder.getPath();
-    }
-
-    final String relativePath = VfsUtilCore.getRelativePath(sourceFile.getParent(), sourceRoot, '/');
-    assert relativePath != null;
-    return genFolder.getPath() + '/' + relativePath;
-  }
-
-  private static class MyGenerationItem implements GenerationItem {
-    final Module myModule;
-    final String mySdkLocation;
-    final Collection<VirtualFile> myFiles;
-    final IAndroidTarget myAndroidTarget;
-    final String myRawDirPath;
-    private final MyValidityState myValidityState;
-
-    public MyGenerationItem(@NotNull Module module,
-                            @NotNull Collection<VirtualFile> files,
-                            @NotNull String rawDirPath,
-                            @NotNull String sdkLocation,
-                            @NotNull IAndroidTarget target) {
-      myModule = module;
-      myFiles = files;
-      myRawDirPath = rawDirPath;
-      mySdkLocation = sdkLocation;
-      myAndroidTarget = target;
-      myValidityState = new MyValidityState(myFiles);
-    }
-
-    @Override
-    @Nullable
-    public String getPath() {
-      return "";
-    }
-
-    @Override
-    @Nullable
-    public ValidityState getValidityState() {
-      return myValidityState;
-    }
-
-    @Override
-    public Module getModule() {
-      return myModule;
-    }
-
-    @Override
-    public boolean isTestSource() {
-      return false;
-    }
-  }
-
-  private static class MyValidityState implements ValidityState {
-    private final Map<String, Long> myTimestamps = new HashMap<String, Long>();
-
-    MyValidityState(DataInput in) throws IOException {
-      final int size = in.readInt();
-
-      for (int i = 0; i < size; i++) {
-        final String path = in.readUTF();
-        final long timestamp = in.readLong();
-
-        myTimestamps.put(path, timestamp);
-      }
-    }
-
-    MyValidityState(@NotNull Collection<VirtualFile> files) {
-      for (VirtualFile file : files) {
-        myTimestamps.put(file.getPath(), file.getTimeStamp());
-      }
-    }
-
-    @Override
-    public boolean equalsTo(ValidityState otherState) {
-      if (!(otherState instanceof MyValidityState)) {
-        return false;
-      }
-      return ((MyValidityState)otherState).myTimestamps.equals(myTimestamps);
-    }
-
-    @Override
-    public void save(DataOutput out) throws IOException {
-      out.writeInt(myTimestamps.size());
-
-      for (Map.Entry<String, Long> entry : myTimestamps.entrySet()) {
-        out.writeUTF(entry.getKey());
-        out.writeLong(entry.getValue());
-      }
-    }
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/AndroidResourcesPackagingCompiler.java b/android/src/org/jetbrains/android/compiler/AndroidResourcesPackagingCompiler.java
deleted file mode 100644
index 6f63ee8..0000000
--- a/android/src/org/jetbrains/android/compiler/AndroidResourcesPackagingCompiler.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * Copyright 2000-2010 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jetbrains.android.compiler;
-
-import com.android.sdklib.IAndroidTarget;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.application.ModalityState;
-import com.intellij.openapi.compiler.*;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.roots.ProjectRootManager;
-import com.intellij.openapi.util.Pair;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.LocalFileSystem;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.vfs.encoding.EncodingManager;
-import com.intellij.util.ArrayUtil;
-import org.jetbrains.android.compiler.tools.AndroidApt;
-import org.jetbrains.android.dom.manifest.Application;
-import org.jetbrains.android.dom.manifest.Manifest;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.facet.AndroidFacetConfiguration;
-import org.jetbrains.android.facet.AndroidRootUtil;
-import org.jetbrains.android.sdk.AndroidPlatform;
-import org.jetbrains.android.util.AndroidBundle;
-import org.jetbrains.android.util.AndroidUtils;
-import org.jetbrains.annotations.NotNull;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Eugene.Kudelevsky
- */
-public class AndroidResourcesPackagingCompiler implements ClassPostProcessingCompiler {
-  private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidResourcesPackagingCompiler");
-
-  public static final String RELEASE_SUFFIX = ".release";
-
-  @NotNull
-  @Override
-  public ProcessingItem[] getProcessingItems(CompileContext context) {
-    final List<ProcessingItem> items = new ArrayList<ProcessingItem>();
-    for (Module module : ModuleManager.getInstance(context.getProject()).getModules()) {
-      AndroidFacet facet = AndroidFacet.getInstance(module);
-      if (facet != null && !facet.isLibraryProject()) {
-        VirtualFile manifestFile = AndroidRootUtil.getManifestFileForCompiler(facet);
-
-        final ArrayList<String> assetDirPathsList = new ArrayList<String>();
-        collectAssetDirs(facet, assetDirPathsList);
-        final String[] assetDirPaths = ArrayUtil.toStringArray(assetDirPathsList);
-        
-        if (manifestFile == null) {
-          context.addMessage(CompilerMessageCategory.ERROR,
-                             AndroidBundle.message("android.compilation.error.manifest.not.found", module.getName()), null, -1, -1);
-          continue;
-        }
-        AndroidFacetConfiguration configuration = facet.getConfiguration();
-        VirtualFile outputDir = AndroidDexCompiler.getOutputDirectoryForDex(module);
-        if (outputDir != null) {
-          String outputPath = getOutputFile(module, outputDir).getPath();
-          
-          final AndroidPlatform platform = configuration.getAndroidPlatform();
-          
-          if (platform != null) {
-            String[] resourcesDirPaths = AndroidCompileUtil.collectResourceDirs(facet, true, context);
-            final IAndroidTarget target = platform.getTarget();
-            final int platformToolsRevision = platform.getSdkData().getPlatformToolsRevision();
-
-            if (resourcesDirPaths.length == 0) {
-              context.addMessage(CompilerMessageCategory.WARNING, "Resource directory not found for module " + module.getName(),
-                                 null, -1, -1);
-            }
-
-            items.add(new MyItem(module, target, platformToolsRevision, manifestFile, resourcesDirPaths, assetDirPaths, outputPath,
-                                 false, AndroidCompileUtil.isReleaseBuild(context)));
-            //items.add(new MyItem(module, target, manifestFile, resourcesDirPaths, assetsDirPath, outputPath + RELEASE_SUFFIX, true));
-          }
-        }
-      }
-    }
-    return items.toArray(new ProcessingItem[items.size()]);
-  }
-  
-  private static void collectAssetDirs(@NotNull AndroidFacet facet, @NotNull List<String> result) {
-    final VirtualFile assetsDir = AndroidRootUtil.getAssetsDir(facet);
-    if (assetsDir != null) {
-      result.add(FileUtil.toSystemDependentName(assetsDir.getPath()));
-    }
-    if (facet.getConfiguration().isIncludeAssetsFromLibraries()) {
-      for (AndroidFacet depFacet : AndroidUtils.getAllAndroidDependencies(facet.getModule(), true)) {
-        final VirtualFile depAssetsDir = AndroidRootUtil.getAssetsDir(depFacet);
-
-        if (depAssetsDir != null) {
-          result.add(FileUtil.toSystemDependentName(depAssetsDir.getPath()));
-        }
-      }
-    }
-  }
-
-  static File getOutputFile(Module module, VirtualFile outputDir) {
-    return new File(outputDir.getPath(), module.getName() + ".apk.res");
-  }
-
-  @Override
-  public ProcessingItem[] process(final CompileContext context, ProcessingItem[] items) {
-    if (!AndroidCompileUtil.isFullBuild(context)) {
-      return ProcessingItem.EMPTY_ARRAY;
-    }
-
-    context.getProgressIndicator().setText("Packaging Android resources...");
-    final List<ProcessingItem> result = new ArrayList<ProcessingItem>();
-    for (ProcessingItem processingItem : items) {
-      MyItem item = (MyItem)processingItem;
-
-      if (!AndroidCompileUtil.isModuleAffected(context, item.myModule)) {
-        continue;
-      }
-
-      doProcess(context, item, false);
-
-      if (context.getMessages(CompilerMessageCategory.ERROR).length == 0) {
-        doProcess(context, item, true);
-      }
-
-      if (context.getMessages(CompilerMessageCategory.ERROR).length == 0) {
-        result.add(item);
-      }
-    }
-    return result.toArray(new ProcessingItem[result.size()]);
-  }
-
-  private static void doProcess(final CompileContext context, MyItem item, boolean releasePackage) {
-    if (!AndroidPackagingCompiler.shouldGenerateApk(item.myModule, context, releasePackage)) {
-      return;
-    }
-
-    final VirtualFile preprocessedManifestFile;
-    File manifestTmpDir = null;
-
-    try {
-      if (releasePackage) {
-        preprocessedManifestFile = item.myManifestFile;
-      }
-      else {
-        final Pair<VirtualFile, File> pair = copyManifestAndSetDebuggableToTrue(item.myModule, item.myManifestFile);
-        preprocessedManifestFile = pair.getFirst();
-        manifestTmpDir = pair.getSecond();
-      }
-    }
-    catch (IOException e) {
-      LOG.info(e);
-      context.addMessage(CompilerMessageCategory.ERROR,
-                         '[' + item.myModule.getName() + "] Cannot preprocess AndroidManifest.xml for debug build",
-                         item.myManifestFile.getUrl(), -1, -1);
-      return;
-    }
-
-    final Map<VirtualFile, VirtualFile> presentableFilesMap = Collections.singletonMap(item.myManifestFile, preprocessedManifestFile);
-
-    try {
-      final String outputPath = releasePackage
-                                ? item.myOutputPath + RELEASE_SUFFIX
-                                : item.myOutputPath;
-
-      Map<CompilerMessageCategory, List<String>> messages = AndroidCompileUtil.toCompilerMessageCategoryKeys(
-        AndroidApt.packageResources(item.myAndroidTarget,
-                                    item.myPlatformToolsRevision,
-                                    preprocessedManifestFile.getPath(),
-                                    item.myResourceDirPaths,
-                                    item.myAssetsDirPaths,
-                                    outputPath, null, !releasePackage, 0, null, "", new FileFilter() {
-          @Override
-          public boolean accept(File file) {
-            final VirtualFile vFile = LocalFileSystem.getInstance().findFileByIoFile(file);
-            return vFile != null && !ProjectRootManager.getInstance(context.getProject()).getFileIndex().isIgnored(vFile);
-          }
-        }));
-
-      AndroidCompileUtil.addMessages(context, messages, presentableFilesMap, item.myModule);
-    }
-    catch (final IOException e) {
-      LOG.info(e);
-      ApplicationManager.getApplication().runReadAction(new Runnable() {
-        @Override
-        public void run() {
-          if (context.getProject().isDisposed()) return;
-          context.addMessage(CompilerMessageCategory.ERROR, e.getMessage(), null, -1, -1);
-        }
-      });
-    }
-    finally {
-      if (manifestTmpDir != null) {
-        FileUtil.delete(manifestTmpDir);
-      }
-    }
-  }
-
-  @NotNull
-  private static Pair<VirtualFile, File> copyManifestAndSetDebuggableToTrue(@NotNull final Module module, @NotNull final VirtualFile manifestFile)
-    throws IOException {
-
-    final File dir = FileUtil.createTempDirectory("android_manifest_copy", "tmp");
-    final VirtualFile vDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(dir);
-    if (vDir == null) {
-      throw new IOException("Cannot create temp directory for manifest copy");
-    }
-
-    final VirtualFile[] manifestFileCopy = new VirtualFile[1];
-
-    ApplicationManager.getApplication().invokeAndWait(new Runnable() {
-        @Override
-        public void run() {
-          ApplicationManager.getApplication().runWriteAction(new Runnable() {
-            @Override
-            public void run() {
-              try {
-                manifestFileCopy[0] = manifestFile.copy(module.getProject(), vDir, manifestFile.getName());
-              }
-              catch (IOException e) {
-                LOG.info(e);
-                return;
-              }
-
-              if (manifestFileCopy[0] == null) {
-                return;
-              }
-
-              final Manifest manifestInCopy = AndroidUtils.loadDomElement(module, manifestFileCopy[0], Manifest.class);
-              if (manifestInCopy == null) {
-                return;
-              }
-
-              final Application applicationInCopy = manifestInCopy.getApplication();
-              if (applicationInCopy == null) {
-                return;
-              }
-              applicationInCopy.getDebuggable().setValue(Boolean.TRUE.toString());
-            }
-          });
-
-          if (manifestFileCopy[0] != null) {
-            EncodingManager.getInstance().setEncoding(manifestFileCopy[0], null);
-          }
-
-          ApplicationManager.getApplication().saveAll();
-        }
-      }, ModalityState.defaultModalityState());
-
-    if (manifestFileCopy[0] == null) {
-      FileUtil.delete(dir);
-      throw new IOException("Cannot copy manifest file to " + vDir.getPath());
-    }
-    return Pair.create(manifestFileCopy[0], dir);
-  }
-
-  @NotNull
-  @Override
-  public String getDescription() {
-    return "Android Resources Packaging Compiler";
-  }
-
-  @Override
-  public boolean validateConfiguration(CompileScope scope) {
-    return true;
-  }
-
-  @Override
-  public ValidityState createValidityState(DataInput in) throws IOException {
-    return new MyValidityState(in);
-  }
-
-  private static class MyItem implements ProcessingItem {
-    final Module myModule;
-    final VirtualFile myManifestFile;
-    final IAndroidTarget myAndroidTarget;
-    final String[] myResourceDirPaths;
-    final String[] myAssetsDirPaths;
-    final String myOutputPath;
-
-    private final boolean myFileExists;
-    private final boolean myGenerateUnsignedApk;
-    private boolean myReleaseBuild;
-    final int myPlatformToolsRevision;
-
-    private MyItem(Module module,
-                   IAndroidTarget androidTarget,
-                   int platformToolsRevision,
-                   VirtualFile manifestFile,
-                   String[] resourceDirPaths,
-                   String[] assetsDirPath,
-                   String outputPath,
-                   boolean generateUnsignedApk,
-                   boolean releaseBuild) {
-      myModule = module;
-      myAndroidTarget = androidTarget;
-      myPlatformToolsRevision = platformToolsRevision;
-      myManifestFile = manifestFile;
-      myResourceDirPaths = resourceDirPaths;
-      myAssetsDirPaths = assetsDirPath;
-      myOutputPath = outputPath;
-      myFileExists = new File(outputPath).exists();
-      myGenerateUnsignedApk = generateUnsignedApk;
-      myReleaseBuild = releaseBuild;
-    }
-
-    @NotNull
-    @Override
-    public VirtualFile getFile() {
-      VirtualFile moduleFile = myModule.getModuleFile();
-      return moduleFile != null ? moduleFile : myManifestFile;
-    }
-
-    @Override
-    public ValidityState getValidityState() {
-      return new MyValidityState(myModule, myFileExists, myGenerateUnsignedApk, myReleaseBuild, myPlatformToolsRevision);
-    }
-  }
-
-  private static class MyValidityState extends ResourcesValidityState {
-    private final boolean myOutputFileExists;
-    private final boolean myGenerateUnsignedApk;
-    private final boolean myReleaseBuild;
-    private final int myPlatformToolsRevision;
-
-    public MyValidityState(Module module,
-                           boolean outputFileExists,
-                           boolean generateUnsignedApk,
-                           boolean releaseBuild,
-                           int platformToolsRevision) {
-      super(module);
-      myOutputFileExists = outputFileExists;
-      myGenerateUnsignedApk = generateUnsignedApk;
-      myReleaseBuild = releaseBuild;
-      myPlatformToolsRevision = platformToolsRevision;
-    }
-
-    public MyValidityState(DataInput is) throws IOException {
-      super(is);
-      myGenerateUnsignedApk = is.readBoolean();
-      myReleaseBuild = is.readBoolean();
-      myOutputFileExists = true;
-      myPlatformToolsRevision = is.readInt();
-    }
-
-    @Override
-    public boolean equalsTo(ValidityState otherState) {
-      if (!(otherState instanceof MyValidityState)) {
-        return false;
-      }
-      final MyValidityState otherState1 = (MyValidityState)otherState;
-      if (myOutputFileExists != otherState1.myOutputFileExists) {
-        return false;
-      }
-      if (myGenerateUnsignedApk != otherState1.myGenerateUnsignedApk) {
-        return false;
-      }
-      if (myReleaseBuild != otherState1.myReleaseBuild) {
-        return false;
-      }
-      if (myPlatformToolsRevision != otherState1.myPlatformToolsRevision) {
-        return false;
-      }
-      return super.equalsTo(otherState);
-    }
-
-    @Override
-    public void save(DataOutput os) throws IOException {
-      super.save(os);
-      os.writeBoolean(myGenerateUnsignedApk);
-      os.writeBoolean(myReleaseBuild);
-      os.writeInt(myPlatformToolsRevision);
-    }
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/ResourcesValidityState.java b/android/src/org/jetbrains/android/compiler/ResourcesValidityState.java
deleted file mode 100644
index 30f7923..0000000
--- a/android/src/org/jetbrains/android/compiler/ResourcesValidityState.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2000-2010 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jetbrains.android.compiler;
-
-import com.android.sdklib.IAndroidTarget;
-import com.intellij.openapi.compiler.ValidityState;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.vfs.VirtualFile;
-import org.jetbrains.android.facet.AndroidFacet;
-import org.jetbrains.android.facet.AndroidFacetConfiguration;
-import org.jetbrains.android.facet.AndroidRootUtil;
-import org.jetbrains.android.sdk.AndroidPlatform;
-import org.jetbrains.android.util.AndroidUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author yole
- */
-public class ResourcesValidityState implements ValidityState {
-  private final Map<String, Long> myResourceTimestamps = new HashMap<String, Long>();
-  private final String myAndroidTargetName;
-
-  public ResourcesValidityState(Module module) {
-    AndroidFacet facet = AndroidFacet.getInstance(module);
-    if (facet == null) {
-      myAndroidTargetName = "";
-      return;
-    }
-
-    final AndroidFacetConfiguration configuration = facet.getConfiguration();
-    AndroidPlatform platform = configuration.getAndroidPlatform();
-    IAndroidTarget target = platform != null ? platform.getTarget() : null;
-    myAndroidTargetName = target != null ? target.getFullName() : "";
-
-    // we need to use getManifestFile, not getManifestFileForCompiler, because MavenResourceCompiler spoils filtered manifest and it
-    // becomes dirty in the next session. Actually we can pass filtered manifest to compiler ONLY after AndroidMavenResourcesCompiler
-    // performed task, but MavenResourceCompiler not yet
-
-    VirtualFile manifestFile = AndroidRootUtil.getManifestFile(facet);
-    if (manifestFile != null) {
-      myResourceTimestamps.put(manifestFile.getPath(), manifestFile.getTimeStamp());
-    }
-    VirtualFile resourcesDir = getResourcesDir(facet);
-    if (resourcesDir != null) {
-      collectFiles(resourcesDir);
-    }
-    VirtualFile assetsDir = AndroidRootUtil.getAssetsDir(facet);
-    if (assetsDir != null) {
-      collectFiles(assetsDir);
-    }
-    for (AndroidFacet depFacet : AndroidUtils.getAllAndroidDependencies(module, true)) {
-      VirtualFile depManifest = AndroidRootUtil.getManifestFile(depFacet);
-      if (depManifest != null) {
-        myResourceTimestamps.put(depManifest.getPath(), depManifest.getTimeStamp());
-      }
-      VirtualFile depResDir = getResourcesDir(depFacet);
-      if (depResDir != null) {
-        collectFiles(depResDir);
-      }
-      if (configuration.isIncludeAssetsFromLibraries()) {
-        final VirtualFile depAssetDir = AndroidRootUtil.getAssetsDir(depFacet);
-        if (depAssetDir != null) {
-          collectFiles(depAssetDir);
-        }
-      }
-    }
-  }
-
-  @Nullable
-  private static VirtualFile getResourcesDir(@NotNull AndroidFacet facet) {
-    // same as with manifest file we check timestamps of NOT filtered resources, because MavenResourceCompiler spoils
-    // filtered ones and it and they becomes dirty in the next session. Actually we can pass filtered resources to compiler ONLY after
-    // AndroidMavenResourcesCompiler performed task, but MavenResourceCompiler not yet
-
-    VirtualFile dir = AndroidAptCompiler.getResourceDirForApkCompiler(facet);
-    if (dir != null) {
-      VirtualFile parent = dir.getParent();
-      if ("combined-resources".equals(parent.getName())) {
-        return dir;
-      }
-    }
-    return AndroidRootUtil.getResourceDir(facet);
-  }
-
-  private void collectFiles(VirtualFile resourcesDir) {
-    for (VirtualFile child : resourcesDir.getChildren()) {
-      if (child.isDirectory()) {
-        collectFiles(child);
-      }
-      else {
-        myResourceTimestamps.put(child.getPath(), child.getTimeStamp());
-      }
-    }
-  }
-
-  public ResourcesValidityState(DataInput is) throws IOException {
-    int count = is.readInt();
-    for (int i = 0; i < count; i++) {
-      String path = is.readUTF();
-      long timestamp = is.readLong();
-      myResourceTimestamps.put(path, timestamp);
-    }
-    myAndroidTargetName = is.readUTF();
-  }
-
-  @Override
-  public boolean equalsTo(ValidityState otherState) {
-    if (!(otherState instanceof ResourcesValidityState)) {
-      return false;
-    }
-    ResourcesValidityState rhs = (ResourcesValidityState)otherState;
-    if (!myResourceTimestamps.equals(rhs.myResourceTimestamps)) {
-      return false;
-    }
-    return true;
-  }
-
-  @Override
-  public void save(DataOutput os) throws IOException {
-    os.writeInt(myResourceTimestamps.size());
-    for (Map.Entry<String, Long> e : myResourceTimestamps.entrySet()) {
-      os.writeUTF(e.getKey());
-      os.writeLong(e.getValue());
-    }
-    os.writeUTF(myAndroidTargetName);
-  }
-}
diff --git a/android/src/org/jetbrains/android/compiler/artifact/AndroidFinalPackageElement.java b/android/src/org/jetbrains/android/compiler/artifact/AndroidFinalPackageElement.java
index d22ed96..31a85e5 100644
--- a/android/src/org/jetbrains/android/compiler/artifact/AndroidFinalPackageElement.java
+++ b/android/src/org/jetbrains/android/compiler/artifact/AndroidFinalPackageElement.java
@@ -6,10 +6,12 @@
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.JarFileSystem;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.packaging.artifacts.ArtifactType;
-import com.intellij.packaging.elements.*;
+import com.intellij.packaging.elements.AntCopyInstructionCreator;
+import com.intellij.packaging.elements.ArtifactAntGenerationContext;
+import com.intellij.packaging.elements.PackagingElement;
+import com.intellij.packaging.elements.PackagingElementResolvingContext;
 import com.intellij.packaging.impl.elements.FacetBasedPackagingElement;
 import com.intellij.packaging.impl.elements.ModuleOutputPackagingElement;
 import com.intellij.packaging.impl.ui.DelegatedPackagingElementPresentation;
@@ -81,20 +83,6 @@
     return Collections.emptyList();
   }
 
-  @Override
-  public void computeIncrementalCompilerInstructions(@NotNull IncrementalCompilerInstructionCreator creator,
-                                                     @NotNull PackagingElementResolvingContext resolvingContext,
-                                                     @NotNull ArtifactIncrementalCompilerContext compilerContext,
-                                                     @NotNull ArtifactType artifactType) {
-    final String apkPath = getApkPath();
-    if (apkPath != null) {
-      final VirtualFile apk = JarFileSystem.getInstance().findFileByPath(apkPath);
-      if (apk != null && apk.isValid() && apk.isDirectory()) {
-        creator.addDirectoryCopyInstructions(apk);
-      }
-    }
-  }
-
   @Nullable
   public AndroidFacet getFacet() {
     return myFacetPointer != null ? myFacetPointer.getFacet() : null;
diff --git a/android/src/org/jetbrains/android/dom/AndroidXmlExtension.java b/android/src/org/jetbrains/android/dom/AndroidXmlExtension.java
index b52184b..216259c 100644
--- a/android/src/org/jetbrains/android/dom/AndroidXmlExtension.java
+++ b/android/src/org/jetbrains/android/dom/AndroidXmlExtension.java
@@ -19,7 +19,6 @@
 import com.intellij.lang.ASTNode;
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.impl.DirectoryIndex;
 import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.util.TextRange;
 import com.intellij.psi.PsiFile;
@@ -49,10 +48,6 @@
   public boolean isAvailable(final PsiFile file) {
     if (file instanceof XmlFile) {
       Project project = file.getProject();
-      if (!project.isDefault() && !DirectoryIndex.getInstance(project).isInitialized()) {
-        return false;
-      }
-
       if (AndroidFacet.getInstance(file) == null) {
         return false;
       }
diff --git a/android/src/org/jetbrains/android/dom/animation/AndroidAnimationUtils.java b/android/src/org/jetbrains/android/dom/animation/AndroidAnimationUtils.java
index c430e56..d5275d3 100644
--- a/android/src/org/jetbrains/android/dom/animation/AndroidAnimationUtils.java
+++ b/android/src/org/jetbrains/android/dom/animation/AndroidAnimationUtils.java
@@ -42,7 +42,8 @@
   private AndroidAnimationUtils() {
   }
 
-  private static final String[] TAG_NAMES = {"set", "alpha", "scale", "translate", "rotate", "layoutAnimation", "gridLayoutAnimation"};
+  private static final String[] TAG_NAMES = {"set", "alpha", "scale", "translate",
+    "rotate", "layoutAnimation","gridLayoutAnimation", "animation-list"};
 
   public static String getStyleableNameByTagName(@NotNull String tagName) {
     if (tagName.equals("set")) {
diff --git a/android/src/org/jetbrains/android/dom/converters/FlagConverter.java b/android/src/org/jetbrains/android/dom/converters/FlagConverter.java
index c5338c7..389c38e 100644
--- a/android/src/org/jetbrains/android/dom/converters/FlagConverter.java
+++ b/android/src/org/jetbrains/android/dom/converters/FlagConverter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,16 +15,12 @@
  */
 package org.jetbrains.android.dom.converters;
 
-import com.intellij.openapi.util.TextRange;
 import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiReference;
 import com.intellij.util.ArrayUtil;
 import com.intellij.util.xml.ConvertContext;
-import com.intellij.util.xml.GenericAttributeValue;
 import com.intellij.util.xml.GenericDomValue;
 import com.intellij.util.xml.ResolvingConverter;
 import com.intellij.util.xml.converters.DelimitedListConverter;
-import com.intellij.xml.util.XmlTagUtil;
 import org.jetbrains.android.util.AndroidBundle;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -77,25 +73,6 @@
     return ArrayUtil.toStringArray(variants);
   }
 
-  @NotNull
-  @Override
-  protected PsiReference createPsiReference(PsiElement element,
-                                            int start,
-                                            int end,
-                                            ConvertContext context,
-                                            GenericDomValue<List<String>> value,
-                                            boolean delimitersOnly) {
-    return new MyPsiReference(element, getTextRange(value, start, end), context, value, delimitersOnly);
-  }
-
-  protected static TextRange getTextRange(GenericDomValue value, int start, int end) {
-    if (value instanceof GenericAttributeValue) {
-      return new TextRange(start, end);
-    }
-    TextRange tagRange = XmlTagUtil.getTrimmedValueRange(value.getXmlTag());
-    return new TextRange(tagRange.getStartOffset() + start - 1, tagRange.getStartOffset() + end - 1);
-  }
-
   @Override
   protected PsiElement resolveReference(@Nullable final String s, final ConvertContext context) {
     return s == null ? null : context.getReferenceXmlElement();
diff --git a/android/src/org/jetbrains/android/dom/drawable/AnimationListDomFileDescription.java b/android/src/org/jetbrains/android/dom/drawable/AnimationListDomFileDescription.java
index 17c0578..23e351f 100644
--- a/android/src/org/jetbrains/android/dom/drawable/AnimationListDomFileDescription.java
+++ b/android/src/org/jetbrains/android/dom/drawable/AnimationListDomFileDescription.java
@@ -16,7 +16,7 @@
   @NonNls static final String ANIMATION_LIST_TAG = "animation-list";
 
   public AnimationListDomFileDescription() {
-    super(AnimationList.class, ANIMATION_LIST_TAG, ResourceType.DRAWABLE.getName());
+    super(AnimationList.class, ANIMATION_LIST_TAG, ResourceType.DRAWABLE.getName(), ResourceType.ANIM.getName());
   }
 
   @Override
diff --git a/android/src/org/jetbrains/android/exportSignedPackage/ApkStep.java b/android/src/org/jetbrains/android/exportSignedPackage/ApkStep.java
index 4254308..4477e1e 100644
--- a/android/src/org/jetbrains/android/exportSignedPackage/ApkStep.java
+++ b/android/src/org/jetbrains/android/exportSignedPackage/ApkStep.java
@@ -29,7 +29,6 @@
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.util.ArrayUtil;
 import org.jetbrains.android.compiler.AndroidCompileUtil;
-import org.jetbrains.android.compiler.AndroidProguardCompiler;
 import org.jetbrains.android.compiler.artifact.ProGuardConfigFilesPanel;
 import org.jetbrains.android.facet.AndroidFacet;
 import org.jetbrains.android.facet.AndroidFacetConfiguration;
@@ -253,7 +252,7 @@
           throw new CommitStepException("Cannot find file " + path);
         }
       }
-      compileScope.putUserData(AndroidProguardCompiler.PROGUARD_CFG_PATHS_KEY, proguardPathsStr);
+      compileScope.putUserData(AndroidCompileUtil.PROGUARD_CFG_PATHS_KEY, proguardPathsStr);
     }
     myWizard.setCompileScope(compileScope);
     myWizard.setApkPath(apkPath);
diff --git a/android/src/org/jetbrains/android/facet/AndroidFacet.java b/android/src/org/jetbrains/android/facet/AndroidFacet.java
index d12e964..5b5bfc2 100644
--- a/android/src/org/jetbrains/android/facet/AndroidFacet.java
+++ b/android/src/org/jetbrains/android/facet/AndroidFacet.java
@@ -31,6 +31,7 @@
 import com.android.tools.idea.model.AndroidModuleInfo;
 import com.android.tools.idea.rendering.*;
 import com.android.tools.idea.run.LaunchCompatibility;
+import com.android.tools.idea.templates.TemplateManager;
 import com.android.tools.idea.sdk.DefaultSdks;
 import com.android.tools.idea.startup.AndroidStudioSpecificInitializer;
 import com.android.utils.ILogger;
@@ -46,6 +47,7 @@
 import com.intellij.facet.FacetManager;
 import com.intellij.facet.FacetTypeId;
 import com.intellij.facet.FacetTypeRegistry;
+import com.intellij.openapi.actionSystem.*;
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.module.Module;
@@ -79,7 +81,6 @@
 import com.intellij.util.containers.HashSet;
 import com.intellij.util.xml.ConvertContext;
 import com.intellij.util.xml.DomElement;
-import org.jetbrains.android.compiler.AndroidAptCompiler;
 import org.jetbrains.android.compiler.AndroidAutogeneratorMode;
 import org.jetbrains.android.compiler.AndroidCompileUtil;
 import org.jetbrains.android.dom.manifest.Manifest;
@@ -110,6 +111,7 @@
   private static final Object APP_RESOURCES_LOCK = new Object();
   private static final Object PROJECT_RESOURCES_LOCK = new Object();
   private static final Object MODULE_RESOURCES_LOCK = new Object();
+  private static boolean ourDynamicTemplateMenuCreated;
 
   private AvdManager myAvdManager = null;
   private AndroidSdkData mySdkData;
@@ -605,6 +607,20 @@
     }
   }
 
+  public static void createDynamicTemplateMenu() {
+    if (ourDynamicTemplateMenuCreated) {
+      return;
+    }
+    ourDynamicTemplateMenuCreated = true;
+    DefaultActionGroup newGroup = (DefaultActionGroup)ActionManager.getInstance().getAction("NewGroup");
+    newGroup.addSeparator();
+    final ActionGroup menu = TemplateManager.getInstance().getTemplateCreationMenu(null);
+
+    if (menu != null) {
+      newGroup.add(menu, new Constraints(Anchor.AFTER, "NewFromTemplate"));
+    }
+  }
+
   @Override
   public void initFacet() {
     StartupManager.getInstance(getModule().getProject()).runWhenProjectIsInitialized(new Runnable() {
@@ -626,7 +642,7 @@
                 return;
               }
 
-              if (AndroidAptCompiler.isToCompileModule(module, getConfiguration())) {
+              if (true) {
                 AndroidCompileUtil.generate(module, AndroidAutogeneratorMode.AAPT);
               }
               AndroidCompileUtil.generate(module, AndroidAutogeneratorMode.AIDL);
@@ -665,6 +681,7 @@
         });
       }
     });
+    createDynamicTemplateMenu();
   }
 
   private void addResourceFolderToSdkRootsIfNecessary() {
diff --git a/android/src/org/jetbrains/android/facet/AndroidFacetEditorTab.java b/android/src/org/jetbrains/android/facet/AndroidFacetEditorTab.java
index a2fa362..a0fb212 100644
--- a/android/src/org/jetbrains/android/facet/AndroidFacetEditorTab.java
+++ b/android/src/org/jetbrains/android/facet/AndroidFacetEditorTab.java
@@ -44,7 +44,6 @@
 import com.intellij.util.Function;
 import com.intellij.util.PathUtil;
 import com.intellij.util.ui.UIUtil;
-import org.jetbrains.android.compiler.AndroidAptCompiler;
 import org.jetbrains.android.compiler.AndroidAutogeneratorMode;
 import org.jetbrains.android.compiler.AndroidCompileUtil;
 import org.jetbrains.android.compiler.artifact.ProGuardConfigFilesPanel;
@@ -153,9 +152,7 @@
     myNativeLibsFolder.getButton().addActionListener(new MyFolderFieldListener(myNativeLibsFolder,
                                                                                AndroidRootUtil.getLibsDir(facet), false, null));
 
-    myCustomAptSourceDirField.getButton().addActionListener(new MyFolderFieldListener(myCustomAptSourceDirField,
-                                                                                      AndroidAptCompiler.getCustomResourceDirForApt(facet),
-                                                                                      false, null));
+    myCustomAptSourceDirField.getButton().addActionListener(new MyFolderFieldListener(myCustomAptSourceDirField, getCustomResourceDirForApt(facet), false, null));
 
     myRunProguardCheckBox.addActionListener(new ActionListener() {
       @Override
@@ -266,6 +263,11 @@
     myProguardLogsDirectoryField.getButton().addActionListener(new MyFolderFieldListener(myProguardLogsDirectoryField, null, false, null));
   }
 
+  @Nullable
+  public static VirtualFile getCustomResourceDirForApt(@NotNull AndroidFacet facet) {
+    return AndroidRootUtil.getFileByRelativeModulePath(facet.getModule(), facet.getProperties().CUSTOM_APK_RESOURCE_FOLDER, false);
+  }
+
   private void updateLibAndAppSpecificFields() {
     boolean lib = myIsLibraryProjectCheckbox.isSelected();
     myAssetsFolderField.setEnabled(!lib);
@@ -583,8 +585,6 @@
     myConfiguration.getState().PROGUARD_LOGS_FOLDER_RELATIVE_PATH =
       absProguardLogsPath.length() > 0 ? '/' + getAndCheckRelativePath(absProguardLogsPath, false) : "";
 
-    runApt = runApt && AndroidAptCompiler.isToCompileModule(myContext.getModule(), myConfiguration);
-
     if (runApt || runIdl) {
       final Module module = myContext.getModule();
 
diff --git a/android/src/org/jetbrains/android/facet/AndroidResourceFilesListener.java b/android/src/org/jetbrains/android/facet/AndroidResourceFilesListener.java
index 5ce021b..0cb4dfa 100644
--- a/android/src/org/jetbrains/android/facet/AndroidResourceFilesListener.java
+++ b/android/src/org/jetbrains/android/facet/AndroidResourceFilesListener.java
@@ -37,7 +37,6 @@
 import com.intellij.util.containers.MultiMap;
 import com.intellij.util.ui.update.MergingUpdateQueue;
 import com.intellij.util.ui.update.Update;
-import org.jetbrains.android.compiler.AndroidAptCompiler;
 import org.jetbrains.android.compiler.AndroidAutogeneratorMode;
 import org.jetbrains.android.compiler.AndroidCompileUtil;
 import org.jetbrains.android.dom.manifest.Manifest;
@@ -215,18 +214,16 @@
       final List<AndroidAutogeneratorMode> modes = new ArrayList<AndroidAutogeneratorMode>();
 
       if (Comparing.equal(manifestFile, file)) {
-        if (AndroidAptCompiler.isToCompileModule(module, facet.getConfiguration())) {
-          final Manifest manifest = facet.getManifest();
-          final String aPackage = manifest != null ? manifest.getPackage().getValue() : null;
-          final String cachedPackage = facet.getUserData(CACHED_PACKAGE_KEY);
+        final Manifest manifest = facet.getManifest();
+        final String aPackage = manifest != null ? manifest.getPackage().getValue() : null;
+        final String cachedPackage = facet.getUserData(CACHED_PACKAGE_KEY);
 
-          if (cachedPackage != null && !cachedPackage.equals(aPackage)) {
-            String aptGenDirPath = AndroidRootUtil.getAptGenSourceRootPath(facet);
-            AndroidCompileUtil.removeDuplicatingClasses(module, cachedPackage, AndroidUtils.R_CLASS_NAME, null, aptGenDirPath);
-          }
-          facet.putUserData(CACHED_PACKAGE_KEY, aPackage);
-          modes.add(AndroidAutogeneratorMode.AAPT);
+        if (cachedPackage != null && !cachedPackage.equals(aPackage)) {
+          String aptGenDirPath = AndroidRootUtil.getAptGenSourceRootPath(facet);
+          AndroidCompileUtil.removeDuplicatingClasses(module, cachedPackage, AndroidUtils.R_CLASS_NAME, null, aptGenDirPath);
         }
+        facet.putUserData(CACHED_PACKAGE_KEY, aPackage);
+        modes.add(AndroidAutogeneratorMode.AAPT);
         modes.add(AndroidAutogeneratorMode.BUILDCONFIG);
       }
       else if (file.getFileType() == AndroidIdlFileType.ourFileType) {
diff --git a/android/src/org/jetbrains/android/facet/AndroidRootUtil.java b/android/src/org/jetbrains/android/facet/AndroidRootUtil.java
index fa14cd2..3672001 100644
--- a/android/src/org/jetbrains/android/facet/AndroidRootUtil.java
+++ b/android/src/org/jetbrains/android/facet/AndroidRootUtil.java
@@ -472,7 +472,7 @@
       final Properties properties = new Properties();
       try {
         properties.load(new FileInputStream(new File(vFile.getPath())));
-        return new Pair<Properties, VirtualFile>(properties, vFile);
+        return Pair.create(properties, vFile);
       }
       catch (IOException e) {
         LOG.info(e);
diff --git a/android/src/org/jetbrains/android/facet/IdeaSourceProvider.java b/android/src/org/jetbrains/android/facet/IdeaSourceProvider.java
index 665b11d..a245549 100644
--- a/android/src/org/jetbrains/android/facet/IdeaSourceProvider.java
+++ b/android/src/org/jetbrains/android/facet/IdeaSourceProvider.java
@@ -565,13 +565,13 @@
 
     if (facet.isGradleProject()) {
       for (IdeaSourceProvider provider : getCurrentSourceProviders(facet)) {
-        if (provider.getManifestFile() == candidate) {
+        if (candidate.equals(provider.getManifestFile())) {
           return true;
         }
       }
       return false;
     } else {
-      return candidate == facet.getMainIdeaSourceSet().getManifestFile();
+      return candidate.equals(facet.getMainIdeaSourceSet().getManifestFile());
     }
   }
 
diff --git a/android/src/org/jetbrains/android/formatter/AndroidXmlPredefinedCodeStyle.java b/android/src/org/jetbrains/android/formatter/AndroidXmlPredefinedCodeStyle.java
index 2984bc0..c198af8 100644
--- a/android/src/org/jetbrains/android/formatter/AndroidXmlPredefinedCodeStyle.java
+++ b/android/src/org/jetbrains/android/formatter/AndroidXmlPredefinedCodeStyle.java
@@ -6,9 +6,11 @@
 import com.intellij.psi.codeStyle.CodeStyleSettings;
 import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
 import com.intellij.psi.codeStyle.PredefinedCodeStyle;
+import com.intellij.psi.codeStyle.arrangement.group.ArrangementGroupingRule;
 import com.intellij.psi.codeStyle.arrangement.match.StdArrangementMatchRule;
-import com.intellij.psi.codeStyle.arrangement.std.StdRulePriorityAwareSettings;
+import com.intellij.psi.codeStyle.arrangement.std.StdArrangementSettings;
 import com.intellij.psi.formatter.xml.XmlCodeStyleSettings;
+import com.intellij.util.containers.ContainerUtil;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -61,7 +63,8 @@
     rules.add(attrArrangementRule(".*", ".*", BY_NAME));
     // TODO: Should sort name:"color",namespace:"" to the end (primarily for color state lists)
     final CommonCodeStyleSettings xmlCommonSettings = settings.getCommonSettings(XMLLanguage.INSTANCE);
-    xmlCommonSettings.setArrangementSettings(new StdRulePriorityAwareSettings(rules));
+    xmlCommonSettings.setArrangementSettings(
+      StdArrangementSettings.createByMatchRules(ContainerUtil.<ArrangementGroupingRule>emptyList(), rules));
     xmlCommonSettings.FORCE_REARRANGE_MODE = CommonCodeStyleSettings.REARRANGE_ALWAYS;
   }
 }
diff --git a/android/src/org/jetbrains/android/inspections/lint/AndroidLintUtil.java b/android/src/org/jetbrains/android/inspections/lint/AndroidLintUtil.java
index 6c56a70..9e065bb 100644
--- a/android/src/org/jetbrains/android/inspections/lint/AndroidLintUtil.java
+++ b/android/src/org/jetbrains/android/inspections/lint/AndroidLintUtil.java
@@ -47,7 +47,7 @@
     final AndroidLintInspectionBase inspection = (AndroidLintInspectionBase)profile.getUnwrappedTool(inspectionShortName, context);
     if (inspection == null) return null;
     final HighlightDisplayLevel errorLevel = profile.getErrorLevel(key, context);
-    return new Pair<AndroidLintInspectionBase, HighlightDisplayLevel>(inspection,
-                                                                      errorLevel != null ? errorLevel : HighlightDisplayLevel.WARNING);
+    return Pair.create(inspection,
+                       errorLevel != null ? errorLevel : HighlightDisplayLevel.WARNING);
   }
 }
diff --git a/android/src/org/jetbrains/android/maven/AndroidFacetImporterBase.java b/android/src/org/jetbrains/android/maven/AndroidFacetImporterBase.java
index 3189150..b1ba3cd 100644
--- a/android/src/org/jetbrains/android/maven/AndroidFacetImporterBase.java
+++ b/android/src/org/jetbrains/android/maven/AndroidFacetImporterBase.java
@@ -280,7 +280,7 @@
                                                            Map<MavenProject, String> mavenProject2ModuleName,
                                                            List<MavenProjectsProcessorTask> tasks) {
     final ModifiableRootModel rootModel = rootModelAdapter.getRootModel();
-    removeExtApklibDependencies(rootModel, modelsProvider);
+    removeUselessDependencies(rootModel, modelsProvider, mavenProject);
 
     for (MavenArtifact depArtifact : mavenProject.getDependencies()) {
       if (mavenTree.findProject(depArtifact) != null) {
@@ -457,8 +457,8 @@
     return null;
   }
 
-  private static void removeExtApklibDependencies(ModifiableRootModel modifiableRootModel,
-                                                  MavenModifiableModelsProvider modelsProvider) {
+  private static void removeUselessDependencies(ModifiableRootModel modifiableRootModel,
+                                                MavenModifiableModelsProvider modelsProvider, MavenProject mavenProject) {
     for (OrderEntry entry : modifiableRootModel.getOrderEntries()) {
       if (entry instanceof ModuleOrderEntry) {
         final Module depModule = ((ModuleOrderEntry)entry).getModule();
@@ -466,13 +466,37 @@
           modifiableRootModel.removeOrderEntry(entry);
         }
       }
-      else if (entry instanceof LibraryOrderEntry &&
-               containsDependencyOnApklibFile((LibraryOrderEntry)entry, modelsProvider)) {
-        modifiableRootModel.removeOrderEntry(entry);
+      else if (entry instanceof LibraryOrderEntry) {
+        final LibraryOrderEntry libOrderEntry = (LibraryOrderEntry)entry;
+
+        if (containsDependencyOnApklibFile(libOrderEntry, modelsProvider) ||
+            pointsIntoUnpackedLibsDir(libOrderEntry, modelsProvider, mavenProject)) {
+          modifiableRootModel.removeOrderEntry(entry);
+        }
       }
     }
   }
 
+  private static boolean pointsIntoUnpackedLibsDir(@NotNull LibraryOrderEntry entry,
+                                                   @NotNull MavenModifiableModelsProvider provider,
+                                                   @NotNull MavenProject mavenProject) {
+    final Library library = entry.getLibrary();
+
+    if (library == null) {
+      return false;
+    }
+    final Library.ModifiableModel libraryModel = provider.getLibraryModel(library);
+    final String[] urls = libraryModel.getUrls(OrderRootType.CLASSES);
+    final String unpackedLibsDir = FileUtil.toCanonicalPath(mavenProject.getBuildDirectory()) + "/unpacked-libs";
+
+    for (String url : urls) {
+      if (VfsUtilCore.urlToPath(url).startsWith(unpackedLibsDir)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   private static boolean containsDependencyOnApklibFile(@NotNull LibraryOrderEntry libraryOrderEntry,
                                                         @NotNull MavenModifiableModelsProvider modelsProvider) {
     final Library library = libraryOrderEntry.getLibrary();
diff --git a/android/src/org/jetbrains/android/maven/AndroidMavenProviderImpl.java b/android/src/org/jetbrains/android/maven/AndroidMavenProviderImpl.java
index 8040eac..bf2ea60 100644
--- a/android/src/org/jetbrains/android/maven/AndroidMavenProviderImpl.java
+++ b/android/src/org/jetbrains/android/maven/AndroidMavenProviderImpl.java
@@ -28,7 +28,6 @@
 import org.jetbrains.android.facet.AndroidRootUtil;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.idea.maven.compiler.MavenResourceCompiler;
 import org.jetbrains.idea.maven.model.MavenArtifact;
 import org.jetbrains.idea.maven.model.MavenResource;
 import org.jetbrains.idea.maven.project.MavenProject;
@@ -38,6 +37,7 @@
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.regex.Pattern;
 
@@ -87,8 +87,8 @@
         VirtualFile resDir = LocalFileSystem.getInstance().findFileByPath(resource.getDirectory());
         if (resDir == null) continue;
 
-        List<Pattern> includes = MavenResourceCompiler.collectPatterns(resource.getIncludes(), "**/*");
-        List<Pattern> excludes = MavenResourceCompiler.collectPatterns(resource.getExcludes(), null);
+        List<Pattern> includes = collectPatterns(resource.getIncludes(), "**/*");
+        List<Pattern> excludes = collectPatterns(resource.getExcludes(), null);
         final String resourceTargetPath = resource.getTargetPath();
         if (resourceTargetPath != null) {
           String targetPath = FileUtil.toSystemIndependentName(resourceTargetPath);
@@ -102,6 +102,18 @@
     return false;
   }
 
+  private static List<Pattern> collectPatterns(@Nullable List<String> values, @Nullable String defaultValue) {
+    List<Pattern> result = new ArrayList<Pattern>();
+    if (values == null || values.isEmpty()) {
+      if (defaultValue == null) return Collections.emptyList();
+      return MavenUtil.collectPattern(defaultValue, result);
+    }
+    for (String each : values) {
+      MavenUtil.collectPattern(each, result);
+    }
+    return result;
+  }
+
   static boolean processResources(Project project,
                                   VirtualFile sourceRoot,
                                   VirtualFile file,
diff --git a/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java b/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java
index bf6d3b6..b514dc3 100644
--- a/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java
+++ b/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java
@@ -733,7 +733,7 @@
   @Override
   public ModuleWizardStep modifySettingsStep(@NotNull final SettingsStep settingsStep) {
     if (myProjectType == null) {
-      return super.modifySettingsStep(settingsStep);
+      return super.modifyProjectTypeStep(settingsStep);
     }
     switch (myProjectType) {
 
@@ -745,7 +745,7 @@
         return new AndroidTestModifiedSettingsStep(this, settingsStep);
       default:
         LOG.error("Unknown project type " + myProjectType);
-        return super.modifySettingsStep(settingsStep);
+        return super.modifyProjectTypeStep(settingsStep);
     }
   }
 
diff --git a/android/src/org/jetbrains/android/projectView/ResourceQualifierSwitcher.java b/android/src/org/jetbrains/android/projectView/ResourceQualifierSwitcher.java
index ae59e0d..6c34fa6 100644
--- a/android/src/org/jetbrains/android/projectView/ResourceQualifierSwitcher.java
+++ b/android/src/org/jetbrains/android/projectView/ResourceQualifierSwitcher.java
@@ -19,6 +19,7 @@
 import com.intellij.ui.EditorNotifications;
 import com.intellij.util.containers.BidirectionalMap;
 import org.jetbrains.android.facet.AndroidFacet;
+import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
@@ -95,7 +96,7 @@
     private final VirtualFile myFile;
     private final BidirectionalMap<String, VirtualFile> myQualifiers;
 
-    public ResourceQualifierSwitcherPanel(final Project project, final VirtualFile file, BidirectionalMap<String, VirtualFile> qualifiers) {
+    public ResourceQualifierSwitcherPanel(final Project project, @NotNull final VirtualFile file, BidirectionalMap<String, VirtualFile> qualifiers) {
       super(new BorderLayout());
       myProject = project;
       myFile = file;
@@ -126,7 +127,7 @@
 
     private void switchToFile(String qualifier) {
       VirtualFile newFile = myQualifiers.get(qualifier);
-      if (newFile != myFile) {
+      if (!myFile.equals(newFile)) {
         FileEditorManager.getInstance(myProject).openFile(newFile, true);
       }
     }
diff --git a/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java b/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java
index 4893283..378846a 100644
--- a/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java
+++ b/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java
@@ -179,7 +179,7 @@
       if ((files == null || files.contains(file)) && file.isValid()) {
         final T element = AndroidUtils.loadDomElement(myProject, file, elementType);
         if (element != null) {
-          result.add(new Pair<T, VirtualFile>(element, file));
+          result.add(Pair.create(element, file));
         }
       }
     }
diff --git a/android/src/org/jetbrains/android/run/AndroidRunConfiguration.java b/android/src/org/jetbrains/android/run/AndroidRunConfiguration.java
index c70fc61..d33d899 100755
--- a/android/src/org/jetbrains/android/run/AndroidRunConfiguration.java
+++ b/android/src/org/jetbrains/android/run/AndroidRunConfiguration.java
@@ -81,7 +81,7 @@
 
   @Override
   protected Pair<Boolean, String> supportsRunningLibraryProjects(@NotNull AndroidFacet facet) {
-    return new Pair<Boolean, String>(Boolean.FALSE, AndroidBundle.message("android.cannot.run.library.project.error"));
+    return Pair.create(Boolean.FALSE, AndroidBundle.message("android.cannot.run.library.project.error"));
   }
 
   @Override
diff --git a/android/src/org/jetbrains/android/run/testing/AndroidTestRunConfiguration.java b/android/src/org/jetbrains/android/run/testing/AndroidTestRunConfiguration.java
index fb28d0a..a6f6d57 100644
--- a/android/src/org/jetbrains/android/run/testing/AndroidTestRunConfiguration.java
+++ b/android/src/org/jetbrains/android/run/testing/AndroidTestRunConfiguration.java
@@ -88,12 +88,12 @@
   protected Pair<Boolean, String> supportsRunningLibraryProjects(@NotNull AndroidFacet facet) {
     if (!facet.isGradleProject()) {
       // Non Gradle projects always require an application
-      return new Pair<Boolean, String>(Boolean.FALSE, AndroidBundle.message("android.cannot.run.library.project.error"));
+      return Pair.create(Boolean.FALSE, AndroidBundle.message("android.cannot.run.library.project.error"));
     }
 
     final IdeaAndroidProject project = facet.getIdeaAndroidProject();
     if (project == null) {
-      return new Pair<Boolean, String>(Boolean.FALSE, AndroidBundle.message("android.cannot.run.library.project.error"));
+      return Pair.create(Boolean.FALSE, AndroidBundle.message("android.cannot.run.library.project.error"));
     }
 
     // Gradle only supports testing against a single build type (which could be anything, but is "debug" build type by default)
diff --git a/android/testData/dom/anim/root1.xml b/android/testData/dom/anim/root1.xml
new file mode 100644
index 0000000..0a2bd26
--- /dev/null
+++ b/android/testData/dom/anim/root1.xml
@@ -0,0 +1 @@
+<animation-li<caret>
\ No newline at end of file
diff --git a/android/testData/dom/anim/root1_after.xml b/android/testData/dom/anim/root1_after.xml
new file mode 100644
index 0000000..a89c054
--- /dev/null
+++ b/android/testData/dom/anim/root1_after.xml
@@ -0,0 +1 @@
+<animation-list
\ No newline at end of file
diff --git a/android/testData/dom/anim/tn1.xml b/android/testData/dom/anim/tn1.xml
new file mode 100644
index 0000000..3deca21
--- /dev/null
+++ b/android/testData/dom/anim/tn1.xml
@@ -0,0 +1,3 @@
+<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
+  <it<caret>
+</animation-list>
\ No newline at end of file
diff --git a/android/testData/dom/anim/tn1_after.xml b/android/testData/dom/anim/tn1_after.xml
new file mode 100644
index 0000000..8f4ce41
--- /dev/null
+++ b/android/testData/dom/anim/tn1_after.xml
@@ -0,0 +1,3 @@
+<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
+  <item
+</animation-list>
\ No newline at end of file
diff --git a/android/testSrc/com/android/tools/idea/actions/AndroidImportProjectActionTest.java b/android/testSrc/com/android/tools/idea/actions/AndroidImportProjectActionTest.java
index db5c803..b8c2ca2 100644
--- a/android/testSrc/com/android/tools/idea/actions/AndroidImportProjectActionTest.java
+++ b/android/testSrc/com/android/tools/idea/actions/AndroidImportProjectActionTest.java
@@ -42,28 +42,28 @@
   }
 
   public void testFindImportTargetWithDirectoryAndWithoutGradleOrEclipseFiles() {
-    assertSame(myProjectRootDir, ProjectImportUtil.findImportTarget(myProjectRootDir));
+    assertEquals(myProjectRootDir, ProjectImportUtil.findImportTarget(myProjectRootDir));
   }
 
   public void testFindImportTargetWithDirectoryAndGradleBuildFile() throws IOException {
     VirtualFile file = createChildFile(SdkConstants.FN_BUILD_GRADLE);
-    assertSame(file, ProjectImportUtil.findImportTarget(myProjectRootDir));
+    assertEquals(file, ProjectImportUtil.findImportTarget(myProjectRootDir));
   }
 
   public void testFindImportTargetWithDirectoryAndGradleSettingsFile() throws IOException {
     VirtualFile file = createChildFile(SdkConstants.FN_SETTINGS_GRADLE);
-    assertSame(file, ProjectImportUtil.findImportTarget(myProjectRootDir));
+    assertEquals(file, ProjectImportUtil.findImportTarget(myProjectRootDir));
   }
 
   public void testFindImportTargetWithDirectoryAndEclipseFiles() throws IOException {
     createChildFile(GradleImport.ECLIPSE_DOT_CLASSPATH);
     VirtualFile file = createChildFile(GradleImport.ECLIPSE_DOT_PROJECT);
-    assertSame(file, ProjectImportUtil.findImportTarget(myProjectRootDir));
+    assertEquals(file, ProjectImportUtil.findImportTarget(myProjectRootDir));
   }
 
   public void testFindImportTargetWithEclipseProjectFile() throws IOException {
     VirtualFile file = createChildFile(GradleImport.ECLIPSE_DOT_PROJECT);
-    assertSame(file, ProjectImportUtil.findImportTarget(file));
+    assertEquals(file, ProjectImportUtil.findImportTarget(file));
   }
 
   @NotNull
diff --git a/android/testSrc/com/android/tools/idea/gradle/customizer/android/ContentRootModuleCustomizerTest.java b/android/testSrc/com/android/tools/idea/gradle/customizer/android/ContentRootModuleCustomizerTest.java
index 0c1f817..5323fd4 100644
--- a/android/testSrc/com/android/tools/idea/gradle/customizer/android/ContentRootModuleCustomizerTest.java
+++ b/android/testSrc/com/android/tools/idea/gradle/customizer/android/ContentRootModuleCustomizerTest.java
@@ -28,6 +28,7 @@
 import com.intellij.openapi.roots.ModuleRootManager;
 import com.intellij.openapi.roots.SourceFolder;
 import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.openapi.vfs.VfsUtilCore;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.testFramework.IdeaTestCase;
 import com.intellij.util.containers.ContainerUtil;
@@ -94,9 +95,12 @@
 
     SourceFolder[] sourceFolders = contentEntry.getSourceFolders();
     List<String> sourcePaths = Lists.newArrayListWithExpectedSize(sourceFolders.length);
+
     for (SourceFolder folder : sourceFolders) {
       if (!folder.isTestSource()) {
         VirtualFile file = folder.getFile();
+        final String path = VfsUtilCore.urlToPath(folder.getUrl());
+        System.out.println("path: " + path + "; " + new File(path).exists());
         assertNotNull(file);
         sourcePaths.add(file.getPath());
       }
diff --git a/android/testSrc/com/android/tools/idea/rendering/IncludeReferenceTest.java b/android/testSrc/com/android/tools/idea/rendering/IncludeReferenceTest.java
index 66a8aec..dc03c9a 100644
--- a/android/testSrc/com/android/tools/idea/rendering/IncludeReferenceTest.java
+++ b/android/testSrc/com/android/tools/idea/rendering/IncludeReferenceTest.java
@@ -18,10 +18,8 @@
 import com.android.ide.common.resources.ResourceResolver;
 import com.android.tools.idea.configurations.Configuration;
 import com.android.tools.idea.configurations.ConfigurationManager;
-import com.android.tools.idea.configurations.ResourceResolverCache;
 import com.intellij.openapi.vfs.LocalFileSystem;
 import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.PsiFile;
 import com.intellij.psi.PsiManager;
 import com.intellij.psi.xml.XmlFile;
 import org.jetbrains.android.AndroidTestCase;
@@ -40,11 +38,11 @@
     assertEquals("designtime.xml", reference.getFromDisplayName());
     assertEquals("designtime", reference.getFromResourceName());
     assertEquals("@layout/designtime", reference.getFromResourceUrl());
-    assertSame(file1, reference.getFromFile());
-    assertSame(file2, reference.getToFile());
-    assertSame(file1, LocalFileSystem.getInstance().findFileByIoFile(reference.getFromPath()));
+    assertEquals(file1, reference.getFromFile());
+    assertEquals(file2, reference.getToFile());
+    assertEquals(file1, LocalFileSystem.getInstance().findFileByIoFile(reference.getFromPath()));
     //noinspection ConstantConditions
-    assertSame(file2, LocalFileSystem.getInstance().findFileByIoFile(reference.getToPath()));
+    assertEquals(file2, LocalFileSystem.getInstance().findFileByIoFile(reference.getToPath()));
     assertSame(myModule, reference.getModule());
 
     reference = IncludeReference.create(myModule, file3, file2);
@@ -72,11 +70,11 @@
     assertEquals("includer", reference.getFromResourceName());
     assertEquals("@layout/includer", reference.getFromResourceUrl());
 
-    assertSame(reference.getFromFile(), includer);
-    assertSame(reference.getToFile(), included);
+    assertEquals(reference.getFromFile(), includer);
+    assertEquals(reference.getToFile(), included);
 
     IncludeReference.setIncludingLayout(getProject(), psiFile, null);
-    assertSame(IncludeReference.NONE, IncludeReference.get(myModule, psiFile, resourceResolver));
+    assertEquals(IncludeReference.NONE, IncludeReference.get(myModule, psiFile, resourceResolver));
 
     VirtualFile other = myFixture.copyFileToProject("xmlpull/designtime.xml", "res/layout-land/designtime.xml");
     assertNotNull(other);
diff --git a/android/testSrc/com/android/tools/idea/rendering/ModuleResourceRepositoryTest.java b/android/testSrc/com/android/tools/idea/rendering/ModuleResourceRepositoryTest.java
index 13dbab0..e8f9ebc 100644
--- a/android/testSrc/com/android/tools/idea/rendering/ModuleResourceRepositoryTest.java
+++ b/android/testSrc/com/android/tools/idea/rendering/ModuleResourceRepositoryTest.java
@@ -332,7 +332,7 @@
     assertNotNull(psiFile);
     VirtualFile parent = psiFile.getVirtualFile();
     assertNotNull(parent);
-    assertSame(dir, parent.getParent().getParent());
+    assertEquals(dir, parent.getParent().getParent());
   }
 
   static void assertStringIs(LocalResourceRepository repository, String key, String expected) {
diff --git a/android/testSrc/org/jetbrains/android/AndroidFacetImporterTest.java b/android/testSrc/org/jetbrains/android/AndroidFacetImporterTest.java
index 1c5c72c..50bdf8c 100644
--- a/android/testSrc/org/jetbrains/android/AndroidFacetImporterTest.java
+++ b/android/testSrc/org/jetbrains/android/AndroidFacetImporterTest.java
@@ -904,6 +904,8 @@
       assertEquals(new HashSet<String>(Arrays.asList(
         "target/generated-sources/combined-resources",
         "target/generated-sources/combined-assets",
+        "target/test-classes",
+        "target/classes",
         "target/generated-sources/extracted-dependencies")
       ), new HashSet<String>(Arrays.asList(excludedRootUrls)));
 
@@ -915,10 +917,11 @@
       importProject();
 
       sourceRoots = toRelativePaths(rootManager.getSourceRootUrls());
-      assertEquals(0, sourceRoots.length);
+      assertEquals(2, sourceRoots.length);
 
       excludedRootUrls = toRelativePaths(rootManager.getExcludeRootUrls());
       assertEquals(new HashSet<String>(Arrays.asList(
+        "target/test-classes", "target/classes",
         "target/generated-sources/combined-resources",
         "target/generated-sources/combined-assets",
         "target/generated-sources/extracted-dependencies",
diff --git a/android/testSrc/org/jetbrains/android/AndroidSdkTypeTest.java b/android/testSrc/org/jetbrains/android/AndroidSdkTypeTest.java
index a0910f1..b9c86db 100644
--- a/android/testSrc/org/jetbrains/android/AndroidSdkTypeTest.java
+++ b/android/testSrc/org/jetbrains/android/AndroidSdkTypeTest.java
@@ -44,6 +44,7 @@
       fail("Exception should be thrown");
     }
     catch (Exception e) {
+      e.printStackTrace();
       assertEquals(AndroidSdkType.getInstance().getUnsatisfiedDependencyMessage(), e.getMessage());
     }
   }
diff --git a/android/testSrc/org/jetbrains/android/dom/AndroidAnimationDomTest.java b/android/testSrc/org/jetbrains/android/dom/AndroidAnimationDomTest.java
index 8c65de8..00e63da 100644
--- a/android/testSrc/org/jetbrains/android/dom/AndroidAnimationDomTest.java
+++ b/android/testSrc/org/jetbrains/android/dom/AndroidAnimationDomTest.java
@@ -45,6 +45,10 @@
     toTestCompletion("root.xml", "root_after.xml");
   }
 
+  public void testRootCompletion1() throws Throwable {
+    toTestCompletion("root1.xml", "root1_after.xml");
+  }
+
   public void testHighlighting() throws Throwable {
     doTestHighlighting("hl.xml");
   }
@@ -52,4 +56,8 @@
   public void testChildren() throws Throwable {
     toTestCompletion("tn.xml", "tn_after.xml");
   }
+
+  public void testChildren1() throws Throwable {
+    toTestCompletion("tn1.xml", "tn1_after.xml");
+  }
 }