Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   *
   * Copyright 2012 Red Hat, Inc.
   *
   * Licensed 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.jboss.classfilewriter.code;
 
 
represents the state of the stack or the local variable array.

This is written out as part of the StackMap attribute

Author(s):
Stuart Douglas
 
 public class StackEntry {
 
     private final StackEntryType type;
 
     private final String descriptor;

    
if this is OBJECT then this holds the const pool index
 
     private final int descriptorIndex;

    
if this is an unititialized bytecode then this holds the absolute position of the new instruction that created it
 
     private final int newInstructionLocation;
 
     public StackEntry(StackEntryType typeString descriptor) {
         if (type == .) {
             throw new RuntimeException("OBJECT stack entries must provide a const pool index for the class");
         }
         this. = type;
         this. = descriptor;
         this. = -1;
         this. = -1;
     }
 
     public StackEntry(StackEntryType typeString descriptorConstPool pool) {
         this. = type;
         this. = descriptor;
         this. = -1;
         if(type == .) {
             if (descriptor.charAt(0) == 'L') {
                  = pool.addClassEntry(descriptor.substring(1, descriptor.length() - 1)); // strip the L and the ;
             } else {
                  = pool.addClassEntry(descriptor); // strip the L and the ;
             }
 
         } else {
              = -1;
         }
     }
 
     public StackEntry(StackEntryType typeString descriptorint newInstructionLocation) {
         this. = type;
         this. = descriptor;
         this. = newInstructionLocation;
         this. = -1;
     }
 
     public String getDescriptor() {
         return ;
     }
 
     public int getNewInstructionLocation() {
         return ;
     }
 
     public StackEntryType getType() {
         return ;
     }
 
     @Override
     public String toString() {
         if ( == .) {
         return "StackEntry [descriptor=" +  + ", type=" + 
                 + "]";
        }
        return "StackEntry [type=" +  + "]";
    }
    public static StackEntry of(String descriptorConstPool pool) {
        if(!DescriptorUtils.isPrimitive(descriptor)) {
            return new StackEntry(.descriptorpool);
        }else {
            char ret = descriptor.charAt(0);
            switch (ret) {
                case 'I':
                case 'Z':
                case 'S':
                case 'B':
                case 'C':
                    return new StackEntry(.descriptor);
                case 'F':
                    return new StackEntry(.descriptor);
                case 'D':
                    return new StackEntry(.descriptor);
                case 'J':
                    return new StackEntry(.descriptor);
            }
        }
        throw new RuntimeException("Unknown descriptor: " + descriptor);
    }
    public boolean isWide() {
        return  == . ||  == .;
    }

    
writes the entry to the stream
    public void write(DataOutputStream dstreamthrows IOException {
        dstream.writeByte(.ordinal());
        if ( == .) {
            dstream.writeShort();
        } else if ( == .) {
            dstream.writeShort();
        }
    }
New to GrepCode? Check out our FAQ X