Merge changes I9c604ef3,I44500c3c,I8b417554

* changes:
  Apply package renamings to resource filenames
  Move test classes for -adaptresourcefilenames to examples/
  Support for -adaptresourcefilenames
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index ebde0b4..e7d1ebc 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "1.3.12-dev";
+  public static final String LABEL = "1.3.13-dev";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
index 519bd58..b151ef8 100644
--- a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
+++ b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
@@ -123,7 +123,7 @@
     DexCode code = method.getCode().asDexCode();
     // As we have rewritten the code, we now know that its highest string index that is not
     // a jumbo-string is firstJumboString (actually the previous string, but we do not have that).
-    method.setDexCode(new DexCode(
+    method.setCode(new DexCode(
         code.registerSize,
         code.incomingRegisterSize,
         code.outgoingRegisterSize,
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index e41120d..d588ab5 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -206,6 +206,7 @@
       GraphLense graphLense,
       InternalOptions options,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     return internalBuild(encodedMethod, appInfo, graphLense, options, null, null, origin);
   }
 
@@ -218,6 +219,7 @@
       ValueNumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     assert valueNumberGenerator != null;
     assert callerPosition != null;
     return internalBuild(
diff --git a/src/main/java/com/android/tools/r8/graph/Code.java b/src/main/java/com/android/tools/r8/graph/Code.java
index 0484a63..187756a 100644
--- a/src/main/java/com/android/tools/r8/graph/Code.java
+++ b/src/main/java/com/android/tools/r8/graph/Code.java
@@ -16,6 +16,18 @@
 
 public abstract class Code extends CachedHashValueDexItem {
 
+  private DexEncodedMethod owner;
+
+  public void setOwner(DexEncodedMethod encodedMethod) {
+    // When this Code is un/linked to DexEncodedMethod, the ownership should be updated accordingly.
+    owner = encodedMethod;
+  }
+
+  public DexEncodedMethod getOwner() {
+    // build*IR() will check if the current Code belongs to the given DexEncodedMethod.
+    return owner;
+  }
+
   public abstract IRCode buildIR(
       DexEncodedMethod encodedMethod,
       AppInfo appInfo,
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index d0c40e1..d5f8001 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -193,6 +193,7 @@
       GraphLense graphLense,
       InternalOptions options,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     DexSourceCode source =
         new DexSourceCode(
             this,
@@ -213,6 +214,7 @@
       ValueNumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     DexSourceCode source =
         new DexSourceCode(
             this,
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index e90839c..c540d24 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -116,6 +116,7 @@
     this.parameterAnnotationsList = parameterAnnotationsList;
     this.code = code;
     assert code == null || !accessFlags.isAbstract();
+    setCodeOwnership();
   }
 
   public DexEncodedMethod(
@@ -276,7 +277,9 @@
   }
 
   public void setCode(Code code) {
+    voidCodeOwnership();
     this.code = code;
+    setCodeOwnership();
   }
 
   public void setCode(
@@ -284,7 +287,7 @@
       RegisterAllocator registerAllocator,
       InternalOptions options) {
     final DexBuilder builder = new DexBuilder(ir, registerAllocator, options);
-    code = builder.build(method.getArity());
+    setCode(builder.build(method.getArity()));
   }
 
   @Override
@@ -316,12 +319,21 @@
     return code;
   }
 
-  public void setDexCode(DexCode code) {
-    this.code = code;
+  public void removeCode() {
+    voidCodeOwnership();
+    code = null;
   }
 
-  public void removeCode() {
-    code = null;
+  private void setCodeOwnership() {
+    if (code != null) {
+      code.setOwner(this);
+    }
+  }
+
+  private void voidCodeOwnership() {
+    if (code != null) {
+      code.setOwner(null);
+    }
   }
 
   public boolean hasDebugPositions() {
@@ -389,6 +401,7 @@
 
   public DexEncodedMethod toAbstractMethod() {
     accessFlags.setAbstract();
+    voidCodeOwnership();
     this.code = null;
     return this;
   }
diff --git a/src/main/java/com/android/tools/r8/graph/JarCode.java b/src/main/java/com/android/tools/r8/graph/JarCode.java
index 28143ad..629017b 100644
--- a/src/main/java/com/android/tools/r8/graph/JarCode.java
+++ b/src/main/java/com/android/tools/r8/graph/JarCode.java
@@ -113,6 +113,7 @@
       GraphLense graphLense,
       InternalOptions options,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     triggerDelayedParsingIfNeccessary();
     return options.debug
         ? internalBuildWithLocals(encodedMethod, appInfo, graphLense, options, null, null)
@@ -128,6 +129,7 @@
       ValueNumberGenerator generator,
       Position callerPosition,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     assert generator != null;
     triggerDelayedParsingIfNeccessary();
     return options.debug
diff --git a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
index b6eb879..f1c1700 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
@@ -146,6 +146,8 @@
     assert this.context != null;
     this.code = code;
     this.context = null;
+    // Propagate the ownership of LazyCfCode to CfCode.
+    code.setOwner(this.getOwner());
   }
 
   @Override
@@ -180,6 +182,7 @@
       GraphLense graphLense,
       InternalOptions options,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     return asCfCode().buildIR(encodedMethod, appInfo, graphLense, options, origin);
   }
 
@@ -192,6 +195,7 @@
       ValueNumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     return asCfCode()
         .buildInliningIR(
             encodedMethod,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
index 5f8fd6b..5397be4 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
@@ -1170,6 +1170,7 @@
         GraphLense graphLense,
         InternalOptions options,
         Origin origin) {
+      assert getOwner() == encodedMethod;
       OutlineSourceCode source = new OutlineSourceCode(outline);
       return new IRBuilder(encodedMethod, appInfo, source, options).build();
     }
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java
index aa6be96..df273a7 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java
@@ -53,6 +53,7 @@
       GraphLense graphLense,
       InternalOptions options,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     return new IRBuilder(encodedMethod, appInfo, sourceCodeProvider.get(), options).build();
   }
 
@@ -65,6 +66,7 @@
       ValueNumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     IRBuilder builder =
         new IRBuilder(
             encodedMethod, appInfo, sourceCodeProvider.get(), options, valueNumberGenerator);
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 64387ce..27d3d3b 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -1827,7 +1827,9 @@
       this.noSideEffects = previous.noSideEffects;
       assert lense.assertNotModified(previous.assumedValues.keySet());
       this.assumedValues = previous.assumedValues;
-      assert lense.assertNotModified(previous.alwaysInline);
+      assert lense.assertNotModified(
+          previous.alwaysInline.stream().map(this::definitionFor).filter(Objects::nonNull)
+              .collect(Collectors.toList()));
       this.alwaysInline = previous.alwaysInline;
       this.forceInline = rewriteMethodsWithRenamedSignature(previous.forceInline, lense);
       this.neverInline = rewriteMethodsWithRenamedSignature(previous.neverInline, lense);
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index a2dd383..8dec498 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -61,10 +61,12 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
 import org.objectweb.asm.Opcodes;
 import org.objectweb.asm.tree.MethodNode;
 
@@ -542,7 +544,13 @@
     timing.begin("fixup");
     GraphLense result = new TreeFixer().fixupTypeReferences(mergingGraphLense);
     timing.end();
-    assert result.assertNotModified(appInfo.alwaysInline);
+    assert result.assertNotModified(
+        appInfo
+            .alwaysInline
+            .stream()
+            .map(appInfo::definitionFor)
+            .filter(Objects::nonNull)
+            .collect(Collectors.toList()));
     assert result.assertNotModified(appInfo.noSideEffects.keySet());
     // TODO(christofferqa): Enable this assert.
     // assert result.assertNotModified(appInfo.pinnedItems);
diff --git a/third_party/gmail/gmail_android_170604.16.tar.gz.sha1 b/third_party/gmail/gmail_android_170604.16.tar.gz.sha1
index 9d9985c..f57ba90 100644
--- a/third_party/gmail/gmail_android_170604.16.tar.gz.sha1
+++ b/third_party/gmail/gmail_android_170604.16.tar.gz.sha1
@@ -1 +1 @@
-a6d49ef4fb2094672a6f6be039c971727cc9fd34
\ No newline at end of file
+161c569821a5c9b4cb8e99de764f3449191af084
\ No newline at end of file
diff --git a/third_party/gmscore/gmscore_v10.tar.gz.sha1 b/third_party/gmscore/gmscore_v10.tar.gz.sha1
index 535f285..15cab81 100644
--- a/third_party/gmscore/gmscore_v10.tar.gz.sha1
+++ b/third_party/gmscore/gmscore_v10.tar.gz.sha1
@@ -1 +1 @@
-fd2bc157ba2d61a19804107df47e0f87926b210d
\ No newline at end of file
+43838ee1687ff48e866396dfd4b99415662fbea6
\ No newline at end of file
diff --git a/third_party/gmscore/gmscore_v9.tar.gz.sha1 b/third_party/gmscore/gmscore_v9.tar.gz.sha1
index 0ff5779..5983b5b 100644
--- a/third_party/gmscore/gmscore_v9.tar.gz.sha1
+++ b/third_party/gmscore/gmscore_v9.tar.gz.sha1
@@ -1 +1 @@
-4bfdee0d2287b061164f984dfa4ad6ec8617effa
\ No newline at end of file
+0066065faeb293c5a850d3319f2cb8a48d1e760d
\ No newline at end of file
diff --git a/third_party/youtube/youtube.android_12.22.tar.gz.sha1 b/third_party/youtube/youtube.android_12.22.tar.gz.sha1
index 056ff59..8f6813c 100644
--- a/third_party/youtube/youtube.android_12.22.tar.gz.sha1
+++ b/third_party/youtube/youtube.android_12.22.tar.gz.sha1
@@ -1 +1 @@
-57b5c53a80ba010d1faef7da1b643f8c72b3e4e8
\ No newline at end of file
+73c4880898d734064815d0426d8fe84ee6d075b4
\ No newline at end of file