diff --git a/src/main/java/com/android/tools/r8/graph/DexAnnotation.java b/src/main/java/com/android/tools/r8/graph/DexAnnotation.java
index 598adeb..25a5a97 100644
--- a/src/main/java/com/android/tools/r8/graph/DexAnnotation.java
+++ b/src/main/java/com/android/tools/r8/graph/DexAnnotation.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.dex.MixedSectionCollection;
 import com.android.tools.r8.graph.DexValue.DexValueAnnotation;
 import com.android.tools.r8.graph.DexValue.DexValueArray;
+import com.android.tools.r8.graph.DexValue.DexValueByte;
 import com.android.tools.r8.graph.DexValue.DexValueInt;
 import com.android.tools.r8.graph.DexValue.DexValueMethod;
 import com.android.tools.r8.graph.DexValue.DexValueNull;
@@ -320,7 +321,9 @@
             factory.annotationRecord, annotation, factory.annotationRecordComponentSignatures);
     DexValue componentAnnotationVisibilitiesValue =
         getSystemValueAnnotationValueWithName(
-            factory.annotationRecord, annotation, factory.annotationRecordComponentVisibilities);
+            factory.annotationRecord,
+            annotation,
+            factory.annotationRecordComponentAnnotationVisibilities);
     DexValue componentAnnotationsValue =
         getSystemValueAnnotationValueWithName(
             factory.annotationRecord, annotation, factory.annotationRecordComponentAnnotations);
@@ -381,12 +384,12 @@
             annotationIndex++) {
           DexValue visibilityValue = visibilitiesValueArray.getValue(annotationIndex);
           DexValue annotationValue = annotationsValueArray.getValue(annotationIndex);
-          if (!visibilityValue.isDexValueInt() || !annotationValue.isDexValueAnnotation()) {
+          if (!visibilityValue.isDexValueByte() || !annotationValue.isDexValueAnnotation()) {
             return null;
           }
           componentAnnotations.add(
               new DexAnnotation(
-                  visibilityValue.asDexValueInt().getValue(),
+                  visibilityValue.asDexValueByte().getValue(),
                   annotationValue.asDexValueAnnotation().getValue()));
         }
       }
@@ -481,7 +484,7 @@
    * dalvik.annotation.Record</code> with the following content:
    *
    * <pre>
-   *   componentAnnotationVisibilities int[][]
+   *   componentAnnotationVisibilities byte[][]
    *   componentAnnotations Annotation[][]
    *   componentNames String[]
    *   componentSignatures Annotation[]  // Annotation dalvik.annotation.Signature or NULL
@@ -559,13 +562,13 @@
                 createSignatureAnnotation(info.getSignature().toString(), factory).annotation);
       }
       int annotationsSize = info.getAnnotations().size();
-      DexValueInt[] visibilities = new DexValueInt[annotationsSize];
+      DexValueByte[] visibilities = new DexValueByte[annotationsSize];
       DexValueAnnotation[] annotations = new DexValueAnnotation[annotationsSize];
       componentAnnotationVisibilities[componentIndex] = new DexValueArray(visibilities);
       componentAnnotations[componentIndex] = new DexValueArray(annotations);
       for (int annotationIndex = 0; annotationIndex < annotationsSize; annotationIndex++) {
         DexAnnotation annotation = info.getAnnotations().get(annotationIndex);
-        visibilities[annotationIndex] = DexValueInt.create(annotation.getVisibility());
+        visibilities[annotationIndex] = DexValueByte.create((byte) annotation.getVisibility());
         annotations[annotationIndex] = new DexValueAnnotation(annotation.annotation);
       }
     }
@@ -584,7 +587,7 @@
                     factory.annotationRecordComponentSignatures,
                     new DexValueArray(componentSignatures)),
                 new DexAnnotationElement(
-                    factory.annotationRecordComponentVisibilities,
+                    factory.annotationRecordComponentAnnotationVisibilities,
                     new DexValueArray(componentAnnotationVisibilities)),
                 new DexAnnotationElement(
                     factory.annotationRecordComponentAnnotations,
diff --git a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
index 418cdce..579b21f 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -739,8 +739,8 @@
   public final DexString annotationRecordComponentNames = createString("componentNames");
   public final DexString annotationRecordComponentTypes = createString("componentTypes");
   public final DexString annotationRecordComponentSignatures = createString("componentSignatures");
-  public final DexString annotationRecordComponentVisibilities =
-      createString("componentVisibilities");
+  public final DexString annotationRecordComponentAnnotationVisibilities =
+      createString("componentAnnotationVisibilities");
   public final DexString annotationRecordComponentAnnotations =
       createString("componentAnnotations");
   public final DexType annotationSourceDebugExtension =
