org.aspectj.weaver.tools.cache.CacheBacking Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2012 Contributors.
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v 2.0
* which accompanies this distribution and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
*
* Contributors:
* John Kew (vmware) initial implementation
* Lyor Goldstein (vmware) add support for weaved class being re-defined
*******************************************************************************/
package org.aspectj.weaver.tools.cache;
/**
* Interface for the backing to the cache; usually a file,
* but could be an in-memory backing for testing.
*
* aspectj and jvmti provide no suitable guarantees
* on locking for class redefinitions, so every implementation
* must have a some locking mechanism to prevent invalid reads.
*
*/
public interface CacheBacking {
/**
* Return a list of keys which match the given
* regex.
*
* @param regex
* @return
*/
String[] getKeys(String regex);
/**
* Remove an entry from the cache
*
* @param ref
*/
void remove(CachedClassReference ref);
/**
* Clear the entire cache
*/
void clear();
/**
* Get a cache entry
*
* @param ref entry to retrieve
* @param originalBytes Pre-weaving class bytes - required in order to
* ensure that the cached entry refers to the same original class
* @return the cached bytes or null, if the entry does not exist
*/
CachedClassEntry get(CachedClassReference ref, byte[] originalBytes);
/**
* Put an entry in the cache
*
* @param entry key of the entry
* @param originalBytes Pre-weaving class bytes - required in order to
* ensure that the cached entry refers to the same original class
*/
void put(CachedClassEntry entry, byte[] originalBytes);
}