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

com.undefinedlabs.scope.rules.AbstractScopeAgentRule Maven / Gradle / Ivy

package com.undefinedlabs.scope.rules;

import static net.bytebuddy.matcher.ElementMatchers.any;

import com.undefinedlabs.scope.agent.ScopeAppliedRulesManager;
import com.undefinedlabs.scope.agent.ScopeTransformers;
import java.util.Map;
import net.bytebuddy.agent.builder.AgentBuilder;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;

public abstract class AbstractScopeAgentRule implements ScopeAgentRule {

  protected ElementMatcher classLoaderMatcher() {
    return any();
  }

  protected abstract ElementMatcher typeMatcher();

  protected abstract Map, String>
      transformers();

  @Override
  public AgentBuilder instrument(final AgentBuilder parentAgentBuilder) {
    if (ScopeAppliedRulesManager.INSTANCE.isAlreadyApplied(getClass().getName())) {
      return parentAgentBuilder;
    }

    AgentBuilder.Identified.Extendable agentBuilder =
        parentAgentBuilder
            .type(typeMatcher(), classLoaderMatcher())
            .transform(ScopeTransformers.defaultTransformers());

    for (final Map.Entry, String> transformer :
        transformers().entrySet()) {
      agentBuilder =
          agentBuilder.transform(
              new AgentBuilder.Transformer.ForAdvice()
                  .include(ClassLoader.getSystemClassLoader())
                  .advice(transformer.getKey(), transformer.getValue()));
    }

    ScopeAppliedRulesManager.INSTANCE.storeApplied(getClass().getName());
    return agentBuilder;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy