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

mockit.internal.util.ParameterNameExtractor Maven / Gradle / Ivy

Go to download

JMockit is a Java toolkit for automated developer testing. It contains APIs for the creation of the objects to be tested, for mocking dependencies, and for faking external APIs; JUnit (4 & 5) and TestNG test runners are supported. It also contains an advanced code coverage tool.

The newest version!
/*
 * Copyright (c) 2006 JMockit developers
 * This file is subject to the terms of the MIT license (see LICENSE.txt).
 */
package mockit.internal.util;

import edu.umd.cs.findbugs.annotations.NonNull;

import java.util.EnumSet;
import java.util.List;

import mockit.asm.metadata.ClassMetadataReader;
import mockit.asm.metadata.ClassMetadataReader.Attribute;
import mockit.asm.metadata.ClassMetadataReader.MethodInfo;
import mockit.internal.ClassFile;
import mockit.internal.state.ParameterNames;

public final class ParameterNameExtractor {
    private static final EnumSet PARAMETERS = EnumSet.of(Attribute.Parameters);

    private ParameterNameExtractor() {
    }

    @NonNull
    public static String extractNames(@NonNull Class classOfInterest) {
        String className = classOfInterest.getName();
        String classDesc = className.replace('.', '/');

        if (!ParameterNames.hasNamesForClass(classDesc)) {
            byte[] classfile = ClassFile.readBytesFromClassFile(classDesc);
            ClassMetadataReader cmr = new ClassMetadataReader(classfile, PARAMETERS);
            List methods = cmr.getMethods();

            for (MethodInfo method : methods) {
                if (!method.isSynthetic()) {
                    String[] parameters = method.parameters;

                    if (parameters != null) {
                        ParameterNames.register(classDesc, method.name, method.desc, parameters);
                    }
                }
            }
        }

        return classDesc;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy