@Override public byte[] getBytecodes() { CodeReader code = getCodeReader(); if (code == null) { return null; } else { return code.getBytecode(); } }
@Override public int getMaxLocals() { CodeReader reader = getCodeReader(); return reader.getMaxLocals(); }
@Override public boolean hasExceptionHandler() { CodeReader reader = getCodeReader(); if (reader == null) return false; int[] handlers = reader.getRawHandlers(); return handlers != null && handlers.length > 0; }
@Override public byte[] getBytecodes() { CodeReader code = getCodeReader(); if (code == null) { return null; } else { return code.getBytecode(); } }
@Override public int getMaxLocals() { CodeReader reader = getCodeReader(); return reader.getMaxLocals(); }
@Override public boolean hasExceptionHandler() { CodeReader reader = getCodeReader(); if (reader == null) return false; int[] handlers = reader.getRawHandlers(); return handlers != null && handlers.length > 0; }
@Override public int getMaxStackHeight() { CodeReader reader = getCodeReader(); // note that Shrike returns the maximum index in the zero-indexed stack // array. // Instead, we want the max number of entries on the stack. // So we add 1. // Additionally, ShrikeBT may add additional stack entries with // Constant instructions. We add an additional 1 to account for this, // which seems to handle all ShrikeBT code generation patterns. // TODO: ShrikeBT should have a getMaxStack method on Decoder, I think. return reader.getMaxStack() + 2; }
@Override public int getMaxStackHeight() { CodeReader reader = getCodeReader(); // note that Shrike returns the maximum index in the zero-indexed stack // array. // Instead, we want the max number of entries on the stack. // So we add 1. // Additionally, ShrikeBT may add additional stack entries with // Constant instructions. We add an additional 1 to account for this, // which seems to handle all ShrikeBT code generation patterns. // TODO: ShrikeBT should have a getMaxStack method on Decoder, I think. return reader.getMaxStack() + 2; }
private TypeAnnotationsReader getTypeAnnotationsReaderAtCode(TypeAnnotationsReader.AnnotationType type) { final CodeReader codeReader = getCodeReader(); if (codeReader == null) return null; ClassReader.AttrIterator iter = new ClassReader.AttrIterator(); codeReader.initAttributeIterator(iter); return TypeAnnotationsReader.getReaderForAnnotationAtCode(type, iter, getCodeReader()); }
private TypeAnnotationsReader getTypeAnnotationsReaderAtCode(TypeAnnotationsReader.AnnotationType type) { final CodeReader codeReader = getCodeReader(); if (codeReader == null) return null; ClassReader.AttrIterator iter = new ClassReader.AttrIterator(); codeReader.initAttributeIterator(iter); return TypeAnnotationsReader.getReaderForAnnotationAtCode(type, iter, getCodeReader()); }
@Override protected Decoder makeDecoder() { CodeReader reader = getCodeReader(); if (reader == null) { return null; } final Decoder d = new CTDecoder(reader); try { d.decode(); } catch (Decoder.InvalidBytecodeException ex) { Assertions.UNREACHABLE(); } return d; }
@Override protected Decoder makeDecoder() { CodeReader reader = getCodeReader(); if (reader == null) { return null; } final Decoder d = new CTDecoder(reader); try { d.decode(); } catch (Decoder.InvalidBytecodeException ex) { Assertions.UNREACHABLE(); } return d; }
@Override public boolean hasLocalVariableTable() { try { ClassReader.AttrIterator iter = new ClassReader.AttrIterator(); getCodeReader().initAttributeIterator(iter); for (; iter.isValid(); iter.advance()) { if (iter.getName().equals("LocalVariableTable")) { return true; } } return false; } catch (InvalidClassFileException e) { e.printStackTrace(); Assertions.UNREACHABLE(); return false; } }
@Override public boolean hasLocalVariableTable() { try { ClassReader.AttrIterator iter = new ClassReader.AttrIterator(); getCodeReader().initAttributeIterator(iter); for (; iter.isValid(); iter.advance()) { if (iter.getName().equals("LocalVariableTable")) { return true; } } return false; } catch (InvalidClassFileException e) { e.printStackTrace(); Assertions.UNREACHABLE(); return false; } }
CodeReader cr = getCodeReader(); bcInfo.lineNumberMap = LineNumberTableReader.makeBytecodeToSourceMap(cr); bcInfo.localVariableMap = LocalVariableTableReader.makeVarMap(cr);
CodeReader cr = getCodeReader(); bcInfo.lineNumberMap = LineNumberTableReader.makeBytecodeToSourceMap(cr); bcInfo.localVariableMap = LocalVariableTableReader.makeVarMap(cr);