All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mockit.asm.methods.LineNumberTableWriter Maven / Gradle / Ivy

package mockit.asm.methods;

import javax.annotation.*;

import mockit.asm.constantPool.*;
import mockit.asm.controlFlow.*;
import mockit.asm.util.*;

/**
 * Writes the bytecode for the "LineNumberTable" method code attribute.
 */
final class LineNumberTableWriter extends AttributeWriter
{
   /**
    * Number of entries in the LineNumberTable attribute.
    */
   @Nonnegative private int lineNumberCount;

   /**
    * The LineNumberTable attribute.
    */
   @Nullable private ByteVector lineNumbers;

   LineNumberTableWriter(@Nonnull ConstantPoolGeneration cp) { super(cp); }

   void addLineNumber(@Nonnegative int line, @Nonnull Label start) {
      if (lineNumbers == null) {
         setAttribute("LineNumberTable");
         lineNumbers = new ByteVector();
      }

      lineNumberCount++;
      lineNumbers.putShort(start.position);
      lineNumbers.putShort(line);
   }

   boolean hasLineNumbers() { return lineNumbers != null; }

   @Nonnegative @Override
   public int getSize() { return lineNumbers == null ? 0 : 8 + lineNumbers.getLength(); }

   @Override
   public void put(@Nonnull ByteVector out) {
      if (lineNumbers != null) {
         put(out, 2 + lineNumbers.getLength());
         out.putShort(lineNumberCount);
         out.putByteVector(lineNumbers);
      }
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy