4 */ 5 /* 6 * Licensed to the Apache Software Foundation (ASF) under one or more 7 * contributor license agreements. See the NOTICE file distributed with 8 * this work for additional information regarding copyright ownership. 9 * The ASF licenses this file to You under the Apache License, Version 2.0 10 * (the "License"); you may not use this file except in compliance with 11 * the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 */ 21 22 package com.sun.org.apache.bcel.internal.generic; 23 24 import com.sun.org.apache.bcel.internal.Constants; 25 import com.sun.org.apache.bcel.internal.ExceptionConstants; 26 27 /** 28 * INVOKESPECIAL - Invoke instance method; special handling for superclass, private 29 * and instance initialization method invocations 30 * 31 * <PRE>Stack: ..., objectref, [arg1, [arg2 ...]] -> ...</PRE> 32 * 33 * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A> 34 */ 35 public class INVOKESPECIAL extends InvokeInstruction { 36 /** 37 * Empty constructor needed for the Class.newInstance() statement in 38 * Instruction.readInstruction(). Not to be used otherwise. 39 */ 40 INVOKESPECIAL() {} 41 42 public INVOKESPECIAL(int index) { 43 super(Constants.INVOKESPECIAL, index); 44 } 45 46 public Class[] getExceptions() { 47 Class[] cs = new Class[4 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; 48 49 System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, 50 cs, 0, ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); 51 52 cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+3] = ExceptionConstants.UNSATISFIED_LINK_ERROR; 53 cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+2] = ExceptionConstants.ABSTRACT_METHOD_ERROR; 54 cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; 55 cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; 56 57 return cs; 58 } 59 60 61 /** 62 * Call corresponding visitor method(s). The order is: 63 * Call visitor methods of implemented interfaces first, then 64 * call methods according to the class hierarchy in descending order, 65 * i.e., the most specific visitXXX() call comes last. 66 * 67 * @param v Visitor object 68 */ 69 public void accept(Visitor v) { 70 v.visitExceptionThrower(this); 71 v.visitTypedInstruction(this); 72 v.visitStackConsumer(this); 73 v.visitStackProducer(this); 74 v.visitLoadClass(this); 75 v.visitCPInstruction(this); 76 v.visitFieldOrMethod(this); 77 v.visitInvokeInstruction(this); 78 v.visitINVOKESPECIAL(this); 79 } 80 } | 4 */ 5 /* 6 * Licensed to the Apache Software Foundation (ASF) under one or more 7 * contributor license agreements. See the NOTICE file distributed with 8 * this work for additional information regarding copyright ownership. 9 * The ASF licenses this file to You under the Apache License, Version 2.0 10 * (the "License"); you may not use this file except in compliance with 11 * the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 */ 21 22 package com.sun.org.apache.bcel.internal.generic; 23 24 import java.io.DataOutputStream; 25 import java.io.IOException; 26 27 import com.sun.org.apache.bcel.internal.Const; 28 import com.sun.org.apache.bcel.internal.ExceptionConst; 29 30 /** 31 * INVOKESPECIAL - Invoke instance method; special handling for superclass, private 32 * and instance initialization method invocations 33 * 34 * <PRE>Stack: ..., objectref, [arg1, [arg2 ...]] -> ...</PRE> 35 * 36 * @version $Id: INVOKESPECIAL.java 1747278 2016-06-07 17:28:43Z britter $ 37 * @see 38 * <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokespecial"> 39 * The invokespecial instruction in The Java Virtual Machine Specification</a> 40 */ 41 public class INVOKESPECIAL extends InvokeInstruction { 42 43 /** 44 * Empty constructor needed for the Class.newInstance() statement in 45 * Instruction.readInstruction(). Not to be used otherwise. 46 */ 47 INVOKESPECIAL() { 48 } 49 50 51 public INVOKESPECIAL(final int index) { 52 super(Const.INVOKESPECIAL, index); 53 } 54 55 56 /** 57 * Dump instruction as byte code to stream out. 58 * @param out Output stream 59 */ 60 @Override 61 public void dump( final DataOutputStream out ) throws IOException { 62 out.writeByte(super.getOpcode()); 63 out.writeShort(super.getIndex()); 64 } 65 66 @Override 67 public Class<?>[] getExceptions() { 68 return ExceptionConst.createExceptions(ExceptionConst.EXCS.EXCS_FIELD_AND_METHOD_RESOLUTION, 69 ExceptionConst.NULL_POINTER_EXCEPTION, 70 ExceptionConst.INCOMPATIBLE_CLASS_CHANGE_ERROR, 71 ExceptionConst.ABSTRACT_METHOD_ERROR, 72 ExceptionConst.UNSATISFIED_LINK_ERROR); 73 } 74 75 76 /** 77 * Call corresponding visitor method(s). The order is: 78 * Call visitor methods of implemented interfaces first, then 79 * call methods according to the class hierarchy in descending order, 80 * i.e., the most specific visitXXX() call comes last. 81 * 82 * @param v Visitor object 83 */ 84 @Override 85 public void accept( final Visitor v ) { 86 v.visitExceptionThrower(this); 87 v.visitTypedInstruction(this); 88 v.visitStackConsumer(this); 89 v.visitStackProducer(this); 90 v.visitLoadClass(this); 91 v.visitCPInstruction(this); 92 v.visitFieldOrMethod(this); 93 v.visitInvokeInstruction(this); 94 v.visitINVOKESPECIAL(this); 95 } 96 } |