Remove stack slot calculation from RClassGenerator.

The stack slot calculation is not needed because the COMPUTE_MAXS flag is set on the ClassWriter (passed values are ignored).

PiperOrigin-RevId: 636244899
Change-Id: If51599c3cbec0ac95bdedbdac6b87a6472d81128
diff --git a/src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializer.java b/src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializer.java
index 8bba422..b93aa0f 100644
--- a/src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializer.java
+++ b/src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializer.java
@@ -30,12 +30,8 @@
    */
   boolean writeFieldDefinition(ClassWriter cw, boolean isFinal, boolean annotateTransitiveFields);
 
-  /**
-   * Write the bytecode for the clinit portion of initializer.
-   *
-   * @return the number of stack slots needed for the code.
-   */
-  int writeCLInit(InstructionAdapter insts, String className);
+  /** Write the bytecode for the clinit portion of initializer. */
+  void writeCLInit(InstructionAdapter insts, String className);
 
   /** Write the source code for the initializer to the given writer. */
   void writeInitSource(Writer writer, boolean finalFields) throws IOException;
diff --git a/src/tools/android/java/com/google/devtools/build/android/resources/IntArrayFieldInitializer.java b/src/tools/android/java/com/google/devtools/build/android/resources/IntArrayFieldInitializer.java
index 25994f9..8d88548 100644
--- a/src/tools/android/java/com/google/devtools/build/android/resources/IntArrayFieldInitializer.java
+++ b/src/tools/android/java/com/google/devtools/build/android/resources/IntArrayFieldInitializer.java
@@ -231,7 +231,7 @@
   }
 
   @Override
-  public int writeCLInit(InstructionAdapter insts, String className) {
+  public void writeCLInit(InstructionAdapter insts, String className) {
     insts.iconst(values.size());
     insts.newarray(Type.INT_TYPE);
     int curIndex = 0;
@@ -243,9 +243,6 @@
       ++curIndex;
     }
     insts.putstatic(className, fieldName, DESC);
-    // Needs up to 4 stack slots for: the array ref for the putstatic, the dup of the array ref
-    // for the store, the index, and the value to store.
-    return 4;
   }
 
   @Override
diff --git a/src/tools/android/java/com/google/devtools/build/android/resources/IntFieldInitializer.java b/src/tools/android/java/com/google/devtools/build/android/resources/IntFieldInitializer.java
index b6a5fe3..68fb180 100644
--- a/src/tools/android/java/com/google/devtools/build/android/resources/IntFieldInitializer.java
+++ b/src/tools/android/java/com/google/devtools/build/android/resources/IntFieldInitializer.java
@@ -81,11 +81,9 @@
   }
 
   @Override
-  public int writeCLInit(InstructionAdapter insts, String className) {
+  public void writeCLInit(InstructionAdapter insts, String className) {
     insts.iconst(value);
     insts.putstatic(className, fieldName, DESC);
-    // Just needs one stack slot for the iconst.
-    return 1;
   }
 
   @Override
diff --git a/src/tools/android/java/com/google/devtools/build/android/resources/RClassGenerator.java b/src/tools/android/java/com/google/devtools/build/android/resources/RClassGenerator.java
index bb9e5ea..2410fa2 100644
--- a/src/tools/android/java/com/google/devtools/build/android/resources/RClassGenerator.java
+++ b/src/tools/android/java/com/google/devtools/build/android/resources/RClassGenerator.java
@@ -13,7 +13,6 @@
 // limitations under the License.
 package com.google.devtools.build.android.resources;
 
-import static java.lang.Math.max;
 import static java.nio.file.StandardOpenOption.CREATE_NEW;
 
 import com.android.SdkConstants;
@@ -226,7 +225,8 @@
     constructor.visitVarInsn(Opcodes.ALOAD, 0);
     constructor.visitMethodInsn(Opcodes.INVOKESPECIAL, SUPER_CLASS, "<init>", "()V", false);
     constructor.visitInsn(Opcodes.RETURN);
-    constructor.visitMaxs(1, 1);
+    // Values are ignored because COMPUTE_MAXS is set above, but call still required.
+    constructor.visitMaxs(0, 0);
     constructor.visitEnd();
   }
 
@@ -244,7 +244,6 @@
     ListIterator<FieldInitializer> iterator = deferredInitializers.listIterator();
     while (iterator.hasNext()) {
       int currentMethodSize = 0;
-      int stackSlotsNeeded = 0;
       // This first time around the method name is <clinit> and after that, the method name is
       // created in the previous iteration.
       MethodVisitor visitor =
@@ -267,7 +266,7 @@
           iterator.previous();
           break;
         }
-        stackSlotsNeeded = max(stackSlotsNeeded, fieldInit.writeCLInit(insts, className));
+        fieldInit.writeCLInit(insts, className);
         currentMethodSize += fieldInit.getMaxBytecodeSize();
       }
       if (iterator.hasNext()) {
@@ -278,7 +277,8 @@
         accessFlags = Opcodes.ACC_STATIC | Opcodes.ACC_PRIVATE | Opcodes.ACC_SYNTHETIC;
       }
       insts.areturn(Type.VOID_TYPE);
-      visitor.visitMaxs(stackSlotsNeeded, 0);
+      // Values are ignored because COMPUTE_MAXS is set above, but call still required.
+      visitor.visitMaxs(0, 0);
       visitor.visitEnd();
     }
   }