Merge "Unset ACC_ANNOTATION flag for companion class"
diff --git a/src/main/java/com/android/tools/r8/graph/ClassAccessFlags.java b/src/main/java/com/android/tools/r8/graph/ClassAccessFlags.java
index f587642..0111aa1 100644
--- a/src/main/java/com/android/tools/r8/graph/ClassAccessFlags.java
+++ b/src/main/java/com/android/tools/r8/graph/ClassAccessFlags.java
@@ -141,6 +141,10 @@
     set(Constants.ACC_ANNOTATION);
   }
 
+  public void unsetAnnotation() {
+    unset(Constants.ACC_ANNOTATION);
+  }
+
   public boolean isEnum() {
     return isSet(Constants.ACC_ENUM);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
index 15a90e9..898a2b2 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
@@ -151,6 +151,7 @@
     ClassAccessFlags companionClassFlags = iface.accessFlags.copy();
     companionClassFlags.unsetAbstract();
     companionClassFlags.unsetInterface();
+    companionClassFlags.unsetAnnotation();
     companionClassFlags.setFinal();
     companionClassFlags.setSynthetic();
     // Companion class must be public so moved methods can be called from anywhere.
diff --git a/src/test/java/com/android/tools/r8/jasmin/AnnotationCompanionClassTest.java b/src/test/java/com/android/tools/r8/jasmin/AnnotationCompanionClassTest.java
new file mode 100644
index 0000000..033183c
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/jasmin/AnnotationCompanionClassTest.java
@@ -0,0 +1,42 @@
+// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.jasmin;
+
+import static org.junit.Assert.assertFalse;
+
+import com.android.tools.r8.ir.desugar.InterfaceMethodRewriter;
+import com.android.tools.r8.utils.AndroidApp;
+import com.android.tools.r8.utils.DexInspector;
+import com.google.common.collect.ImmutableList;
+import org.junit.Test;
+
+public class AnnotationCompanionClassTest extends JasminTestBase {
+
+  private JasminBuilder buildClass() {
+    JasminBuilder builder = new JasminBuilder(JasminBuilder.ClassFileVersion.JDK_1_4);
+    JasminBuilder.ClassBuilder clazz =
+        builder.addInterface("MyAnnotation", "java/lang/annotation/Annotation");
+
+    clazz.setAccess("public interface abstract annotation");
+
+    clazz.addStaticMethod(
+        "staticMethod", ImmutableList.of(), "V",
+        ".limit stack 0",
+        ".limit locals 0",
+        "  return");
+    return builder;
+  }
+
+  @Test
+  public void test() throws Exception {
+    JasminBuilder builder = buildClass();
+    AndroidApp androidApp = compileWithD8(builder);
+
+    DexInspector dexInspector = new DexInspector(androidApp);
+    assertFalse(
+        dexInspector
+            .clazz("LMyAnnotation" + InterfaceMethodRewriter.COMPANION_CLASS_NAME_SUFFIX + ";")
+            .isAnnotation());
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/utils/DexInspector.java b/src/test/java/com/android/tools/r8/utils/DexInspector.java
index af460ef..0cea762 100644
--- a/src/test/java/com/android/tools/r8/utils/DexInspector.java
+++ b/src/test/java/com/android/tools/r8/utils/DexInspector.java
@@ -329,6 +329,8 @@
 
     public abstract boolean isAbstract();
 
+    public abstract boolean isAnnotation();
+
     public String dumpMethods() {
       StringBuilder dump = new StringBuilder();
       forAllMethods((FoundMethodSubject method) ->
@@ -385,6 +387,11 @@
     }
 
     @Override
+    public boolean isAnnotation() {
+      return false;
+    }
+
+    @Override
     public DexClass getDexClass() {
       return null;
     }
@@ -516,6 +523,11 @@
       return dexClass.accessFlags.isAbstract();
     }
 
+    @Override
+    public boolean isAnnotation() {
+      return dexClass.accessFlags.isAnnotation();
+    }
+
     private DexEncodedField findField(DexEncodedField[] fields, DexField dexField) {
       for (DexEncodedField field : fields) {
         if (field.field.equals(dexField)) {