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

org.callbackparams.support.ClassConstantModifyingVisitor Maven / Gradle / Ivy

Go to download

CallbackParams is a JUnit-extension for writing parameterized tests. It unlocks new innovative patterns that offer elegant solutions to many obstacles that are traditionally associated with parameterized testing.

There is a newer version: 1.0-beta-6
Show newest version
/*
 * Copyright 2010 the original author or authors.
 *
 * 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.callbackparams.support;

import java.util.regex.Pattern;
import org.apache.bcel.classfile.ConstantUtf8;
import org.apache.bcel.classfile.EmptyVisitor;

/**
 * @author Henrik Kaipe
 */
public class ClassConstantModifyingVisitor extends EmptyVisitor {

    private static final Pattern dollarEscaper = Pattern.compile("\\$");

    private final Pattern originalClassConstant;
    private final String newClassConstant;

    public ClassConstantModifyingVisitor(
            Class originalClassConstant, Class newClassConstant) {
        this(originalClassConstant.getName(), newClassConstant.getName());
    }

    public ClassConstantModifyingVisitor(
            String originalClassConstant, String newClassConstant) {
        this.originalClassConstant =
                Pattern.compile(asPath(originalClassConstant));
        this.newClassConstant = dollarEscaper.matcher(asPath(newClassConstant))
                .replaceAll("\\\\\\$");
    }

    private static String asPath(String className) {
        return className.replace('.', '/');
    }

    public void visitConstantUtf8(ConstantUtf8 cnst) {
        cnst.setBytes(originalClassConstant.matcher(cnst.getBytes())
                .replaceAll(newClassConstant));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy