/* *******************************************************************
 * Copyright (c) 2005-2010 Contributors
 * All rights reserved. 
 * This program and the accompanying materials are made available 
 * under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution and is available at 
 * http://www.eclipse.org/legal/epl-v10.html 
 *  
 * Contributors: 
 * Andy Clement (IBM, SpringSource)
 * ******************************************************************/

package org.aspectj.weaver;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.aspectj.weaver.AjAttribute.WeaverVersionInfo;

Lightweight subclass of DataInputStream that knows what version of the weaver was used to construct the data in it. The input stream has a constant pool reader attached which enables it to decode constant pool references found within the data being read.
Author:Andy Clement
/** * Lightweight subclass of DataInputStream that knows what version of the weaver was used to construct the data in it. The input * stream has a constant pool reader attached which enables it to decode constant pool references found within the data being read. * * @author Andy Clement */
public class VersionedDataInputStream extends DataInputStream { private WeaverVersionInfo version = new WeaverVersionInfo();// assume we are the latest unless something tells us otherwise... private ConstantPoolReader constantPoolReader; public VersionedDataInputStream(InputStream is, ConstantPoolReader constantPoolReader) { super(is); this.constantPoolReader = constantPoolReader; } public int getMajorVersion() { return version.getMajorVersion(); } public int getMinorVersion() { return version.getMinorVersion(); } public long getBuildstamp() { return version.getBuildstamp(); } public void setVersion(WeaverVersionInfo version) { this.version = version; } public String readUtf8(int cpIndex) { if (constantPoolReader == null) { throw new IllegalStateException(); } if (cpIndex < 0) { throw new IllegalStateException(cpIndex + ""); } return constantPoolReader.readUtf8(cpIndex); } public boolean canDecompress() { return constantPoolReader != null; } public boolean isAtLeast169() { return getMajorVersion() >= AjAttribute.WeaverVersionInfo.WEAVER_VERSION_AJ169; } public String readPath() throws IOException { return readUtf8(readShort()); } public String readSignature() throws IOException { return readUtf8(readShort()); } public UnresolvedType readSignatureAsUnresolvedType() throws IOException { return UnresolvedType.forSignature(readUtf8(readShort())); } public String toString() { return "VersionedDataInputStream: version=" + version + " constantPoolReader?" + (constantPoolReader != null); } }