merge in studio-1.0-release history after reset to 5ac71ace49c4def516f41f8c209cf4d39a3caefa
diff --git a/.idea/dictionaries/adt.xml b/.idea/dictionaries/adt.xml
index 6d2101d..6a73baa 100644
--- a/.idea/dictionaries/adt.xml
+++ b/.idea/dictionaries/adt.xml
@@ -190,6 +190,7 @@
       <w>manifmerger</w>
       <w>mdpi</w>
       <w>memalign</w>
+      <w>minify</w>
       <w>minsdk</w>
       <w>mipmap</w>
       <w>mkdirs</w>
diff --git a/.idea/modules.xml b/.idea/modules.xml
index ab47413..76bb0a2 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -74,7 +74,6 @@
       <module fileurl="file://$PROJECT_DIR$/../studio/google/cloud/tools/google-cloud-tools.iml" filepath="$PROJECT_DIR$/../studio/google/cloud/tools/google-cloud-tools.iml" group="plugins/Google" />
       <module fileurl="file://$PROJECT_DIR$/../studio/google/login/google-login.iml" filepath="$PROJECT_DIR$/../studio/google/login/google-login.iml" group="plugins/Google" />
       <module fileurl="file://$PROJECT_DIR$/plugins/gradle/gradle.iml" filepath="$PROJECT_DIR$/plugins/gradle/gradle.iml" group="community/plugins/gradle" />
-      <module fileurl="file://$PROJECT_DIR$/../base/gradle-import/gradle-import.iml" filepath="$PROJECT_DIR$/../base/gradle-import/gradle-import.iml" group="plugins/Android/android-sdk" />
       <module fileurl="file://$PROJECT_DIR$/plugins/gradle/tooling-extension-api/gradle-tooling-extension-api.iml" filepath="$PROJECT_DIR$/plugins/gradle/tooling-extension-api/gradle-tooling-extension-api.iml" group="community/plugins/gradle" />
       <module fileurl="file://$PROJECT_DIR$/plugins/gradle/tooling-extension-impl/gradle-tooling-extension-impl.iml" filepath="$PROJECT_DIR$/plugins/gradle/tooling-extension-impl/gradle-tooling-extension-impl.iml" group="community/plugins/gradle" />
       <module fileurl="file://$PROJECT_DIR$/plugins/groovy/jps-plugin/groovy-jps-plugin.iml" filepath="$PROJECT_DIR$/plugins/groovy/jps-plugin/groovy-jps-plugin.iml" group="plugins/Groovy" />
diff --git a/.idea/runConfigurations/AndroidStudio.xml b/.idea/runConfigurations/AndroidStudio.xml
index 4bd761b..c62432d 100644
--- a/.idea/runConfigurations/AndroidStudio.xml
+++ b/.idea/runConfigurations/AndroidStudio.xml
@@ -2,7 +2,7 @@
   <configuration default="false" name="AndroidStudio" type="Application" factoryName="Application" singleton="true">
     <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
     <option name="MAIN_CLASS_NAME" value="com.intellij.idea.Main" />
-    <option name="VM_PARAMETERS" value="-ea -Xbootclasspath/p:../out/classes/production/boot -Xms384m -Xmx768m -Didea.is.internal=true -XX:MaxPermSize=384m -Dapple.awt.graphics.UseQuartz=true -Didea.platform.prefix=AndroidStudio -Dandroid.extra_templates.path=../../../sdk/templates -Dapple.laf.useScreenMenuBar=true -Dcom.apple.mrj.application.apple.menu.about.name=AndroidStudio -Dsun.awt.disablegrab=true -Dadt.renderLog=true" />
+    <option name="VM_PARAMETERS" value="-ea -Xbootclasspath/p:../out/classes/production/boot -Xms384m -Xmx768m -Didea.is.internal=true -XX:MaxPermSize=384m -Dapple.awt.graphics.UseQuartz=true -Didea.platform.prefix=AndroidStudio -Dandroid.extra_templates.path=../../../sdk/templates -Dapple.laf.useScreenMenuBar=true -Dcom.apple.mrj.application.apple.menu.about.name=AndroidStudio -Dsun.awt.disablegrab=true" />
     <option name="PROGRAM_PARAMETERS" value="" />
     <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/bin" />
     <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
diff --git a/java/java-psi-impl/src/com/intellij/psi/scope/processor/MethodResolverProcessor.java b/java/java-psi-impl/src/com/intellij/psi/scope/processor/MethodResolverProcessor.java
index b73f87b..43bf4879 100644
--- a/java/java-psi-impl/src/com/intellij/psi/scope/processor/MethodResolverProcessor.java
+++ b/java/java-psi-impl/src/com/intellij/psi/scope/processor/MethodResolverProcessor.java
@@ -15,16 +15,21 @@
  */
 package com.intellij.psi.scope.processor;
 
+import com.intellij.openapi.extensions.ExtensionPointName;
 import com.intellij.psi.*;
 import com.intellij.psi.infos.CandidateInfo;
 import com.intellij.psi.scope.JavaScopeProcessorEvent;
 import com.intellij.psi.scope.PsiConflictResolver;
 import com.intellij.psi.scope.conflictResolvers.JavaMethodsConflictResolver;
 import com.intellij.psi.util.PsiUtil;
+import com.intellij.util.ArrayUtil;
 import com.intellij.util.SmartList;
 import org.jetbrains.annotations.NotNull;
 
 public class MethodResolverProcessor extends MethodCandidatesProcessor {
+
+  private static final ExtensionPointName<PsiConflictResolver> EP_NAME = ExtensionPointName.create("com.intellij.methodConflictResolver");
+
   private boolean myStopAcceptingCandidates = false;
 
   public MethodResolverProcessor(@NotNull PsiMethodCallExpression place, @NotNull PsiFile placeFile) {
@@ -34,14 +39,17 @@
   public MethodResolverProcessor(@NotNull PsiCallExpression place,
                                  @NotNull PsiExpressionList argumentList, 
                                  @NotNull PsiFile placeFile){
-    this(place, placeFile, new PsiConflictResolver[]{new JavaMethodsConflictResolver(argumentList, PsiUtil.getLanguageLevel(placeFile))});
+    this(place, placeFile, ArrayUtil.append(EP_NAME.getExtensions(),
+                                            new JavaMethodsConflictResolver(argumentList, PsiUtil.getLanguageLevel(placeFile))));
     setArgumentList(argumentList);
     obtainTypeArguments(place);
   }
 
   public MethodResolverProcessor(PsiClass classConstr, @NotNull PsiExpressionList argumentList, @NotNull PsiElement place, @NotNull PsiFile placeFile) {
-    super(place, placeFile, new PsiConflictResolver[]{new JavaMethodsConflictResolver(argumentList,
-                                                                                      PsiUtil.getLanguageLevel(placeFile))}, new SmartList<CandidateInfo>());
+    super(place,
+          placeFile,
+          ArrayUtil.append(EP_NAME.getExtensions(), new JavaMethodsConflictResolver(argumentList, PsiUtil.getLanguageLevel(placeFile))),
+          new SmartList<CandidateInfo>());
     setIsConstructor(true);
     setAccessClass(classConstr);
     setArgumentList(argumentList);
diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java
index 01ec034..03f630c 100644
--- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java
+++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java
@@ -155,7 +155,8 @@
   static final DataKey<ProjectViewImpl> DATA_KEY = DataKey.create("com.intellij.ide.projectView.impl.ProjectViewImpl");
 
   private DefaultActionGroup myActionGroup;
-  private String mySavedPaneId = "AndroidView"; // was ProjectViewPane.ID, but in Android Studio, we want the Android View to be the default
+  // was ProjectViewPane.ID, but in Android Studio, we want the Android View to be the default
+  private String mySavedPaneId = Boolean.getBoolean("studio.projectview") ? ProjectViewPane.ID : "AndroidView";
   private String mySavedPaneSubId;
   //private static final Icon COMPACT_EMPTY_MIDDLE_PACKAGES_ICON = IconLoader.getIcon("/objectBrowser/compactEmptyPackages.png");
   //private static final Icon HIDE_EMPTY_MIDDLE_PACKAGES_ICON = IconLoader.getIcon("/objectBrowser/hideEmptyPackages.png");
diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml
index a5b2759..f1de3133 100644
--- a/resources/src/META-INF/IdeaPlugin.xml
+++ b/resources/src/META-INF/IdeaPlugin.xml
@@ -212,6 +212,7 @@
       <with attribute="implementationClass" implements="com.intellij.refactoring.encapsulateFields.EncapsulateFieldHelper"/>
     </extensionPoint>
 
+    <extensionPoint name="methodConflictResolver" interface="com.intellij.psi.scope.PsiConflictResolver"/>
     <extensionPoint name="psi.classFileDecompiler" interface="com.intellij.psi.compiled.ClassFileDecompilers$Decompiler"/>
     <!-- deprecated API -->
     <!--suppress DeprecatedClassUsageInspection -->
diff --git a/updater/src/com/intellij/updater/BaseUpdateAction.java b/updater/src/com/intellij/updater/BaseUpdateAction.java
index 0fb6452..854c65d 100644
--- a/updater/src/com/intellij/updater/BaseUpdateAction.java
+++ b/updater/src/com/intellij/updater/BaseUpdateAction.java
@@ -93,7 +93,7 @@
     byte[] newerFileBuffer = JBDiff.bsdiff(olderFileIn, newerFileIn, diffOutput);
     diffOutput.close();
 
-    if (!isCritical() || diffOutput.size() < newerFileBuffer.length) {
+    if (!isCritical() && diffOutput.size() < newerFileBuffer.length) {
       patchOutput.write(1);
       Utils.copyBytesToStream(diffOutput, patchOutput);
     }
diff --git a/updater/testSrc/com/intellij/updater/PatchFileCreatorTest.java b/updater/testSrc/com/intellij/updater/PatchFileCreatorTest.java
index 6253b2a..b79f764 100644
--- a/updater/testSrc/com/intellij/updater/PatchFileCreatorTest.java
+++ b/updater/testSrc/com/intellij/updater/PatchFileCreatorTest.java
@@ -132,12 +132,23 @@
   @Test
   public void testApplyingWithCriticalFiles() throws Exception {
     myPatchSpec.setCriticalFiles(Arrays.asList("lib/annotations.jar"));
-    PatchFileCreator.create(myPatchSpec, myFile, TEST_UI);
+    Patch patch = PatchFileCreator.create(myPatchSpec, myFile, TEST_UI);
 
-    PatchFileCreator.PreparationResult preparationResult = PatchFileCreator.prepareAndValidate(myFile, myOlderDir, TEST_UI);
+    assertAppliedAndRevertedCorrectly(patch, PatchFileCreator.prepareAndValidate(myFile, myOlderDir, TEST_UI));
+  }
 
-    assertTrue(PatchFileCreator.apply(preparationResult, new HashMap<String, ValidationResult.Option>(), TEST_UI));
-    assertAppliedCorrectly();
+  @Test
+  public void testApplyingWithModifiedCriticalFiles() throws Exception {
+    myPatchSpec.setStrict(true);
+    myPatchSpec.setCriticalFiles(Arrays.asList("lib/annotations.jar"));
+    Patch patch = PatchFileCreator.create(myPatchSpec, myFile, TEST_UI);
+
+    RandomAccessFile raf = new RandomAccessFile(new File(myOlderDir, "lib/annotations.jar"), "rw");
+    raf.seek(20);
+    raf.write(42);
+    raf.close();
+
+    assertAppliedAndRevertedCorrectly(patch, PatchFileCreator.prepareAndValidate(myFile, myOlderDir, TEST_UI));
   }
 
   @Test
@@ -382,12 +393,19 @@
     Map<String, Long> target = patch.digestFiles(myNewerDir, Collections.<String>emptyList(), false, TEST_UI);
     File backup = getTempFile("backup");
 
+    HashMap<String, ValidationResult.Option> options = new HashMap<String, ValidationResult.Option>();
     for (ValidationResult each : preparationResult.validationResults) {
-      assertTrue(each.toString(), each.kind != ValidationResult.Kind.ERROR);
+      if (patch.isStrict()) {
+        assertFalse(each.options.contains(ValidationResult.Option.NONE));
+        assertTrue(each.options.size() > 0);
+        options.put(each.path, each.options.get(0));
+      } else {
+        assertTrue(each.toString(), each.kind != ValidationResult.Kind.ERROR);
+      }
     }
 
     List<PatchAction> appliedActions =
-      PatchFileCreator.apply(preparationResult, new HashMap<String, ValidationResult.Option>(), backup, TEST_UI).appliedActions;
+      PatchFileCreator.apply(preparationResult, options, backup, TEST_UI).appliedActions;
     Map<String, Long> patched = patch.digestFiles(myOlderDir, Collections.<String>emptyList(), false, TEST_UI);
 
     if (patch.isStrict()) {