OperandManager.java
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.commons.compress.harmony.unpack200.bytecode;
- import org.apache.commons.compress.harmony.unpack200.Segment;
- import org.apache.commons.compress.harmony.unpack200.SegmentConstantPool;
- /**
- * Tracks operands, provides methods to let other classes get next elements, and also knows about which classes have been used recently in super, this and new
- * references.
- */
- public class OperandManager {
- int[] bcCaseCount;
- int[] bcCaseValue;
- int[] bcByte;
- int[] bcShort;
- int[] bcLocal;
- int[] bcLabel;
- int[] bcIntRef;
- int[] bcFloatRef;
- int[] bcLongRef;
- int[] bcDoubleRef;
- int[] bcStringRef;
- int[] bcClassRef;
- int[] bcFieldRef;
- int[] bcMethodRef;
- int[] bcIMethodRef;
- int[] bcThisField;
- int[] bcSuperField;
- int[] bcThisMethod;
- int[] bcSuperMethod;
- int[] bcInitRef;
- int[] wideByteCodes;
- int bcCaseCountIndex;
- int bcCaseValueIndex;
- int bcByteIndex;
- int bcShortIndex;
- int bcLocalIndex;
- int bcLabelIndex;
- int bcIntRefIndex;
- int bcFloatRefIndex;
- int bcLongRefIndex;
- int bcDoubleRefIndex;
- int bcStringRefIndex;
- int bcClassRefIndex;
- int bcFieldRefIndex;
- int bcMethodRefIndex;
- int bcIMethodRefIndex;
- int bcThisFieldIndex;
- int bcSuperFieldIndex;
- int bcThisMethodIndex;
- int bcSuperMethodIndex;
- int bcInitRefIndex;
- int wideByteCodeIndex;
- Segment segment;
- String currentClass;
- String superClass;
- String newClass;
- public OperandManager(final int[] bcCaseCount, final int[] bcCaseValue, final int[] bcByte, final int[] bcShort, final int[] bcLocal, final int[] bcLabel,
- final int[] bcIntRef, final int[] bcFloatRef, final int[] bcLongRef, final int[] bcDoubleRef, final int[] bcStringRef, final int[] bcClassRef,
- final int[] bcFieldRef, final int[] bcMethodRef, final int[] bcIMethodRef, final int[] bcThisField, final int[] bcSuperField,
- final int[] bcThisMethod, final int[] bcSuperMethod, final int[] bcInitRef, final int[] wideByteCodes) {
- this.bcCaseCount = bcCaseCount;
- this.bcCaseValue = bcCaseValue;
- this.bcByte = bcByte;
- this.bcShort = bcShort;
- this.bcLocal = bcLocal;
- this.bcLabel = bcLabel;
- this.bcIntRef = bcIntRef;
- this.bcFloatRef = bcFloatRef;
- this.bcLongRef = bcLongRef;
- this.bcDoubleRef = bcDoubleRef;
- this.bcStringRef = bcStringRef;
- this.bcClassRef = bcClassRef;
- this.bcFieldRef = bcFieldRef;
- this.bcMethodRef = bcMethodRef;
- this.bcIMethodRef = bcIMethodRef;
- this.bcThisField = bcThisField;
- this.bcSuperField = bcSuperField;
- this.bcThisMethod = bcThisMethod;
- this.bcSuperMethod = bcSuperMethod;
- this.bcInitRef = bcInitRef;
- this.wideByteCodes = wideByteCodes;
- }
- public String getCurrentClass() {
- if (null == currentClass) {
- throw new Error("Current class not set yet");
- }
- return currentClass;
- }
- public String getNewClass() {
- if (null == newClass) {
- throw new Error("New class not set yet");
- }
- return newClass;
- }
- public String getSuperClass() {
- if (null == superClass) {
- throw new Error("SuperClass not set yet");
- }
- return superClass;
- }
- public SegmentConstantPool globalConstantPool() {
- return segment.getConstantPool();
- }
- public int nextByte() {
- return bcByte[bcByteIndex++];
- }
- public int nextCaseCount() {
- return bcCaseCount[bcCaseCountIndex++];
- }
- public int nextCaseValues() {
- return bcCaseValue[bcCaseValueIndex++];
- }
- public int nextClassRef() {
- return bcClassRef[bcClassRefIndex++];
- }
- public int nextDoubleRef() {
- return bcDoubleRef[bcDoubleRefIndex++];
- }
- public int nextFieldRef() {
- return bcFieldRef[bcFieldRefIndex++];
- }
- public int nextFloatRef() {
- return bcFloatRef[bcFloatRefIndex++];
- }
- public int nextIMethodRef() {
- return bcIMethodRef[bcIMethodRefIndex++];
- }
- public int nextInitRef() {
- return bcInitRef[bcInitRefIndex++];
- }
- public int nextIntRef() {
- return bcIntRef[bcIntRefIndex++];
- }
- public int nextLabel() {
- return bcLabel[bcLabelIndex++];
- }
- public int nextLocal() {
- return bcLocal[bcLocalIndex++];
- }
- public int nextLongRef() {
- return bcLongRef[bcLongRefIndex++];
- }
- public int nextMethodRef() {
- return bcMethodRef[bcMethodRefIndex++];
- }
- public int nextShort() {
- return bcShort[bcShortIndex++];
- }
- public int nextStringRef() {
- return bcStringRef[bcStringRefIndex++];
- }
- public int nextSuperFieldRef() {
- return bcSuperField[bcSuperFieldIndex++];
- }
- public int nextSuperMethodRef() {
- return bcSuperMethod[bcSuperMethodIndex++];
- }
- public int nextThisFieldRef() {
- return bcThisField[bcThisFieldIndex++];
- }
- public int nextThisMethodRef() {
- return bcThisMethod[bcThisMethodIndex++];
- }
- public int nextWideByteCode() {
- return wideByteCodes[wideByteCodeIndex++];
- }
- public void setCurrentClass(final String string) {
- currentClass = string;
- }
- public void setNewClass(final String string) {
- newClass = string;
- }
- public void setSegment(final Segment segment) {
- this.segment = segment;
- }
- public void setSuperClass(final String string) {
- superClass = string;
- }
- }