blob: 18299ff313524261e6686b9e424f7dd69fca2ce3 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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
*
* https://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.apache.bcel.verifier;
import java.io.File;
import java.io.FileInputStream;
import org.apache.bcel.AbstractTest;
import org.apache.bcel.classfile.ClassParser;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.classfile.Method;
import org.apache.bcel.generic.ConstantPoolGen;
import org.apache.bcel.generic.EmptyVisitor;
import org.apache.bcel.generic.Instruction;
import org.apache.bcel.generic.LDC;
import org.apache.bcel.generic.MethodGen;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
/**
* Tests BCEL-370.
*/
class JiraBcel370Test extends AbstractTest {
@ParameterizedTest
@ValueSource(strings = {
// @formatter:off
"target/test-classes/com/puppycrawl/tools/checkstyle/grammar/java/JavaLanguageParser$ClassBlockContext.class",
"target/test-classes/com/foo/Foo.class"
})
// @formatter:on
void testLdcGetType(final String classFileName) throws Exception {
try (FileInputStream file = new FileInputStream(classFileName)) {
final ClassParser parser = new ClassParser(file, new File(classFileName).getName());
final JavaClass clazz = parser.parse();
final Method[] methods = clazz.getMethods();
final ConstantPoolGen cp = new ConstantPoolGen(clazz.getConstantPool());
final MethodGen methodGen = new MethodGen(methods[0], classFileName, cp);
// The first instruction is an LDC CONSTANT_Dynamic added by Jacoco
final Instruction instruction = methodGen.getInstructionList().getInstructions()[0];
instruction.accept(new EmptyVisitor() {
@Override
public void visitLDC(final LDC ldc) {
// Without the change to LDC.getType() this fails because the tag is CONSTANT_Dynamic
ldc.getType(cp);
}
});
}
}
@ParameterizedTest
@ValueSource(strings = {
// @formatter:off
"com.foo.Foo"
})
// @formatter:on
void testVerify(final String className) throws ClassNotFoundException {
// Without the changes to the verifier this fails because it doesn't allow LDC CONSTANT_Dynamic
Verifier.verifyType(className);
}
}