org.jetbrains.kotlin.preloading.instrumentation.MethodInstrumenter Maven / Gradle / Ivy
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* 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.jetbrains.kotlin.preloading.instrumentation;
import java.util.List;
import java.util.regex.Pattern;
class MethodInstrumenter {
private final String debugName;
private final Pattern classPattern;
private final Pattern namePattern;
private final Pattern descPattern;
private final boolean allowMultipleMatches;
private final List enterData;
private final List normalReturnData;
private final List exceptionData;
private final boolean logApplications;
private final boolean dumpByteCode;
public MethodInstrumenter(
String debugName,
Pattern classPattern, Pattern namePattern,
Pattern descPattern,
boolean allowMultipleMatches,
List enterData,
List normalReturnData,
List exceptionData,
boolean logApplications,
boolean dumpByteCode
) {
this.debugName = debugName;
this.classPattern = classPattern;
this.namePattern = namePattern;
this.descPattern = descPattern;
this.allowMultipleMatches = allowMultipleMatches;
this.enterData = enterData;
this.normalReturnData = normalReturnData;
this.exceptionData = exceptionData;
this.logApplications = logApplications;
this.dumpByteCode = dumpByteCode;
}
public boolean allowsMultipleMatches() {
return allowMultipleMatches;
}
public void reportApplication(String className, String methodName, String methodDesc) {
if (logApplications) {
System.out.println(toString() + " applied to " + className + ":" + methodName + methodDesc);
}
}
public boolean isApplicable(String name, String desc) {
return namePattern.matcher(name).matches() && descPattern.matcher(desc).matches();
}
public List getEnterData() {
return enterData;
}
public List getNormalReturnData() {
return normalReturnData;
}
public List getExceptionData() {
return exceptionData;
}
boolean shouldDumpByteCode() {
return dumpByteCode;
}
@Override
public String toString() {
return debugName + "[" + classPattern + ":" + namePattern + " " + descPattern + (allowMultipleMatches ? " multiple" : "") + "]";
}
}