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