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

org.pitest.mutationtest.engine.gregor.MethodInfo Maven / Gradle / Ivy

/*
 * Copyright 2010 Henry Coles
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and limitations under the License.
 */
package org.pitest.mutationtest.engine.gregor;

import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;

public class MethodInfo {

  private final ClassInfo owningClass;
  private final int       access;
  private final String    methodName;
  private final String    methodDescriptor;

  public MethodInfo() {
    this(new ClassInfo(0, 0, "", "", "", new String[0]), 0, "", "()V");
  }

  private MethodInfo(final ClassInfo owningClass, final int access,
      final String name, final String methodDescriptor) {
    this.owningClass = owningClass;
    this.access = access;
    this.methodName = name;
    this.methodDescriptor = methodDescriptor;
  }

  public String getDescription() {
    return this.owningClass.getName() + "::" + getName();
  }

  public String getName() {
    return this.methodName;
  }

  public String getMethodDescriptor() {
    return this.methodDescriptor;
  }

  public int getAccess() {
    return this.access;
  }

  @Override
  public String toString() {
    return "MethodInfo [access=" + this.access + ", desc="
        + this.methodDescriptor + ",  name=" + this.methodName + "]";
  }

  public boolean isStatic() {
    return ((this.access & Opcodes.ACC_STATIC) != 0);
  }

  public boolean isSynthetic() {
    return ((this.access & Opcodes.ACC_SYNTHETIC) != 0);
  }

  public boolean isConstructor() {
    return isConstructor(this.methodName);
  }

  public static boolean isConstructor(final String methodName) {
    return "".equals(methodName);
  }

  public Type getReturnType() {
    return Type.getReturnType(this.methodDescriptor);
  }

  public static boolean isVoid(final String desc) {
    return Type.getReturnType(desc).equals(Type.VOID_TYPE);
  }

  public boolean isStaticInitializer() {
    return "".equals(this.methodName);
  }

  public boolean isVoid() {
    return isVoid(this.methodDescriptor);
  }

  public boolean takesNoParameters() {
    return this.methodDescriptor.startsWith("()");
  }

  public boolean isInGroovyClass() {
    return this.owningClass.isGroovyClass();
  }

  public boolean isGeneratedEnumMethod() {
    return this.owningClass.isEnum()
        && (isValuesMethod() || isValueOfMethod() || isStaticInitializer());
  }

  private boolean isValuesMethod() {
    return this.getName().equals("values") && takesNoParameters() && isStatic();
  }

  private boolean isValueOfMethod() {
    return this.getName().equals("valueOf")
        && this.methodDescriptor.startsWith("(Ljava/lang/String;)")
        && isStatic();
  }

  public MethodInfo withMethodDescriptor(final String newDescriptor) {
    return new MethodInfo(this.owningClass, this.access, this.methodName,
        newDescriptor);
  }

  public MethodInfo withAccess(final int accessModifier) {
    return new MethodInfo(this.owningClass, accessModifier, this.methodName,
        this.methodDescriptor);
  }

  public MethodInfo withMethodName(final String newMethodName) {
    return new MethodInfo(this.owningClass, this.access, newMethodName,
        this.methodDescriptor);
  }

  public MethodInfo withOwner(final ClassInfo newOwnerClass) {
    return new MethodInfo(newOwnerClass, this.access, this.methodName,
        this.methodDescriptor);
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy