/* * Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com> * Licensed under the Apache License, Version 2.0 (the "License") * $Id: MetaDataInstrumenter.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.site.instrument; /** * This is a bytecode instrumenter that will modify classes so that they * receive the functionalities that are required to support meta-data * merging. * * @author Geert Bevin (gbevin[remove] at uwyn dot com) * @version $Revision: 3918 $ * @since 1.6.2 */ public class MetaDataInstrumenter { public final static String META_DATA_SUFFIX = "MetaData"; public static byte[] instrument(final ClassLoader loader, final String classNameDotted, final byte[] classfileBuffer) { Class metadata_class = null; String metadata_classname = MetaDataClassAnnotationDetector.getMetaDataClassName(classfileBuffer); if (null == metadata_classname && !classNameDotted.endsWith(META_DATA_SUFFIX)) { metadata_classname = classNameDotted + META_DATA_SUFFIX; } if (metadata_classname != null) { try { metadata_class = loader.loadClass(metadata_classname); } catch (ClassNotFoundException e) { metadata_class = null; } } if (metadata_class != null) { byte[] result = MetaDataBytecodeTransformer.mergeMetaDataIntoBytes(classfileBuffer, metadata_class); if (result != null) { return result; } } return classfileBuffer; } }