/* ******************************************************************* * 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 */ 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); } }