// Copyright (c) 2019, 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.transformers;

import static org.objectweb.asm.Opcodes.ASM7;

import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.MethodReference;
import org.objectweb.asm.MethodVisitor;

/**
 * Class for transforming the content of a method.
 *
 * <p>This is just a simple wrapper on the ASM MethodVisitor interface with some added methods for
 * obtaining context information.
 */
public class MethodTransformer extends MethodVisitor {

  public static class MethodContext {
    public final MethodReference method;
    public final int accessFlags;

    public MethodContext(MethodReference method, int accessFlags) {
      this.method = method;
      this.accessFlags = accessFlags;
    }

    public MethodReference getReference() {
      return method;
    }
  }

  private MethodContext context;

  public MethodTransformer() {
    super(ASM7, null);
  }

  public ClassReference getHolder() {
    return getContext().method.getHolderClass();
  }

  public MethodReference getMethod() {
    return getContext().method;
  }

  // Package internals.

  protected MethodContext getContext() {
    return context;
  }

  void setSubVisitor(MethodVisitor visitor) {
    this.mv = visitor;
  }

  void setContext(MethodContext context) {
    this.context = context;
  }
}
