From 1fe2cde76555ab272b986fc2249ab35145f87b63 Mon Sep 17 00:00:00 2001 From: aclement Date: Wed, 28 May 2008 23:52:53 +0000 Subject: [PATCH] 231396: Comment #4: Big Refactoring --- bcel-builder/.classpath | 3 +- bcel-builder/bcel-builder.refactored.jar | Bin 1708025 -> 0 bytes bcel-builder/build.xml | 16 +- bcel-builder/patch.txt | 310 ----- bcel-builder/readme.html | 86 +- bcel-builder/readme.refactored.txt | 7 - .../org/aspectj/apache/bcel/Constants.java | 394 +++--- .../apache/bcel/ExceptionConstants.java | 38 +- .../org/aspectj/apache/bcel/Repository.java | 10 +- .../apache/bcel/classfile/AccessFlags.java | 183 --- .../bcel/classfile/AnnotationDefault.java | 18 +- .../apache/bcel/classfile/Attribute.java | 267 ++--- .../bcel/classfile/AttributeReader.java | 97 -- .../apache/bcel/classfile/AttributeUtils.java | 93 ++ .../bcel/classfile/ClassFormatException.java | 2 +- .../apache/bcel/classfile/ClassParser.java | 283 ++--- .../{Visitor.java => ClassVisitor.java} | 4 +- .../aspectj/apache/bcel/classfile/Code.java | 166 ++- .../apache/bcel/classfile/CodeException.java | 61 +- .../apache/bcel/classfile/Constant.java | 44 +- .../apache/bcel/classfile/ConstantCP.java | 2 +- .../apache/bcel/classfile/ConstantClass.java | 8 +- .../apache/bcel/classfile/ConstantDouble.java | 4 +- .../bcel/classfile/ConstantFieldref.java | 4 +- .../apache/bcel/classfile/ConstantFloat.java | 4 +- .../bcel/classfile/ConstantInteger.java | 4 +- .../classfile/ConstantInterfaceMethodref.java | 4 +- .../apache/bcel/classfile/ConstantLong.java | 4 +- .../bcel/classfile/ConstantMethodref.java | 4 +- .../bcel/classfile/ConstantNameAndType.java | 6 +- .../apache/bcel/classfile/ConstantObject.java | 2 +- .../apache/bcel/classfile/ConstantPool.java | 914 ++++++++------ .../apache/bcel/classfile/ConstantString.java | 6 +- .../apache/bcel/classfile/ConstantUtf8.java | 15 +- .../apache/bcel/classfile/ConstantValue.java | 12 +- .../apache/bcel/classfile/Deprecated.java | 6 +- .../bcel/classfile/EnclosingMethod.java | 6 +- .../apache/bcel/classfile/ExceptionTable.java | 10 +- .../aspectj/apache/bcel/classfile/Field.java | 85 +- .../apache/bcel/classfile/FieldOrMethod.java | 225 +--- .../apache/bcel/classfile/InnerClass.java | 4 +- .../apache/bcel/classfile/InnerClasses.java | 8 +- .../apache/bcel/classfile/JavaClass.java | 143 +-- .../apache/bcel/classfile/LineNumber.java | 6 +- .../bcel/classfile/LineNumberTable.java | 6 +- .../apache/bcel/classfile/LocalVariable.java | 4 +- .../bcel/classfile/LocalVariableTable.java | 8 +- .../classfile/LocalVariableTypeTable.java | 4 +- .../aspectj/apache/bcel/classfile/Method.java | 201 ++-- .../Modifiers.java} | 123 +- .../aspectj/apache/bcel/classfile/Node.java | 4 +- .../apache/bcel/classfile/PMGClass.java | 8 +- .../apache/bcel/classfile/Signature.java | 6 +- .../apache/bcel/classfile/SourceFile.java | 6 +- .../apache/bcel/classfile/StackMap.java | 6 +- .../apache/bcel/classfile/StackMapEntry.java | 4 +- .../apache/bcel/classfile/StackMapType.java | 2 +- .../apache/bcel/classfile/Synthetic.java | 14 +- .../apache/bcel/classfile/Unknown.java | 7 +- .../apache/bcel/classfile/Utility.java | 647 +--------- .../bcel/classfile/annotation/Annotation.java | 155 --- .../annotation/AnnotationElementValue.java | 51 - .../annotation/AnnotationElementValueGen.java | 16 +- .../annotation/AnnotationGen.java | 75 +- .../annotation/ArrayElementValue.java | 66 - .../annotation/ArrayElementValueGen.java | 93 ++ .../annotation/ClassElementValue.java | 53 - .../annotation/ClassElementValueGen.java | 18 +- .../annotation/ElementNameValuePair.java | 62 - .../annotation/ElementNameValuePairGen.java | 26 +- .../classfile/annotation/ElementValue.java | 112 -- .../annotation/ElementValueGen.java | 62 +- .../annotation/EnumElementValue.java | 69 -- .../annotation/EnumElementValueGen.java | 41 +- .../annotation/RuntimeAnnotations.java | 27 +- .../RuntimeInvisibleAnnotations.java | 4 +- .../RuntimeInvisibleParameterAnnotations.java | 4 +- .../RuntimeParameterAnnotations.java | 10 +- .../annotation/RuntimeVisibleAnnotations.java | 4 +- .../RuntimeVisibleParameterAnnotations.java | 4 +- .../annotation/SimpleElementValue.java | 169 --- .../annotation/SimpleElementValueGen.java | 86 +- .../apache/bcel/classfile/package.html | 14 - .../aspectj/apache/bcel/generic/AALOAD.java | 87 -- .../aspectj/apache/bcel/generic/AASTORE.java | 87 -- .../apache/bcel/generic/ACONST_NULL.java | 94 -- .../aspectj/apache/bcel/generic/ALOAD.java | 92 -- .../apache/bcel/generic/ANEWARRAY.java | 114 -- .../aspectj/apache/bcel/generic/ARETURN.java | 88 -- .../apache/bcel/generic/ARRAYLENGTH.java | 92 -- .../aspectj/apache/bcel/generic/ASTORE.java | 92 -- .../aspectj/apache/bcel/generic/ATHROW.java | 92 -- .../bcel/generic/AllocationInstruction.java | 64 - .../bcel/generic/ArithmeticInstruction.java | 106 -- .../apache/bcel/generic/ArrayInstruction.java | 106 -- .../apache/bcel/generic/ArrayType.java | 2 +- .../aspectj/apache/bcel/generic/BALOAD.java | 87 -- .../aspectj/apache/bcel/generic/BASTORE.java | 87 -- .../aspectj/apache/bcel/generic/BIPUSH.java | 131 -- .../apache/bcel/generic/BREAKPOINT.java | 79 -- .../apache/bcel/generic/BasicType.java | 2 +- .../apache/bcel/generic/BranchHandle.java | 21 +- .../bcel/generic/BranchInstruction.java | 246 ---- .../aspectj/apache/bcel/generic/CALOAD.java | 87 -- .../aspectj/apache/bcel/generic/CASTORE.java | 87 -- .../apache/bcel/generic/CHECKCAST.java | 117 -- .../aspectj/apache/bcel/generic/ClassGen.java | 127 +- .../bcel/generic/ClassGenException.java | 2 +- .../apache/bcel/generic/ClassObserver.java | 67 -- .../apache/bcel/generic/CodeExceptionGen.java | 11 +- .../bcel/generic/CompoundInstruction.java | 76 -- .../apache/bcel/generic/ConstantPoolGen.java | 802 ------------- .../bcel/generic/ConstantPushInstruction.java | 70 -- .../bcel/generic/ConversionInstruction.java | 102 -- .../org/aspectj/apache/bcel/generic/D2F.java | 87 -- .../org/aspectj/apache/bcel/generic/D2I.java | 87 -- .../org/aspectj/apache/bcel/generic/D2L.java | 87 -- .../org/aspectj/apache/bcel/generic/DADD.java | 88 -- .../aspectj/apache/bcel/generic/DALOAD.java | 87 -- .../aspectj/apache/bcel/generic/DASTORE.java | 87 -- .../aspectj/apache/bcel/generic/DCMPG.java | 93 -- .../aspectj/apache/bcel/generic/DCMPL.java | 92 -- .../aspectj/apache/bcel/generic/DCONST.java | 111 -- .../org/aspectj/apache/bcel/generic/DDIV.java | 88 -- .../aspectj/apache/bcel/generic/DLOAD.java | 92 -- .../org/aspectj/apache/bcel/generic/DMUL.java | 88 -- .../org/aspectj/apache/bcel/generic/DNEG.java | 85 -- .../org/aspectj/apache/bcel/generic/DREM.java | 88 -- .../aspectj/apache/bcel/generic/DRETURN.java | 87 -- .../aspectj/apache/bcel/generic/DSTORE.java | 92 -- .../org/aspectj/apache/bcel/generic/DSUB.java | 88 -- .../org/aspectj/apache/bcel/generic/DUP.java | 84 -- .../org/aspectj/apache/bcel/generic/DUP2.java | 84 -- .../aspectj/apache/bcel/generic/DUP2_X1.java | 82 -- .../aspectj/apache/bcel/generic/DUP2_X2.java | 82 -- .../aspectj/apache/bcel/generic/DUP_X1.java | 82 -- .../aspectj/apache/bcel/generic/DUP_X2.java | 82 -- .../apache/bcel/generic/EmptyVisitor.java | 244 ---- .../apache/bcel/generic/ExceptionThrower.java | 79 -- .../org/aspectj/apache/bcel/generic/F2D.java | 87 -- .../org/aspectj/apache/bcel/generic/F2I.java | 87 -- .../org/aspectj/apache/bcel/generic/F2L.java | 87 -- .../org/aspectj/apache/bcel/generic/FADD.java | 87 -- .../aspectj/apache/bcel/generic/FALOAD.java | 87 -- .../aspectj/apache/bcel/generic/FASTORE.java | 87 -- .../aspectj/apache/bcel/generic/FCMPG.java | 91 -- .../aspectj/apache/bcel/generic/FCMPL.java | 91 -- .../aspectj/apache/bcel/generic/FCONST.java | 113 -- .../org/aspectj/apache/bcel/generic/FDIV.java | 87 -- .../aspectj/apache/bcel/generic/FLOAD.java | 92 -- .../org/aspectj/apache/bcel/generic/FMUL.java | 87 -- .../org/aspectj/apache/bcel/generic/FNEG.java | 85 -- .../org/aspectj/apache/bcel/generic/FREM.java | 87 -- .../aspectj/apache/bcel/generic/FRETURN.java | 87 -- .../aspectj/apache/bcel/generic/FSTORE.java | 92 -- .../org/aspectj/apache/bcel/generic/FSUB.java | 87 -- .../aspectj/apache/bcel/generic/FieldGen.java | 141 +-- .../bcel/generic/FieldGenOrMethodGen.java | 190 +-- .../apache/bcel/generic/FieldInstruction.java | 45 +- .../apache/bcel/generic/FieldObserver.java | 67 -- .../apache/bcel/generic/FieldOrMethod.java | 45 +- .../aspectj/apache/bcel/generic/GETFIELD.java | 117 -- .../apache/bcel/generic/GETSTATIC.java | 113 -- .../org/aspectj/apache/bcel/generic/GOTO.java | 122 -- .../aspectj/apache/bcel/generic/GOTO_W.java | 110 -- .../org/aspectj/apache/bcel/generic/I2B.java | 87 -- .../org/aspectj/apache/bcel/generic/I2C.java | 87 -- .../org/aspectj/apache/bcel/generic/I2D.java | 87 -- .../org/aspectj/apache/bcel/generic/I2F.java | 87 -- .../org/aspectj/apache/bcel/generic/I2L.java | 87 -- .../org/aspectj/apache/bcel/generic/I2S.java | 85 -- .../org/aspectj/apache/bcel/generic/IADD.java | 87 -- .../aspectj/apache/bcel/generic/IALOAD.java | 88 -- .../org/aspectj/apache/bcel/generic/IAND.java | 85 -- .../aspectj/apache/bcel/generic/IASTORE.java | 88 -- .../aspectj/apache/bcel/generic/ICONST.java | 109 -- .../org/aspectj/apache/bcel/generic/IDIV.java | 94 -- .../org/aspectj/apache/bcel/generic/IFEQ.java | 98 -- .../org/aspectj/apache/bcel/generic/IFGE.java | 98 -- .../org/aspectj/apache/bcel/generic/IFGT.java | 98 -- .../org/aspectj/apache/bcel/generic/IFLE.java | 98 -- .../org/aspectj/apache/bcel/generic/IFLT.java | 98 -- .../org/aspectj/apache/bcel/generic/IFNE.java | 98 -- .../apache/bcel/generic/IFNONNULL.java | 97 -- .../aspectj/apache/bcel/generic/IFNULL.java | 98 -- .../apache/bcel/generic/IF_ACMPEQ.java | 97 -- .../apache/bcel/generic/IF_ACMPNE.java | 98 -- .../apache/bcel/generic/IF_ICMPEQ.java | 98 -- .../apache/bcel/generic/IF_ICMPGE.java | 98 -- .../apache/bcel/generic/IF_ICMPGT.java | 98 -- .../apache/bcel/generic/IF_ICMPLE.java | 98 -- .../apache/bcel/generic/IF_ICMPLT.java | 98 -- .../apache/bcel/generic/IF_ICMPNE.java | 98 -- .../org/aspectj/apache/bcel/generic/IINC.java | 133 +-- .../aspectj/apache/bcel/generic/ILOAD.java | 92 -- .../aspectj/apache/bcel/generic/IMPDEP1.java | 80 -- .../aspectj/apache/bcel/generic/IMPDEP2.java | 80 -- .../org/aspectj/apache/bcel/generic/IMUL.java | 87 -- .../org/aspectj/apache/bcel/generic/INEG.java | 85 -- .../apache/bcel/generic/INSTANCEOF.java | 106 -- .../apache/bcel/generic/INVOKEINTERFACE.java | 59 +- .../apache/bcel/generic/INVOKESPECIAL.java | 113 -- .../apache/bcel/generic/INVOKESTATIC.java | 110 -- .../apache/bcel/generic/INVOKEVIRTUAL.java | 112 -- .../org/aspectj/apache/bcel/generic/IOR.java | 85 -- .../org/aspectj/apache/bcel/generic/IREM.java | 94 -- .../aspectj/apache/bcel/generic/IRETURN.java | 87 -- .../org/aspectj/apache/bcel/generic/ISHL.java | 85 -- .../org/aspectj/apache/bcel/generic/ISHR.java | 85 -- .../aspectj/apache/bcel/generic/ISTORE.java | 92 -- .../org/aspectj/apache/bcel/generic/ISUB.java | 87 -- .../aspectj/apache/bcel/generic/IUSHR.java | 85 -- .../org/aspectj/apache/bcel/generic/IXOR.java | 85 -- .../apache/bcel/generic/IfInstruction.java | 82 -- .../bcel/generic/IndexedInstruction.java | 68 -- .../apache/bcel/generic/InstVisitor.java | 247 ++++ .../apache/bcel/generic/Instruction.java | 1062 +++++++++++------ .../bcel/generic/InstructionBranch.java | 340 ++++++ ...oInstruction.java => InstructionByte.java} | 39 +- .../apache/bcel/generic/InstructionCLV.java | 22 + ...{CPInstruction.java => InstructionCP.java} | 137 ++- .../bcel/generic/InstructionComparator.java | 28 +- .../bcel/generic/InstructionConstants.java | 289 +++-- .../bcel/generic/InstructionFactory.java | 583 ++++----- .../bcel/generic/InstructionHandle.java | 60 +- .../apache/bcel/generic/InstructionLV.java | 183 +++ .../apache/bcel/generic/InstructionList.java | 444 +++---- .../bcel/generic/InstructionListObserver.java | 67 -- .../{Select.java => InstructionSelect.java} | 89 +- ...medAndTyped.java => InstructionShort.java} | 32 +- .../bcel/generic/InstructionTargeter.java | 2 +- .../bcel/generic/InvokeInstruction.java | 24 +- .../org/aspectj/apache/bcel/generic/JSR.java | 119 -- .../aspectj/apache/bcel/generic/JSR_W.java | 110 -- .../apache/bcel/generic/JsrInstruction.java | 115 -- .../org/aspectj/apache/bcel/generic/L2D.java | 85 -- .../org/aspectj/apache/bcel/generic/L2F.java | 85 -- .../org/aspectj/apache/bcel/generic/L2I.java | 85 -- .../org/aspectj/apache/bcel/generic/LADD.java | 86 -- .../aspectj/apache/bcel/generic/LALOAD.java | 87 -- .../org/aspectj/apache/bcel/generic/LAND.java | 86 -- .../aspectj/apache/bcel/generic/LASTORE.java | 87 -- .../org/aspectj/apache/bcel/generic/LCMP.java | 92 -- .../aspectj/apache/bcel/generic/LCONST.java | 111 -- .../org/aspectj/apache/bcel/generic/LDC.java | 172 --- .../aspectj/apache/bcel/generic/LDC2_W.java | 116 -- .../aspectj/apache/bcel/generic/LDC_W.java | 88 -- .../org/aspectj/apache/bcel/generic/LDIV.java | 91 -- .../aspectj/apache/bcel/generic/LLOAD.java | 89 -- .../org/aspectj/apache/bcel/generic/LMUL.java | 86 -- .../org/aspectj/apache/bcel/generic/LNEG.java | 85 -- .../apache/bcel/generic/LOOKUPSWITCH.java | 54 +- .../org/aspectj/apache/bcel/generic/LOR.java | 85 -- .../org/aspectj/apache/bcel/generic/LREM.java | 88 -- .../aspectj/apache/bcel/generic/LRETURN.java | 85 -- .../org/aspectj/apache/bcel/generic/LSHL.java | 85 -- .../org/aspectj/apache/bcel/generic/LSHR.java | 85 -- .../aspectj/apache/bcel/generic/LSTORE.java | 89 -- .../org/aspectj/apache/bcel/generic/LSUB.java | 86 -- .../aspectj/apache/bcel/generic/LUSHR.java | 85 -- .../org/aspectj/apache/bcel/generic/LXOR.java | 85 -- .../apache/bcel/generic/LineNumberGen.java | 4 +- .../apache/bcel/generic/LineNumberTag.java | 16 +- .../apache/bcel/generic/LoadClass.java | 86 -- .../apache/bcel/generic/LocalVariableGen.java | 13 +- .../generic/LocalVariableInstruction.java | 224 ---- .../apache/bcel/generic/LocalVariableTag.java | 2 - .../apache/bcel/generic/MONITORENTER.java | 88 -- .../apache/bcel/generic/MONITOREXIT.java | 88 -- .../apache/bcel/generic/MULTIANEWARRAY.java | 69 +- .../apache/bcel/generic/MethodGen.java | 440 +++---- .../apache/bcel/generic/MethodObserver.java | 67 -- .../org/aspectj/apache/bcel/generic/NEW.java | 110 -- .../aspectj/apache/bcel/generic/NEWARRAY.java | 140 --- .../org/aspectj/apache/bcel/generic/NOP.java | 80 -- .../apache/bcel/generic/ObjectType.java | 2 +- .../org/aspectj/apache/bcel/generic/POP.java | 85 -- .../org/aspectj/apache/bcel/generic/POP2.java | 85 -- .../org/aspectj/apache/bcel/generic/PUSH.java | 199 --- .../aspectj/apache/bcel/generic/PUTFIELD.java | 118 -- .../apache/bcel/generic/PUTSTATIC.java | 114 -- .../apache/bcel/generic/PopInstruction.java | 68 -- .../apache/bcel/generic/PushInstruction.java | 73 -- .../org/aspectj/apache/bcel/generic/RET.java | 93 +- .../aspectj/apache/bcel/generic/RETURN.java | 85 -- .../apache/bcel/generic/ReferenceType.java | 2 +- .../bcel/generic/ReturnInstruction.java | 104 -- .../bcel/generic/ReturnaddressType.java | 2 +- .../aspectj/apache/bcel/generic/SALOAD.java | 85 -- .../aspectj/apache/bcel/generic/SASTORE.java | 85 -- .../aspectj/apache/bcel/generic/SIPUSH.java | 128 -- .../org/aspectj/apache/bcel/generic/SWAP.java | 84 -- .../apache/bcel/generic/StackConsumer.java | 68 -- .../apache/bcel/generic/StackInstruction.java | 83 -- .../apache/bcel/generic/StackProducer.java | 69 -- .../apache/bcel/generic/StoreInstruction.java | 101 -- .../{SWITCH.java => SwitchBuilder.java} | 18 +- .../apache/bcel/generic/TABLESWITCH.java | 56 +- .../org/aspectj/apache/bcel/generic/Tag.java | 15 +- .../bcel/generic/TargetLostException.java | 3 +- .../org/aspectj/apache/bcel/generic/Type.java | 22 +- .../apache/bcel/generic/TypedInstruction.java | 67 -- .../bcel/generic/UnconditionalBranch.java | 67 -- .../generic/VariableLengthInstruction.java | 70 -- .../aspectj/apache/bcel/generic/Visitor.java | 247 ---- .../annotation/ArrayElementValueGen.java | 100 -- .../aspectj/apache/bcel/generic/package.html | 16 - .../src/org/aspectj/apache/bcel/package.html | 17 - .../apache/bcel/util/AttributeHTML.java | 272 ----- .../apache/bcel/util/ByteSequence.java | 2 +- .../aspectj/apache/bcel/util/Class2HTML.java | 270 ----- .../aspectj/apache/bcel/util/ClassLoader.java | 227 ---- .../bcel/util/ClassLoaderRepository.java | 2 +- .../aspectj/apache/bcel/util/ClassPath.java | 2 +- .../aspectj/apache/bcel/util/ClassQueue.java | 2 +- .../aspectj/apache/bcel/util/ClassSet.java | 96 -- .../aspectj/apache/bcel/util/ClassStack.java | 73 -- .../aspectj/apache/bcel/util/ClassVector.java | 2 +- .../aspectj/apache/bcel/util/CodeHTML.java | 632 ---------- .../apache/bcel/util/ConstantHTML.java | 274 ----- .../aspectj/apache/bcel/util/JavaWrapper.java | 152 --- .../aspectj/apache/bcel/util/MethodHTML.java | 208 ---- .../util/NonCachingClassLoaderRepository.java | 83 +- .../aspectj/apache/bcel/util/Repository.java | 2 +- .../apache/bcel/util/SyntheticRepository.java | 2 +- .../org/aspectj/apache/bcel/util/package.html | 25 - .../apache/bcel/verifier/exc/package.html | 24 - .../apache/bcel/classfile/tests/AllTests.java | 3 +- .../tests/AnnotationDefaultAttributeTest.java | 8 +- .../classfile/tests/AnnotationGenTest.java | 16 +- .../bcel/classfile/tests/BcelTestCase.java | 24 +- .../bcel/classfile/tests/ClassPrinter.java | 21 - .../classfile/tests/ElementValueGenTest.java | 34 +- .../classfile/tests/FieldAnnotationsTest.java | 15 +- .../bcel/classfile/tests/Fundamentals.java | 319 +++++ .../tests/GeneratingAnnotatedClassesTest.java | 96 +- .../tests/GenericSignatureParsingTest.java | 286 ++++- .../tests/MethodAnnotationsTest.java | 14 +- .../tests/ParameterAnnotationsTest.java | 95 +- ...RuntimeVisibleAnnotationAttributeTest.java | 110 +- ...sibleParameterAnnotationAttributeTest.java | 26 +- .../classfile/tests/TypeAnnotationsTest.java | 2 +- .../bcel/classfile/tests/UtilTests.java | 12 +- .../bcel/classfile/tests/VarargsTest.java | 8 +- .../bcel/verifier}/DescendingVisitor.java | 67 +- .../bcel/verifier/EmptyClassVisitor.java} | 44 +- .../bcel/verifier/EmptyInstVisitor.java | 259 ++++ .../bcel/verifier/GraphicalVerifier.java | 2 +- .../apache/bcel/verifier/NativeVerifier.java | 2 +- .../apache/bcel/verifier/PassVerifier.java | 2 +- .../apache/bcel/verifier/TransitiveHull.java | 2 +- .../bcel/verifier/VerificationResult.java | 2 +- .../apache/bcel/verifier/Verifier.java | 2 +- .../bcel/verifier/VerifierAppFrame.java | 2 +- .../apache/bcel/verifier/VerifierFactory.java | 2 +- .../verifier/VerifierFactoryListModel.java | 2 +- .../verifier/VerifierFactoryObserver.java | 2 +- .../apache/bcel/verifier/VerifyDialog.java | 2 +- .../exc/AssertionViolatedException.java | 2 +- .../exc/ClassConstraintException.java | 2 +- .../verifier/exc/CodeConstraintException.java | 2 +- .../verifier/exc/InvalidMethodException.java | 2 +- .../exc/LinkingConstraintException.java | 2 +- .../bcel/verifier/exc/LoadingException.java | 2 +- ...ocalVariableInfoInconsistentException.java | 2 +- .../exc/StaticCodeConstraintException.java | 2 +- ...ticCodeInstructionConstraintException.java | 2 +- ...InstructionOperandConstraintException.java | 2 +- .../StructuralCodeConstraintException.java | 2 +- .../apache/bcel/verifier/exc/Utility.java | 2 +- .../verifier/exc/VerificationException.java | 2 +- .../VerifierConstraintViolatedException.java | 2 +- .../aspectj/apache/bcel/verifier/package.html | 2 +- .../bcel/verifier/statics/DOUBLE_Upper.java | 2 +- .../apache/bcel/verifier/statics/IntList.java | 2 +- .../bcel/verifier/statics/LONG_Upper.java | 2 +- .../verifier/statics/LocalVariableInfo.java | 2 +- .../verifier/statics/LocalVariablesInfo.java | 2 +- .../bcel/verifier/statics/Pass1Verifier.java | 2 +- .../bcel/verifier/statics/Pass2Verifier.java | 20 +- .../bcel/verifier/statics/Pass3aVerifier.java | 119 +- .../statics/StringRepresentation.java | 6 +- .../apache/bcel/verifier/statics/package.html | 2 +- .../structurals/ControlFlowGraph.java | 35 +- .../structurals/ExceptionHandler.java | 2 +- .../structurals/ExceptionHandlers.java | 2 +- .../structurals/ExecutionVisitor.java | 319 ++--- .../bcel/verifier/structurals/Frame.java | 2 +- .../verifier/structurals/GenericArray.java | 2 +- .../structurals/InstConstraintVisitor.java | 662 ++++------ .../structurals/InstructionContext.java | 2 +- .../verifier/structurals/LocalVariables.java | 2 +- .../verifier/structurals/OperandStack.java | 2 +- .../verifier/structurals/Pass3bVerifier.java | 15 +- .../bcel/verifier/structurals/Subroutine.java | 2 +- .../verifier/structurals/Subroutines.java | 49 +- .../structurals/UninitializedObjectType.java | 2 +- .../bcel/verifier/structurals/package.html | 2 +- .../bcel/verifier}/util/BCELFactory.java | 73 +- .../apache/bcel/verifier}/util/BCELifier.java | 51 +- .../verifier}/util/InstructionFinder.java | 6 +- 401 files changed, 6865 insertions(+), 27195 deletions(-) delete mode 100644 bcel-builder/bcel-builder.refactored.jar delete mode 100644 bcel-builder/patch.txt delete mode 100644 bcel-builder/readme.refactored.txt delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/AccessFlags.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/AttributeReader.java create mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/AttributeUtils.java rename bcel-builder/src/org/aspectj/apache/bcel/classfile/{Visitor.java => ClassVisitor.java} (98%) rename bcel-builder/src/org/aspectj/apache/bcel/{generic/LoadInstruction.java => classfile/Modifiers.java} (59%) delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/AnnotationElementValue.java rename bcel-builder/src/org/aspectj/apache/bcel/{generic => classfile}/annotation/AnnotationElementValueGen.java (71%) rename bcel-builder/src/org/aspectj/apache/bcel/{generic => classfile}/annotation/AnnotationGen.java (66%) delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/ArrayElementValue.java create mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/ArrayElementValueGen.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/ClassElementValue.java rename bcel-builder/src/org/aspectj/apache/bcel/{generic => classfile}/annotation/ClassElementValueGen.java (76%) delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/ElementNameValuePair.java rename bcel-builder/src/org/aspectj/apache/bcel/{generic => classfile}/annotation/ElementNameValuePairGen.java (73%) delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/ElementValue.java rename bcel-builder/src/org/aspectj/apache/bcel/{generic => classfile}/annotation/ElementValueGen.java (67%) delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/EnumElementValue.java rename bcel-builder/src/org/aspectj/apache/bcel/{generic => classfile}/annotation/EnumElementValueGen.java (76%) delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/SimpleElementValue.java rename bcel-builder/src/org/aspectj/apache/bcel/{generic => classfile}/annotation/SimpleElementValueGen.java (68%) delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/classfile/package.html delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/AALOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/AASTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ACONST_NULL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ALOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ANEWARRAY.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ARETURN.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ARRAYLENGTH.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ASTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ATHROW.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/AllocationInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ArithmeticInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ArrayInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/BALOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/BASTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/BIPUSH.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/BREAKPOINT.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/BranchInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/CALOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/CASTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/CHECKCAST.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ClassObserver.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/CompoundInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ConstantPoolGen.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ConstantPushInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ConversionInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/D2F.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/D2I.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/D2L.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DADD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DALOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DASTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DCMPG.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DCMPL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DCONST.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DDIV.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DLOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DMUL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DNEG.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DREM.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DRETURN.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DSTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DSUB.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DUP.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2_X1.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2_X2.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DUP_X1.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/DUP_X2.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/EmptyVisitor.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ExceptionThrower.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/F2D.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/F2I.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/F2L.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FADD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FALOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FASTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FCMPG.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FCMPL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FCONST.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FDIV.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FLOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FMUL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FNEG.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FREM.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FRETURN.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FSTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FSUB.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/FieldObserver.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/GETFIELD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/GETSTATIC.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/GOTO.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/GOTO_W.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/I2B.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/I2C.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/I2D.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/I2F.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/I2L.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/I2S.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IADD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IALOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IAND.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IASTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ICONST.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IDIV.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IFEQ.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IFGE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IFGT.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IFLE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IFLT.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IFNE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IFNONNULL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IFNULL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ACMPEQ.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ACMPNE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPEQ.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPGE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPGT.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPLE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPLT.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPNE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ILOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IMPDEP1.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IMPDEP2.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IMUL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/INEG.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/INSTANCEOF.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKESPECIAL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKESTATIC.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKEVIRTUAL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IOR.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IREM.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IRETURN.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ISHL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ISHR.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ISTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ISUB.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IUSHR.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IXOR.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IfInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/IndexedInstruction.java create mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/InstVisitor.java create mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionBranch.java rename bcel-builder/src/org/aspectj/apache/bcel/generic/{GotoInstruction.java => InstructionByte.java} (82%) create mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionCLV.java rename bcel-builder/src/org/aspectj/apache/bcel/generic/{CPInstruction.java => InstructionCP.java} (57%) create mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionLV.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionListObserver.java rename bcel-builder/src/org/aspectj/apache/bcel/generic/{Select.java => InstructionSelect.java} (75%) rename bcel-builder/src/org/aspectj/apache/bcel/generic/{NamedAndTyped.java => InstructionShort.java} (85%) delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/JSR.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/JSR_W.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/JsrInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/L2D.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/L2F.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/L2I.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LADD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LALOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LAND.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LASTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LCMP.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LCONST.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LDC.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LDC2_W.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LDC_W.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LDIV.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LLOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LMUL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LNEG.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LOR.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LREM.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LRETURN.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LSHL.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LSHR.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LSTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LSUB.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LUSHR.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LXOR.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LoadClass.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/MONITORENTER.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/MONITOREXIT.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/MethodObserver.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/NEW.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/NEWARRAY.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/NOP.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/POP.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/POP2.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/PUSH.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/PUTFIELD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/PUTSTATIC.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/PopInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/PushInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/RETURN.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/ReturnInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/SALOAD.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/SASTORE.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/SIPUSH.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/SWAP.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/StackConsumer.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/StackInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/StackProducer.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/StoreInstruction.java rename bcel-builder/src/org/aspectj/apache/bcel/generic/{SWITCH.java => SwitchBuilder.java} (92%) delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/TypedInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/UnconditionalBranch.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/VariableLengthInstruction.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/Visitor.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ArrayElementValueGen.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/generic/package.html delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/package.html delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/util/AttributeHTML.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/util/Class2HTML.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/util/ClassLoader.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/util/ClassSet.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/util/ClassStack.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/util/CodeHTML.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/util/ConstantHTML.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/util/JavaWrapper.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/util/MethodHTML.java delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/util/package.html delete mode 100644 bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/package.html delete mode 100644 bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/ClassPrinter.java create mode 100644 bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/Fundamentals.java rename bcel-builder/{src/org/aspectj/apache/bcel/classfile => verifier-src/org/aspectj/apache/bcel/verifier}/DescendingVisitor.java (80%) rename bcel-builder/{src/org/aspectj/apache/bcel/classfile/EmptyVisitor.java => verifier-src/org/aspectj/apache/bcel/verifier/EmptyClassVisitor.java} (71%) create mode 100644 bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyInstVisitor.java rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/GraphicalVerifier.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/NativeVerifier.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/PassVerifier.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/TransitiveHull.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/VerificationResult.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/Verifier.java (99%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/VerifierAppFrame.java (99%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/VerifierFactory.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/VerifierFactoryListModel.java (97%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/VerifierFactoryObserver.java (97%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/VerifyDialog.java (99%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/AssertionViolatedException.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/ClassConstraintException.java (97%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/CodeConstraintException.java (97%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/InvalidMethodException.java (97%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/LinkingConstraintException.java (97%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/LoadingException.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/LocalVariableInfoInconsistentException.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/StaticCodeConstraintException.java (97%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionConstraintException.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionOperandConstraintException.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/StructuralCodeConstraintException.java (99%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/Utility.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/VerificationException.java (97%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/exc/VerifierConstraintViolatedException.java (99%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/package.html (91%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/statics/DOUBLE_Upper.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/statics/IntList.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/statics/LONG_Upper.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/statics/LocalVariableInfo.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/statics/LocalVariablesInfo.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/statics/Pass1Verifier.java (99%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/statics/Pass2Verifier.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/statics/Pass3aVerifier.java (93%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/statics/StringRepresentation.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/statics/package.html (91%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/ControlFlowGraph.java (94%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandler.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandlers.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/ExecutionVisitor.java (81%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/Frame.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/GenericArray.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/InstConstraintVisitor.java (83%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/InstructionContext.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/LocalVariables.java (99%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/OperandStack.java (99%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/Pass3bVerifier.java (96%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/Subroutine.java (98%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/Subroutines.java (93%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/UninitializedObjectType.java (97%) rename bcel-builder/{src => verifier-src}/org/aspectj/apache/bcel/verifier/structurals/package.html (92%) rename bcel-builder/{src/org/aspectj/apache/bcel => verifier-src/org/aspectj/apache/bcel/verifier}/util/BCELFactory.java (81%) rename bcel-builder/{src/org/aspectj/apache/bcel => verifier-src/org/aspectj/apache/bcel/verifier}/util/BCELifier.java (89%) rename bcel-builder/{src/org/aspectj/apache/bcel => verifier-src/org/aspectj/apache/bcel/verifier}/util/InstructionFinder.java (98%) diff --git a/bcel-builder/.classpath b/bcel-builder/.classpath index 955afd2c0..5cb8fd272 100644 --- a/bcel-builder/.classpath +++ b/bcel-builder/.classpath @@ -1,9 +1,10 @@ + - + diff --git a/bcel-builder/bcel-builder.refactored.jar b/bcel-builder/bcel-builder.refactored.jar deleted file mode 100644 index 320a30046ed80af36654a1b790ed4c8d3ca305de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1708025 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�mn8CBc2NP6XBa>6BpE{X+}J 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

8sFB!E&Jc>`0&xUX2qxKv5H#Y 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 z zeKcJN7L?G2Ny+Q1bVkm9o_VV3mlbC`bd{BEq%($XB9+Ii-GbOUNGIhv;SeTNJTmxJ z#I-~*#xWQZ@eXk@AE-?JIRb4zf^#qLAJ3}d`?ZAV6wPtBD5S=a*@uNsCU=-kf{E-KY7e z;tEaSR8C7XiQJEVl`XUZz@>O@-DHZ7o&HMkv4;>LX>d12?TF{Co;xsaqUf!? z%P+lqoL5NWoyo#j+akE@p9dV3f$v}OmB!OCGEzo}yU6-jn%cp;E9zK%)Kh_-n*UIRB*E&^ooRC#8 ze0Q4aWIDvP%ti9kiSXb5RC$Ms=a-;RgrF?x7vvwfdTm&*--K?yDgdfp=3q5rvEFSf8yG|$AOOKkLd>6(4?akZ zDX`GaTVj!F9c_vlJcJbvmxkiIjMm0SW+lwfjR@jniYkButNaYkA!7D?H&`A2ET!Qd zm`Amt{z%hkGWlc5U=p5f$LXrtDhAkR+>5vXlA|NYrXixgB3q;d>|10YG8{A6TXBkm zCTVSGY)^iC)RDSBe;Ae8eCP!G)Kfhm;*%`BauO2_G+V0H1JeX|sC&!zo4(|OsDNe7 z;Xv%0pvK6fb_udKtQ?8dfp3yrN+H$jgakr>*CKUTPU?bj)yW9nDE}5E3Dj9D(q|*= zxmfzM7KKq@BK`IqD zwd}4$FHPwlWM5vY(_Yyto&Sx@K@9>2X{>;N^gtcupn_7)B8-NgjOC*=Y|u4qICI=? zC}wzmyiKgai%gf7NaU$C%vnWlE!}8JcSIf<;w51Vt}3>{;A|!DCiAYFUG>^Xwp!9T zGKT3R0XjyT{5hu?DMOIt_Z?iPK(REeFmM#bB@%L_imuu&tk}R=rjjjyuNEdEv!+zQ ziE3Hk4|-OUpxghx>~Al%>d7tFw%|PH4A@2|F5zAD2Nu-ha9=`YdmK0{nO7K%xo~X) z1Ss%TetLEPxqh3+ZgHBt3E#t^o%nu$w|gkb7<;R+h(q;kN(N!eWm)Dm#tP2Oyc`*| zQQ*#1o>jJ{k@S|W)$I0#Qd7OK-#2YLhab zg%Wbxq34O`Eqm%Kujf(ebPZ%!Y|cXK*=B*Sz993y=jnL8Bw~)Ud#oawNqY=6(T?tr zKT67f+SEwZmN=an>NKnH=Fj(Y{ekD_(L5R-k)wGyL5=p-Iba~Ub>*h&O0+Zk>P^_q zz4PLU6N=zqCOxUQFo&;ZGCv%p5gO;P&gpmc-66~?VmcF_IcU}xg1qRsc?i3mUs?Cn z$J>w(9Obym8!nj4TUGEnEu#DRrcTK2Pk;n|R`@F?&UQw-``J4n`hm51hJ96HS1`|m zQ+R71I|{o!it6dFT*qqe;%N8DkuLjQv<_!3(Bh9Zbi~ z`Tb`?7aW|JkOKz-T7dumcS09&H!`vRk10{yz}DE> zJj?OY-qYUwH;CJ{PD3!(fREXSRx}~ebxefhh~GhuDld<^sMpHmZ7j3C$%y#tH(ysg zRRbq1Z$$nnwUS^!0Vm37;3v`9W9?3SFvf(UI!7HJ@o?RC&tzdO2x9_frBLT&`UPpxyMxmbht5kvdHVQ*R zQ5JMk0Hg8-r~K$4el8>K{(G`aHLm2oTgd#qpDJK20FS}D?UDc05)OQyM2B5!bI-Uv zcer2mb3*o4jBd^&|DU?8Aw(Er`2QTe~NcmL0$#_7N0fD)B$C1f>}pKWg%K&5<-WK|O? zH5s9?O2u+Mg^Y?hvT(n=@aB$n&G>>#lC3SybAeor#ZSOr;GQKluEo#{MiXzR5k5&C zH=%MGgMm>YTi4m#&rkN(>}|E$pACM*!#ykzSS8e2;|EO@b;so+72A{$jk;hXUX)y) zU9?<{B;D;qmpCq##|vU9+9&Of&eQItsP;!*e*(GoY6NX3CkZ{8OoPRX`5ERymeZtaF-Xqy~5G(c`EQ_+cRgR`a4)O>BTv1r^qM9&%i9#gYlAnsSwpOn{bh*;Y=o4uhJX zJmO9v7E9=k_3(jgu2)OPE^MgrdMQVH!y)1IO^J{w2!bT6k(av;Vmqm%FmHX_Zxemi zZ_^01WK3Fo>E1*;*6~o5thimiRwYQ>Z1k6 zEY3d>x%Cj9PW|O(Z@#!fljHkLa5(p?ajSO{oJV@O(qVaoId7mm^Y)+-=>I01`7tTj zYGM)kvW0|`M)Tr;MX7ml=B0m7=@c(Q+}Kc`Xv&WF>**0W0oLp-_m7j+U7wJ}rc#IW z6&%5IAvW85{KxPEGTdz%?fk~h*v&B_xl1JWR0E|iv59v~w|kE3Y>N*;2tA;`%PQK$ ztKacWZlUTB_n@Ztq|4+YpFKoPh%@s^I1HhbX2I&G<)+Fy2hW!wWeP4 z??|})y$ny>>wPpIc~Y@#@qPiFv#ncCADsXU3PYe*hUmmv#(CjQMUIQcMYdmJ-Y-BV zt_Rp##3``5AMU%||1AK7a}}uE*uQDy_rK+{|Ml|L|EU+#|IjEz+)a#J{__L+|8PC0 zwf@8PeE;rwC6h*ifc+%}v~J9R4F=LyCn0V+)@Mv+N>&9uWDFG$9}J+d)B)CVu+o`d z=}@V%QIQWyQMGB_*jOo9ZrK0-Hy&g%nq6_wq8ErCm3ITD-5oQ#C5B zn%0Tg9F%_araXTN*M-S=DxEylcwg<o70xc#OCRh0Z~#wT0S75$2c?d*9p=_T9ZX3*{DqHESMp z;jJg8WVBf^Qlomm;dyqpzOXUvENO{0?1hKbNYG}1EvT-Xjis8;w6(mpgM+e-ezM@6 zxmRqIL8a(cA4RsHUV4>kFE@w6R4kJYxRO#)iLUK{(;00yr;;(90PdL`n7)O7T?=aF z-kM=i|S^nPu_){iLXe?$~9 zp{*=#pHnXRr8OdNI-Bwh;N8 z4H*@Wq??lB>+UGoqQ#7CASR(!vgbs( zSUr*{QHCiyLn;YI>TW}lIuNy6c$R;WkoSVYd0YKF{)i^4H%1Kv{}y`v5E>^LX&AX# zA)BOGp)fiM374;oYC#Is?$%;&D;~?T2AB9FFXN-%Od)zC0NGAo!rUB!-RWon>B9AE z(QapDBq!$BCgz&vIDn}IWL1P`DN2F2t7sJ?Mhx}+APWG{O_MQWlxgWcytT2ayfnAD z{pHp^YYFX!Rgw(jcZKA@lVuTrOTMoh~51h;hN_*k1os=Mz^OI+dk=C z+t8ue<&hCZi*5&B4$lmDl<-()2&^CuoD!_9si@Yn_1jO{j#dzGRQ6IEHzmt`7PSeI z+xgs9PkgnVcvS5?d7s^@jp^D^|dVf5HMdSewgy^5Dr%fqVYW$1HVkD?9-*9*^dlh!GO zSGx&$_kIyDwuohG6|1N29f#+(@LEqM(cBu9i+ETKBfz+WR6@3}FM-ZOinP`aK)h?G z{ytcb(|&47xL09Gc|Pcu(|%Gq>~Cl$B#y{+nRgPs2D1Wrwl@^HSP`B;=KU2)CA3o! zK9~wA7!Xc9{5`Uq0CuMeh}uyVv8ya<%{{B8^TdwU_pSD+^ zU|}3yx_P#)5|(Y3i}BiX+r)D})Cz~3Jk$ap4D;L#xBlmx#Ch}t6FBm1zkYxCV;eX7 zvSsFFt9FU-HqA0VHwJo`vb=OzD`{y$j)nD@=&57E9HX4eMn=>!@rae;7VQ$}eXrII z8vZPPIbP8x$!4nW)?L;By)q>wXlRXJ)b>~6$917M{p1h2HWyb*h*8BQg-_@?>axoE z@&dL-yrG~@)<=V>Ps3%VA7iIFvI!6D(6d3+#zu9AX;@TabfOOG-9U+xqAS$MKTi4R zS(crXW8I8S$bbPSVTO!CcA7MKsDh)(YoE$dc~qT@QaqQ@#35|UcfQ@ z=_tT$sr>#(GeD)tWXzx-9Oro)&NPkO5%J zJPXEMZX<|H5Os|zXMZo83zk$UGleF-gYw!DVJ_?}$PL_i%Pcs_JdjJa5^gJ(qq6fM zFJ$7Z48Jsa(K21KGp23XjaqfTesg);hr%@K8N;!HC4?1ix`J&57A4U}q@HKIAz7Jf zfV|Tra;4zmiZmFg5fC#yt+Rh)Yg9Xd$~`;ol!T>tpsvH6C+Dxm)p|9MT2N23wz&kR z?hww(7a;_Mtt(^X<%Hc3KKV{^74&wbysZx$4$PCW6z--+!U)ChO#3QgW~1l4@)EI} zi^-X1Q}Hq^z0A9*d|eqW0ft{HvOb>KLUVLcp{+ZkOK!AEPu=V=GED7Gs;^Z@t|EOL zWaIyN2yk}1Ca{?64MNYVOtnu-s>h&`>&YssE~+0LFN1FozShfT%?7OBd!AW64R{Ml0)9x0WOQyUDl(=rr;E2l{+)9}E8E*sGF8p(2`j8k z^<&KyxFW7z!cV8&65%0X%uK=pBSXSdU^PO_@rrc%crex?pg;6B3gh0;}5XnZIwiOATjV zS)3ZgC1I1(Aq%;^IvjC@MVPgDkhqq3v3DJTgA%@G*=*t_-eB~pSX0!I!}S(7ngbSU z#P%p~r69pV$lk?7ha^cTWzzdb9FyE($Ii-5Ts4nl(<^^15Vu=L#z5}hb}rFjKQv}3 zfR+U`q02pA6!VvpBJ1xOj^wCI8F$`f?Kdvi+Aa5)HasQA^w6}spk(sDNBGQ~(L=l5 zj(c{He_28Gso_SyDYzXnw#}Ji7&g!r)L|Mx)b4d%$3c@<#SU+h)PXU*Uh+Z-9!@3U~sf{0`Hl?o&lT?^_{U)5a$=!xB zk*POsg#&&u6eD#%Uhv80?bzVx={NSG@i?;vBa39IRLD71flL%6Wq6GlzFF)E*4h)TXwhk`_f#Q@uWbD(kkF_>g1}^| z-q^T^q@sHN4u{gb`*`FY6jiv3YdY}_HD6ayq6?O?w?%_jS1~p%H80EexEmx>P2drW z>efZ%*oRi(m<3Lrz;6GerSM^9a!BA-;2po<%ZL38G$d$7ZdU+5;AA%c9RvPDct0P8 zL}pC#T9C`Tcny*w*Dv6Bw~x!xh$0y_BynF*#YA@rKbvL3H0NQxfFhsABALfXrEeW* zR>A*PB|wi6s10Us5QtYB*w>;VqN&!8=pHKmNC^*pjvcRDyqKDi5DTSWl8!{Q8nl z+=1ix!Frg$#f6M859atW-KE4D#x%xP40|sx7RdJ6#)MEea?GHY^t1Kg}D;LtH3Q;V|oA%l> z$C?Y?6=z=QgNX73`e4m=Q~awu>TOBNmxorD_X1vCQ`v@Owj#-@j%rsAZ8f{)a3#-7 zBxZ#&Cx6tnjPcgNw9=3r@Ij@sai6=JW|_~@!ac&*r% zZ9e^N*|m3)!7GxH+5+vhZJMiH%N4C~b*3wwa7((|^4Mu-b+|9_0gNwFHTXuSLyvl% zH$1*HZy3VdjW0Y39Jr9jLM}JI6j660#8q;NHcrQxy8E8#(0*n3AWisSb@-r7_~12j z)-6BIjW7;80lZs5Y)>rvmW4AgjJ~%MZ{4(qYUD+%!;zZg*A2PX1Ksae z^o5@?TP6jstqU2x_+j_|;`F@-7=Cn<=g9OU0RJWSuWY$`Ep4QHqwLEAertrj`%KJ1 zHhPslF@9!>|H5g%2RRu+M|C>rmkzI+HM@Gm{Pb46encqgrF_FR*9D%g9D80x$qM{r z(x~hOE@TsULc8+NGMEL;K>VEsetnF#)q5UvD3Np?~n( zbBU;9a0AGl2yEqj#poa@9REq-G=>@6jgR?eWbbBlWSf4A$0&P%Q(?_<6>*sv^e>SO z2(wJ_?+p^HTA9-G4HT-?*rKH7@+S2xQCpi18_4|xPM*1U?x&dicSp#3rt&uksr$sA z#D&8l=NeRnSXF6o&0jKelIQN#(I@6i7Co#ml9M)6Y2qnTfD{ha6uvazY`eXpjY8oO za@7rOEpzq2de~_g%Wz~=M7mOjO)D70ijc8+kw~0x5zf6bAaBY(YSg`6X`|o8Dxh0% z_HiIzYUj}=y8g95Z<63|QWk(fX1+d9pjsvW-t5@fARq+bE&<@bm#`;xHgMuAhI1NW z0%qNYbMG=_!r1&xzlF2-m;MlZ*pLZN6F>)?E0^{2VWlN4e<4c(#!#i_^>Wl-C zJ5FV87Ns)3xAfnr=<@@<)1&J95%p{B+ZEuek6HT-yo!#Wzn_5K$-=v`vHW$IpvC7k z+hxW%^s#DgaikLZnS&gRcx@v7!veSHD^z5kQ`0T$)V#Y$bPe}lZl{>@f>yn_Q)+sR z&?Mp&#@YO8E%w4y9KmId8Pzmda({JXO%EvaNZ3X^wXd;Yt!m z*;B)TtD!f2*xx0{`J$a=6c@#gCZ)4jU;Xn5&%isf;6y2fFF9zRlOLC_$dh++4&Ee; zFTwIbQL!qvXz_uuQH;KT=95hmrdcvyojRY%?2khwoGSnjafW}q%Q2hQIoOUw!%o))J zXkHZ2MiFuPNQ03q_N-zLDy^30`j8{+eduo#SvMxbdNu`FS09jWI{cj~kew0`o#Y{y z%&or^CvcBYf<)9JyTGCs&<@O94)h(VMOELE4iF#q-YG?&oCK>8Ehd4{4Cwg#SUOBR z13DF>sRfyEr$7^=u$O>yMBpDrYV2v+_ySb0aiQtfZ*AUppx8elt;$D)W5!*)W58{U_tRG&DX zPYZQrZoIeSpr|QGmjp=d-Jii<-)N5Kt%?D@*k~GVbIeudrst66J-+BUg}XMN_J-xk ztxJlhg&tjzYS>nhEI)^wz2G^o{HNV>9*CR>0;iyJ?*z_xvYKX3=;-L0oRf#nHAxM$ z3??~b_(Sk^BWfd0VT6}Z#y*e@cmY*ngqL2d9LI|PXfaGG6YKF31v~*mU%*I@5+o-| zkwaVQBXa6bWejiM>I`o-6GMS!`u&Y{dmQR_T?2ul%ZR*vVFVvA1n$38zXT12F}ISh zKpsf>d$P@e$EP8**^$e>(7<|wlyn1>bXC|*oXCWGA?L9PJduU%D8n@q^$dDJ*W6I4 zuV^y>S5Mkw$vFaKRQfhW-PlV3dw%?H>K>8=g zHW?Z&Xlg!U9_{$23f`hYn@mKG9F&_0;Dy9Qj@03;=0eG^g#|>80T$_j<-F%2u1CPG z!6XUXiD9_V?TRq%ayy3o*UfT($hSO^M~Bs#JRdCHt%D{bZze6g4-OcrNygOBeXTPr z`BCoJmT5`R#11Io70%Gx`4vH6r^hya6jN4)iVkprGU}==S$9t4GAKC~X zuSbJgFsi1J^}fV+ZU@6|zwz7BCx?JjJ7OLCX2oo01@TVF-*epmsQ4CnT%FHf3ls4>Y>t}x`zjw{Qtxv8 zZ~Em0*%JP-F67H)t~ZyQTdoOTS1uu0*@P{wrI8bH+}uYouWsKeN%l`n{${d$j%$wL z@>3z=?k(Yeve_Da-jkR>KzTaSXuPw84Mi~A z4$4W1Xj)p4y}t$hg${h@g25I#W&11oshFd!d)uY(H^&@92SV|kM^{TfLTL;_H{dc1 z4JPA^+W$$q;8RQ)G}b%sF7}*mdCeq!tnT)HBJk7g*+TIJbd>5cPq|8~Wz!B?XQX&7 zP^z13uO+m$SW0eMaJ!ZrI9oUEu&G%)X@?>qrLQr$$rRbL{T|Wsh^hn+%;Wf1-P$MR z3z*`DuQKFJ)okNSQ^ou-<&r)D8@ZT)QdyTIP6amPAn*L zh~%y&4z-UY2Q&5k7n?=KIC9?1C0ZCY{G=wddwHEs+AF66-00o&jt#W7t}d=Lm+Kc` z^QHAwbB9@}8Yb9M*Z%W`!~tL&w@1E-S-q46k7GxjFol?Rg4Y#4mmm_!RV!&eKHVeL zA#RyLJH~JY&b3@*be$zYN(j$Kek!pd8xU1g*zv_MWyPg8;Nci~;(dTNd)2{0&VOCr zgBlUUMaJ%4?17JYM{dO?zs>TBhd&08DbuvKu2RHZ+1j2Cxohn!zSwitZv>|e77ci@ ze>O6AQr^JX>6e0qDJe@1jI*vF}Ds%H-+f6k?d%63p5 zrL9ijFsmZNRSlT(6LRZP!~1*L9{tM@4U8mchR)*S5#bOs%plMC)~>$T$E){QFT`KX z!u2Xrr{N`JCHbGG+#og=kgvZlS0Gl=*k~S(OIaM)_F%F@bS?~!a1{;+^|wl8n8a_y zq>>DRSbnkWgYyMz#97{vsoBa8G+pClgygf%0O+k@8orT-W~UACepoa?QS)08MSJH| zk~|XL(}Yxu=~qS3OtaQ0Vit1U$t4$XWEDt@LZ8g?Oxg1AvIj-*9G|!owi<8eyqzG* z5?{gYsI+soMbXYMYraqAJb7gg?eN1t2N7K^1c-Hd1>qn0>Yu8JK5{jZvnrTQegZtA zxXSOXLJQk?h!KA}B|M%&)d`PgLZb-b&>-K3?dHBe`VTVp59kqTOW8Mmx$?X=o%0j> zip=$9m44YVsfdj~tdQcJ)-p*og@{8zxPEr|q=r|1MWTIY9)y9;n7q%JBn*-rM9pQk z9D)k`4O{IOo-hkZGgg1_YFCr`jw~Ti(~Y~=-6GhE@tGTbo6EH-n!u}Plsg33MS5xD zi1;f}^S2?G5Q0Yc8RyX$nec$L#7J`4?gR8cvdCOxYU}I|B`Nj)QIh{Xi~Nkv{2!|M z#7%8~M1IDCj*f;N|CLN~k!pi1)7^24P5W<9OjY9uvE z!aVDHpzyqaekdMDQ=hF*-kP2C819^|zC&_xjB*51*lV_zs2pcHr%1M_d5SVEn;eH` zdoUfDXm)6+wl)nMk|mo8|zB5HY-|nzxQgmZS<@K}Ty3 zqB+hmPGs5~LV>B1voE&@oE|w7@6ASvN46gsM*E0>^b8$2tMiu~5x8Ow7SB!4p_MUw zBY*xjl?sr&|C>h+GT&XEQ;NF?K={hUl=Z+1vKkP^B<^dnpk^XqNTP-8G`9=a_qeqm z!fHN1;~jBt^XG%Oey!ie@%hh9C`zp%fc$AON&Q*>mlyu;o1pnW-h}^9IsV8Sf259v zmbT9SA31#Oaoh25b8X66C-QzhU6nUA zH$U;YdEjN6_4~dxCKCSBEeamdXYFTTT0pUOZi7%m{pjqOx!E1^E3@Z1#Ht5aziJkj z5-t=(ceMo>;@`y;^RfW@9+|e_8#1a*iQf)H=x_yUd@vmNy*7@ICEwWf>DS# z-jX%2SBA(`PE=Mjr>nZ6xwh7s>Y%a_N2|*SozH4*?mS1TZwKeL`VIw)&`m=|@7Fmc z9v!<|Er5aTX79vRo?-36>K_KvxI32+?8lcY9%W6xLq}?}nwPN6S1RWY0$!o4mF+*5 z7a?XO8?|Q=kX9zYDD@B)5YC8)YC*05suy2izg_{qUjIM(1`OH;My&?12*oT&x7HGY zDjdVmK}13ROfgAGxvDJ_O)JW4H|H9f8iX(}TxxRDdPhJY!rA$OV)=e4b%WZAEoLF? zb9wW}Z#mmCLW|rf0|WwLvG#$WiD%1}auN^}Jvi6FXlG&BVH@6p zAjdw+S~8#|Z2pm!da?$dYOcFLE3TfPxv{C9T;9J?j)eZecz{K|+e*n%`dh2qN!gX_ zQHWWV-3yYNKc`ee^+RCm4$EOd8bfm+`J#tqZCIm(^lqcxx8{$UYi0scNJLK_++<=( zo&o7#$|~tH1_Cb?wtjMy0ToN>B4=MC}F># zC-##8>5!__Q*nFxgr~v3%ZcNoyMwpzX?LDlYAhx-Z+?7Zn){$(3lLJ!uC$O%{wmKp zj_$=DSlSDb8Xzg~$m0r@4c*>@5|bykQS`f?(RSFkBdm@^g}dKOs_F#ZwUW!g{%5;#E|0Uk&m=X>lre~ z0YFD`paW+d(nGL-93BKkqqb0SPz0g~W(Wkd^acxa;O8AJKHc0vA!{s&+ckM+9JAoK zZvxZ0!3QWtMB4`vaxs>*Tj8KcN;drrF<>4P;pN>6CL;P3`R|GjLyg2S;O1GmDb2DT z!;rn%LpMVPD1%OaZh0TEv~tM3_M+bBcKWBIAlk6O+0hHan*C9 zt9z=EwS8cYt;@2)W(m;?88t9W4V&_PLru+2VQ+L&F}1=TKES#v4IF=|&i5kNYM&{3 zgEdA~6-Oto1?_N=h-6Ry?$oDxT;}DKtBOKtUk=!=IVkJJt{4%6T9Z7_Re1_Nf}ftMPk%gDHM&E5K!F= z+dW_$)~|!$>w40IJCN-I(2?mz@X~bA=`TON}q)SKC(+)Fe_ zVT~wnsVMp%fhg(nFiLoc9$=~XdC`ay!5}{aE55cWn-i$CfXU^EF`a6x0*^lP3j&1% zeWQk;NNc-)wU5oS&Wc4&F%Rv5Hea>R80uN(HLD>aEOlbC3kdEaDBf~aj_a#|C9+&e ziY2p~J1E4Zar?V+FNoe%+{uDarS3QY)HIZ5)!nCs&1bwmO2Me5JufsGWyJgN6A1JS z2kgAPdZXocb6zL&_HJqavY$9Y!PxcT|3WqZAZKT{5pFH zC%Z*yMnI@(;LbRlNu`5Z^;6w*rn9ht5y>m>Z?sF&5&U6}L6LMj(RjvabF{@F!J&r( zz7%5BC=FsE2|o(7fi-|5ilnk6bwCBb0l}c8oEamMaur`tLh$lhndA}LivU?rJ^nRn z01kHa7k&}pU3)#!Q;R*~FxPTiuGk<&;gC2NqbH|&yhI8f6$S`J)RxV&V)C3l1!szZ zBxMnqapc7`JLwckloHc|q+HO$JS>jY$?6ha?fjSp$lzsnZmM@ra_@b_0csHx&;8Yi49*q3nK1U^Gsfyym*I3Mr=!zpDbD*kTbbW1IKQvw~oJY{g~&EH!k!8Z2r$vQuVl7|D_F1g5lo#!Xx6rrc9O8vxw)X8y}qdmUWk3>6d9?$U=l5Y z7#ZStZ19<`+*pLdDUu!0h{79YtGT{z{IA*+oB3tJC<_+xLkWO0SAbv!C9SQ`Nn$(E z)$o@;JIUOxoEfJi6((7h(y9cu8Ihjf3j5NEYH~XkS|pwS+cIke_1(g11{Za9apJ(7 z0=_jAIL~SX*%?o?d5#{vD}-iGvLNzGMFKU5Da6D~JqWf5EPSM)j36smWHowlL($-3 z;JGlpA8Vt3-{Vm7(LLlEEq*X?zziUsi$Vtoa{-%53Ps5z*!lB%tTLF!F>%-=La%Pw zmF-=-d#d=7wGmFZqOYQ<3RU?17J;0Y2Ij{QVuzOGujCP2qYjz*vl0&uh(U)_Y+Df< zQE84vXtsFKkfz*00V?ms)y76;tk7sFoK{43cM4XE>cePCV0Owrsp zsjD>Nx2K=BmU2US&AH`~RP?lr`}9|BtU~D|DhzI{A??XI*^mos6JHYzbBNppH4e@t zgXC9opALjt9*8mEA4n&=D6xH*KM6Cn#B+O)?Zsw;`PM|+6>F-o;RVb{(kt=C2P~INxCexTT=PO z@-`m9jO2pU9n+Gw6kc;cfx5pmz-7}!U}|dCSwItdqGtrbSOSmt2VT6H&*=KWFsa$p z@fbhJb5F1f1%@Zqjte}6N0^1Tnld_m9}$35`6;j%T82UxNF{xV#?3X5L@^w$i@A~? z=}~-OsX=#c!Qx!bAG}@eUQkP&(wDoevRE7egG}EbtZ;RnxPS}W$_QD>(souQO%M-N zvhCzE?z6JHfm0%PGsc{01?f)PU{UHA@_<7Sn{MUheBicyhCyY&f*uV=H+4*-hLhp* z)m4heH+G<#K2T}J@C4SV9ekO&f~N39LS(ovj*^?Q+;ap#qZORJGuA&^u#$|Nk*AHX zti`|FA4p~T_+0~f3)a=C>TI%ghnqi}lkkc+R@PJmKxxIIiEnPnAXLMAHML^J-arsJ zJUh%sC>0dl9hcpI8eY?y) zgMqQw{&Q`Eg4MdVn}F@OudYYroNiCr7}vl&G<0F}>#lj~&n)s?pb*kDr3<=^0j$;D>~T0zF(kEm1s-^9sXVP%bu9 zd`EO5q^_7d*CO^u3@GCOdFO>apyg(Tp+7_L6ZwzckY^@=Nc!$rlqcRHs~7^?y04US zLIp6=+ixBJ=#Ml3A0Dpz@`fQKaceZs`D^CtO{#bXS|9m*a)jK2;M+%m0!e|rN51(l zVRyVVmt8bC#J6y;4g*Wx4iex|{ZA z04vR%3pnqur!$dq4-$@&9gB5( zNDSg0YxIuA8S8eP4wIAV(JPe%L7aTxS{P#vl1CPnRU7_DF3KgU(8Q>hIDmqLNK1JzrFg zo+R2fO7igpNngJVcY&BvDan9d9!7R7-rNGo3@*)@xM5}<___m=MR3HCiclF#+43r1`&D9x71FD zy#k>|+$1#9Xzz<|(%y8X8KW6lWIjGoTB6u%oL85bluiHA}f_ z=iM|J?qUlpD4vvqeCqL&o-DH`v$an~`*W1F7OX&}Ja$?(B$RFqH?dZP^hNU(3+Rh) zft}IO!Rn`m(f=AuQ{A8R4B}&-jK2n>jw2Bs0Z?QNErx(@{T1vO~*pRp;$gM0*uUnYz0YNf>HR({E;>rJEZkoO>sncV%p3ZDRPw zGp)A_c3-M)G8=hrxwvOJQcGsk^^EGHo3xtIBIwRsy$Kqkf;N|CEK)7u3>|3U-I63SviCom+I* z@wQ4OxL)Jq4iMZWSuwOMrp}(aNv3*^M6B@Os_uFyDe3&mwnnw@=waBq~~Mg>9F zz9%J{T>4FIeX7*1p6T7|UapvnrS;COr_?*SmbLiv>rFa`h(r=9%1gdcskQ#LOuueR zTyh1Z=UPC-S=)|>arcXGnY6l9GCWl;wHg8v4_Kemh#l~0uXh9jtOUDOQAL>VJaw07 zES68Sj$ng3k@Q$EhF14omWyIV$|s$cy|O+foJ6DKzxnL|tWpeQ8_go8a6X`Tz{x%TsurMt$`au$9qR9#s^!COr0bwZ?K z7jZ_<)6p#!4?44@w9&o|h>dlHN}a)XZj*Jl9%wIC&=<{_`-zYz-E$Tub$5``lo>>CjR3|Ss#1Gv|Pqu2oA6MI6X68V|WZK}^8 zo3irCnv5bz{d*e=Xg2ceuh^73uB1wPL?u!4b7x7FhLOWvuoFDdLu6cCCdg_xg70B# zqiqib2}Z3rYUN8s(`Ev3C>hD_r*KH@Doa7?zryYI6O$_IE7HpgO+)s^Qd;Nm<&6tv zEqzj4e&rKd^hpN1kmtEIDe1yqG)8lh9L9YvR%kmsy!Zy!h^VaoDoS z&@D?QhtdvnK?Y8J3;R6FjqDh6KI2#Q;gM-!wfl# z7aKV2_#%^xvV8DP_QE3BP`IMqf7Di={h=&=C@D0{x0;bkh_*Gy#mjX{W)&o1ONFF|25XZD*(BKczf8KiIU1JOI*Tw%L+n`q z!)(v^hbaX?yV3i@djH=R$S?4^hsv@9aXkB?z`JI-DbtgnJ;j%|Zb#y-Ak5+x_aY!k z(>;NICWD8otLuv}E3WJag{X*Un# z5UYY?KH`+~sC9TLC-^0g$V-zy{!rf=`-sdZ4=9p16TkU7TOW?7lt`M-5jTI<+Pd&k zL1L2PYZ=uP?~b$Wj$1$p&wVUWrJNorF*TKiz4(nwJ%K|#p=QtKo40k8TcYL4Vd9rb=TlW_Yehk`Edtp>C*BpXPbE3&`{3`-oPHEc6to5kwqTnE zb`}sD8sd`}v_gtZfFs0|vp{Y41XW$?CZi79Ie)a`dfVc?0}i8StH6!@gzp3e*k;2wMV{RUe$hG{X8IxMm@d1=B{cU=Z$Rar*;*o@_VSFfu`hM^6;(W zMf~2tfdFsZbXUyS*;mZqZ~Ldd-W!Avdz%#dZ6tW&-)Z+y#dNZ~uRw6!gb=%A^SzYu_eE;(LCK|FNf!SQ&W}N5}B~q4fL+VH}MM zgZBP-eaVIAA3b#)9I{PUdw`nKdxJ`*m#yIea(Z}xL~{<>bX8+tauxQuF#4cC{Jsn= zf!vE8Edsc68np-RPtF@UdOu#sXv|n(#i4M*?ye9a^0^N*rjB%k43N6WJuybI}LpFGKW8D;nldb_zB%qgZ2Sz?{J=YG8y%e$<;xN^u z;42CCR5~N|UmU=$^lfJUEKU9qHNHoab!~EVsSl{)-D$WLA&iN9@JICd>B@gR zE_W4KyzmNnAv^Aqp~4%3|0nh#558QQpXVX&ASiRrg(02QOXMTor)i&E zhZO~ck@4fDz~2Io)FUz)`G6hYQqcs?&IR&^Y486f|K6c3uFsP059t1eArO^_%7>Xg zQ9Rj=!~L;caK#|Inui(b7G#R>fi z|DIbl+N_@G`;JflJO3Fww+jd&4(_8=5yx*}h8Vdtfr7XI2YuL+g_A@1IYHfFcf=q< z`vC5cU(qzE?&|eMFwl^DJ>~HNiT!ff4nl#k5q#xEB{F~H*p6nTpy9J9(c%GJg(u8q|r@esk4z2`G;_RJei6<>yw`h)|Q zX4qRgW;}KmCY{mHl^n;xzC;#C&m}m*_&iI7`8)@z7>o@y^=57crKupJd{VP#6UiYF z4Y|qmSM!2QwLWu)*FC z=oxDs5Mz=7d_)BFMev!48M-P9<0_C70S7ur0ELquiJW{6&(g%g^k);wRzfCt`#K0^ zaZ)}pVgTMqIFm+9Y}gL94l4j2iHt;sX~@z<3oa@z92j{Fgd>6`xWR;R3LrhVkT&pY z!ub)-(m#Df!y%)!2YNt8Rh)Aa&sv=MGWbTy8v1oR!H|tD;YfT1(B3mYGE(O07EXV}*8$itL@hNL z`Nu;LXM56RuPUI$Q1ttB^||KxdicMJmdR)hWZ4?*-|7+v$sA# zi(!|2{i`<-n(lM`tGdQRCGK*iF9kmZO;janLbhXDGZLC1$^Hd`9=cL@5JDtC8i2Wm zfLqkJ91&~C5wN95%Lc}fE85T;h#FIq$2@2(5LwuT4lmt1o+BL(+A^3J!#T`IS#w!o zvyDWDC!OBmS)3RX{$z2pHD@|FO|W-zST-J-SX;+_1T3rQ&M|>Zv2xR3;Nk@7L$M+X z1@H8o@j63F4;b2G%Q0d|Mo50xr=vD|2+rWnFMJ&_J&{!}XkTePR&@KYU?=h4#27NR7S(LRhPaET`S@G$)Vtt}UD)Z49DXBqFv8Y($^gTfZJj6sGM^CR29B zaCJ?uyj+iOIMA^!hMaD@LgUc<9~|Ncj(R6&!V7BAE3zsr|3*-NeI=VHq(x@oxf9Hi`5-!wQ*!#|D8+z3aj?B z6LL%xa7<)Cj>&=|UWEm)JBZRS!sbhOSFlMQhDumkN2fweGFB)Ga!N5I!b3>Arc+li zs4o~aB%3HLqX<5r6jb5|F4%dbcg+YuR&X15bNDg5BM#OUUT+4_cG z4OL}!f7mu=nQ44%S%GxX=ZcDmic_J7N?I}qbAkUZfzu#|55=&A3N9|NuVL9j!>>c- z(I55D3q5|oug0_rFmj~On?G|;iyvgxL6}zC|C0?#G8H1jb~yYGJ)yCao9SZM{5Kj$ z@q9dWOn{&gd31bZzQjbR5*4JH#4CAeCb;tSz)NbxOS3}oM;>e`-w83l3I4q$4Znb| z15f)@K~m)c$B`qCBPVdERFXk43wC1(l>$vlpS30RlH?*0pZxdXJQiv$!Hod^qk*+k;wd3O0XLDH$2-_|gjV6#ZMjruM-wG*1rJ(xXkrs}P zno9+R!7UuEH*0vq>o(Ef-vZrJ1SckN z3*ZYGW8;oT#n3H(1+VJ_uGx#8wH4m=EK)aQGVPGFTcBp-FteATr)SYKzf1P+JZ?s6 zNIEY?KcRvS!n|e{ubESBOV>j(KPblQT>I>ekBpsRy4>WSNz-x|1h{Zvijiaz*#t70 zkxwK~{na;27Idrj>Q(LC$xo;!46#>QoBx${dI{aK=42I-Qn>MZ+yi+~Z#2#_V;2eg zyFnRylRGG!YWsV#IVfOi_Wgqq-9KGkpBZ8YVmgjbvmt)!O}hbL}XiX^L5tb8VatIbfzP^CltM9y2%+uFNcLb zXQO+`bfY4E;BX1GBHtY_C(^41C?C-7#d!l5=UmDKjjHw?s(?N`wj>eQlr&N0`2N?P zU5UM9w*8&D#~o6o#18kXgoB2ENV8UW$-JfRR}RCdemW{`v^HUAmXKUKvKo-vaJJ_d z&fU88BAw`LQf>Vu3)l83&5+O1?=nW6`r+rkbfwa=MxLK9niLpB3%V9LZbdF%TLWCX z9KI%7VJ27NOgG|81kFT;h%4t$X&C2Eaieib`ot7*BouMP6!IGO_Y_ug2wL{{CwGTO zoJU6xk9E5~|oekEIIvaR$fN zh6Wb_1R?j&0s#T<__^bYV_nd$jSG21nx3fSQg#_aeE`8eK*JlGWUzlPfNrmsDD1B` z)QgYRpW`_{d7#&f6!Ja0;H^jY z9#arqqU~lx=P|$=iFN)hL9zyrQ~Ps2a)o>rM%ZLJE+UgbR4Rk?5J7a(mYptbg!*8K z#+dg{C^{Y&lyMm7?w>?LsNt>Kp~KJ+jn!BJD5q3tNF%B*;2*PtYsB6aO8+`PxcOhF z8Qbvb^)$sFyEDd_t1g)i-pEBek|bxW(jGUt^@B=pCdbU!?A*X?gg`D2DEFfR`yTJg zh(lbkQFf@kK+G0T7(KB4$NIO^Wfa zIh3vBj!e5zL`~F*6P6Gu-n&;GU!Wl7PhWB6^0Qu12dlrk7 zvO(EBP=}#w5Gh9)2TUBYePUhfUA=)3uN^`E{{s=8@l0iKV;hF^kPGI z;kb`6l0;mgBd$TPEe>=7W|7t7yXk>cw0tD%DZ8dj+Q0XGTkq$@EVxS#FCeC zu@!H?Wcj-OMN^gl5a@#UI%)czqBQ#%>`DGAzG8XEU*uVUlja4T&4vWrlc&?Q=ig)#;HM?Cf1li2@A&V|I}QzzR{kfMO~ z?cMv(BOcmWRa2Cb?^caA;Q4AV?~r)qQaOH#r`rW88{afc_9jJ}WH+Sj1x?+s+$wKn=nJ~VgY7Z&;}kky51b7Kpeh3ot=wiaiy6=%ZZZ{n;SpJ1qY zFcJ5xcOVrMM@Z2tD3>cFmn$Zh+puR6&PqYAWzY2Z;^2tI>4DGb0m}JW1WqxCg4pOM zR{vKEY<+(;t_l(9Gi+>Gd~BHlLnkMbL;YKz{=0c^!nEe*TdUkliqyVsKq z>q0t?Z$F!Xl&JOJ5|)Y~IVm)c!cIiF>H4y&;q8UT4_nI>R|!LX>13ZdyDF)LWw>|a zHUbX{VGoG61~SZwWV#L$%59}}SB_nO-NFUkf7aX)EdPMuXy%!g;9_dXOHKA%*w=e< zZkmmFk~x_0cot1Ku(-=`yys+jv128~nDFEUeoHEep+Kfr>tE~1M3nC!&>7!?aHZRV z$s}DEl^c;hvl>VPPp=?CY`h64(4tFOQw;KGbI~-z2SaR9)lacOdAGuyHN%Gz`R-cd zLTFnL8fMvm>6qg}cUhP9_q5L6*4x1Gm`(-@x6-&zr^1KXblkSmBK~PXM>6^a7;kL= zOsffnu9YT^x1P&vlkh;)u}Q<1o5i5rv4)~>kgzs>-aqWYS|&7O`PdPAQ_?1+ z7GksX=@*D}WScye(WnIfE1ODHx@wA~9waYS;!!_n`4S!>uho}7UFvfe~-o+&xYF4I<7+cAz= z3kp{!I>3M(su{&$d`4rtqOw-w9iB-4B~{;f8ksn4hdjKA0=aAnJdwshSw&~AIu$)G z5aJcETpHiYH6Lv`SUa{7;$TKA(^}IumTna*sJ)Qju8q>K_~D>v6Jf*5VRPDVu=&a` z8N4-t1QjzvZ<+fI8Pofn77d{(3$n;Tar0@)6OzlSq5%HQwpT_eiJ z$Ne>+6A1RNV-p6jV$&WAEtvZ7WgFH+BXZ+rm#I2-+JvEAVBX~b%wnZQ$X}@s%o}t98Jz&jL@HS+$J-#(g z@Mlh)zjc(5=VXJJPI&kz$$=5a*YmJ9#tHn+&6Q{fC_U;oh}S z8JWQunGKtqIZ01oCKuNJj2E)(V3?yeJDbkR&OOui*afE6#zJ0YV)fBA0X;9G=0Meo zHMK*q-YLs~ts0TE?~owtcvbs6nF01N00wCxb$XbJetGry^R6sz@3RK}p9saTw&^Cl zh!a=uhPj`mxS~NTJ2jbw^jgIM!i4A(7T|JM^xf6sXUCs6x zyf-lneBm9f<%N;F!!oRYX;Zck2CBVJ&RP0_cV5-?o4p&Znfc+@w)6tCZ+-)LUHJw7 ztU$w(wCVpoQ8FNiqC8Pc;zcUilD1+0Ns0`1@xm8tMT4I( z#`?Ex=hZhEE_#Z!5=*0~Lwwb(Q&^&mE0vt1!hD zC67>gmc{%$fX~RUBZPIZhhp(_7G6$5h$dv5&I#iYM36B%Vj54d(aD&XJC^fRYj`uT z7Tm!`LStoN?RL`7ks}FfS_^KKqw`pmB>C;|&*l;0?W}TK)66YOefI?3R?Ouiezy5k zTVcWhD2I4WdSA&lWpIfxS=Qp2}GUU2l$i7-@( zB&Uozj8o$I#lodbNH8hH44T+5%qfNp;@Akw6BTp$?Rzq& zU^@BH0h7rxYo#WGPf`e1%8vU4WQYVR_xp+^K)Gr#`|(T|dTNpTvZi?6mC<4JDbTky zOc`s*RK*Gzau~nXizPE;)u>DX`N>K7N|G~*C-Il)>|ED8j%iGJJmo40;wiuHo0Wuj z)G-p{lEv;@8iT#-Xi`Ec%cM1>l2od*$z+vzl%fjhQ?EjSmmJ_AM}K{eGLcKadb2qq zBr~+77T}C9x3vm_9{oHAO^@WKYE0L}^vrE-g7OAnrzEfI5pPUwYx;QYDV(g({{&ku z@PSx2hC9TvCUNr|fajoQ0dCf-~WpMAgE?s~IZ zw^kW2WZH0ZB(pLIocjw#5{CZDVbJ2lg-HflqO#g|HpOS5!p)amhq_F0GH7z7)2X%= zLfwH|r8@1Wop`m+awN{Y!(iF3xlMLN?#|Z%siR6mQK%)-oPc0b>&VPlQ**WNkvNJc zu{Axl3OiKxLOZ`Dj+Qyv)7V~~N1Ih!TXZ|^|% zdH#+$`z8m*t1|GjK6thr6M|feMW_eG-xG88&zb|a6@%=X5nhi#u;=FLBXIWjIRoMs zhHU@&F6ZpuH3xhn2H6gYzjt~D^sf+fD-5BY5P#3t+27XrXS^{`Tt4WPFr<5+jA%&; zRWJGRgmSTzM`knCtigvb25jBwSjfb~k=ilRdR4c`jjA3o;;*`dvgE-d<>MH8Yw|qk z(N`IcnfC}zgpLt=yvAz_{4kl2Pad{i*u|$c83MN96E}JL*~)HsstNA$b~nS!djcBu zYBjhW?s+i3XfVG(FuzbRzgRHs8my0FEcW$@Rf#@!i9SD?%&UKKKTX4qU@Yj0RT`G% zjl(zx`f<3}m7wDiLQIJX(P*$tUuK*S#R$#m9&dXu4oqmA*rC~Q;&M6|+1~CSV^~2Z zCM4LJ5@NC7*n~L-;wqy;ky>Ej7aZxOv0=v-BCz5g8gD}rAf=<*Z%x4!xmLn2ksUxuS~JtXR~y8_q&`D|1^=Y~ zf+z=rzIlKs|NCygHAEBqQ*5vaRBS3hsTU&EhE`m#?y32KJS|~w5QlY3dtJ`A>He(9}OP6{}m$RO$RWj94LHdt+cw>n`4rJ^x=Lx;wzb3Cn zaZS0mTfd5{L)EEG#Aj_T4IhINfD{n(7kR-fFX-p*2ttuBNXOQT$U|f>0kW9A3tB^d zB`IU$qiOAB3GG1=Tg(z$O%hv95?ip)sF-|>Z7HbijFIhVIh9`#KMffDza*BcB$llt zmJQSM{}>ip6z2bcQe44#A);0PCrJMfqDm#?T3Yp^g5DiBB2HeVk6wQry;>c;;vTIZ z?ES&xTf%hsa}t$%YPIyYzWP)DuUG!Dvxfnkz2asCHV6E7o#b8Lco~CzkX$_nD|fL4 z44MUw%pzXBj&v)Mx!6=~V8p|jq@ixe3gYoHA;fP`gT~YiFLmND#8uh2I#sjzjd2Vd z{6v8~=VUy1kytswSO{YAAX*L_&#AZKqGm8mtpTX!;Kex!K_hWcQ`)P9j)%~0eH zv3vNi#+m+wdEte5!G(E7#Ba)RdEiqbOlHK`B@$v8;Mlc?6!7ecjELjuaV9F-@yL8% ztCyt!kE3}TsfBvNr5|AQJKH$?%}P8{9L-2&PDnkLnADVr8VyXHzsG|5R)E~TVdQPo zp2?=0U4t~HN;Mn-gfL3eo#M}Z$BJg^Amy5-jn^0aluJ~V91CiJx(|YhtuPRlRfarz z@{3%uUeY9yq#0i|xZE}f* zPF%B_#?3-AY142_It^o|0^EsqGaGfQ$*Q*$#y;Kz9l(i0xK?y9LM-8cPE8to^xY9S z>~Tm_ig?kSCs^bPnO(aLUDe#RXMJr8 zwg2y-S-(&1TCZKHi_mtCz<+xqs9yatG|vh$U)u|cV9^&EvL$RE{964s@|hBEg&?S{ zWpux81NAoK8TVi*mkhM!bd2U2DWm8!_N66loa-9hG2ofHLyKF+c1e%ItC@X_zL`HB zbc1kQcq8iw`kMB>^cmqb>e>804sVSze}#Y3NzqlANFGDxUnF zH%OTbmw%rp&wE&&V>My+1^QI%o{@jQTO`~5Pr#LNFGbaWts^sR0nQcK=CPRP05-xP zwFj~egya!Odq7UG9EtiM*%iQ<=@pz$H~KH_VvkzO1qzy=HT@h@N&8bL)(nAghHU0xid!dVyBS_V>)9aqx7=n<)L?raW=;}_ zZJdxB3rZf?vr6iBG^!}q;>*=92g;TX*bHj^Yr};oK zTAe#M_jZSV-O+Z=$JnwZb9-Uz#2R7kVL`6P-YFcVn+)teAc`S#-VT;M9UB}hzCHfU z1u)Q6);q~SmKj69xlRQW$0{9Jvq`n$rE*gD9hL{v#&$%=T~6xWnUBXUG8%f=95fvv zA4L2deW_cDpj5G1l=d{i6|r3Q+!uzqMaZcf7zKlL0n+%=`_!XMYkxUN_ciaIQcEg} z)(cg(i3GNWKW$A#Dl#o^JLUlwJAQ;rlURy9+OE_3@qzOkwbR~BJPqc|2W>Hmwi zcM8rd47YV-JNaXDY+D`Mw$ZU|+qP{x>Daby+t|IeLGdrIe@~+qK6zI_r*Xs@X@Th`u8vveh4e2auu-(f`vkHDa-^oY8wkMkrurf4?xLd{D@8x4rfHvZ*NlCcf70DO+}(nhF8gGGNFhSgW7-** zlU&A!q(`+5QNy8g3su=+SlLy%&9l+N_r4x!6*W8(iqSFH{9po?l_$aFgs~s?j3p@` zmN2h^!?2PD%H;Ch5vdLMu$iIk{O2`{Z*dV|l4lq85x7Bf=QNUUiK~ac_^~!9A;!Do zpgmBinvG17rkn&sS32`-yu4!RuolPOXEpRF0v~QyGz)*)OlL`+=aDdRgM1SWrNc>6 zOI^t3FGwI+p;#Og3mDVc;A96*E8Kp1u0aeog0ARDrhg|MJs$Kw-XIySh^8-~cv9uJ zTz^ad&3$Pf_j5tGNBvhg%MZARhu2@az+UWHHrTQR&Cq4fJ90*CIVBIY?vR@G`A<}I zaH6$=;=edB?Z0gH|92!<@qav3XzvMXjoMi2Ax<1XV-01le zbi1(v5eSVp{7KYoAAFd;D^i`m7s<(*b|mJUvGx`{acQ_*P3}^vXD!T{RCk|BTeQ;2 zWOL*6Ll21_X?CYIH#@d+@OtMcH!x!ztY;FM8AxARoN-8mJ4{5COLB`4zFv^o!qPVj zFDguY#B71#5$0g0fZ{i}6)Q*t-t4uz&}6BB1Xij;sJ@sBsSCiVPbah^@ucAX)=$az ztZrLp?ig!KZa24)gUZF~pD^5|ZQ&5f{@m)USZ5VZtg6mkkTvaEt!Mdi3UPKHU>X}d z7H3(&Jy#C<>=F^C5JzS@mYC$5pafNj*w@s7OBk%PG}1G6E^l`Gwd+KE+K-UVaNnzk zZf6+(xIQaPF4D6PgK}D2h9Dz@s~@JP<|0mg;a<)kMh@5{8(cX;h#|;9qW*&M`K1aX zba0Rk8mLkKEClWP^W#|QmA!YWP_D401GL5>@GnAW=B7e z;t}HzQ=Qo;l$?%b18Gk%P;<1W2%BP|8ROC4gsyD8Ucq4@2lb-QPvS%%Bu27O6$L^f z3rB_7&!7^mN@d^J8y8k}DC!j41WO7418;6DmE%=Bt_aiA>=&{Af1JevKafq#hRIMd5Sqssf_L$i5nyYg6KU}Vr#H=lA z4BTV5MJoCKSUcyJaXJYu4iCVP-9ZiPz6_+ISKpGu5${NhAuBbh>o7yv_eE!l`vAo< zM%9GBw`Z`;WrxxlMpd7cC{_CXD#2_Vz36d(NQJ z5Y706fu=goB7~4w9bH@*dWh6q4k=b?<|2OEiXUt-gfzowTth2T6 zL*|cekd4q;TyY$Lv2bf0YIrf;U0%3vgUv3~-009;5c+ zA#kA)#c*u$lVuy$Whu0Aqd=M_2I31`33x&K$DhAD!d1C|4vWWWuj4Z;fy=|@C1tnI zDbG`H_!(Nlc-8tcShM3Y&|acS!xh3jc-}U6-c--7gUQYu0-Y>nxB|+^zhJt@5<_m9d+2#(O9iiq9Vp{Wbhjo-v?PruZnuEH-MJ^FzX$+l^&q$-Ze|^avp1&a| zg$U<#+>+?@%Ng+H*o58a(_#kdG7Qp4wWHq^TP}e*NA z8o)7};NRh;W!_(j9IRk&dUo9OPdx*@ zg!4A*qN*R(-e9dF9yJhjxR=GvXCbh6ALfLr; zwQ;OE6w2X(u63~VW(l%ZsAOOb{f4-SdYuEepQHY@**ZSDlzrC`9HZWiRJ*@Q1k-*# zwr^QBc;VuOy8bcriWL^2t-}1cYpYw&&qbABFDRsX*H5J>id=bgV=4xJU zmF_7&ap9dy_3XALS!T}?0q{3U1z&##%YBi&`H1Cy)_RMn#?It`0Yi~NWI>&l@HcRP z(8!s)TW45p{QP}eck}Q_5_bOAb3@dC8S~Eo&9l_O#hH4@9}E6j9V16}-2y?h)|qSU z0JWkLy-&pdIJ!+}(@>Z|0s&DW{dYh4|2cd`&d$W)Uloy(lYx=t|30);t64fJtNkMf z;7>AW<3j_-|LUFxNt8|iUL=B!C8MM?3N0d~7i@N5c1&m=GroS@=9b8_@Lqhcnt2DR zr&Z(!r(R?-52ro554CL9p6Ga&>-?;QP5quVai#@qeoSYla|@Z}O$-@cx1Z#EUD@7z zT{+77IA7gYmI*T-dzB%r8l)8(Oi50p@uDx!Ytj%73^1m{$w?{^%oSs`STUnEGMA(@ z_4AsWTa>%iRu2t(m!YULmdIG_6{TRqzre*Jhw(QL>4B??WZPnC$%SmlC~>1K(RRx8 z^5x6C9H)eZ^%i7%NVdAdDuWZlgFc?J>@)GhrBbO!nSdnsg#Z(%LRDo!()%5$cVIp$ z2(Y5xnI(e|e1c3AdPutbAqy#9D}^U7=C@u9Gamz zZzf2l6bx&BJL67Bv4#f)ChCyw^Q_CkEMis_%p+|36=W&R$rv&MmSHnO4j@ZmQAD%X zsUy_XZDAvG!uZ3}OSx6F+r7%)EICHmnq^GOns`o1FeVQ{G1G^mfQEdYvL{s^&h00H#QKl`mlCossE>E(M6+q5 zG2i4&%$kQIF_m)Hy}+1$49)ireto&9NI9UY@nGTV%Tj?&xgp=JVhOzq1fdZLIib94 zndxDX#HG*JVJF@v^vVEeEi5JPXzkYe)ueBRmr*>D^@_P?08U^MR59&+1?eWJ#BeF? z1ow1x6y63hhPu@K;eqh@#*mTP94aejYAl@LBfro7L~1NSVX+yPGJY3R8bzss!^YIo z!Rdz#cQ2>d2d1d}i#9u@oWuFii`Q8Q!~uWfQyjKxZL`FbrrbfEHvamzikwEv;y!JZ zEmMyQM5f&Sl>Qn+p+1VzVpvQ3hiZ>y+pnqwVwjkQA`C5wftGh#td|2LkS$X8I(VUG zvL@pOiDnd0GAuRJ^&;h~Aam*B#U}Gv!{$6R6*5}R9&b56swXV)SY}v)Ck6T^^jx9Ik=Pk%if*1mo*^uAFumPDFNM6Grk(Nm4-o~mucCS~Dv9nZWm0KAe5fZXyW6|fRf6{z;-r>bYk`?Rdas_qCV<8ZZVMS&S$T>+n+<`rw-fMFwQ~>2lFMIW7#Uu@0`H| zl&_4_&@{wTA`#0Vw5@h=ZZW3lcXDVvvAGE?w7((Q7QFYZos~GS=wMjr56}Ia?g0uuJf zS~WrO>$_-9V-)3~SqA&u^!e8XMlI`% z6$Lwxr>+DNmja7(eeZM`8rjUl*j+ewqL;!PbjuxdD2D;%RoOElMoQ>UB7BwMGLxtR@mf#w5Itx!8v+!11G=uU7k!6{E*>gzn7LBVMp+~~M zobq>F(*t?oz!?Q2Jq@)^-j(V=GR+6;!Ogv=rKr~!L2b2%%s>$OIjW_(!X#~~BPm|L z&-Zall4YIpSANA5cHDcJAsF&4SUXUJPN&*8Qx0HZ%Wade8(0xunjBhFPpQnh;cTCH zY#a*%zv48y@x4(V8^kmJq=i=h?M^flD=ByeeaHdyJ&xKOnDEE;L+ z(BF(;TXBm-g{!uynl${w`BciY9LclXsdMq6tx;usj`p4N?xw;M8N=z6ER=m)rf)*n zNG*}h87u~qbWIOwGKz?7yhvQ1g(;g4F*60KEoA#KcLj2?_WN?YpvGZEgNE=hr*DLM zu;V>(W#=A^b|veCLhEE~g44ryn>eBa_&8D1$T{^nEO$RCVR*~ zf4v6_P8+)0FMmN@C^j}r6rL9$SJV%`o>|^~iAFTU0+ksP)`U^l()dmsoec+N!@TB3 zVi9ARSMtKlhv#q5yof0Q0Zq%KM*_56cu;2Xaaz7dx3t!jNz~p+-E9Q9qYEJ&POcLZ z;!WdZH7y+MU^r z3$!8Ia)eqX`0d+8!@!I3fNj2u#exX7G;bT)(}GKnzo#CtoEn})sm*6Jzx6&yB^mxC zkH{S-;F$z$xS5=idL^$Mm&L63L}GMyt?hEx_@e@kJsv*kd4gpW{%~6j-cUZ-8v5m6 zfA8iKIG)*(_}dII5_P6)Qp^2t^rRNjZ~r3Eq<>Fm1-QLy&=~o$Y(BtUXAFgB;pVs; z$$!uw!yY-`1yZBM*?EMwxpsvpjVKUM_23z~=U`UwPDwpf-tRPWc;doGZ!hU?96YRX zRR)k&E_3bN!yemFMG~0W``GEaHb6P;VO}G+?*y3eV+alzpwlxPYsiTXT%E* z)qJ(DQtLEX0{Ir*{qsAh)ua068{O18MSVp-_x(LE?-Jqe=PUR87P0tbul_{*_Wy~H z)J7E`6b4fh$t|NpSARV5j1bkz9{1Dib@J9a(;c4|vH`X{2%oE1H+>-?9_+ke6}oeWQoaQ`9k{L%iq zlbOZ;SbmW=aCBrgRQ-p>Gc`AHAo&kK+yAMtDL9)r{}+9;IoVPURRAqy$2?!^0%jG4 z!cDEIdUXFw5v-nnz6cpwbI5kXB#6)i<0YU#!N_nw_b!l36GbK}_e)`zd7*hxv9N@3 zYC0>M`625iD}Bx9C7MLs}mC= zH=LI|n?*7@rG&}cfmt5k>^4fF)*g1DX;fs=A>0}0L+}-mzwI3Qk%vjoXm1*3OPhGFYj6Z1U@J4CB+yNnM2M8YvOBg+G!puj9yL#`9pia zz-3Qt(jQ`#9Cf)gCiu^sbC83IL09d83>arFW(;G^x7FrIDaEsB=QpnR3xVGaD%D7; z#hnj3YY(x8eEhhDecwloccSa9HhlrEVWn)MrsLG@Kvwn}1$E;WYl{>pGfV+inVoMi zZ*8Rp8H6h#JR$x&P=lBf5g=i+vDa-4EK4I}1#+NosE=%NjhIhDYqXc+KEu~Tw2xlG zH!bO2wdgm+Y~ctNcor*jfnt~>ow1^i*dSk+c{$IBA3~o*)k#c>Ylx@3Izzj>ObNvE ztHUmpl=$ZNl)`y&VipsEMNJ6%aWIMf2KS<)C7sA2oMPRN&SMNJxV~C{MiyTWAkuZ5 z(+8fYwB>m+vZGb)9ket8Ja#EnZZ$v&m-)p*gE&>r80PY+n5Yy?SjgYA`g`((^{9+} ztu=%Sh#%#M7qEhn`)z~lc!OfShu&OeD0?jO&YUxJOLYc|(VL8;UE0&1-w|0lw5p|Y zE$O~8(Th`;oikYTtt7C>{zffHjM&|KqZYV~5}mi_uTyR+!TnCq5DAWXuon zPbV$>w@Us0sg?epAM5{Kq^2~X-ISM}ezMa^Y?<8G!nwqqkw|a|VNjfiq(Fc{2>VFD z0wmLy3!>C z#eWIC|Md8Hb+zBno#Z^ZPIuGGeV%-W>Wd(ISM&-}uzp$(UGt|NL%X1Lc5ddlRJW}a zx<_`h{@t#y{NCrECAbF@@@Zw4?^?%$nl!fwL!cD@g@%{nM-xFyNJ3Xmq1PD2e*s+{ z39t9-^cfsyb34uyoFA;%QA#FOt^{2bFU2LwhLW&d3AP1?R_1qLxEe}=?25OC9dJGe zJpxzq8+=gEkZ7doA6k`b?!mt`fnS&GOsBwNZ`O zSOp8ewYBeR<%oAZ9m#41H0Uk##MsKYF)CbCnE4EU>jv6=OJM7^8o}8GxqX=M&~Co! zEpO+R?g^WB;`6%ZdHyv;?VZTB>#zJg8{`2=-QvylVvN4hg3+fuSJ<&(*;D;MJz(v!D&{&!ce;` zNmb;6)4@g`8ck{(FNu2k&ds)BF=T+tB)=&P41T6N*1f__ccn{u1sA zRJyIT)oms1f$22K;ZnlpfS|0dz>$ZQNJu)RdfcdGbE0#kg`jqKqsYw?Mws)QJw>{c zyeEsUGs!ANc@YlI>!E&$=Ay_pHaeBM42CN^Y76Rfkxfm2a~XM2T^nnD-q~wVvU?%- zK)i4~9=v*~KCOYvXQc{Dz=H#m;~!H-Sq)gk{1^pjytr?WNjdmwMSC_jB&(8mt)?kc z(dvHcNQGJtUq)j9LRUF0s)pMxlMaptPpDxBwqUEkS-h zH6S;3)zD`9Mpw>SDu2v5N!*oDOJaRV<&WG2lJ8mQL?!fOE6#*2$t_ z-Nj=Qvm1Sug&0sKsfZ1hKY_Er-)l?iX#P2O!|w+Z(W5fVM}U`1pIUoLlu$SoU2m{9 z%Bep9_y;&|P`6XJPnGURv_T2q!g}eG%`5vrR`_DB9TOfr+eWF!v|7d3lo7IVVm~Zt zI%0_KPYoW1K_gF3{(j~wx=~GMrPM>c)(kE@C!(UL@rxo39kIH@AL!zV;CWXuq_A=u z8jyxt7{Ja*GH#UsF%uigPN6WGHXgxv%E#7kxlTN_y-+F-Qa`57^;R$^gyW95kpW=S zI*{7ECL);0<~_~fC2dvB%05JdaG=0~W7v)?Jneg~%&i=m={!PI-$|GWXKWvHJ$h_) z3iS_E0N)V8ZxcH|1RJC{s|?@cpaUVc(|<+jHl|PFY|-s*Bp@ca_iZm&5n@v=Im&QbmXm%sG z(lMf)@VW>eW<944b}`ouK&Q%PEHJ{v-a5KC*(A2uc+6l7^w*dh5+b!*7=t%Yx!@4~ zrHOovo~~A7OI26IMSA+36*B2eCO8htqW%{sUxMBA~Mr4Cqy-Tsc)Q8iD`OG*G)~X zQ)S8%s)qsrnlL<>w z?-3G8$#voDs-(j@rlgSMlssYo(q@?5|3Q9w<_M15FQzd$K*=Sj+P;3J#}_k3C@Er= z2!xg)iDVdT#*{hc5$$t7phP9Axn!j0vTWubonYm~6B(g!Vj*}Q_O7l>2qbHKX~HxO zx($C=wAU$*YVc-~$v;4QN5MIUN~v_>;aq#dw#c+lMLEXLhbWnarjkj_OeVR?LZa4e z<5DQb668q_S6f+RS6z&(xK|!ebD^tQX&LUvLxE|tHUi?=!AqTYbj@l z3ORo=(%Y6N&CpROGcVQ|H`fpBMU6BfzDJVE!=vB4p`EJbO%0%|g~&ytfT z&m~pdSiDif>;(2?Q=`GIkVs)3T{cmz*r;3^Kwk*~tB!A`Ad%>wG|GQDC~n=5^q^^| zYhn_#f{@H6;<~FLuw_&#%Y=512V!L8K)=LV8>VwWu;?eL1L9_?F`@oPs3N=Z0Xiay z7>gLbSbUxi^Cw>VlW9hlu)W6Je;S}M&3#BdtRUw+RuxKL`3QKYy2z)zx3)9)N_UQ0 zfX`)Pp9iPX5y!BZN$3}mX=Qc8UaVj9w-kT@P%Q8QAJ{smqpFP5{T+-XYFLJy4HP8iVtI80j z$GA`ndIZt`ZzHz{fO=%{bd7OEw6!tELB|DWOTsVPWqu3hiin0_h1IsI4LiqBbn~Uc z32{qG{0Lj)VQBgv+E^hXRDs?tz0fE5I?*nM#D6qDJu>@)^d16AtllxUK`|c^I&l(s zE6k<#=|Uh{X%ci)*-Y+of&#JjcuwEy(ZEAk{O2F0Li;{yG;eIKut_d|#ISNo=VIea zG*)?>>MH>MM6gf_D#K50hN5E3wWUIV&B%kzBY}F4t5C^tImAn#TM1_|d*Rki(5FRR zj{BgAS&{AJsPUI9YWI+j9CO$4G_L9FpZ12)?4zo?3+s-VE8Z|On_nLAziw;VFGWN| ztiDb-ONxqTBZJ0-0;092{`evMRz(|9IT_QVj-sKLjbP^;&kY`=^6Tfg=X2a#W5Yki z8qdX*v+>np2ykmZ803Dw(~m{I#TF=RUJ}+h-|ZfHrbdXpIEW&PAD%%gRgShMN=H52 zYb(Q^dNXON{Byg=*N<1&zP>2j+()SPC+HL3x}46pFTs0vtDlCjSL5&eh$aI(?Kzi6 z6b@t-oG7;6kDMq`!mG?4JFL|wAC^mFHb}BBsv8Z!{8Rd*RrEU5`3(GPl!BrQV+~yC zT4Y+*v2X5kavz+Zp0AZL-_mW*1$TgVdX$O7O(?C}$Q_4Ct06x4hf!9vMZzn1#gx(Y z1b(+|*oQ+$0yJ%1{44EP(G(qCAHwyR69qTCGd?%08NtM~i9Txow^XQ5eF)=-3A67> zd&1O?qL>3F?2CTL#P3x}`yvi20~+0nx+@5^34^ND$PC>IJdd3~?9}r*&dW~wkYMg* zjzxxPxI%M87B!1}V%De@1}^P?K+Dz?V~$G$C(@=Q_ z<|xOPykDZ+QS>i{4zj~+#_;eR^B-}4S&e@B7J^wxtf%s-(?1-UT5taL#rGg8nFIoB zFQz%$^U=j$(NDd*VD3O4cpjIW2?b~$jXM%U{i~3{ zT1pgUD}=mH-@jsE^Kl@dttnY3gY6^DfyLH=u(3loEPz}Qe0Q*hyXOEeS3>u6JhP!m z>SBEOXCsBg-jx{X{ZnzC@QjZ2LeK{o-9J4JCFLA0?3v~Z7K5dt8?XYjU@jcU7f#P&s?c z4{ikXyGC7Me|Jeg@oIN--J%=rxbT8YPdU0I7H-j#_wY2MUClwa3$I@Nu7^UK5Oe1p zU!!z~Z_eO9{l6plG*Rx-NkM&EIc|fG+&%{sg~L;-lZ@K~c4~+4Qt*m2ZAw`tbR}DP zWU*4zC>QS8Of-JySxw}cCp?*rH^`P2RtGypJsCTwW6T;`GPlBWO?%LBg7=qY2}BW6 zLKtkmBN0Fc*HWq3;n?5du~e=)Qw}naOq}m2L@i zGefvX{l7LPM`XDouoUC_*vtv1AxDkBp5lV5Ha!p`Dg06L=OfePB;xwd;Sb}9l+|6e z#ze>DX_f2*j29KbXt_MNa|pSMdrjT5h~DWXCUcoX!xWW7+<8gT|OW+~bKyvemZ5-$i70o>p)r+QjgZ4;?Ds1RGun3HFOR zR$L;#eHrXKr}Zq!8p-U4tlS<}Qzi{0VJ&&UVBVmmKO8W81=UX&P&<%3F35Pd^(P;S zqlk}{Xn`paottosm242XCCIo2oz(zm%%@SH^?x;e&`obW0^ytzF4OXEp31+Q*PbR} z737XE$+PkHp@|4cQ)K3#2qIWtw0NDuxr4 z2ilY;+>}H46hM3OnqM)h55g>pG@5cGPiZXj8q3q!;zVVy0}Mb2!xDQN4^wT4AW zSK8W^EEsh#xxy`8&{`j}UHsDa#AtEq{SJ?|Z3*qoPrw8yi2Zk242=Fzn`B+$Y=cwv zQ4|FBltxq@53LYSBdwT|J8S!H8mEg0gOY&tMcFpm)0eP6U(vA1l^M z&V~-Q&Q9hw|D{T2EAq+>Fd*@!&L;_)`-9gvuzGWVZ^u>j%4dVKZq#)WV6*nlfaCOWM&&_uVvNNic9w&BjKPH&9+@$xH^+NFHEj z#qO6nEd_#O8%lf!I#5g3+$9L)Dl4G@!exgM;ig6JG`T?M-*gn!Qifrh%WUAMUgP@+ z%XOu~rwwva5+IV(v=t`vWbnx0VknIQnAA(D7Hg>!h%uNl7_w`=u^0KKl08N@HVsu_*U#~pkENKsT_WUj98a*+W}wn|1l)5 zqlY@mf38kBkpFH-y8jo4;CsR}ZupN!6Ye?Rbf1uJ>N z1{Iar6n9!_a(Y%QB0vS3#w~^MPnepjjSbqoC2$k zT4p%{t7S&1Z)?}KZoLeS1V10%^kG4xG%>u00lTuRD&zl^AW@QO<_3(;)tPds`|u zNFdLA^A}nX3gg`v2MPlD+IdlxaBFWkAlY5C!#4G!UVOKxf8|eUXUC*65CDYygkS+~`yy9=$9u#7N>p|HJQQhmAtgo8&W`3hyu0zMHbE)(5SJz$}I?DU2mmC?T) zAR~r-s@cHf$DCGiWT0c3ZBrzzW?!9TU&8Ok;%zjRV478I5CL~-u1+UXMS&C_zPoxn zJ0`&rT3#z3$FyRW7GVyYHTBDpioW@h%lulaZaG%e-@Tor;^q*W_?(60z+Q=V$&Lyg zqE0ritV?sfwFT|OFpwY~d2?5@FdvJyY8Y5!hE@k8GG+`q!#Agw(!-m@V!Z`x;edF+ zVk9xfvVp%cgw4v7)G1Tew0j(+lM=b{H9K8Zp}m>X??Hme0|*Z!`kjn9Lw0T14{Il1 z4Ng78rj+~bZ$}4LVqJ2FJ=}V$MVq_@U-J5cag2eu{kW5{Ki(dFY1Ata;g%#i8aneB zTXvW^oSkC4n!SigCjrgik{B(&qi0h|&bShj=9Maw4Tou!z31X(Dm{pPzBLwMcY$JQ zvOU*&vh`^0X{>1%ay+`(_HLvkI%*T{$xzIIglG>|?GTR24Ts63 zJrbp=J!$94L5urs`rII}_b+jjRN_CZU4YGVskDu3L7&@(5yWX4P8)36;Amj@jXE8D zn84Il{=ATg7$G8SHyov1Gj6D60$U7qPiaD{sr#}+k0nf{OKe$Pl3KK~@%Y@HDF=_o z9+L9VYO;LtH%V3BNvE>0C`KbtH}c4OZE_GMZ+bELf*(5gmEEnZQ^reEaF)ia0HAH+ zx;%cK&<;jHDxn_Gn}u5+FTXie{^7|hNieDFz)Nv=qWKncDeB*oHrh3|7xe|a9yDXF z(8nsdd$-gwD}`gq5&f`ARoc&RWDuwZO~MJnGQDu7Te$0UX}e&kUftOi*!KEmq&QK9 zSCSyz3Ios-nPHjr6S3JK6T=(utX?3kNVP2~(ecC2qKYRP2Uk^x<8pK5*K^cd>2cuI zo#0!xnP=(^RBFph4a&AlcA0QFGcDVu<79T7Av5~1JVK-wO8-1*{31ik3TB>3u0EFl z4kMmhMc>+NLpM{L`qk5VoE!J@ZZy|De7l^6>c&5I6OlGHJ1P)6)&bF=B0H4M+Zg!h3CvNjpXrk1c?e_7*YD%3}QHIFQ_4 z46>b1a*{eh?8V!OM>oASw?{0a{&_apSd?elRJLhq5j!R5r46%6gpiveotq>+e1@?P6i@XYmRDp>9hbUxljG3Oet03E80`%Y zerCTDq)#el&#rDd>P5<8L!EKl+w{{#`~+do6T7GOb?v@JmB)DWK-|kOx4;!ea+ZoO zCxs?2s}|?)IFJv~?Dp_SK#mbMZ#h&yyd`;HM$3Lo&NcbU16!|dzhfGPP5_F`!)yVH z-5~O0&GSL&rTa+y2C~X0-^wj)SO4xf(b}BcOKa2=$y}SkhK}lH)!3#eJ6Yo0kr+KC zWxD?lK=zsSyX8*kdxH{1~&9j``_$Dn88S z)+PT$%O&RW2}Y;?!ISN;cE7D8Id0|5BtDjLyQn)jZHuARoCqZdBR$iz1D7N7cg3FV zYp2%g+spG{TbtXa#?gqB^b)@4Pn)di{jsDfNwieWXz4Z(!oxg6LiADl^4hQiNn#c5 z#@|BSSCb{cfh7-9m?69mn7W4z)x=*C;bHprTXdbZq{J@a-F!WLSz6O1j#W8jAP=|KHQyY*7nb|Wt3W6VeF1w zR!Gh!)LVBJoHec^%#d@v3TvF7n8HfJ*ND7+Pf7AEbDkKugC+1omCu4Rnea2UDf=7U ztSe}dZ+oDvc;EItese)KW6<5ZKPcGisUnpzd7vu>@V^IfzC-8yV|NX`&^F$>VE%az z|KTRt_whG_KE##f?%r@+_Ey?N2)!VLq%L`aR_frj2fqRwYDP%gk~CWkk>MaZFh3fI z^H3EKe^iow-4P_!VQfW=4TL!-Im73lC}0><6R};22%QQ%Li0d$ruRwk#o%!(p#BaU zH_+bB7jz9478pLkb83`C;PDN$TPjq+Y5TG8*9j$n;Ujd`-d1p_&f1N6G+Jd0dy)L= zM4le+q$9o&vguNhJq(8nc`L=+;V`3?NbLCK7VozHw=VtdyI@+vZ?@tW5=qZeB$tcm2s0nG$`{cMlm zmEKfkLEWF|X@@V|uS69mNN-2hn>!X;1iV3GNm<1GX`P&V@0@#Wr@v|LsEVgMd|?93 zNBLXZ0eey1+P9-`oN*Ww!)^%@A84j~=GYH#eI5u;ulUnL57K)W_tM*0w4YPbxUIJY zBY`<%$l&;Uc(7GVoMt6uMPJbQ?&-6i(r2@qTR8{4~ChJ1CLQ|#fa7($+S;zq1|1Kjgp2XK2hih3bdy6_=w$C*N}Y*VXWcIM0k zs@b(=Eynbwx=KV9rb&~}?j~MlNHfi&wiOhxlKL$m5fA~0}m^2+=as?EEiVHBE z`$Jg^z~Bu*mSOlZgn=;Za8ZlLTb&-Jg6(eJel8FUM)LH1L?k=H#I5yUk!pxb205kV zbrmds%kTEeO2dXQ?La9)w0yO@(I#vuB;^ZBk0|%~keliw=SmGqSD`i5gIfL z#HL7$Z}fu~eKJ}8mYTs+u~ArgN8@4k!e`r_&sJA09{(|^_*whqqoKuASahgLbF2D6 z_q2R7wAg`C{LQZDy*iO@`H)~Gq)=^3FWWIZg8LBsphVO74lqsQk7D&e^*PD+W|V>t z$Rd&*!mUSw9U=-6;j|D2pGFa|LLzL6WMH<0M%j1LrcBu0Ah?d`djFpG8LIyL__qDz z5Gm%{s4O)07`dXNJG~WK0dkG{ui!{(j8I_`%@qG-YJ7Q$Muj-xLl7h<1z%2zfrCVt zp^1PUEb=*$$S05Lbgwh_GY5}u;w+oE8_?afT}1EA^Y{7T3s8oZdh`^n4*|c2nqa=E zRI})v(GYw|%}c|x@=S>=VsQYLu%nKXdPTkJCbB*3m&S2CycCR6J8eTl)HgmOA*j?X zWz(S{Ejs55{2v>k5J&%a2s{uF48ec55z77F+z9`l6%f`-`6&4(*Osh3F&zg4nivid z?=X3Ugb)gui~*Yu;*BhTM zX@LzsqK+cos+y$=fjMDa*W3v+o~^Ng(r}onbJDnp)PjtM zTI8UlxK9T2@75_3m62#yvxClp%d)_&MxZ6sw}&VA-(e~>996Axvxsz7u$f`!iwjHk zrDas~l~`nu$}t_3XfdT!6sm}sisGfH#vJh@P3EN(GhLHmOG!55O=^^>l2rKkT4KZl zsG9u*8SG)y2vPn^5#alW-b5~kxQk$dM3yWuinqzm^Ry_S{JJISrJ-z45!Ac)vLUw4 zvbMvl+fe8wH%7n$t2D84jH2?$TbrK_GuoI1@is2%zY6M9ZDwqi82#u~6m zPBi_7)3;^K!;%PVxy(lv@T`U0^Y=x_u}$vC!=zkvLyCgLo^; zstgo`?de7xZ9W{tOG(<-!Se__kc9%^j0&(TL7%f&d2ohN4MoByJbf_w8uKvdMw#o|5d^!o?0%}BdgUL&@!v!hGEvrh%!;( z4roSRNU}jMSuNLtYiX1eCc0{{^yiCm9H$F8Bv?9WQ~NBg!&UkVcye0tl^WsHkRLL4 z^yQHa&d3z};o7^5;l}WeWX*6A?u~)1`>;5$IyCEYcI#4!g+?bggI#B7a)4M%VRR`< z(>B~6plCsLaA~rqsUtoQm0bzbmlo@!acCurwt){PG%?UffDD%C4wH%)sh@;}&Bk8U zdJvVe z?#BOKc-_~To-|gD>uebM=0WKL5%JmCKS98QO`jj(~ z5y|#V?dqyw(a95-axD(dgvA)hrlA~g!J?~FNC6<{(7;a^19guBzj4r!FX!eW1Fe3P z`_plz|DiN=H)BEfCu~n&OCIgt`YTK3h7xfs*d=v+q(<~4LflEY6}>pdYC(9a4;Xr; zxYHOLx1vfp^gx8D1g*Oob=37N$`EIE!$MfN^#{SZVkC8LC3MQ1AI;rT?CvlJ7D9h} zsR`b;*Wd3f;p37^<11rDnT{kulDB(0e`ZS;sW-0STAiD+Lri@$z_)OEp(Pyc5L=~d zA#bh@qkPtq##=?Ov1i&NCy1*rm=~WDnb!U2_Z`bZ$Lh0~fD;gB6bT}(a&Luj_ zlp$U8lpQ3YRe;bbTXNnrsWue_zW2oZMMku^6etbTc-6wI9ZgGGU3Y7IO}fp9S-Ar} zesnVo#5$AKoTGCLMvknvU5Rers4V9zY;CMX0)OIJn_b&BCS&IU@3IpYn1Sn1vSJc+ zyPP5uXmbao z>wrwj#YUJ5NlI9~u@9k$I#jm+(gU#`WJUVi*s!s|qQ`ZE|F_iFrPY4D#2*9J7!=)K z+7IzDJNv$z1Fzk4DH`{obe1RMm zA1~TOtXLCuv&cxn@2C*lq5EhOHjrhS!Hp6^`f8-{C4sX=+PTaR_h#9ww5Il{HNIBq z{RXmWy1#Vq9h!*=49;g|t z7@^pj0{dzg+*!<#2E6)Ze5K(EXB-g0q2$&95#3l5Nu`&+gK%EOwdxj_XgfhPL_0Y* zpA_1?z~QCF>Al$a5j+Px#nH-ws^U^ga^ zm~YRTYbxHoVJhCw)b%`iQ!;w<#P0`kcd>3l0d!&Z{X&nC&|iFKU|}XHI(xAVIB{vZNrw#I^LjhbuV>1XOPOF80WMhevTqEm?&7Y)uFYv@NFA|M@|6mt%I2lriDbc~gQa=Z@U6^Qg`9NU*33%)Z(0F_sL&U-Z=_ z)J_$task`^a!e_y(aU)YT$(f7Sc*ZrbHbMDZXK`M0m!4iRYuoXLfOho8 z{4FeJOof)tZJQz@>vV74rgZZ0iHYv{!WXww3-rfv?g2|_Cod|F^$= z&uypOwja(uZLg>KupWP{k2%NaqmP4zsZPhSJZ#Uey9GP2O$%*+X~OF#mIi4nd=(^_ zJmwQflYba$$z1$M==@DS{Vrlk7V88d>vX^Z-2}Pal%M1!WIsVxTV=DZa>z$!%n*?$ z#@M6(Xg}gK73^V&!xrSE<1$7k^SxEzdGi;MMaDs+GZ>l8j9}VH<&>y*{@S;sYhoD#(m_AMi@3V8@?p)rEA4v5EP*bEADZZ_ziD#Te|!>H zHC^uO!+#n}Z;z#C@TIa5KSm2K+jmp6Nhg*VqGza)XEib4f=1@xN!J)#7Htc4HapDg z$>^A2v-c0ilP%4r8_0Xko){FK)WOVx`#nT1=XUQCa`}4xP z_L4{Ucm93esG=XHY0wTnK<+?3J;4^{N5gr6^3Vw$g=K^f9(#3|kSD9necn;8Lfyi}O6*Ha+Mox1AF3gre{9 z`C+p%@AX-5yS$$1T$MiT;&J;BJfX;oQA*ATbqh)_kUqG*`F6WM0q^O#$D+3zo0>dA z$P`mClM1ySGm4P7MV4P)m^@-?vkvRxWT%>M0G0*lP3~TCwt0$8as{*}BpT}HI{$547+4ssY-x|0DyG4mN{%%RU%ANUl+QK+(faeTL#J0)#-XJHz&F6pATp`~{f>2euikcYq<4SE-I@*f#VvLBf(LC42}>`Z zu8D;EgA4GtztQ76jPFHmTd2sJ1^T7|?u??gpYCdnBi(SqbFHVu9lm$JOf`Am2k=mT zvb?v_H7&-Y9o|CwC&v^VkMPttV`nf`+CcepX^mH6*e zx-&1A-W_gb>6*7{4D6%52HscL>~5v&^Zt`#ua_^LubBQiSAg97OA{xVGfY|Qn^P=; z!!d3jYD4G)b@oOcy2xST&~F||4vTRr!W?A5?GXo86a|B0o5D|44|)wr5ryy|zVFPI z29LC?58JVX+JIvHAoo`XZf2EmZmqmZT zf%qbT#BnCz_2N@2J~2U-V1$IVtB5Kxftd@??`m%n78i98K?$bHk3>jr-U=BP7G zF9qVL9iYuNgIm%Zuqkvjt$K6~lyVvObpa|#tjn-NqwiR2p zn8RLty&t|Bbh7yAF2EC?LR)q!>6)YdL2RR6yH|_2QzDwh1l<;DeMpA>;l6&%&gN>s zsxxfFu^Lo?lWVuSeKFi09i_HGdqVFRXoC!%gh3q)!^VdH0W@hF^mqBm* zrr9|M7cy8Q8zL|0jpv`n0m4B*Nf-Q&ABhD2RpUVGzuh=cv9++ZaJDe8w(vADmNT?8 zF>+S+u>be)KSf#RpOrM8Rus)~D0QGJLKL8P(CQsJ1SE=hWh(+j@m+x&S|N>w%jGSa zh%XespYWOH63h&5=W&eNYb4_Sq8_Um-HqQlK-U>rpMTyj+?@5X z{p8SL4K5|SO~s}7;%nQDB-Nh1TP)YNl(Y_nR=>kvYph5}}33|9WI?66$D2|9&wMHI!+bGGVIs7Nl&FF0CQSuk`r+*((t%hXYq zRb^F4ok;^@)mom4Ceo+V_6WWv#gD%10hVsOLJqkgPn4ue(ap z)GwX1EYjDOF>W(kM(Kc0vfjT<2x$$dpzsm zpxrgT7D=e`0{P}Y9V--~_yV+F6XF#{<{p86gWCG~mfW-$(S!onHNZbokbijjS5O97 zGE24bw`XD=b@109J+QPuK7RzcArlaRm)Rn$_d5rHj_ zFHM_G&7w(>Lex5qX+g6*Vw8|wr;s2ePFjbe)JH_AD|bg%NLD*qn3d~^!`rR0>v@Iu zege`qQ_QCk&;*zsYd>w9-88Rkn|-z2y}Ph0gh|=5g9w^>5*M2(G8)E&JSGD$Qwr>b zM}!U-ZH8bn;9!gY7?1plc38`e8QrpnOpZM}@FcG#6BFdwW2o$?7uH|!k%66taXm+z zkd}K2W@4O@2_X6It0blRpY9qrCNNi@fMf@p3jnEQVW#MIbV&;_bPXe@*Y?B0_vVNy zx|$&yWB_Id9Vq0NEkqw*@^e`iy-nv#Vz4j+LZ?MW)&=z%D#~r=Lg{8b$WDE!Y>34) zE5We78eGEtxrL$15aR-p0#-^AhbaoT;Lfy>9bJ>f?G=LXK z|D7lm_w|@Eka1{n3wJQyfWl-=#X>7)kj2Oi-3YR7h{EL01v2xU5T2_fWVhT`(IDl0Kd*)qdDnvkPo<*D|EFVKKkY=wLAmfz}1?%bSV%11P`UCpHSmU6q>aP&U3|_ zE3D0`0N8m&va~3ur5PEao~yL5!641}fGjLseh#?0sjuAbUf&j$YpAQmDi8F%D13*l z$8tHhRullXdpuLrwQ0D0u7*rK)d$1ANKb#M``1|#MG}e0!iC7M+_Vvy2YXhN4TRMe za!-+D#mVrASz5|9QtRhu3ycA&NA?@vq-k4}Q+N7l_d7(6@6$7?~rh^!s zaQ@z6(d~%P%jPLwMXx z(CGIz`XEp?N)r#$EzjKu21PAyG0nK6PDQLo4<1Ju&*2r+}izhy232ZPob(fzix zufvw2$d{wv7Ax;DOX6&0foKhcuEq3kU-@I1%)sD5^n%Zv)Si3#unRsNd zI&gF*$tb(VmkS#Qk+DXs?P0G<@5kt+{tHJz#9zD3iv@>#v$q7igz*{H>`Y2ur~$FS z+Vz-!>qF&kDcZj?JlX&Wl5I6L`M>%YUBxdWE_29y|X;QM+cgI+WT z*;>ZRC$pRp`5kM!ejE!ET57U#ThmKdig?)dX2^&g$_nYcA351Qc$xrHo%JNiA>xI- zMg3rRE9Zl*r9QG|G7HqRyQOT(e_%`g7|8fp;+-asc9~4uq*R0q?@)SFq7drnyJoaE zp@sBU(H64zqEunex;r|Ns+`h`F)T$1uAcCPN|JW_BTR~gqZ$s*;hb}5(6UrvOC?LF zyz?4r`ER(Sq_)t6yvBu!b;X2%7Tkqi5Lu;L0 z7sUg;@QFS^h-Akr+?%hFrLWmn*&x1`*GpldWrzRCw$Ha||Jy}vfalzDM$aXKGK%jI zi8gHrazZaTfc1hLc89*Pw{sb)5*}fRgD4}u(QZvflwOyiT{#CrYSW^;tCD-Y>lckI zX0g)GWVg%0yiljq7QAu?*60I>>=9F>(EEy;}ouk6hwPOb_B~tO4l`{mz8lBa1-!`fJ-f(w zgTe8U<;^b}BZnVW))2Y$R|@a7e%xBj!f8PorK;aHnRgWQhpGWjPti$WLrHYuW^Lfj z6|(Pt6pz2d%I{;KKYlR7{8z<8^8cuK{Kw|Lk%6;?ovosYlZ&x>;ln+=&C2J7Tbc=M~@0qOFS ztX9aUKxy$(ru4Xx5)pZXpl4q9_{ip6Z>-dPeO`PoQG@=$kfqmd%!w_1?&vzZHuqGs zvvsnm8k4b!;}YH2ja5w(RdR#fsJzwPaW;Zr%3hy)cAi?SiB;WRCtx2G=Fy|5M!&a$ zXPsyk?HTEVf+2HiS#oljsJSrB3*+~LF%q!!5DLZ^Ji}KW+nG4Ad}VRqMB`;MhrUQIFjEhHCKDt}u3!#ubPgvmXE;G^ zk8r`vq5kzIRl%@f(UFtC_5f8%M_U#FWlArVjS3xRd+*fRtT@vmMR#h*>d;uh6?$Pz zFMjW(9-o9X*X+j>4oOkDMH`Wb>a=+j2inTqAR}sd@4XZb>r~;B>^O5xLV@halq?Y| zK|=IfU6BctE{h!0YRvwkjL3Q+4~5s;pn$L5#j0JvTC3Y>g)b4`C3J@+F_L+$;F)lGP0vfu13L(Rss7OT;GLwIXZ_dOnPJi4%w$ zAhVViHkL7lbD&`Qi&HVV?_>-{Tv@$Zs3)7#6468yfyRx2R$^(Oli>4xpRhqTzGly- zH(FHB0d4FfV9}TV8mK2BI5KS)nbF(7YSf=eF060MsK4oq_oZM*pYp0iwMBHy!kW7A8l!TFSh~OeiVX;`g3-(Wjt%Gl`>%9? z|G%LNCXWAB12qeM<)!bmHB%FJY6)?CFy`^pVB((=5$XKZrL+OW#li*tPX z*(Cl_QIVQjS_)cK3U??S;=-QgimP@wl9Zl<&RVo{nHIJP)Q%H#g2wz=p zJMGVxI~>nlWPF`=@Ydz2W3-2mlml~sIzSZ0mwTOB-02rf=*kIO;I=Oj)+ro@!p;2R z0BEPacincKSCD7yj)QqTE+rh`iiH#Onn;w z{>5k;ZagbV)e5Q{x7~kT02n8Mvzw2UylGNu=%>I`%E&?)J#Pfz;_0BrdU z${ausSs&jlrf)=g)k239?NTu9>0y1vc=^A#w#|#U{&ZAAU^h?@?t0O34 z6-z+EjSyq=*ZE~IK)In)71r`M7Qs?A@5a;&CafHevAYGZ@l-EVjaLIR3;BgWy_gDE)T*XJRbi_sNNc=G!}o+(X}`4WrvF^( zM)N%_!{^Z(tF=k~et>$_e zhsAoz#)tYACuK$#mwvQ?w@OXvcd#};+M&o>4bge={eWd2!-Ys8P31MWR~`VO!t-}Q zwc!~#ci^bDyR)Af+t9vfUTC*_w&K7!K#~Iq!i(!SCRuO6GsCeQR0le#;T>A9!tsW@ zt7158$EC7P9HxrN(G;plbEDZz#c@%~2$P=-H^AaH)1xjT1X-bXPDUMrg@9-~dF^Ux z<$SJ9*C?P^bWfCl*@OFqBiD5g{j8_0mjWwSfNKF)p;-TSj9x?4V*2U*t}J)m9_UA8 zg+XH!4RpEsQ5TVF`5>KzJ7%vcNy$RJd|JJ)!!yuyYxzU((k<6VF1juCUQ~%_>i&JI zHd7SmS7j*QZd?k!VAP- z$GyD3j=^+1mJe*a2T`34fuR^9{HRCXSyyaxO#HD^r`LHPzT{12ebsP+0xDd`;=<(nc%A7I!kDTqq{U%hS-D zGf6xg`9E!R4CX zfhDPK1io~mt2Sc>j#9W3ntr}UCJT@0kUk`M$FiunCS?AQx+K~;1r+pLBXA-$aEKv=t(TR@}8mD3K?gG%F;;@z6wfT$<@6X9@uVA6L0tHpa&4;xdD!(8=WV_#v;pI1y|oXm0n=66c zqa7G7`gTmMu=UY8r8+2_kH|ms58)w8t zBu;W~^X@xw>S|PWPzp!MZwvB?tuHbj4!8&WU8T=ucml>ouoL7R{ z8l94aUdE6&p1O4mXZ89HwFVw)o_=vylcRTLN7^R8Y7%Xck%){9+{ zJ|$TzhO9$*+;pVy6_j(AG2rZ$n4dsOU64hqkMWfrrA=B+Ey$q*ZAYxQ=Siv0 z=Y}+jlyJHocMnHojv~I{zQ{~~ZavrwBujK3XZ7QsuBEP_ac7Mns?v>%w;erI8eOIIqN!H$>yJd}!GiRwx2dXRsUuWKZ5?iLSQ#QS)^9y>*#%pNs{Qpw&`b%O62fxn$&<3mz;$XSjvW;R-$BQhM;%7bwCF8j zMa_1z4Kp?4jV%(=+-)PBt{JJXpDi8m60ZAW zhhzS3WHW9?)>oqaCPt31Ax}U;jvy2xuPb@{*J5KZh0qWO^p78N=>OGg`hVy1-NaGA-d@zv zz{Z4_;omRpiaJ)v3J5$&L$zzQtjoR?f0FVgBD-M~5m5?2pvM)z&*o9GZPd3LbYi=* zS$qo2_n@sq`P_oP6b-ds^sJ)CpoeB~a5)`M{^Il1^%cXMxf>FQxFwW*N|6=AF%~Kj zx%_7P}h1CBCyU0$vU%B87}_bF`tT0iu5vQUhY=R1)p zxJdeybgBbKG9-d1%YF#bfD}8usfPgSqk^Q1RJl{H(7G=JGWa|uLi#E7w&4y>dkRo6 zAMw1J(zyA!YZxnU%j~6sVC!LTpF@9=749|y?j!5!!e>0tg$K@gc{a4#^@GZlV&M3Z z@!UpZJnPhcGA95h32RnEzu?&fS?D z4eyL08nh!M*Rl+_Z1}Z(L2^`;`XYpLPE$3GRQN6Z~Id zh4J64C|La`D-l%^RW?3Ns#3hg6dlcl5RnLxAp>vzl0D;7uIrn>+Oe;tVC~ElURcM;iMo7a8F8_0y_KuKdbGY%|_S8*+|6N&d?E&jmhp zD1?2&Y;^OU+QOaxl@^P5#xE4J2+8+x%e=JVOufikb6?CW9gWJ0NTO~7uk1AjJVaK` zJH4BiflughiL_OgWbHR468{sFF#Yd}V%u2D+VV7bLn)Ai;-wWxNG=G8mMnrt z=t1)ziqd&$TllFFVp#z1gWz)~7U8twQ%{FQ2gBs#dOVq7;P=7JC59Sz*C!A%8?*4U zq%kp#5w&hghS_j)A=+CJSA!Mdz2c~a@%Hkzm#PA|lL19i!XI0jR3Iw)Nwsts;vdf?tE z4QXkmt|cC&?}5*<_a)5^n6O4grVJHKdc8$tEYpa;<>Zkwbr@OomuACdGWDNnNGxo< zU#%T$K`JVuV`G0}3 zD38F?*vV=e?W%PZwxgQb(J5kAq5>j99tBErIyl~wn&o`CO(G+hsB<+#`2xiILir?? zG9BYlPuHP~VR~%*%?SZn*^Xa+Y*^b(zUZoC!_Sh3lt$VJHkyWT z8vcEFC8MxAL%qjQz`-6Fg@{gyQi)E=IxID?FzsjW5*94Vw`Qg`?Km718~OyqB?t z@!U%N2gs+msAH@QhqKNvYgbHA$&luAFipFez|pLllTwGt`;0OPoUX~+BFY9%kPH$U>d?W91^Jvk#u z{s=ktid-2P6`liUC_9*m^-aAI^4(-MOZq7W%c<(3K-4^TQ92|-Qf^=+C?VQQ9lsh? z#l=!6*THg7*V-jjl(RLvfq;6oU|OrQfi2VPPD$|d*2gl;+J#zv#<}v!Y2e_=Pv7Pl zvbp;*+z0VM^9LTRU~~6YU64JGf7nE@Xt9zn3oiU>mr77DWRwD0RdHRktA|E)dlAIe zt3^|Xqp}bxVYh)(cE&%2XMIl3#e2`N;QD~|+Oti_o&9;LJ0TxxfebxX5*4e(gO}6NSGM z(iaE(&504@ej!UWv@|I8@FZzVBn4&a*!#bZdZ|u4od3g#`2U2Su>SvXQq%HhUX#W{ zT*;Zr5CMe%1v=ypaLTtK<3B+W{?G_SzwO7{Z9MHoJgI(H76}IrZO_iIGwpeOdw4)! zbO7G~SO&khbHJ)F91X<^v8arN53=tuXE)A~Wy-KuNB28>>MsU!`M|>pdQ~4&N~^eH z^@NWqUK>RG(hyz3#=g&H!iGbtdZ3;UIf{lg7>jkDTTAMh8;HR}%oMX@;xep44)CmI zvdKeu+xpwLj){cz{>tz!I8yS1S2Nht&1@CKfWtrRAy~DT$(J{4$Xd68-DE&AnT!&b zvM5In6x)_!AZU2>^wFdul~TfU?3kDhnU~bsrKtD*WpRzMBhIRAZ;x|tdw}MrwZ0Bq z$-cK~o&zga6Sv3bC*mTEQf zAgGcxuehgcG3{>?fezSY2Lulzi3mclV*n>YfL6RDb`c|! zG963?BdAq2MHaRZ5V{CdwW(Ak0+rA%S)yNAvQ^nEscx(fm$=q9zx~Z|+p(5-{MmDJ zb8?vLb@P1+#_Rfq`uVOq4$m)9Te+5IR>CL~H`Y}-vp#$Y>!y;K$keJ#Wo_OPl!{Gj zj^C>dyQ)fAdK_4*_i2Lf~-IzziBkwyBt z!#?XMAdQyZ95A(VX3TG6E_NpmOM@XQU4~Vxlq=i(GiL#;J`9bbg#-+?NV^~v>ri3Q z0t~i{yC4^f}!%!}N^~WPf zR3Sk20uev-9v8kwDXLdr9x-Ow;(%WzcuvTSsunFM(jr>chJUo|B|c0O)hL#BAq+rUXPy8*hY?e*P^kL%4_8f zo;~B4Vm3;(w_z}c@(AIa$wxjsMel?Q3^I+EE2n~?R6y?>%vTiAv6+>2*|&nBR9bWaOQAXk3!+4EDH2Fw7A((# z$t)?)g3YXHdW{rNiR@U)x5Oe^yaJn2c;7ad)xJN9f3r&nyDs%|UcbRtT4UP8g$zTG zfayrP4m!{vXe2RTvKv9zkKAbOGL8W+1kj&aG3$9(48x<}%?dsKlGT&bjls>y=JE#Pk=qeHj?{1nF({4bY2s#S8Gs@9A!apnP5V|W zuv3JN@bHWDEK6LurvO=Z3@fK6ul-LVe=BO_o;tuY!Ixa&QcRkIw^y%tM~08#l;n+q zk-eA=bUH~np+L@(;qZ8FrvJDtEzDPR|$N8;qoVQpm5M_v}%v6f)y|rDbUUho!fJ95(s~gZJUv{8;lgGLU1!9e&&PN4Z@Tu`6UHGp|!4)BHe%fawR^Ahj`-+-ch& zCw6p|;ZLi^~xebZDV?XXX1(YNd7o?P52M$>dN(Y&ZMV;mftS!xL_YbJqI zZLkQI_LyNjE=iH}o!2NK+Z;8H$-OIE{6{nACU#PN1Q;HfQEoa&roNopZ$Pf~Z8GtN z1+J;Etb12K*=@wFyi4$sDZXhlO(;Q-1TN_-uhau~?uc;VUzi}DKhHlW-!6_D9r)Si6CDcK?N zyrtn3kM^)kg`s(uc15ByYY`CYaQ&~484-&8b+{1bI9G6!fR_NelhqINMw&dMgMTJH zE=RAjO+kq~ygBn*&_sT*Aq>Kvb?v7gPXDnF`mF;BU!4M_d9pN0Y@Qo7gCJlA%uHhd zqN6M~bFUf1H*!!gG% zMz;UV$tvOqon#mO!O?fMqz*VMcUVhwxsq-SRX5}F301d>BcgC9>j!c;R`_w5*mwLR zTfq`LC0$gca8I?XeHl#9W>2^CGVm`fu<}R~B~07KF0JS(^g}zRSoZ#=u0m(ankh5; zIC-k$uHF~PQ_{%I9^iTjGsRIrRQ39&G=Xgt`B_T~NPfRVUdfMA@U90oTh<^RRUNV+ zjWeqEX#G4+NWI_a7v6{qi$od*x2j)+j`_uUYjb#2HWz|2fhW6IPiKS8!kQE6XcfDyHqcdi%fUFD0RRj?V+%e{k&5IMw8G>7;l(g zusW4n9CpYkbZ>TYRdT@EI91-O(!-408DC%v$57G7QZ_QTOJy~EV$%Xn6iFHnH=SYBv* zup#Sdx+HsS=%=1>>ygG+RJH1J^EaP(yz{1?0UllB+P1f!`$~f#n&mWJhJ@EvV0`5C zclypDZ@&9`bwz!LVc@)BBs!r*_o?xW#|lC4;+RPrW}rcPx&o2|yFuRKN2={tB&M4v z@!2fOeaM(`*xswOA)JM&s7P8o2DeF=ErM`fnR#=s->R4Ay1%4Ki~~&$!9C&L1p^;C znB__6a(`lkLus-7X_<8q&M~H}1K@8v9$H)3Y_JIV0-Aq`{Wph$fg-rS%( z5l4tVdzzB#)f*tT?6-1bY5a`Jg?Ei7SjH1ux?fg*uzV&bXg6Qrs?FpCNPp+*TQ|vGf0rn zwv*Rnes=2=)w##umF|L7-T-#2=g)ynIC{?mgE~oeXzmZbFX59oaIn0TCvZ4O-cV8C zw1oO;`#L_9GXWh#u)*6Xbmpm9?M!TpU&cGD{^;IF5*K0Qh>UT;2o_Zs4Sxj;wMR}i zsuh7^3t^d<<5+RVK@7(hPvM(2v=)nec(g?(*qRWra@{;A3sr~+bA#KBfW>oFAq2)N zx|xJM6AEHdZ)xBYI*fIGB3K#i!mY0Y>E2fKBtHV%aQpKa1*lE4&dtUykQ(saIdtg+ z1@WPU%Uo7u?yaL-x$8W@xzm+kz+8ch@py{eYsml*)NO!+prV&d-H{O@tHz=wX*8Ocn1Nbw+UxN8#6<`2_W_+f5QRvhUmYma4g#Y0B% zo}V%q?DDygnmRzwY<~7E0ncq$YBZXrjqOxI&5Y&Txf=_Zn54CjMUPBDxy+zC{&~^? z2cbgExx3yK+||vpF;~IL%?<&!A*-geXUg#orix-xn6

ZKnfjR3f(|u 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

}m&Xk+8Ob1d`H$`{R&W zks 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%0DFBjc;OA6l=r5xIxRNnfD^-QNWmP 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

g@ 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 lc>algPRmugBuHSWa5pKT(xuTg)c5HX_MS!{ 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

+icZezFq+)ibkS9 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 z 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 - - - - - @@ -21,7 +16,6 @@ - @@ -63,14 +57,20 @@ + + + + - - + + + + diff --git a/bcel-builder/patch.txt b/bcel-builder/patch.txt deleted file mode 100644 index 63ff8b5de..000000000 --- a/bcel-builder/patch.txt +++ /dev/null @@ -1,310 +0,0 @@ -diff -N -a -u -r -b bcel-5.1/build.xml bcel/build.xml ---- bcel-5.1/build.xml 2003-04-25 09:06:14.000000000 +0100 -+++ bcel/build.xml 2004-08-11 21:25:17.449281600 +0100 -@@ -65,7 +65,7 @@ - - - -- -+ - `this' is local var 0 -- addLocalVariable("this", new ObjectType(class_name), start, end); -- } -+// if(!isStatic() && (class_name != null)) { // Instance method -> `this' is local var 0 -+// addLocalVariable("this", new ObjectType(class_name), start, end); -+// } - } - - if(arg_types != null) { -@@ -152,17 +152,17 @@ - throw new ClassGenException("Mismatch in argument array lengths: " + - size + " vs. " + arg_names.length); - } else { // Give them dummy names -- arg_names = new String[size]; -- -- for(int i=0; i < size; i++) -- arg_names[i] = "arg" + i; -- -- setArgumentNames(arg_names); -+// arg_names = new String[size]; -+// -+// for(int i=0; i < size; i++) -+// arg_names[i] = "arg" + i; -+// -+// setArgumentNames(arg_names); - } - - if(!abstract_) { - for(int i=0; i < size; i++) { -- addLocalVariable(arg_names[i], arg_types[i], start, end); -+// addLocalVariable(arg_names[i], arg_types[i], start, end); - } - } - } diff --git a/bcel-builder/readme.html b/bcel-builder/readme.html index 9a17e14bc..43f8f8c27 100644 --- a/bcel-builder/readme.html +++ b/bcel-builder/readme.html @@ -27,12 +27,6 @@ This module includes a modified form of BCEL - with some fixes in *and* support

  • The LocalVariableTypeTable attribute is supported (used for generics to tell you the original variable signature)
  • All this is implemented without using any Java 5 APIs.

    -

    There are a number of new TODO type tags in the code that may prove useful:

    -
      -
    • J5SUPPORT: Marks places where BCEL has been changed for 1.5 (might have missed a couple...)
    • -
    • BCELBUG: Marks things that might be BCEL problems that I came across
    • -
    • J5TODO: Marks either a missing bit of implementation (hopefully corner case) or an optimization we could make
    • -

    The contents of this directory are:

    @@ -40,6 +34,8 @@ This module includes a modified form of BCEL - with some fixes in *and* support
    • This file
    • src -- contains the source for BCEL, a modified variant of BCEL 5.1 that includes bug fixes and Java 5 support
    • +
    • verifier-src -- contains the source for the bcel verifier package, something used by tests but not packaged + and distributed (at the moment).
    • testsrc -- JUnit test cases for the Java 5 support
    • testdata -- Java5 testcode that can be built using the build.xml script in the testdata directory (see note on this below)
    • build.xml -- an ant script for manipulating the src folder, possibly useful if ever merging a base BCEL version
    • @@ -66,83 +62,5 @@ then used by the testcases - so if you do change the testdata code then you shou to rebuild testcode.jar.
      -

      The old stuff...

      -Before the Java 5 support was added we maintained this module as basically a patch to apply against -a particular download of BCEL. Changes to BCEL are occurring more frequently than we integrate -a new version of BCEL so it made sense to make the patching process easier, so we have checked in -the modified source for BCEL. -The original instructions for patching BCEL in the old way are below... - -

      And pretty much nothing else. Well, then, what do you do with -this directory? Well, the whole point is to generate bcel/bcel.jar in -the lib package. To do so, first stick -bcel-5.1-src.zip in this directory, then run ant. -(at one point, this was available at - -http://archive.apache.org/dist/jakarta/bcel/source/bcel-5.1-src.zip) -After much unzipping, patching, and compiling, you should get an -appropriate bcel.jar file. Now put it in the appropriate place.

      - -

      If there's something wrong with the bcel.jar in the lib -project, well, then you've got some development to do. You'll need -to know some more ant targets. But before anything, get that -bcel-5.1-src.zip and stick it in this directory. -NOTE: You should be working on BCEL when the package names are org.aspectj.apache.bcel, -and *not* when the package names are org.apache.bcel. If you run the extractAndPatch task -below, you will be left with a src folder in the correct state for further development. -

      - -

      There are five top-level ant targets apart from the usual "clean":

      - -
        -
      • ant extractAndPatchAndJar -- this is just the composition of the extract, - jar and srcjar targets, and is the default. It extracts the source from bcel-5.1-src.zip, - patches it, renames the files to start org.aspectj.apache rather than org.apache then - compiles the patched version into a jar and drops the new archives: - bcel.jar and bcel-src.zip, into the project root. This is the default task, mainly used - to sanity check the building and make sure we're generating something. - The bcel.jar and bcel-src.zip generated should be the same as that in ..\lib\bcel\. -
      • - -
      • ant extractAndPatch -- this extracts the source from bcel-5.1-src.zip, - patches it, renames the files to start org.aspectj.apache rather than org.apache then - copies the patched source into the project src directory, - there to be visible by eclipse for people to do development on it. - For the patch file to be applied you need to have a patch.exe on your path, - this bcel building process was tested with the version from cygwin. -
      • - -
      • ant jar -- this copies the edited source from the project source - directory and jars it up into bcel.jar, there to be tested. -
      • - -
      • ant srcjar -- this copies the edited source from the project source - directory and jars up the source code into bcel-src.zip. -
      • - -
      • ant push -- this pushes the new bcel.jar and bcel-src.zip into ..\lib\bcel\. - - ready to be used by the greater compiler.
      • - -
      • ant diff -- this creates the patch.txt file, composed of the differences - between the project src directory and the original bcel-5.1 source. - In order to create the patch, we transform the packages back to org.apache from - org.aspectj.apache. To continue working on BCEL once you have done this, you might - need to run the transformToAJ task to switch the packages back to the AJ prefix. - For the patch file to be built successfully you need to have a diff.exe on your path, - this bcel building process was tested with the version from cygwin. -
      • - -
      • ant transformToAJ - this changes the packages for the BCEL classes to - org.aspectj.apache from org.apache. This is used by the extractAndPatch task above. -
      • - -
      • ant transformFromAJ - this changes the packages for the BCEL classes to - org.apache from org.aspectj.apache. This is used by the diff task. -
      • -
      - -

      All of the tasks are destructive, so don't do "ant extract", for example, -if you have anything in the project source directory you care about. -

      diff --git a/bcel-builder/readme.refactored.txt b/bcel-builder/readme.refactored.txt deleted file mode 100644 index 1cde37c38..000000000 --- a/bcel-builder/readme.refactored.txt +++ /dev/null @@ -1,7 +0,0 @@ -15/2/07 - -There are problems with the 'refactoring' branch of the bcel-builder project. -For some reason if I commit things into the branch, they go into HEAD - whether -there was a problem creating the branch, I'm not sure. So as a temporary measure -I am committing the refactored form of the bcel-builder module in as a jar called -bcel-builder.refactored.jar. \ No newline at end of file diff --git a/bcel-builder/src/org/aspectj/apache/bcel/Constants.java b/bcel-builder/src/org/aspectj/apache/bcel/Constants.java index 51c139901..3fd917f03 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/Constants.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/Constants.java @@ -1,5 +1,7 @@ package org.aspectj.apache.bcel; +import org.aspectj.apache.bcel.generic.Type; + /* ==================================================================== * The Apache Software License, Version 1.1 * @@ -57,12 +59,11 @@ package org.aspectj.apache.bcel; /** * Constants for the project, mostly defined in the JVM specification. * - * @version $Id: Constants.java,v 1.3 2006/05/04 11:28:26 aclement Exp $ + * @version $Id: Constants.java,v 1.4 2008/05/28 23:53:04 aclement Exp $ * @author M. Dahm */ public interface Constants { - /** Major and minor version of the code. - */ + // Major and minor version of the code public final static short MAJOR_1_1 = 45; public final static short MINOR_1_1 = 3; public final static short MAJOR_1_2 = 46; @@ -75,19 +76,17 @@ public interface Constants { public final static short MINOR_1_5 = 0; public final static short MAJOR_1_6 = 50; public final static short MINOR_1_6 = 0; - public final static short MAJOR = MAJOR_1_1; // Defaults + // Defaults + public final static short MAJOR = MAJOR_1_1; public final static short MINOR = MINOR_1_1; - /** Maximum value for an unsigned short. - */ + /** Maximum value for an unsigned short */ public final static int MAX_SHORT = 65535; // 2^16 - 1 - /** Maximum value for an unsigned byte. - */ + /** Maximum value for an unsigned byte */ public final static int MAX_BYTE = 255; // 2^8 - 1 - /** Access flags for classes, fields and methods. - */ + /** Access flags for classes, fields and methods */ public final static short ACC_PUBLIC = 0x0001; public final static short ACC_PRIVATE = 0x0002; public final static short ACC_PROTECTED = 0x0004; @@ -103,7 +102,6 @@ public interface Constants { public final static short ACC_ABSTRACT = 0x0400; public final static short ACC_STRICT = 0x0800; - // J5SUPPORT: public final static short ACC_ANNOTATION = 0x2000; public final static short ACC_ENUM = 0x4000; public final static short ACC_BRIDGE = 0x0040; @@ -119,8 +117,7 @@ public interface Constants { "volatile", "transient", "native", "interface", "abstract", "strictfp" }; - /** Tags in constant pool to denote type of constant. - */ + /** Tags in constant pool to denote type of constant */ public final static byte CONSTANT_Utf8 = 1; public final static byte CONSTANT_Integer = 3; public final static byte CONSTANT_Float = 4; @@ -410,8 +407,8 @@ public interface Constants { /** * Illegal codes */ - public static final short UNDEFINED = -1; - public static final short UNPREDICTABLE = -2; + public static final short UNDEFINED = '/'-'0'; //-1; + public static final short UNPREDICTABLE = '.'-'0';//-2; public static final short RESERVED = -3; public static final String ILLEGAL_OPCODE = ""; public static final String ILLEGAL_TYPE = ""; @@ -460,72 +457,246 @@ public interface Constants { "Z", "C", "F", "D", "B", "S", "I", "J", "V", ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE }; - - /** - * Number of byte code operands, i.e., number of bytes after the tag byte - * itself. - */ - public static final short[] NO_OF_OPERANDS = { - 0/*nop*/, 0/*aconst_null*/, 0/*iconst_m1*/, 0/*iconst_0*/, - 0/*iconst_1*/, 0/*iconst_2*/, 0/*iconst_3*/, 0/*iconst_4*/, - 0/*iconst_5*/, 0/*lconst_0*/, 0/*lconst_1*/, 0/*fconst_0*/, - 0/*fconst_1*/, 0/*fconst_2*/, 0/*dconst_0*/, 0/*dconst_1*/, - 1/*bipush*/, 2/*sipush*/, 1/*ldc*/, 2/*ldc_w*/, 2/*ldc2_w*/, - 1/*iload*/, 1/*lload*/, 1/*fload*/, 1/*dload*/, 1/*aload*/, - 0/*iload_0*/, 0/*iload_1*/, 0/*iload_2*/, 0/*iload_3*/, - 0/*lload_0*/, 0/*lload_1*/, 0/*lload_2*/, 0/*lload_3*/, - 0/*fload_0*/, 0/*fload_1*/, 0/*fload_2*/, 0/*fload_3*/, - 0/*dload_0*/, 0/*dload_1*/, 0/*dload_2*/, 0/*dload_3*/, - 0/*aload_0*/, 0/*aload_1*/, 0/*aload_2*/, 0/*aload_3*/, - 0/*iaload*/, 0/*laload*/, 0/*faload*/, 0/*daload*/, - 0/*aaload*/, 0/*baload*/, 0/*caload*/, 0/*saload*/, - 1/*istore*/, 1/*lstore*/, 1/*fstore*/, 1/*dstore*/, - 1/*astore*/, 0/*istore_0*/, 0/*istore_1*/, 0/*istore_2*/, - 0/*istore_3*/, 0/*lstore_0*/, 0/*lstore_1*/, 0/*lstore_2*/, - 0/*lstore_3*/, 0/*fstore_0*/, 0/*fstore_1*/, 0/*fstore_2*/, - 0/*fstore_3*/, 0/*dstore_0*/, 0/*dstore_1*/, 0/*dstore_2*/, - 0/*dstore_3*/, 0/*astore_0*/, 0/*astore_1*/, 0/*astore_2*/, - 0/*astore_3*/, 0/*iastore*/, 0/*lastore*/, 0/*fastore*/, - 0/*dastore*/, 0/*aastore*/, 0/*bastore*/, 0/*castore*/, - 0/*sastore*/, 0/*pop*/, 0/*pop2*/, 0/*dup*/, 0/*dup_x1*/, - 0/*dup_x2*/, 0/*dup2*/, 0/*dup2_x1*/, 0/*dup2_x2*/, 0/*swap*/, - 0/*iadd*/, 0/*ladd*/, 0/*fadd*/, 0/*dadd*/, 0/*isub*/, - 0/*lsub*/, 0/*fsub*/, 0/*dsub*/, 0/*imul*/, 0/*lmul*/, - 0/*fmul*/, 0/*dmul*/, 0/*idiv*/, 0/*ldiv*/, 0/*fdiv*/, - 0/*ddiv*/, 0/*irem*/, 0/*lrem*/, 0/*frem*/, 0/*drem*/, - 0/*ineg*/, 0/*lneg*/, 0/*fneg*/, 0/*dneg*/, 0/*ishl*/, - 0/*lshl*/, 0/*ishr*/, 0/*lshr*/, 0/*iushr*/, 0/*lushr*/, - 0/*iand*/, 0/*land*/, 0/*ior*/, 0/*lor*/, 0/*ixor*/, 0/*lxor*/, - 2/*iinc*/, 0/*i2l*/, 0/*i2f*/, 0/*i2d*/, 0/*l2i*/, 0/*l2f*/, - 0/*l2d*/, 0/*f2i*/, 0/*f2l*/, 0/*f2d*/, 0/*d2i*/, 0/*d2l*/, - 0/*d2f*/, 0/*i2b*/, 0/*i2c*/, 0/*i2s*/, 0/*lcmp*/, 0/*fcmpl*/, - 0/*fcmpg*/, 0/*dcmpl*/, 0/*dcmpg*/, 2/*ifeq*/, 2/*ifne*/, - 2/*iflt*/, 2/*ifge*/, 2/*ifgt*/, 2/*ifle*/, 2/*if_icmpeq*/, - 2/*if_icmpne*/, 2/*if_icmplt*/, 2/*if_icmpge*/, 2/*if_icmpgt*/, - 2/*if_icmple*/, 2/*if_acmpeq*/, 2/*if_acmpne*/, 2/*goto*/, - 2/*jsr*/, 1/*ret*/, UNPREDICTABLE/*tableswitch*/, UNPREDICTABLE/*lookupswitch*/, - 0/*ireturn*/, 0/*lreturn*/, 0/*freturn*/, - 0/*dreturn*/, 0/*areturn*/, 0/*return*/, - 2/*getstatic*/, 2/*putstatic*/, 2/*getfield*/, - 2/*putfield*/, 2/*invokevirtual*/, 2/*invokespecial*/, 2/*invokestatic*/, - 4/*invokeinterface*/, UNDEFINED, 2/*new*/, - 1/*newarray*/, 2/*anewarray*/, - 0/*arraylength*/, 0/*athrow*/, 2/*checkcast*/, - 2/*instanceof*/, 0/*monitorenter*/, - 0/*monitorexit*/, UNPREDICTABLE/*wide*/, 3/*multianewarray*/, - 2/*ifnull*/, 2/*ifnonnull*/, 4/*goto_w*/, - 4/*jsr_w*/, 0/*breakpoint*/, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, RESERVED/*impdep1*/, RESERVED/*impdep2*/ - }; - + + public static int PUSH_INST = 0x0001; + public static int CONSTANT_INST = 0x0002; + public static long LOADCLASS_INST = 0x0004; + public static int CP_INST = 0x0008; + public static int INDEXED = 0x0010; + public static int LOAD_INST = 0x0020; // load instruction + public static int LV_INST = 0x0040; // local variable instruction + public static int POP_INST = 0x0080; + public static int STORE_INST = 0x0100; + public static long STACK_INST =0x0200; + public static long BRANCH_INSTRUCTION =0x0400; + public static long TARGETER_INSTRUCTION =0x0800; + public static long NEGATABLE =0x1000; + public static long IF_INST =0x2000; + public static long JSR_INSTRUCTION =0x4000; + public static long RET_INST =0x8000; + public static long EXCEPTION_THROWER =0x10000; + + public static final byte[] iLen = new byte[256]; + public static final byte UNDEFINED_LENGTH = 'X'-'0'; + public static final byte VARIABLE_LENGTH = 'V'-'0'; + public static final byte[] stackEntriesProduced = new byte[256]; + public static final Type[] types = new Type[256]; + public static final long[] instFlags = new long[256]; + + public static final Class[][] instExcs = new Class[256][]; + + static final Clinit _unused = new Clinit(); + static class Clinit { + + static { + types[ILOAD] =Type.INT;types[ISTORE]=Type.INT;types[ILOAD_0]=Type.INT;types[ISTORE_0]=Type.INT; + types[ILOAD_1]=Type.INT;types[ISTORE_1]=Type.INT;types[ILOAD_2]=Type.INT;types[ISTORE_2]=Type.INT; + types[ILOAD_3]=Type.INT;types[ISTORE_3]=Type.INT; + types[LLOAD] =Type.LONG;types[LSTORE]=Type.LONG;types[LLOAD_0]=Type.LONG;types[LSTORE_0]=Type.LONG; + types[LLOAD_1]=Type.LONG;types[LSTORE_1]=Type.LONG;types[LLOAD_2]=Type.LONG;types[LSTORE_2]=Type.LONG; + types[LLOAD_3]=Type.LONG;types[LSTORE_3]=Type.LONG; + types[DLOAD] =Type.DOUBLE;types[DSTORE]=Type.DOUBLE;types[DLOAD_0]=Type.DOUBLE;types[DSTORE_0]=Type.DOUBLE; + types[DLOAD_1]=Type.DOUBLE;types[DSTORE_1]=Type.DOUBLE;types[DLOAD_2]=Type.DOUBLE;types[DSTORE_2]=Type.DOUBLE; + types[DLOAD_3]=Type.DOUBLE;types[DSTORE_3]=Type.DOUBLE; + types[FLOAD] =Type.FLOAT;types[FSTORE]=Type.FLOAT;types[FLOAD_0]=Type.FLOAT;types[FSTORE_0]=Type.FLOAT; + types[FLOAD_1]=Type.FLOAT;types[FSTORE_1]=Type.FLOAT;types[FLOAD_2]=Type.FLOAT;types[FSTORE_2]=Type.FLOAT; + types[FLOAD_3]=Type.FLOAT;types[FSTORE_3]=Type.FLOAT; + types[ALOAD] =Type.OBJECT;types[ASTORE]=Type.OBJECT;types[ALOAD_0]=Type.OBJECT;types[ASTORE_0]=Type.OBJECT; + types[ALOAD_1]=Type.OBJECT;types[ASTORE_1]=Type.OBJECT;types[ALOAD_2]=Type.OBJECT;types[ASTORE_2]=Type.OBJECT; + types[ALOAD_3]=Type.OBJECT;types[ASTORE_3]=Type.OBJECT; + + + // INSTRUCTION_FLAGS - set for all + instFlags[NOP] = 0; + instFlags[ACONST_NULL]=PUSH_INST; + instFlags[ICONST_M1]=PUSH_INST|CONSTANT_INST; + instFlags[ICONST_0]=PUSH_INST|CONSTANT_INST; + instFlags[ICONST_1]=PUSH_INST|CONSTANT_INST; + instFlags[ICONST_2]=PUSH_INST|CONSTANT_INST; + instFlags[ICONST_3]=PUSH_INST|CONSTANT_INST; + instFlags[ICONST_4]=PUSH_INST|CONSTANT_INST; + instFlags[ICONST_5]=PUSH_INST|CONSTANT_INST; + instFlags[LCONST_0]=PUSH_INST|CONSTANT_INST; + instFlags[LCONST_1]=PUSH_INST|CONSTANT_INST; + instFlags[FCONST_0]=PUSH_INST|CONSTANT_INST; + instFlags[FCONST_1]=PUSH_INST|CONSTANT_INST; + instFlags[FCONST_2]=PUSH_INST|CONSTANT_INST; + instFlags[DCONST_0]=PUSH_INST|CONSTANT_INST; + instFlags[DCONST_1]=PUSH_INST|CONSTANT_INST; + + instFlags[BIPUSH]=PUSH_INST|CONSTANT_INST; + instFlags[SIPUSH]=PUSH_INST|CONSTANT_INST; + + instFlags[LDC]=EXCEPTION_THROWER|PUSH_INST|CP_INST|INDEXED; + + instFlags[LDC_W]=EXCEPTION_THROWER|PUSH_INST|CP_INST|INDEXED; + + instFlags[LDC2_W]=EXCEPTION_THROWER|PUSH_INST|CP_INST|INDEXED; + + // the next five could be 'wide' prefixed and so have longer lengths + instFlags[ILOAD]=INDEXED|LOAD_INST|PUSH_INST|LV_INST; + instFlags[LLOAD]=INDEXED|LOAD_INST|PUSH_INST|LV_INST; + instFlags[FLOAD]=INDEXED|LOAD_INST|PUSH_INST|LV_INST; + instFlags[DLOAD]=INDEXED|LOAD_INST|PUSH_INST|LV_INST; + instFlags[ALOAD]=INDEXED|LOAD_INST|PUSH_INST|LV_INST; + for (int ii=ILOAD_0;ii<=ALOAD_3;ii++) { + instFlags[ii]=INDEXED|LOAD_INST|PUSH_INST|LV_INST; + } + + + // the next five could be 'wide' prefixed and so have longer lengths + instFlags[ISTORE]=INDEXED|STORE_INST|POP_INST|LV_INST; + instFlags[LSTORE]=INDEXED|STORE_INST|POP_INST|LV_INST; + instFlags[FSTORE]=INDEXED|STORE_INST|POP_INST|LV_INST; + instFlags[DSTORE]=INDEXED|STORE_INST|POP_INST|LV_INST; + instFlags[ASTORE]=INDEXED|STORE_INST|POP_INST|LV_INST; + for (int ii=ISTORE_0;ii<=ASTORE_3;ii++) { + instFlags[ii]=INDEXED|STORE_INST|POP_INST|LV_INST; + } + + instFlags[IDIV]=EXCEPTION_THROWER; + instExcs[IDIV] = new Class[]{org.aspectj.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION}; + instFlags[IREM]=EXCEPTION_THROWER; + instExcs[IREM] = new Class[]{org.aspectj.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION}; + instFlags[LDIV]=EXCEPTION_THROWER;instExcs[LDIV] = new Class[]{ org.aspectj.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION}; + instFlags[LREM]=EXCEPTION_THROWER;instExcs[LREM] = new Class[]{org.aspectj.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION}; + + + instFlags[ARRAYLENGTH]=EXCEPTION_THROWER; instExcs[ARRAYLENGTH]=new Class[]{org.aspectj.apache.bcel.ExceptionConstants.NULL_POINTER_EXCEPTION}; + instFlags[ATHROW]=EXCEPTION_THROWER;instExcs[ATHROW]=new Class[]{org.aspectj.apache.bcel.ExceptionConstants.THROWABLE}; + + instFlags[AALOAD]=EXCEPTION_THROWER;instExcs[AALOAD]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[IALOAD]=EXCEPTION_THROWER;instExcs[IALOAD]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[BALOAD]=EXCEPTION_THROWER;instExcs[BALOAD]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[FALOAD]=EXCEPTION_THROWER;instExcs[FALOAD]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[DALOAD]=EXCEPTION_THROWER;instExcs[DALOAD]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[CALOAD]=EXCEPTION_THROWER;instExcs[CALOAD]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[LALOAD]=EXCEPTION_THROWER;instExcs[LALOAD]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[SALOAD]=EXCEPTION_THROWER;instExcs[SALOAD]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + + instFlags[AASTORE]=EXCEPTION_THROWER;instExcs[AASTORE]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[IASTORE]=EXCEPTION_THROWER;instExcs[IASTORE]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[BASTORE]=EXCEPTION_THROWER;instExcs[BASTORE]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[FASTORE]=EXCEPTION_THROWER;instExcs[FASTORE]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[DASTORE]=EXCEPTION_THROWER;instExcs[DASTORE]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[CASTORE]=EXCEPTION_THROWER;instExcs[CASTORE]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[LASTORE]=EXCEPTION_THROWER;instExcs[LASTORE]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + instFlags[SASTORE]=EXCEPTION_THROWER;instExcs[SASTORE]=org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + + // stack instructions + instFlags[DUP]=PUSH_INST|STACK_INST; + instFlags[DUP_X1]=STACK_INST; // TODO fixme - aren't these two push/stack producers? (although peculiar ones...) + instFlags[DUP_X2]=STACK_INST; + instFlags[DUP2]=PUSH_INST|STACK_INST; + instFlags[DUP2_X1]=STACK_INST; // TODO fixme - aren't these two push/stack producers? (although peculiar ones...) + instFlags[DUP2_X2]=STACK_INST; + instFlags[POP]=STACK_INST|POP_INST; + instFlags[POP2]=STACK_INST|POP_INST; + instFlags[SWAP]=STACK_INST; + + instFlags[MONITORENTER]=EXCEPTION_THROWER;instExcs[MONITORENTER]=new Class[] { org.aspectj.apache.bcel.ExceptionConstants.NULL_POINTER_EXCEPTION }; + instFlags[MONITOREXIT]=EXCEPTION_THROWER;instExcs[MONITOREXIT]=new Class[] { org.aspectj.apache.bcel.ExceptionConstants.NULL_POINTER_EXCEPTION }; + + + // branching instructions + instFlags[GOTO]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION; + instFlags[GOTO_W]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION; + instFlags[JSR]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|JSR_INSTRUCTION; + instFlags[JSR_W]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|JSR_INSTRUCTION; + + instFlags[IFGT]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IFLE]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IFNE]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IFEQ]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IFGE]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IFLT]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IFNULL]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IFNONNULL]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IF_ACMPEQ]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IF_ACMPNE]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IF_ICMPEQ]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IF_ICMPGE]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IF_ICMPGT]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IF_ICMPLE]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IF_ICMPLT]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + instFlags[IF_ICMPNE]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION|NEGATABLE|IF_INST; + + instFlags[LOOKUPSWITCH]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION; + instFlags[TABLESWITCH]=BRANCH_INSTRUCTION|TARGETER_INSTRUCTION; + + // fixme these class arrays should be constants + instFlags[ARETURN]=RET_INST|EXCEPTION_THROWER;instExcs[ARETURN]=new Class[] { ExceptionConstants.ILLEGAL_MONITOR_STATE }; + instFlags[DRETURN]=RET_INST|EXCEPTION_THROWER;instExcs[DRETURN]=new Class[] { ExceptionConstants.ILLEGAL_MONITOR_STATE }; + instFlags[FRETURN]=RET_INST|EXCEPTION_THROWER;instExcs[FRETURN]=new Class[] { ExceptionConstants.ILLEGAL_MONITOR_STATE }; + instFlags[IRETURN]=RET_INST|EXCEPTION_THROWER;instExcs[IRETURN]=new Class[] { ExceptionConstants.ILLEGAL_MONITOR_STATE }; + instFlags[LRETURN]=RET_INST|EXCEPTION_THROWER;instExcs[LRETURN]=new Class[] { ExceptionConstants.ILLEGAL_MONITOR_STATE }; + instFlags[RETURN]=RET_INST|EXCEPTION_THROWER;instExcs[RETURN]=new Class[] { ExceptionConstants.ILLEGAL_MONITOR_STATE }; + + + instFlags[NEW]=LOADCLASS_INST|EXCEPTION_THROWER|CP_INST|INDEXED;instExcs[NEW]=ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION_FOR_ALLOCATIONS; + instFlags[NEWARRAY]=EXCEPTION_THROWER;instExcs[NEWARRAY]=new Class[] { org.aspectj.apache.bcel.ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION }; + + types[IINC]=Type.INT;instFlags[IINC]=LV_INST|INDEXED; + instFlags[RET]=INDEXED; + + + instFlags[ANEWARRAY]=CP_INST|LOADCLASS_INST|EXCEPTION_THROWER|INDEXED;instExcs[ANEWARRAY]=ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION_ANEWARRAY; + instFlags[CHECKCAST]=CP_INST|LOADCLASS_INST|EXCEPTION_THROWER|INDEXED;instExcs[CHECKCAST]=ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION_CHECKCAST; + instFlags[INSTANCEOF]=CP_INST|LOADCLASS_INST|EXCEPTION_THROWER|INDEXED;instExcs[INSTANCEOF]=ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION; + instFlags[MULTIANEWARRAY]=CP_INST|LOADCLASS_INST|EXCEPTION_THROWER|INDEXED;instExcs[MULTIANEWARRAY]=ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION_ANEWARRAY; // fixme i think this is a stackproducer, old bcel says no... + + instFlags[GETFIELD]=EXCEPTION_THROWER|CP_INST|LOADCLASS_INST|INDEXED;instExcs[GETFIELD]=ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION_GETFIELD_PUTFIELD; + instFlags[GETSTATIC]=PUSH_INST|EXCEPTION_THROWER|LOADCLASS_INST|CP_INST|INDEXED;instExcs[GETSTATIC]=ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION_GETSTATIC_PUTSTATIC; + instFlags[PUTFIELD]=POP_INST|EXCEPTION_THROWER|LOADCLASS_INST|CP_INST|INDEXED;instExcs[PUTFIELD]=ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION_GETFIELD_PUTFIELD; + instFlags[PUTSTATIC]=EXCEPTION_THROWER|POP_INST|CP_INST|LOADCLASS_INST|INDEXED;instExcs[PUTSTATIC]=ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION_GETSTATIC_PUTSTATIC; + + instFlags[INVOKEINTERFACE]=EXCEPTION_THROWER|CP_INST|LOADCLASS_INST|INDEXED;instExcs[INVOKEINTERFACE]=ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION_INVOKEINTERFACE; + instFlags[INVOKESPECIAL]=EXCEPTION_THROWER|CP_INST|LOADCLASS_INST|INDEXED;instExcs[INVOKESPECIAL]=ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION_INVOKESPECIAL_INVOKEVIRTUAL; + instFlags[INVOKESTATIC]=EXCEPTION_THROWER|CP_INST|LOADCLASS_INST|INDEXED;instExcs[INVOKESTATIC]=ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION_INVOKESTATIC; + instFlags[INVOKEVIRTUAL]=EXCEPTION_THROWER|CP_INST|LOADCLASS_INST|INDEXED;instExcs[INVOKEVIRTUAL]=ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION_INVOKESPECIAL_INVOKEVIRTUAL; + + char[] lengths = // . = varies in length, / = undefined + ("1111111111111111"+ // nop > dconst_1 + "2323322222111111"+ // bipush > lload_1 + "1111111111111111"+ // lload_2 > laload + "1111112222211111"+ // faload > lstore_0 + "1111111111111111"+ // lstore_1 > iastore + "1111111111111111"+ // lastore > swap + "1111111111111111"+ // iadd > ddiv + "1111111111111111"+ // irem > land + "1111311111111111"+ // ior > d2l + "1111111113333333"+ // d2f > if_icmpeq + "3333333332..1111"+ // if_icmpne > dreturn + "1133333335/32311"+ // areturn > athrow + "3311.433551/////").toCharArray(); // checkcast > + int count=0; + for (;count dconst_1 + "1111212121111122"+ // bipush > lload_1 + "2211112222111112"+ // lload_2 > laload + "1211110000000000"+ // faload > lstore_0 + "0000000000000000"+ // lstore_1 > iastore + "0000000002344562"+ // lastore > swap + "1212121212121212"+ // iadd > ddiv + "1212121212121212"+ // irem > land + "1212021211212212"+ // ior > d2l + "1111111110000000"+ // d2f > if_icmpeq + "0000000010000000"+ // if_icmpne > dreturn + "00.0.0..../11111"+ // areturn > athrow + "11000100010/").toCharArray(); // checkcast > + count=0; + for (;countE. Haase */ public interface ExceptionConstants { @@ -107,11 +107,47 @@ public interface ExceptionConstants { NO_CLASS_DEF_FOUND_ERROR, CLASS_FORMAT_ERROR, VERIFY_ERROR, ABSTRACT_METHOD_ERROR, EXCEPTION_IN_INITIALIZER_ERROR, ILLEGAL_ACCESS_ERROR }; // Chapter 5.1 + public static final Class[] EXCS_CLASS_AND_INTERFACE_RESOLUTION_MULTIANEWARRAY = { + NO_CLASS_DEF_FOUND_ERROR, CLASS_FORMAT_ERROR, VERIFY_ERROR, ABSTRACT_METHOD_ERROR, + EXCEPTION_IN_INITIALIZER_ERROR, ILLEGAL_ACCESS_ERROR,NEGATIVE_ARRAY_SIZE_EXCEPTION,ILLEGAL_ACCESS_ERROR + }; + public static final Class[] EXCS_CLASS_AND_INTERFACE_RESOLUTION_ANEWARRAY = { + NO_CLASS_DEF_FOUND_ERROR, CLASS_FORMAT_ERROR, VERIFY_ERROR, ABSTRACT_METHOD_ERROR, + EXCEPTION_IN_INITIALIZER_ERROR, ILLEGAL_ACCESS_ERROR,NEGATIVE_ARRAY_SIZE_EXCEPTION + }; // Chapter 5.1 + public static final Class[] EXCS_CLASS_AND_INTERFACE_RESOLUTION_CHECKCAST = { + NO_CLASS_DEF_FOUND_ERROR, CLASS_FORMAT_ERROR, VERIFY_ERROR, ABSTRACT_METHOD_ERROR, + EXCEPTION_IN_INITIALIZER_ERROR, ILLEGAL_ACCESS_ERROR,CLASS_CAST_EXCEPTION + }; // Chapter 5.1 + public static final Class[] EXCS_CLASS_AND_INTERFACE_RESOLUTION_FOR_ALLOCATIONS= { + NO_CLASS_DEF_FOUND_ERROR, CLASS_FORMAT_ERROR, VERIFY_ERROR, ABSTRACT_METHOD_ERROR, + EXCEPTION_IN_INITIALIZER_ERROR, ILLEGAL_ACCESS_ERROR, INSTANTIATION_ERROR,ILLEGAL_ACCESS_ERROR + }; public static final Class[] EXCS_FIELD_AND_METHOD_RESOLUTION = { NO_SUCH_FIELD_ERROR, ILLEGAL_ACCESS_ERROR, NO_SUCH_METHOD_ERROR }; // Chapter 5.2 + public static final Class[] EXCS_FIELD_AND_METHOD_RESOLUTION_GETFIELD_PUTFIELD = { + NO_SUCH_FIELD_ERROR, ILLEGAL_ACCESS_ERROR, NO_SUCH_METHOD_ERROR,INCOMPATIBLE_CLASS_CHANGE_ERROR,NULL_POINTER_EXCEPTION + }; + + public static final Class[] EXCS_FIELD_AND_METHOD_RESOLUTION_GETSTATIC_PUTSTATIC = { + NO_SUCH_FIELD_ERROR, ILLEGAL_ACCESS_ERROR, NO_SUCH_METHOD_ERROR,INCOMPATIBLE_CLASS_CHANGE_ERROR + }; + + public static final Class[] EXCS_INTERFACE_METHOD_RESOLUTION_INVOKEINTERFACE = { + INCOMPATIBLE_CLASS_CHANGE_ERROR,ILLEGAL_ACCESS_ERROR,ABSTRACT_METHOD_ERROR,UNSATISFIED_LINK_ERROR + }; + public static final Class[] EXCS_INTERFACE_METHOD_RESOLUTION_INVOKESPECIAL_INVOKEVIRTUAL = { + INCOMPATIBLE_CLASS_CHANGE_ERROR,NULL_POINTER_EXCEPTION,ABSTRACT_METHOD_ERROR,UNSATISFIED_LINK_ERROR + }; + + public static final Class[] EXCS_INTERFACE_METHOD_RESOLUTION_INVOKESTATIC = { + INCOMPATIBLE_CLASS_CHANGE_ERROR,UNSATISFIED_LINK_ERROR + }; + + public static final Class[] EXCS_INTERFACE_METHOD_RESOLUTION = new Class[0]; // Chapter 5.3 (as below) public static final Class[] EXCS_STRING_RESOLUTION = new Class[0]; // Chapter 5.4 (no errors but the ones that _always_ could happen! How stupid.) diff --git a/bcel-builder/src/org/aspectj/apache/bcel/Repository.java b/bcel-builder/src/org/aspectj/apache/bcel/Repository.java index 658b57b98..ee1278ac9 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/Repository.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/Repository.java @@ -66,7 +66,7 @@ import java.io.*; * @see org.aspectj.apache.bcel.util.Repository * @see org.aspectj.apache.bcel.util.SyntheticRepository * - * @version $Id: Repository.java,v 1.3 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: Repository.java,v 1.4 2008/05/28 23:53:04 aclement Exp $ * @author M. Dahm */ public abstract class Repository { @@ -95,11 +95,9 @@ public abstract class Repository { try { JavaClass clazz = getRepository().findClass(class_name); - if(clazz == null) { - return getRepository().loadClass(class_name); - } else { - return clazz; - } + if(clazz != null) return clazz; + + return getRepository().loadClass(class_name); } catch(ClassNotFoundException ex) { return null; } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/AccessFlags.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/AccessFlags.java deleted file mode 100644 index cfcee2584..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/AccessFlags.java +++ /dev/null @@ -1,183 +0,0 @@ -package org.aspectj.apache.bcel.classfile; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import org.aspectj.apache.bcel.Constants; - -/** - * Super class for all objects that have modifiers like private, final, ... - * I.e. classes, fields, and methods. - * - * @version $Id: AccessFlags.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ - * @author M. Dahm - */ -public abstract class AccessFlags implements java.io.Serializable { - protected int access_flags; - - public AccessFlags() {} - - /** - * @param a inital access flags - */ - public AccessFlags(int a) { - access_flags = a; - } - - /** - * @return Access flags of the object aka. "modifiers". - */ - public final int getAccessFlags() { return access_flags; } - - /** - * @return Access flags of the object aka. "modifiers". - */ - public final int getModifiers() { return access_flags; } - - /** Set access flags aka "modifiers". - * @param access_flags Access flags of the object. - */ - public final void setAccessFlags(int access_flags) { - this.access_flags = access_flags; - } - - /** Set access flags aka "modifiers". - * @param access_flags Access flags of the object. - */ - public final void setModifiers(int access_flags) { - setAccessFlags(access_flags); - } - - private final void setFlag(int flag, boolean set) { - if((access_flags & flag) != 0) { // Flag is set already - if(!set) // Delete flag ? - access_flags ^= flag; - } else { // Flag not set - if(set) // Set flag ? - access_flags |= flag; - } - } - - public final void isPublic(boolean flag) { setFlag(Constants.ACC_PUBLIC, flag); } - public final boolean isPublic() { - return (access_flags & Constants.ACC_PUBLIC) != 0; - } - - public final void isPrivate(boolean flag) { setFlag(Constants.ACC_PRIVATE, flag); } - public final boolean isPrivate() { - return (access_flags & Constants.ACC_PRIVATE) != 0; - } - - public final void isProtected(boolean flag) { setFlag(Constants.ACC_PROTECTED, flag); } - public final boolean isProtected() { - return (access_flags & Constants.ACC_PROTECTED) != 0; - } - - public final void isStatic(boolean flag) { setFlag(Constants.ACC_STATIC, flag); } - public final boolean isStatic() { - return (access_flags & Constants.ACC_STATIC) != 0; - } - - public final void isFinal(boolean flag) { setFlag(Constants.ACC_FINAL, flag); } - public final boolean isFinal() { - return (access_flags & Constants.ACC_FINAL) != 0; - } - - public final void isSynchronized(boolean flag) { setFlag(Constants.ACC_SYNCHRONIZED, flag); } - public final boolean isSynchronized() { - return (access_flags & Constants.ACC_SYNCHRONIZED) != 0; - } - - public final void isVolatile(boolean flag) { setFlag(Constants.ACC_VOLATILE, flag); } - public final boolean isVolatile() { - return (access_flags & Constants.ACC_VOLATILE) != 0; - } - - public final void isTransient(boolean flag) { setFlag(Constants.ACC_TRANSIENT, flag); } - public final boolean isTransient() { - return (access_flags & Constants.ACC_TRANSIENT) != 0; - } - - public final void isNative(boolean flag) { setFlag(Constants.ACC_NATIVE, flag); } - public final boolean isNative() { - return (access_flags & Constants.ACC_NATIVE) != 0; - } - - public final void isInterface(boolean flag) { setFlag(Constants.ACC_INTERFACE, flag); } - public final boolean isInterface() { - return (access_flags & Constants.ACC_INTERFACE) != 0; - } - - public final void isAbstract(boolean flag) { setFlag(Constants.ACC_ABSTRACT, flag); } - public final boolean isAbstract() { - return (access_flags & Constants.ACC_ABSTRACT) != 0; - } - - public final void isStrictfp(boolean flag) { setFlag(Constants.ACC_STRICT, flag); } - public final boolean isStrictfp() { - return (access_flags & Constants.ACC_STRICT) != 0; - } - - public final void isVarargs(boolean flag) { setFlag(Constants.ACC_VARARGS, flag); } - /** J5SUPPORT: Called on methods to determine if they were written with varargs. */ - public final boolean isVarargs() { - return (access_flags & Constants.ACC_VARARGS) != 0; - } - - public final void isBridge(boolean flag) { setFlag(Constants.ACC_BRIDGE, flag); } - /** J5SUPPORT: Called on methods to determine if they are bridge methods */ - public final boolean isBridge() { - return (access_flags & Constants.ACC_BRIDGE) != 0; - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/AnnotationDefault.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/AnnotationDefault.java index c687758a8..53cf1c33d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/AnnotationDefault.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/AnnotationDefault.java @@ -17,7 +17,7 @@ import java.io.DataOutputStream; import java.io.IOException; import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.classfile.annotation.ElementValue; +import org.aspectj.apache.bcel.classfile.annotation.ElementValueGen; /** * This attribute is attached to a method and indicates the default @@ -25,31 +25,31 @@ import org.aspectj.apache.bcel.classfile.annotation.ElementValue; */ public class AnnotationDefault extends Attribute { - private ElementValue value; + private ElementValueGen value; public AnnotationDefault(int nameIndex, int len, DataInputStream dis, ConstantPool cpool) throws IOException { - this(nameIndex, len, ElementValue.readElementValue(dis,cpool), cpool); + this(nameIndex, len, ElementValueGen.readElementValue(dis,cpool), cpool); } - private AnnotationDefault(int nameIndex, int len, ElementValue value, ConstantPool cpool) { + private AnnotationDefault(int nameIndex, int len, ElementValueGen value, ConstantPool cpool) { super(Constants.ATTR_ANNOTATION_DEFAULT, nameIndex, len, cpool); this.value = value; } - public void accept(Visitor v) { - v.visitAnnotationDefault(this); - } - public Attribute copy(ConstantPool constant_pool) { throw new RuntimeException("Not implemented yet!"); // is this next line sufficient? // return (EnclosingMethod)clone(); } - public final ElementValue getElementValue() { return value; } + public final ElementValueGen getElementValue() { return value; } public final void dump(DataOutputStream dos) throws IOException { super.dump(dos); value.dump(dos); } + + public void accept(ClassVisitor v) { + v.visitAnnotationDefault(this); + } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java index 8d7deb62e..4833bbd64 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java @@ -61,7 +61,6 @@ import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleParameterAnnotations; import java.io.*; -import java.util.HashMap; /** * Abstract super class for Attribute objects. Currently the @@ -71,7 +70,7 @@ import java.util.HashMap; * Synthetic attributes are supported. The * Unknown attribute stands for non-standard-attributes. * - * @version $Id: Attribute.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: Attribute.java,v 1.3 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm * @see ConstantValue * @see SourceFile @@ -86,218 +85,86 @@ import java.util.HashMap; * @see Signature */ public abstract class Attribute implements Cloneable, Node, Serializable { - protected int name_index; // Points to attribute name in constant pool - protected int length; // Content length of attribute field - protected byte tag; // Tag to distiguish subclasses - protected ConstantPool constant_pool; + public static Attribute[] NoAttributes = new Attribute[0]; - protected Attribute(byte tag, int name_index, int length, - ConstantPool constant_pool) { - this.tag = tag; - this.name_index = name_index; - this.length = length; - this.constant_pool = constant_pool; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public abstract void accept(Visitor v); - - /** - * Dump attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public void dump(DataOutputStream file) throws IOException - { - file.writeShort(name_index); - file.writeInt(length); - } - - private static HashMap readers = new HashMap(); - - /** Add an Attribute reader capable of parsing (user-defined) attributes - * named "name". You should not add readers for the standard attributes - * such as "LineNumberTable", because those are handled internally. - * - * @param name the name of the attribute as stored in the class file - * @param r the reader object - */ - public static void addAttributeReader(String name, AttributeReader r) { - readers.put(name, r); - } - - /** Remove attribute reader - * - * @param name the name of the attribute as stored in the class file - */ - public static void removeAttributeReader(String name) { - readers.remove(name); - } + + protected byte tag; // Tag to distinguish subclasses + protected int nameIndex; // Points to attribute name in constant pool + protected int length; // Content length of attribute field + protected ConstantPool constantPool; + + + protected Attribute(byte tag, int nameIndex, int length, ConstantPool constantPool) { + this.tag = tag; + this.nameIndex = nameIndex; + this.length = length; + this.constantPool = constantPool; + } - /* Class method reads one attribute from the input data stream. - * This method must not be accessible from the outside. It is - * called by the Field and Method constructor methods. - * - * @see Field - * @see Method - * @param file Input stream - * @param constant_pool Array of constants - * @return Attribute - * @throws IOException - * @throws ClassFormatException - */ - public static final Attribute readAttribute(DataInputStream file, - ConstantPool constant_pool) - throws IOException, ClassFormatException - { - ConstantUtf8 c; - String name; - int name_index; - int length; - byte tag = Constants.ATTR_UNKNOWN; // Unknown attribute + + /** Dump attribute to file stream in binary format */ + public void dump(DataOutputStream file) throws IOException { + file.writeShort(nameIndex); + file.writeInt(length); + } - // Get class name from constant pool via 'name_index' indirection - name_index = (int)file.readUnsignedShort(); - c = (ConstantUtf8)constant_pool.getConstant(name_index, - Constants.CONSTANT_Utf8); - name = c.getBytes(); - // Length of data in bytes - length = file.readInt(); + public static final Attribute readAttribute(DataInputStream file, ConstantPool cpool) throws IOException { + byte tag = Constants.ATTR_UNKNOWN; // Unknown attribute + int idx = file.readUnsignedShort(); + String name = cpool.getConstantUtf8(idx).getBytes(); + int len = file.readInt(); // Compare strings to find known attribute - for(byte i=0; i < Constants.KNOWN_ATTRIBUTES; i++) { - if(name.equals(Constants.ATTRIBUTE_NAMES[i])) { - tag = i; // found! - break; - } + for (byte i=0; i < Constants.KNOWN_ATTRIBUTES; i++) { + if (name.equals(Constants.ATTRIBUTE_NAMES[i])) { tag = i; break; } } - - // Call proper constructor, depending on `tag' switch(tag) { - case Constants.ATTR_UNKNOWN: - AttributeReader r = (AttributeReader)readers.get(name); - - if(r != null) - return r.createAttribute(name_index, length, file, constant_pool); - else - return new Unknown(name_index, length, file, constant_pool); - - case Constants.ATTR_CONSTANT_VALUE: - return new ConstantValue(name_index, length, file, constant_pool); - - case Constants.ATTR_SOURCE_FILE: - return new SourceFile(name_index, length, file, constant_pool); - - case Constants.ATTR_CODE: - return new Code(name_index, length, file, constant_pool); - - case Constants.ATTR_EXCEPTIONS: - return new ExceptionTable(name_index, length, file, constant_pool); - - case Constants.ATTR_LINE_NUMBER_TABLE: - return new LineNumberTable(name_index, length, file, constant_pool); - - case Constants.ATTR_LOCAL_VARIABLE_TABLE: - return new LocalVariableTable(name_index, length, file, constant_pool); - - case Constants.ATTR_INNER_CLASSES: - return new InnerClasses(name_index, length, file, constant_pool); - - case Constants.ATTR_SYNTHETIC: - return new Synthetic(name_index, length, file, constant_pool); - - case Constants.ATTR_DEPRECATED: - return new Deprecated(name_index, length, file, constant_pool); - - case Constants.ATTR_PMG: - return new PMGClass(name_index, length, file, constant_pool); - - case Constants.ATTR_SIGNATURE: - return new Signature(name_index, length, file, constant_pool); - - case Constants.ATTR_STACK_MAP: - return new StackMap(name_index, length, file, constant_pool); - - // J5SUPPORT: - case Constants.ATTR_RUNTIME_VISIBLE_ANNOTATIONS: - return new RuntimeVisibleAnnotations(name_index,length,file,constant_pool); - case Constants.ATTR_RUNTIME_INVISIBLE_ANNOTATIONS: - return new RuntimeInvisibleAnnotations(name_index,length,file,constant_pool); - case Constants.ATTR_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS: - return new RuntimeVisibleParameterAnnotations(name_index,length,file,constant_pool); - case Constants.ATTR_RUNTIME_INVISIBLE_PARAMETER_ANNOTATIONS: - return new RuntimeInvisibleParameterAnnotations(name_index,length,file,constant_pool); - case Constants.ATTR_ANNOTATION_DEFAULT: - return new AnnotationDefault(name_index,length,file,constant_pool); - case Constants.ATTR_LOCAL_VARIABLE_TYPE_TABLE: - return new LocalVariableTypeTable(name_index,length,file,constant_pool); - case Constants.ATTR_ENCLOSING_METHOD: - return new EnclosingMethod(name_index,length,file,constant_pool); - - default: // Never reached - throw new IllegalStateException("Ooops! default case reached."); - } + case Constants.ATTR_UNKNOWN: return new Unknown(idx, len, file, cpool); + case Constants.ATTR_CONSTANT_VALUE: return new ConstantValue(idx, len, file, cpool); + case Constants.ATTR_SOURCE_FILE: return new SourceFile(idx, len, file, cpool); + case Constants.ATTR_CODE: return new Code(idx, len, file, cpool); + case Constants.ATTR_EXCEPTIONS: return new ExceptionTable(idx, len, file, cpool); + case Constants.ATTR_LINE_NUMBER_TABLE: return new LineNumberTable(idx, len, file, cpool); + case Constants.ATTR_LOCAL_VARIABLE_TABLE: return new LocalVariableTable(idx, len, file, cpool); + case Constants.ATTR_INNER_CLASSES: return new InnerClasses(idx, len, file, cpool); + case Constants.ATTR_SYNTHETIC: return new Synthetic(idx, len, file, cpool); + case Constants.ATTR_DEPRECATED: return new Deprecated(idx, len, file, cpool); + case Constants.ATTR_PMG: return new PMGClass(idx, len, file, cpool); + case Constants.ATTR_SIGNATURE: return new Signature(idx, len, file, cpool); + case Constants.ATTR_STACK_MAP: return new StackMap(idx, len, file, cpool); + case Constants.ATTR_RUNTIME_VISIBLE_ANNOTATIONS: + return new RuntimeVisibleAnnotations(idx,len,file,cpool); + case Constants.ATTR_RUNTIME_INVISIBLE_ANNOTATIONS: + return new RuntimeInvisibleAnnotations(idx,len,file,cpool); + case Constants.ATTR_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS: + return new RuntimeVisibleParameterAnnotations(idx,len,file,cpool); + case Constants.ATTR_RUNTIME_INVISIBLE_PARAMETER_ANNOTATIONS: + return new RuntimeInvisibleParameterAnnotations(idx,len,file,cpool); + case Constants.ATTR_ANNOTATION_DEFAULT: + return new AnnotationDefault(idx,len,file,cpool); + case Constants.ATTR_LOCAL_VARIABLE_TYPE_TABLE: + return new LocalVariableTypeTable(idx,len,file,cpool); + case Constants.ATTR_ENCLOSING_METHOD: + return new EnclosingMethod(idx,len,file,cpool); + default: throw new IllegalStateException(); + } } public String getName() { - ConstantUtf8 c = - (ConstantUtf8)constant_pool.getConstant(name_index,Constants.CONSTANT_Utf8); - return c.getBytes(); + return constantPool.getConstantUtf8(nameIndex).getBytes(); } - /** - * @return Length of attribute field in bytes. - */ - public final int getLength() { return length; } - - /** - * @param Attribute length in bytes. - */ - public final void setLength(int length) { - this.length = length; - } - - /** - * @param name_index of attribute. - */ - public final void setNameIndex(int name_index) { - this.name_index = name_index; - } - /** - * @return Name index in constant pool of attribute name. - */ - public final int getNameIndex() { return name_index; } - - /** - * @return Tag of attribute, i.e., its type. Value may not be altered, thus - * there is no setTag() method. - */ - public final byte getTag() { return tag; } + public final int getLength() { return length; } - /** - * @return Constant pool used by this object. - * @see ConstantPool - */ - public final ConstantPool getConstantPool() { return constant_pool; } + public final int getNameIndex() { return nameIndex; } + + public final byte getTag() { return tag; } - /** - * @param constant_pool Constant pool to be used for this object. - * @see ConstantPool - */ - public final void setConstantPool(ConstantPool constant_pool) { - this.constant_pool = constant_pool; - } + public final ConstantPool getConstantPool() { return constantPool; } /** - * Use copy() if you want to have a deep copy(), i.e., with all references + * Use copy() if you want to have a deep copy(), ie. with all references * copied correctly. * * @return shallow copy of this attribute @@ -319,10 +186,10 @@ public abstract class Attribute implements Cloneable, Node, Serializable { */ public abstract Attribute copy(ConstantPool constant_pool); - /** - * @return attribute name. - */ public String toString() { return Constants.ATTRIBUTE_NAMES[tag]; } + + public abstract void accept(ClassVisitor v); + } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/AttributeReader.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/AttributeReader.java deleted file mode 100644 index 1d3cdb3a5..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/AttributeReader.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.aspectj.apache.bcel.classfile; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Unknown (non-standard) attributes may be read via user-defined factory - * objects that can be registered with the Attribute.addAttributeReader - * method. These factory objects should implement this interface. - - * @see Attribute - * @version $Id: AttributeReader.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public interface AttributeReader { - /** - When this attribute reader is added via the static method - Attribute.addAttributeReader, an attribute name is associated with it. - As the class file parser parses attributes, it will call various - AttributeReaders based on the name of the attributes it is - constructing. - - @param name_index An index into the constant pool, indexing a - ConstantUtf8 that represents the name of the attribute. - - @param length The length of the data contained in the attribute. This - is written into the constant pool and should agree with what the - factory expects the length to be. - - @param file This is the data input stream that the factory needs to read - its data from. - - @param constant_pool This is the constant pool associated with the - Attribute that we are constructing. - - @return The user-defined AttributeReader should take this data and use - it to construct an attribute. In the case of errors, a null can be - returned which will cause the parsing of the class file to fail. - - @see Attribute#addAttributeReader( String, AttributeReader ) - */ - public Attribute createAttribute(int name_index, - int length, - java.io.DataInputStream file, - ConstantPool constant_pool); -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/AttributeUtils.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/AttributeUtils.java new file mode 100644 index 000000000..3c540e8c9 --- /dev/null +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/AttributeUtils.java @@ -0,0 +1,93 @@ +package org.aspectj.apache.bcel.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.aspectj.apache.bcel.Constants; + +public class AttributeUtils { + + public static Attribute[] readAttributes(DataInputStream dataInputstream, ConstantPool cpool) { + try { + int length = dataInputstream.readUnsignedShort(); + if (length==0) return Attribute.NoAttributes; + Attribute[] attrs = new Attribute[length]; + for (int i=0; i < length; i++) + attrs[i] = Attribute.readAttribute(dataInputstream, cpool); + return attrs; + } catch (IOException e) { + throw new ClassFormatException("IOException whilst reading set of attributes: "+e.toString()); + } + } + + /** Write (serialize) a set of attributes into a specified output stream */ + public static void writeAttributes(Attribute[] attributes,DataOutputStream file) throws IOException { + if (attributes==null) { + file.writeShort(0); + } else { + file.writeShort(attributes.length); + for(int i=0; i < attributes.length; i++) + attributes[i].dump(file); + } + } + + public static Attribute[] copy(Attribute[] attributes, ConstantPool constant_pool) { + if (attributes==null || attributes.length==0) return Attribute.NoAttributes; + Attribute[] attrs = new Attribute[attributes.length]; + for (int i = 0; i < attributes.length; i++) { + attrs[i] = attributes[i].copy(constant_pool); + } + return attrs; + } + + public static Signature getSignatureAttribute(Attribute[] attributes) { + for(int i=0; i < attributes.length; i++) { + if (attributes[i].tag==Constants.ATTR_SIGNATURE) return ((Signature)attributes[i]); + } + return null; + } + + public static Code getCodeAttribute(Attribute[] attributes) { + for(int i=0; i < attributes.length; i++) { + if (attributes[i].tag==Constants.ATTR_CODE) { return ((Code)attributes[i]);} + } + return null; + } + + public static ExceptionTable getExceptionTableAttribute(Attribute[] attributes) { + for(int i=0; i < attributes.length; i++) { + if (attributes[i].tag==Constants.ATTR_EXCEPTIONS) { return ((ExceptionTable)attributes[i]);} + } + return null; + } + + public static ConstantValue getConstantValueAttribute(Attribute[] attributes) { + for(int i=0; i < attributes.length; i++) { + if(attributes[i].getTag() == Constants.ATTR_CONSTANT_VALUE) return (ConstantValue)attributes[i]; + } + return null; + } + + public static void accept(Attribute[] attributes,ClassVisitor visitor) { + for(int i=0; i < attributes.length; i++) + attributes[i].accept(visitor); + } + + public static boolean hasSyntheticAttribute(Attribute[] attributes) { + for (int i = 0; i < attributes.length; i++) { + if (attributes[i].tag==Constants.ATTR_SYNTHETIC) { + return true; + } + } + return false; + } + + public static SourceFile getSourceFileAttribute(Attribute[] attributes) { + for(int i=0; i < attributes.length; i++) { + if (attributes[i].tag==Constants.ATTR_SOURCE_FILE) { return ((SourceFile)attributes[i]);} + } + return null; + } + +} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassFormatException.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassFormatException.java index 8e374fc5b..a958329e5 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassFormatException.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassFormatException.java @@ -59,7 +59,7 @@ package org.aspectj.apache.bcel.classfile; * that the file is malformed or otherwise cannot be interpreted as a * class file. * - * @version $Id: ClassFormatException.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ClassFormatException.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm */ public class ClassFormatException extends RuntimeException { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassParser.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassParser.java index ae7f8c92e..faa365357 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassParser.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassParser.java @@ -70,71 +70,40 @@ import java.util.zip.*; * JVM specification 1.0. See this paper for * further details about the structure of a bytecode file. * - * @version $Id: ClassParser.java,v 1.4 2005/10/14 08:39:32 aclement Exp $ + * @version $Id: ClassParser.java,v 1.5 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm */ public final class ClassParser { private DataInputStream file; - private ZipFile zip; - private String file_name; - private int class_name_index, superclass_name_index; - private int major, minor; // Compiler version - private int access_flags; // Access rights of parsed class - private int[] interfaces; // Names of implemented interfaces - private ConstantPool constant_pool; // collection of constants - private Field[] fields; // class fields, i.e., its variables - private Method[] methods; // methods defined in the class - private Attribute[] attributes; // attributes defined in the class - private boolean is_zip; // Loaded from zip file + private String filename; + private int classnameIndex; + private int superclassnameIndex; + private int major, minor; + private int accessflags; + private int[] interfaceIndices; + private ConstantPool cpool; + private Field[] fields; + private Method[] methods; + private Attribute[] attributes; private static final int BUFSIZE = 8192; - /** - * Parse class from the given stream. - * - * @param file Input stream - * @param file_name File name - */ - public ClassParser(InputStream file, String file_name) { - this.file_name = file_name; - - String clazz = file.getClass().getName(); // Not a very clean solution ... - is_zip = clazz.startsWith("java.util.zip.") || clazz.startsWith("java.util.jar."); - - if(file instanceof DataInputStream) // Is already a data stream - this.file = (DataInputStream)file; - else - this.file = new DataInputStream(new BufferedInputStream(file, BUFSIZE)); + /** Parse class from the given stream */ + public ClassParser(InputStream file, String filename) { + this.filename = filename; + if (file instanceof DataInputStream) this.file = (DataInputStream)file; + else this.file = new DataInputStream(new BufferedInputStream(file,BUFSIZE)); } - /** Parse class from given .class file. - * - * @param file_name file name - * @throws IOException - */ - public ClassParser(String file_name) throws IOException - { - is_zip = false; - this.file_name = file_name; - file = new DataInputStream(new BufferedInputStream - (new FileInputStream(file_name), BUFSIZE)); + public ClassParser(ByteArrayInputStream baos, String filename) { + this.filename = filename; + this.file = new DataInputStream(baos); } - /** Parse class from given .class file in a ZIP-archive - * - * @param file_name file name - * @throws IOException - */ - public ClassParser(String zip_file, String file_name) throws IOException - { - is_zip = true; - zip = new ZipFile(zip_file); - ZipEntry entry = zip.getEntry(file_name); - - this.file_name = file_name; - - file = new DataInputStream(new BufferedInputStream(zip.getInputStream(entry), - BUFSIZE)); + /** Parse class from given .class file */ + public ClassParser(String file_name) throws IOException { + this.filename = file_name; + file = new DataInputStream(new BufferedInputStream(new FileInputStream(file_name),BUFSIZE)); } /** @@ -143,13 +112,8 @@ public final class ClassParser { * A ClassFormatException is raised, if the file is not a valid * .class file. (This does not include verification of the byte code as it * is performed by the java interpreter). - * - * @return Class object representing the parsed class file - * @throws IOException - * @throws ClassFormatException - */ - public JavaClass parse() throws IOException, ClassFormatException - { + */ + public JavaClass parse() throws IOException, ClassFormatException { /****************** Read headers ********************************/ // Check magic tag of class file readID(); @@ -160,7 +124,7 @@ public final class ClassParser { /****************** Read constant pool and related **************/ // Read constant pool entries readConstantPool(); - + // Get class information readClassInfo(); @@ -177,162 +141,105 @@ public final class ClassParser { // Read class attributes readAttributes(); - // Check for unknown variables - //Unknown[] u = Unknown.getUnknownAttributes(); - //for(int i=0; i < u.length; i++) - // System.err.println("WARNING: " + u[i]); - - // Everything should have been read now - // if(file.available() > 0) { - // int bytes = file.available(); - // byte[] buf = new byte[bytes]; - // file.read(buf); - - // if(!(is_zip && (buf.length == 1))) { - // System.err.println("WARNING: Trailing garbage at end of " + file_name); - // System.err.println(bytes + " extra bytes: " + Utility.toHexString(buf)); - // } - // } - // Read everything of interest, so close the file file.close(); - if(zip != null) - zip.close(); // Return the information we have gathered in a new object - return new JavaClass(class_name_index, superclass_name_index, - file_name, major, minor, access_flags, - constant_pool, interfaces, fields, - methods, attributes, is_zip? JavaClass.ZIP : JavaClass.FILE); + JavaClass jc= new JavaClass(classnameIndex, superclassnameIndex, + filename, major, minor, accessflags, + cpool, interfaceIndices, fields, + methods, attributes); + return jc; } - - /** - * Read information about the attributes of the class. - * @throws IOException - * @throws ClassFormatException - */ - private final void readAttributes() throws IOException, ClassFormatException - { - int attributes_count; - - attributes_count = file.readUnsignedShort(); - attributes = new Attribute[attributes_count]; - - for(int i=0; i < attributes_count; i++) - attributes[i] = Attribute.readAttribute(file, constant_pool); + + /** Read information about the attributes of the class */ + private final void readAttributes() { + attributes = AttributeUtils.readAttributes(file,cpool); } - /** - * Read information about the class and its super class. - * @throws IOException - * @throws ClassFormatException - */ - private final void readClassInfo() throws IOException, ClassFormatException - { - access_flags = file.readUnsignedShort(); + /** Read information about the class and its super class */ + private final void readClassInfo() throws IOException { + accessflags = file.readUnsignedShort(); /* Interfaces are implicitely abstract, the flag should be set - * according to the JVM specification. - */ - if((access_flags & Constants.ACC_INTERFACE) != 0) - access_flags |= Constants.ACC_ABSTRACT; + * according to the JVM specification */ + if((accessflags & Constants.ACC_INTERFACE) != 0) + accessflags |= Constants.ACC_ABSTRACT; // don't police it like this... leave higher level verification code to check it. // if(((access_flags & Constants.ACC_ABSTRACT) != 0) && // ((access_flags & Constants.ACC_FINAL) != 0 )) // throw new ClassFormatException("Class can't be both final and abstract"); - class_name_index = file.readUnsignedShort(); - superclass_name_index = file.readUnsignedShort(); - } - /** - * Read constant pool entries. - * @throws IOException - * @throws ClassFormatException - */ - private final void readConstantPool() throws IOException, ClassFormatException - { + classnameIndex = file.readUnsignedShort(); + superclassnameIndex = file.readUnsignedShort(); + } + + /** Read constant pool entries */ + private final void readConstantPool() throws IOException { try { - constant_pool = new ConstantPool(file); + cpool = new ConstantPool(file); } catch (ClassFormatException cfe) { // add some context if we can - if (file_name!=null) { - String newmessage = "File: '"+file_name+"': "+cfe.getMessage(); + cfe.printStackTrace(); + if (filename!=null) { + String newmessage = "File: '"+filename+"': "+cfe.getMessage(); throw new ClassFormatException(newmessage); // this loses the old stack trace but I dont think that matters! } throw cfe; } } - /** - * Read information about the fields of the class, i.e., its variables. - * @throws IOException - * @throws ClassFormatException - */ - private final void readFields() throws IOException, ClassFormatException - { - int fields_count; - - fields_count = file.readUnsignedShort(); - fields = new Field[fields_count]; - - for(int i=0; i < fields_count; i++) - fields[i] = new Field(file, constant_pool); + /** Read information about the fields of the class */ + private final void readFields() throws IOException, ClassFormatException { + int fieldCount = file.readUnsignedShort(); + if (fieldCount == 0) { + fields = Field.NoFields; + } else { + fields = new Field[fieldCount]; + for(int i=0; i < fieldCount; i++) + fields[i] = new Field(file, cpool); + } } - /******************** Private utility methods **********************/ - - /** - * Check whether the header of the file is ok. - * Of course, this has to be the first action on successive file reads. - * @throws IOException - * @throws ClassFormatException - */ - private final void readID() throws IOException, ClassFormatException - { + /** Check whether the header of the file is ok. Of course, this has + * to be the first action on successive file reads */ + private final void readID() throws IOException { int magic = 0xCAFEBABE; - - if(file.readInt() != magic) - throw new ClassFormatException(file_name + " is not a Java .class file"); - } - /** - * Read information about the interfaces implemented by this class. - * @throws IOException - * @throws ClassFormatException - */ - private final void readInterfaces() throws IOException, ClassFormatException - { - int interfaces_count; - - interfaces_count = file.readUnsignedShort(); - interfaces = new int[interfaces_count]; - - for(int i=0; i < interfaces_count; i++) - interfaces[i] = file.readUnsignedShort(); + if (file.readInt() != magic) + throw new ClassFormatException(filename + " is not a Java .class file"); + } + + private static final int[] NO_INTERFACES = new int[0]; + + /** Read information about the interfaces implemented by this class */ + private final void readInterfaces() throws IOException { + int interfacesCount = file.readUnsignedShort(); + if (interfacesCount==0) { + interfaceIndices = NO_INTERFACES; + } else { + interfaceIndices = new int[interfacesCount]; + for(int i=0; i < interfacesCount; i++) + interfaceIndices[i] = file.readUnsignedShort(); + } } - /** - * Read information about the methods of the class. - * @throws IOException - * @throws ClassFormatException - */ - private final void readMethods() throws IOException, ClassFormatException - { - int methods_count; - - methods_count = file.readUnsignedShort(); - methods = new Method[methods_count]; - - for(int i=0; i < methods_count; i++) - methods[i] = new Method(file, constant_pool); + + /** Read information about the methods of the class */ + private final void readMethods() throws IOException { + int methodsCount = file.readUnsignedShort(); + if (methodsCount==0) { + methods = Method.NoMethods; + } else { + methods = new Method[methodsCount]; + for(int i=0; i < methodsCount; i++) + methods[i] = new Method(file, cpool); + } } - /** - * Read major and minor version of compiler which created the file. - * @throws IOException - * @throws ClassFormatException - */ - private final void readVersion() throws IOException, ClassFormatException - { + + /** Read major and minor version of compiler which created the file */ + private final void readVersion() throws IOException { minor = file.readUnsignedShort(); major = file.readUnsignedShort(); } + } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Visitor.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/classfile/Visitor.java rename to bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java index 525512d31..f44b178ba 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Visitor.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java @@ -67,10 +67,10 @@ import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleParameterAnnot * Implemented by wish of * Boris Bokowski. * - * @version $Id: Visitor.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ClassVisitor.java,v 1.2 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm */ -public interface Visitor { +public interface ClassVisitor { public void visitCode(Code obj); public void visitCodeException(CodeException obj); public void visitConstantClass(ConstantClass obj); diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Code.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Code.java index 235f73c1e..dc0c9c839 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Code.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Code.java @@ -69,23 +69,19 @@ import java.io.*; * is used for debugging purposes and LocalVariableTable which * contains information about the local variables. * - * @version $Id: Code.java,v 1.3 2006/09/22 10:50:17 aclement Exp $ + * @version $Id: Code.java,v 1.4 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Attribute * @see CodeException * @see LineNumberTable - * @see LocalVariableTable + * @see LocalVariableTable */ public final class Code extends Attribute { - private int max_stack; // Maximum size of stack used by this method - private int max_locals; // Number of local variables - private int code_length; // Length of code in bytes - private byte[] code; // Actual byte code - - private int exception_table_length; - private CodeException[] exception_table; // Table of handled exceptions - private int attributes_count; // Attributes of code: LineNumber - private Attribute[] attributes; // or LocalVariable + private int maxStack; // Maximum size of stack used by this method + private int maxLocals; // Number of local variables + private byte[] code; // Actual byte code + private CodeException[] exceptionTable; + private Attribute[] attributes; /** * Initialize from another object. Note that both objects use the same @@ -97,41 +93,28 @@ public final class Code extends Attribute { c.getConstantPool()); } - /** - * @param name_index Index pointing to the name Code - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - */ - Code(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException - { + + Code(int name_index, int length, DataInputStream file, ConstantPool constant_pool) throws IOException { // Initialize with some default values which will be overwritten later this(name_index, length, file.readUnsignedShort(), file.readUnsignedShort(), (byte[])null, (CodeException[])null, (Attribute[])null, constant_pool); - code_length = file.readInt(); - code = new byte[code_length]; // Read byte code + int len = file.readInt(); + code = new byte[len]; // Read byte code file.readFully(code); /* Read exception table that contains all regions where an exception * handler is active, i.e., a try { ... } catch() block. */ - exception_table_length = file.readUnsignedShort(); - exception_table = new CodeException[exception_table_length]; + len = file.readUnsignedShort(); + exceptionTable = new CodeException[len]; + for(int i=0; i < len; i++) + exceptionTable[i] = new CodeException(file); - for(int i=0; i < exception_table_length; i++) - exception_table[i] = new CodeException(file); - - /* Read all attributes, currently `LineNumberTable' and - * `LocalVariableTable' - */ - attributes_count = file.readUnsignedShort(); - attributes = new Attribute[attributes_count]; - for(int i=0; i < attributes_count; i++) - attributes[i] = Attribute.readAttribute(file, constant_pool); + // Read all attributes, eg: LineNumberTable, LocalVariableTable + attributes = AttributeUtils.readAttributes(file,constant_pool); /* Adjust length, because of setAttributes in this(), s.b. length * is incorrect, because it didn't take the internal attributes @@ -159,8 +142,8 @@ public final class Code extends Attribute { { super(Constants.ATTR_CODE, name_index, length, constant_pool); - this.max_stack = max_stack; - this.max_locals = max_locals; + this.maxStack = max_stack; + this.maxLocals = max_locals; setCode(code); setExceptionTable(exception_table); @@ -174,7 +157,7 @@ public final class Code extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitCode(this); } @@ -188,17 +171,20 @@ public final class Code extends Attribute { { super.dump(file); - file.writeShort(max_stack); - file.writeShort(max_locals); - file.writeInt(code_length); - file.write(code, 0, code_length); + file.writeShort(maxStack); + if (maxStack==3) { + int stop = 1; // fixme + } + file.writeShort(maxLocals); + file.writeInt(code.length); + file.write(code, 0, code.length); - file.writeShort(exception_table_length); - for(int i=0; i < exception_table_length; i++) - exception_table[i].dump(file); + file.writeShort(exceptionTable.length); + for(int i=0; i < exceptionTable.length; i++) + exceptionTable[i].dump(file); - file.writeShort(attributes_count); - for(int i=0; i < attributes_count; i++) + file.writeShort(attributes.length); + for(int i=0; i < attributes.length; i++) attributes[i].dump(file); } @@ -212,10 +198,8 @@ public final class Code extends Attribute { * @return LineNumberTable of Code, if it has one */ public LineNumberTable getLineNumberTable() { - for(int i=0; i < attributes_count; i++) - if(attributes[i] instanceof LineNumberTable) - return (LineNumberTable)attributes[i]; - + for (int i=0; i < attributes.length; i++) + if (attributes[i].tag==Constants.ATTR_LINE_NUMBER_TABLE) return (LineNumberTable)attributes[i]; return null; } @@ -223,10 +207,8 @@ public final class Code extends Attribute { * @return LocalVariableTable of Code, if it has one */ public LocalVariableTable getLocalVariableTable() { - for(int i=0; i < attributes_count; i++) - if(attributes[i] instanceof LocalVariableTable) - return (LocalVariableTable)attributes[i]; - + for(int i=0; i < attributes.length; i++) + if (attributes[i].tag==Constants.ATTR_LOCAL_VARIABLE_TABLE) return (LocalVariableTable)attributes[i]; return null; } @@ -239,18 +221,18 @@ public final class Code extends Attribute { * @return Table of handled exceptions. * @see CodeException */ - public final CodeException[] getExceptionTable() { return exception_table; } + public final CodeException[] getExceptionTable() { return exceptionTable; } /** * @return Number of local variables. */ - public final int getMaxLocals() { return max_locals; } + public final int getMaxLocals() { return maxLocals; } /** * @return Maximum size of stack used by this method. */ - public final int getMaxStack() { return max_stack; } + public final int getMaxStack() { return maxStack; } /** * @return the internal length of this code attribute (minus the first 6 bytes) @@ -258,9 +240,9 @@ public final class Code extends Attribute { */ private final int getInternalLength() { return 2 /*max_stack*/ + 2 /*max_locals*/ + 4 /*code length*/ - + code_length /*byte-code*/ + + (code==null?0:code.length) /*byte-code*/ + 2 /*exception-table length*/ - + 8 * exception_table_length /* exception table */ + + 8 * (exceptionTable==null?0:exceptionTable.length) /* exception table */ + 2 /* attributes count */; } @@ -270,10 +252,10 @@ public final class Code extends Attribute { */ private final int calculateLength() { int len = 0; - - for(int i=0; i < attributes_count; i++) - len += attributes[i].length + 6 /*attribute header size*/; - + if (attributes!=null) { + for(int i=0; i < attributes.length; i++) + len += attributes[i].length + 6 /*attribute header size*/; + } return len + getInternalLength(); } @@ -282,7 +264,6 @@ public final class Code extends Attribute { */ public final void setAttributes(Attribute[] attributes) { this.attributes = attributes; - attributes_count = (attributes == null)? 0 : attributes.length; length = calculateLength(); // Adjust length } @@ -291,30 +272,27 @@ public final class Code extends Attribute { */ public final void setCode(byte[] code) { this.code = code; - code_length = (code == null)? 0 : code.length; } /** * @param exception_table exception table */ public final void setExceptionTable(CodeException[] exception_table) { - this.exception_table = exception_table; - exception_table_length = (exception_table == null)? 0 : - exception_table.length; + this.exceptionTable = exception_table; } /** * @param max_locals maximum number of local variables */ public final void setMaxLocals(int max_locals) { - this.max_locals = max_locals; + this.maxLocals = max_locals; } /** * @param max_stack maximum stack size */ public final void setMaxStack(int max_stack) { - this.max_stack = max_stack; + this.maxStack = max_stack; } /** @@ -323,22 +301,22 @@ public final class Code extends Attribute { public final String toString(boolean verbose) { StringBuffer buf; - buf = new StringBuffer("Code(max_stack = " + max_stack + - ", max_locals = " + max_locals + - ", code_length = " + code_length + ")\n" + - Utility.codeToString(code, constant_pool, 0, -1, verbose)); + buf = new StringBuffer("Code(max_stack = " + maxStack + + ", max_locals = " + maxLocals + + ", code_length = " + code.length + ")\n" + + Utility.codeToString(code, constantPool, 0, -1, verbose)); - if(exception_table_length > 0) { + if(exceptionTable.length > 0) { buf.append("\nException handler(s) = \n" + "From\tTo\tHandler\tType\n"); - for(int i=0; i < exception_table_length; i++) - buf.append(exception_table[i].toString(constant_pool, verbose) + "\n"); + for(int i=0; i < exceptionTable.length; i++) + buf.append(exceptionTable[i].toString(constantPool, verbose) + "\n"); } - if(attributes_count > 0) { + if(attributes.length > 0) { buf.append("\nAttribute(s) = \n"); - for(int i=0; i < attributes_count; i++) + for(int i=0; i < attributes.length; i++) buf.append(attributes[i].toString() + "\n"); } @@ -358,14 +336,14 @@ public final class Code extends Attribute { public Attribute copy(ConstantPool constant_pool) { Code c = (Code)clone(); c.code = (byte[])code.clone(); - c.constant_pool = constant_pool; + c.constantPool = constant_pool; - c.exception_table = new CodeException[exception_table_length]; - for(int i=0; i < exception_table_length; i++) - c.exception_table[i] = exception_table[i].copy(); + c.exceptionTable = new CodeException[exceptionTable.length]; + for(int i=0; i < exceptionTable.length; i++) + c.exceptionTable[i] = exceptionTable[i].copy(); - c.attributes = new Attribute[attributes_count]; - for(int i=0; i < attributes_count; i++) + c.attributes = new Attribute[attributes.length]; + for(int i=0; i < attributes.length; i++) c.attributes[i] = attributes[i].copy(constant_pool); return c; @@ -378,17 +356,17 @@ public final class Code extends Attribute { */ public String getCodeString() { StringBuffer codeString = new StringBuffer(); - codeString.append("Code(max_stack = ").append(max_stack); - codeString.append(", max_locals = ").append(max_locals); - codeString.append(", code_length = ").append(code_length).append(")\n"); - codeString.append(Utility.codeToString(code, constant_pool, 0, -1,true)); - if (exception_table_length>0) { - codeString.append("\n").append("Exception entries = ").append(exception_table_length).append("\n"); - for (int i = 0; i < exception_table_length; i++) { - CodeException exc = exception_table[i]; + codeString.append("Code(max_stack = ").append(maxStack); + codeString.append(", max_locals = ").append(maxLocals); + codeString.append(", code_length = ").append(code.length).append(")\n"); + codeString.append(Utility.codeToString(code, constantPool, 0, -1,true)); + if (exceptionTable.length>0) { + codeString.append("\n").append("Exception entries = ").append(exceptionTable.length).append("\n"); + for (int i = 0; i < exceptionTable.length; i++) { + CodeException exc = exceptionTable[i]; int type = exc.getCatchType(); String name = "finally"; - if (type!=0) name = this.constant_pool.getConstantString(type,Constants.CONSTANT_Class); + if (type!=0) name = this.constantPool.getConstantString(type,Constants.CONSTANT_Class); codeString.append(name).append("["); codeString.append(exc.getStartPC()).append(">").append(exc.getEndPC()).append("]\n"); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/CodeException.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/CodeException.java index b450186cb..72b4d539e 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/CodeException.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/CodeException.java @@ -62,77 +62,44 @@ import java.io.*; * attribute and is used only there. It contains a range in which a * particular exception handler is active. * - * @version $Id: CodeException.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: CodeException.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Code */ -public final class CodeException - implements Cloneable, Constants, Node, Serializable -{ +public final class CodeException implements Cloneable, Constants, Node, Serializable { private int start_pc; // Range in the code the exception handler is private int end_pc; // active. start_pc is inclusive, end_pc exclusive private int handler_pc; /* Starting address of exception handler, i.e., - * an offset from start of code. - */ + * an offset from start of code. + */ private int catch_type; /* If this is zero the handler catches any * exception, otherwise it points to the * exception class which is to be caught. */ - /** - * Initialize from another object. - */ + public CodeException(CodeException c) { this(c.getStartPC(), c.getEndPC(), c.getHandlerPC(), c.getCatchType()); } - /** - * Construct object from file stream. - * @param file Input stream - * @throws IOException - */ - CodeException(DataInputStream file) throws IOException - { - this(file.readUnsignedShort(), file.readUnsignedShort(), - file.readUnsignedShort(), file.readUnsignedShort()); + CodeException(DataInputStream file) throws IOException { + start_pc = file.readUnsignedShort(); + end_pc = file.readUnsignedShort(); + handler_pc = file.readUnsignedShort(); + catch_type = file.readUnsignedShort(); } - /** - * @param start_pc Range in the code the exception handler is active, - * start_pc is inclusive while - * @param end_pc is exclusive - * @param handler_pc Starting address of exception handler, i.e., - * an offset from start of code. - * @param catch_type If zero the handler catches any - * exception, otherwise it points to the exception class which is - * to be caught. - */ - public CodeException(int start_pc, int end_pc, int handler_pc, - int catch_type) - { + public CodeException(int start_pc, int end_pc, int handler_pc, int catch_type) { this.start_pc = start_pc; this.end_pc = end_pc; this.handler_pc = handler_pc; this.catch_type = catch_type; } - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitCodeException(this); } - /** - * Dump code exception to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump(DataOutputStream file) throws IOException - { + + public final void dump(DataOutputStream file) throws IOException { file.writeShort(start_pc); file.writeShort(end_pc); file.writeShort(handler_pc); diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Constant.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Constant.java index 96ea2c603..32ee205ca 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Constant.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Constant.java @@ -62,7 +62,7 @@ import java.io.*; * in the constant pool of a class file. The classes keep closely to * the JVM specification. * - * @version $Id: Constant.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: Constant.java,v 1.3 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm */ public abstract class Constant implements Cloneable, Node, Serializable { @@ -85,7 +85,7 @@ public abstract class Constant implements Cloneable, Node, Serializable { * * @param v Visitor object */ - public abstract void accept(Visitor v); + public abstract void accept(ClassVisitor v); public abstract void dump(DataOutputStream file) throws IOException; @@ -117,32 +117,22 @@ public abstract class Constant implements Cloneable, Node, Serializable { return super.clone(); } - /** - * Read one constant from the given file, the type depends on a tag byte. - * - * @param file Input stream - * @return Constant object - */ - static final Constant readConstant(DataInputStream file) - throws IOException, ClassFormatException - { - byte b = file.readByte(); // Read tag byte - + static final Constant readConstant(DataInputStream file) throws IOException, ClassFormatException { + byte b = file.readByte(); switch(b) { - case Constants.CONSTANT_Class: return new ConstantClass(file); - case Constants.CONSTANT_Fieldref: return new ConstantFieldref(file); - case Constants.CONSTANT_Methodref: return new ConstantMethodref(file); - case Constants.CONSTANT_InterfaceMethodref: return new - ConstantInterfaceMethodref(file); - case Constants.CONSTANT_String: return new ConstantString(file); - case Constants.CONSTANT_Integer: return new ConstantInteger(file); - case Constants.CONSTANT_Float: return new ConstantFloat(file); - case Constants.CONSTANT_Long: return new ConstantLong(file); - case Constants.CONSTANT_Double: return new ConstantDouble(file); - case Constants.CONSTANT_NameAndType: return new ConstantNameAndType(file); - case Constants.CONSTANT_Utf8: return new ConstantUtf8(file); - default: - throw new ClassFormatException("Invalid byte tag in constant pool: " + b); + case Constants.CONSTANT_Class: return new ConstantClass(file); + case Constants.CONSTANT_NameAndType: return new ConstantNameAndType(file); + case Constants.CONSTANT_Utf8: return new ConstantUtf8(file); + case Constants.CONSTANT_Fieldref: return new ConstantFieldref(file); + case Constants.CONSTANT_Methodref: return new ConstantMethodref(file); + case Constants.CONSTANT_InterfaceMethodref: return new ConstantInterfaceMethodref(file); + case Constants.CONSTANT_String: return new ConstantString(file); + case Constants.CONSTANT_Integer: return new ConstantInteger(file); + case Constants.CONSTANT_Float: return new ConstantFloat(file); + case Constants.CONSTANT_Long: return new ConstantLong(file); + case Constants.CONSTANT_Double: return new ConstantDouble(file); + default: + throw new ClassFormatException("Invalid byte tag in constant pool: " + b); } } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantCP.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantCP.java index 7ee7e32dc..4cc882e3d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantCP.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantCP.java @@ -59,7 +59,7 @@ import org.aspectj.apache.bcel.Constants; /** * Abstract super class for Fieldref and Methodref constants. * - * @version $Id: ConstantCP.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantCP.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see ConstantFieldref * @see ConstantMethodref diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantClass.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantClass.java index bd642e016..9c3b7d69c 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantClass.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantClass.java @@ -62,7 +62,7 @@ import java.io.*; * Constant class * and represents a reference to a (external) class. * - * @version $Id: ConstantClass.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantClass.java,v 1.3 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm * @see Constant */ @@ -84,7 +84,9 @@ public final class ConstantClass extends Constant implements ConstantObject { */ ConstantClass(DataInputStream file) throws IOException { - this(file.readUnsignedShort()); + super(Constants.CONSTANT_Class); + this.name_index = file.readUnsignedShort(); +// this(file.readUnsignedShort()); } /** @@ -103,7 +105,7 @@ public final class ConstantClass extends Constant implements ConstantObject { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantClass(this); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantDouble.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantDouble.java index ae7c63130..7c9c95732 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantDouble.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantDouble.java @@ -62,7 +62,7 @@ import java.io.*; * Constant class * and represents a reference to a Double object. * - * @version $Id: ConstantDouble.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantDouble.java,v 1.3 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm * @see Constant */ @@ -102,7 +102,7 @@ public final class ConstantDouble extends Constant implements ConstantObject { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantDouble(this); } /** diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantFieldref.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantFieldref.java index 42cc8886f..ee248ea30 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantFieldref.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantFieldref.java @@ -60,7 +60,7 @@ import java.io.*; /** * This class represents a constant pool reference to a field. * - * @version $Id: ConstantFieldref.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantFieldref.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm */ public final class ConstantFieldref extends ConstantCP { @@ -98,7 +98,7 @@ public final class ConstantFieldref extends ConstantCP { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantFieldref(this); } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantFloat.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantFloat.java index 3e97c4dec..22f8ab910 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantFloat.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantFloat.java @@ -62,7 +62,7 @@ import java.io.*; * Constant class * and represents a reference to a float object. * - * @version $Id: ConstantFloat.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantFloat.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Constant */ @@ -101,7 +101,7 @@ public final class ConstantFloat extends Constant implements ConstantObject { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantFloat(this); } /** diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantInteger.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantInteger.java index ab6c44f72..3a35d4334 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantInteger.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantInteger.java @@ -64,7 +64,7 @@ import java.io.*; * Constant class * and represents a reference to an int object. * - * @version $Id: ConstantInteger.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantInteger.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Constant */ @@ -105,7 +105,7 @@ public final class ConstantInteger extends Constant implements ConstantObject { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantInteger(this); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantInterfaceMethodref.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantInterfaceMethodref.java index c072a0e24..1598ce24f 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantInterfaceMethodref.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantInterfaceMethodref.java @@ -60,7 +60,7 @@ import java.io.*; /** * This class represents a constant pool reference to an interface method. * - * @version $Id: ConstantInterfaceMethodref.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantInterfaceMethodref.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm */ public final class ConstantInterfaceMethodref extends ConstantCP { @@ -98,7 +98,7 @@ public final class ConstantInterfaceMethodref extends ConstantCP { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantInterfaceMethodref(this); } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantLong.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantLong.java index 4080e700f..a850d248c 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantLong.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantLong.java @@ -62,7 +62,7 @@ import java.io.*; * Constant class * and represents a reference to a long object. * - * @version $Id: ConstantLong.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantLong.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Constant */ @@ -100,7 +100,7 @@ public final class ConstantLong extends Constant implements ConstantObject { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantLong(this); } /** diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantMethodref.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantMethodref.java index c7a1ec61d..bd22ee048 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantMethodref.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantMethodref.java @@ -60,7 +60,7 @@ import java.io.*; /** * This class represents a constant pool reference to a method. * - * @version $Id: ConstantMethodref.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantMethodref.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm */ public final class ConstantMethodref extends ConstantCP { @@ -98,7 +98,7 @@ public final class ConstantMethodref extends ConstantCP { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantMethodref(this); } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantNameAndType.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantNameAndType.java index f6fb51239..21a601534 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantNameAndType.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantNameAndType.java @@ -63,7 +63,7 @@ import java.io.*; * and represents a reference to the name and signature * of a field or method. * - * @version $Id: ConstantNameAndType.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantNameAndType.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Constant */ @@ -86,7 +86,7 @@ public final class ConstantNameAndType extends Constant { */ ConstantNameAndType(DataInputStream file) throws IOException { - this((int)file.readUnsignedShort(), (int)file.readUnsignedShort()); + this(file.readUnsignedShort(), file.readUnsignedShort()); } /** @@ -108,7 +108,7 @@ public final class ConstantNameAndType extends Constant { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantNameAndType(this); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantObject.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantObject.java index 6052ec152..1468b4ae8 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantObject.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantObject.java @@ -58,7 +58,7 @@ package org.aspectj.apache.bcel.classfile; * This interface denotes those constants that have a "natural" value, * such as ConstantLong, ConstantString, etc.. * - * @version $Id: ConstantObject.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantObject.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Constant */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantPool.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantPool.java index 147b66fd6..7c31b213d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantPool.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantPool.java @@ -1,372 +1,612 @@ package org.aspectj.apache.bcel.classfile; -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - import org.aspectj.apache.bcel.Constants; +import org.aspectj.apache.bcel.generic.*; + import java.io.*; /** * This class represents the constant pool, i.e., a table of constants, of * a parsed classfile. It may contain null references, due to the JVM * specification that skips an entry after an 8-byte constant (double, - * long) entry. Those interested in generating constant pools - * programatically should see - * ConstantPoolGen. - - * @version $Id: ConstantPool.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ - * @see Constant - * @see org.aspectj.apache.bcel.generic.ConstantPoolGen - * @author M. Dahm + * long) entry. */ -public class ConstantPool implements Cloneable, Node, Serializable { - private int constant_pool_count; - private Constant[] constant_pool; - - /** - * @param constant_pool Array of constants - */ - public ConstantPool(Constant[] constant_pool) - { - setConstantPool(constant_pool); - } - - /** - * Read constants from given file stream. - * - * @param file Input stream - * @throws IOException - * @throws ClassFormatException - */ - ConstantPool(DataInputStream file) throws IOException, ClassFormatException - { - byte tag; - - constant_pool_count = file.readUnsignedShort(); - constant_pool = new Constant[constant_pool_count]; - - /* constant_pool[0] is unused by the compiler and may be used freely - * by the implementation. +public class ConstantPool implements Node { + private Constant[] pool; + private int poolSize; // number of entries in the pool (could be < pool.length as the array is resized in 'chunks') + + public int getSize() { return poolSize; } + + public ConstantPool() { + pool = new Constant[10]; + poolSize=0; + } + + public ConstantPool(Constant[] constants) { + pool = constants; + poolSize = (constants==null?0:constants.length); + } + + ConstantPool(DataInputStream file) throws IOException { + byte tag; + poolSize = file.readUnsignedShort(); + pool = new Constant[poolSize]; + // pool[0] is unused by the compiler and may be used freely by the implementation + for (int i=1; i= pool.length || index < 0) + throw new ClassFormatException("Invalid constant pool reference: " + + index + ". Constant pool size is: " + pool.length); + return pool[index]; + } + + /** + * @return deep copy of this constant pool + */ + public ConstantPool copy() { + ConstantPool c = null; + Constant[] newConstants = new Constant[poolSize]; // use the correct size + for (int i=1;i= pool.length) { + Constant[] cs = pool; + pool = new Constant[cs.length+8]; + System.arraycopy(cs, 0, pool, 0, cs.length); + } + if (poolSize==0) poolSize = 1; // someone about to do something in here! + } + + public int addFieldref(String class_name, String field_name, String signature) { + int ret = lookupFieldref(class_name, field_name, signature); + int class_index, name_and_type_index; + + if (ret != -1) return ret; + + adjustSize(); + + class_index = addClass(class_name); + name_and_type_index = addNameAndType(field_name, signature); + ret = poolSize; + pool[poolSize++] = new ConstantFieldref(class_index, name_and_type_index); + + return ret; + } + + public int lookupFieldref(String searchClassname, String searchFieldname, String searchSignature) { + searchClassname = searchClassname.replace('.','/'); + for (int i=1;i= constant_pool.length || index < 0) - throw new ClassFormatException("Invalid constant pool reference: " + - index + ". Constant pool size is: " + - constant_pool.length); - return constant_pool[index]; + + public int addFloat(float f) { + int ret= lookupFloat(f); + if (ret != -1) return ret; + adjustSize(); + ret = poolSize; + pool[poolSize++] = new ConstantFloat(f); + return ret; + } + + + public int lookupFloat(float f) { + int bits = Float.floatToIntBits(f); + for (int i=1;iConstant class * and represents a reference to a String object. * - * @version $Id: ConstantString.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantString.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Constant */ @@ -83,7 +83,7 @@ public final class ConstantString extends Constant implements ConstantObject { */ ConstantString(DataInputStream file) throws IOException { - this((int)file.readUnsignedShort()); + this(file.readUnsignedShort()); } /** * @param string_index Index of Constant_Utf8 in constant pool @@ -100,7 +100,7 @@ public final class ConstantString extends Constant implements ConstantObject { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantString(this); } /** diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantUtf8.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantUtf8.java index fa7b1b2de..603199efc 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantUtf8.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantUtf8.java @@ -62,7 +62,7 @@ import java.io.*; * Constant class * and represents a reference to a Utf8 encoded string. * - * @version $Id: ConstantUtf8.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantUtf8.java,v 1.3 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm * @see Constant */ @@ -85,20 +85,15 @@ public final class ConstantUtf8 extends Constant { ConstantUtf8(DataInputStream file) throws IOException { super(Constants.CONSTANT_Utf8); - - bytes = file.readUTF(); + bytes=file.readUTF(); } - /** - * @param bytes Data - */ public ConstantUtf8(String bytes) { super(Constants.CONSTANT_Utf8); if(bytes == null) throw new IllegalArgumentException("bytes must not be null!"); - this.bytes = bytes; } @@ -109,7 +104,7 @@ public final class ConstantUtf8 extends Constant { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantUtf8(this); } @@ -128,7 +123,9 @@ public final class ConstantUtf8 extends Constant { /** * @return Data converted to string. */ - public final String getBytes() { return bytes; } + public final String getBytes() { + return bytes; + } /** * @param bytes. diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantValue.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantValue.java index 386804824..c6a979318 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantValue.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantValue.java @@ -62,7 +62,7 @@ import java.io.*; * value, i.e., a default value for initializing a class field. * This class is instantiated by the Attribute.readAttribute() method. * - * @version $Id: ConstantValue.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ConstantValue.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Attribute */ @@ -89,7 +89,7 @@ public final class ConstantValue extends Attribute { ConstantValue(int name_index, int length, DataInputStream file, ConstantPool constant_pool) throws IOException { - this(name_index, length, (int)file.readUnsignedShort(), constant_pool); + this(name_index, length, file.readUnsignedShort(), constant_pool); } /** @@ -113,7 +113,7 @@ public final class ConstantValue extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitConstantValue(this); } /** @@ -143,7 +143,7 @@ public final class ConstantValue extends Attribute { * @return String representation of constant value. */ public final String toString() { - Constant c = constant_pool.getConstant(constantvalue_index); + Constant c = constantPool.getConstant(constantvalue_index); String buf; int i; @@ -156,7 +156,7 @@ public final class ConstantValue extends Attribute { case Constants.CONSTANT_Integer: buf = "" + ((ConstantInteger)c).getBytes(); break; case Constants.CONSTANT_String: i = ((ConstantString)c).getStringIndex(); - c = constant_pool.getConstant(i, Constants.CONSTANT_Utf8); + c = constantPool.getConstant(i, Constants.CONSTANT_Utf8); buf = "\"" + Utility.convertString(((ConstantUtf8)c).getBytes()) + "\""; break; @@ -172,7 +172,7 @@ public final class ConstantValue extends Attribute { */ public Attribute copy(ConstantPool constant_pool) { ConstantValue c = (ConstantValue)clone(); - c.constant_pool = constant_pool; + c.constantPool = constant_pool; return c; } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Deprecated.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Deprecated.java index 2c7c9ab50..8df953096 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Deprecated.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Deprecated.java @@ -62,7 +62,7 @@ import java.io.*; * deprecated method. * It is instantiated from the Attribute.readAttribute() method. * - * @version $Id: Deprecated.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: Deprecated.java,v 1.3 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm * @see Attribute */ @@ -117,7 +117,7 @@ public final class Deprecated extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitDeprecated(this); } @@ -163,7 +163,7 @@ public final class Deprecated extends Attribute { if(bytes != null) c.bytes = (byte[])bytes.clone(); - c.constant_pool = constant_pool; + c.constantPool = constant_pool; return c; } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/EnclosingMethod.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/EnclosingMethod.java index 4c92bca3b..6b01d23e5 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/EnclosingMethod.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/EnclosingMethod.java @@ -49,7 +49,7 @@ public class EnclosingMethod extends Attribute { methodIndex = methodIdx; } - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitEnclosingMethod(this); } @@ -68,14 +68,14 @@ public class EnclosingMethod extends Attribute { public final ConstantClass getEnclosingClass() { ConstantClass c = - (ConstantClass)constant_pool.getConstant(classIndex,Constants.CONSTANT_Class); + (ConstantClass)constantPool.getConstant(classIndex,Constants.CONSTANT_Class); return c; } public final ConstantNameAndType getEnclosingMethod() { if (methodIndex == 0) return null; ConstantNameAndType nat = - (ConstantNameAndType)constant_pool.getConstant(methodIndex,Constants.CONSTANT_NameAndType); + (ConstantNameAndType)constantPool.getConstant(methodIndex,Constants.CONSTANT_NameAndType); return nat; } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ExceptionTable.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ExceptionTable.java index 74577682a..3219cbae7 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ExceptionTable.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ExceptionTable.java @@ -65,7 +65,7 @@ import java.io.*; * attribute using the name Exceptions (which is inconsistent * with the other classes). * - * @version $Id: ExceptionTable.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: ExceptionTable.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Code */ @@ -123,7 +123,7 @@ public final class ExceptionTable extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitExceptionTable(this); } @@ -156,7 +156,7 @@ public final class ExceptionTable extends Attribute { public final String[] getExceptionNames() { String[] names = new String[number_of_exceptions]; for(int i=0; i < number_of_exceptions; i++) - names[i] = constant_pool.getConstantString(exception_index_table[i], + names[i] = constantPool.getConstantString(exception_index_table[i], Constants.CONSTANT_Class). replace('/', '.'); return names; @@ -179,7 +179,7 @@ public final class ExceptionTable extends Attribute { String str; for(int i=0; i < number_of_exceptions; i++) { - str = constant_pool.getConstantString(exception_index_table[i], + str = constantPool.getConstantString(exception_index_table[i], Constants.CONSTANT_Class); buf.append(Utility.compactClassName(str, false)); @@ -196,7 +196,7 @@ public final class ExceptionTable extends Attribute { public Attribute copy(ConstantPool constant_pool) { ExceptionTable c = (ExceptionTable)clone(); c.exception_index_table = (int[])exception_index_table.clone(); - c.constant_pool = constant_pool; + c.constantPool = constant_pool; return c; } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Field.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Field.java index 77b267fed..a2dfed81d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Field.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Field.java @@ -53,18 +53,27 @@ package org.aspectj.apache.bcel.classfile; * information on the Apache Software Foundation, please see * . */ -import org.aspectj.apache.bcel.Constants; +import java.io.DataInputStream; +import java.io.IOException; +import java.util.List; + import org.aspectj.apache.bcel.generic.Type; -import java.io.*; /** * This class represents the field info structure, i.e., the representation * for a variable in the class. See JVM specification for details. * - * @version $Id: Field.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: Field.java,v 1.3 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm */ public final class Field extends FieldOrMethod { + + public static final Field[] NoFields = new Field[0]; + + private Type fieldType = null; // lazily initialized + + private Field() {} + /** * Initialize from another object. Note that both objects use the same * references (shallow copy). Use clone() for a physical copy. @@ -73,37 +82,15 @@ public final class Field extends FieldOrMethod { super(c); } - /** - * Construct object from file stream. - * @param file Input stream - */ - Field(DataInputStream file, ConstantPool constant_pool) - throws IOException, ClassFormatException - { + Field(DataInputStream file, ConstantPool constant_pool) throws IOException { super(file, constant_pool); } - /** - * @param access_flags Access rights of field - * @param name_index Points to field name in constant pool - * @param signature_index Points to encoded signature - * @param attributes Collection of attributes - * @param constant_pool Array of constants - */ - public Field(int access_flags, int name_index, int signature_index, - Attribute[] attributes, ConstantPool constant_pool) - { - super(access_flags, name_index, signature_index, attributes, constant_pool); + public Field(int accessflags, int nameIndex, int signatureIndex,Attribute[] attributes, ConstantPool constant_pool) { + super(accessflags, nameIndex, signatureIndex, attributes, constant_pool); } - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitField(this); } @@ -111,55 +98,47 @@ public final class Field extends FieldOrMethod { * @return constant value associated with this field (may be null) */ public final ConstantValue getConstantValue() { - for(int i=0; i < attributes_count; i++) - if(attributes[i].getTag() == Constants.ATTR_CONSTANT_VALUE) - return (ConstantValue)attributes[i]; - - return null; + return AttributeUtils.getConstantValueAttribute(attributes); } /** - * Return string representation close to declaration format, - * `public static final short MAX = 100', e.g.. - * - * @return String representation of field, including the signature. + * Return string representation close to declaration format, eg: + * 'public static final short MAX = 100' */ public final String toString() { String name, signature, access; // Short cuts to constant pool // Get names from constant pool - access = Utility.accessToString(access_flags); + access = Utility.accessToString(modifiers); access = access.equals("")? "" : (access + " "); signature = Utility.signatureToString(getSignature()); name = getName(); - StringBuffer buf = new StringBuffer(access + signature + " " + name); + StringBuffer buf = new StringBuffer(access); + buf.append(signature).append(" ").append(name); ConstantValue cv = getConstantValue(); - if(cv != null) - buf.append(" = " + cv); + if (cv != null) buf.append(" = ").append(cv); - for(int i=0; i < attributes_count; i++) { + // append all attributes that are *not* "ConstantValue" + for(int i=0; i < attributes.length; i++) { Attribute a = attributes[i]; - - if(!(a instanceof ConstantValue)) - buf.append(" [" + a.toString() + "]"); + if(!(a instanceof ConstantValue)) buf.append(" [").append(a.toString()).append("]"); } return buf.toString(); } - /** - * @return deep copy of this field - */ + /** deep copy of this field */ public final Field copy(ConstantPool constant_pool) { return (Field)copy_(constant_pool); } - /** - * @return type of field - */ + /** return the type of the field */ public Type getType() { - return Type.getReturnType(getSignature()); + if (fieldType==null) { + fieldType = Type.getReturnType(getSignature()); + } + return fieldType; } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/FieldOrMethod.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/FieldOrMethod.java index 1222ef715..48b9fc2d5 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/FieldOrMethod.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/FieldOrMethod.java @@ -54,7 +54,7 @@ package org.aspectj.apache.bcel.classfile; * . */ import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; import org.aspectj.apache.bcel.classfile.annotation.RuntimeAnnotations; import java.io.*; @@ -64,94 +64,49 @@ import java.util.List; /** * Abstract super class for fields and methods. * - * @version $Id: FieldOrMethod.java,v 1.5 2005/06/26 20:27:23 acolyer Exp $ + * @version $Id: FieldOrMethod.java,v 1.6 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm */ -public abstract class FieldOrMethod extends AccessFlags implements Cloneable, Node { - protected int name_index; // Points to field name in constant pool - protected int signature_index; // Points to encoded signature - protected int attributes_count;// No. of attributes - protected Attribute[] attributes; // Collection of attributes - private Annotation[] annotations; // annotations defined on the field or method - protected ConstantPool constant_pool; - - private String signatureAttributeString = null; +public abstract class FieldOrMethod extends Modifiers implements Cloneable, Node { + protected int nameIndex; + protected int signatureIndex; + protected Attribute[] attributes; + protected int attributes_count;// No. of attributes + + protected ConstantPool cpool; + private String name; // lazily initialized + private String signature; // lazily initialized + private AnnotationGen[] annotations; // lazily initialized + private String signatureAttributeString = null; private boolean searchedForSignatureAttribute = false; - - // Annotations are collected from certain attributes, don't do it more than necessary! - private boolean annotationsOutOfDate = true; - - FieldOrMethod() {} + + + protected FieldOrMethod() {} /** * Initialize from another object. Note that both objects use the same * references (shallow copy). Use clone() for a physical copy. */ protected FieldOrMethod(FieldOrMethod c) { - this(c.getAccessFlags(), c.getNameIndex(), c.getSignatureIndex(), - c.getAttributes(), c.getConstantPool()); + this(c.getModifiers(), c.getNameIndex(), c.getSignatureIndex(),c.getAttributes(), c.getConstantPool()); } - /** - * Construct object from file stream. - * @param file Input stream - * @throws IOException - * @throws ClassFormatException - */ - protected FieldOrMethod(DataInputStream file, ConstantPool constant_pool) - throws IOException, ClassFormatException - { - this(file.readUnsignedShort(), file.readUnsignedShort(), - file.readUnsignedShort(), null, constant_pool); - - attributes_count = file.readUnsignedShort(); - attributes = new Attribute[attributes_count]; - for(int i=0; i < attributes_count; i++) - attributes[i] = Attribute.readAttribute(file, constant_pool); - } - - /** - * @param access_flags Access rights of method - * @param name_index Points to field name in constant pool - * @param signature_index Points to encoded signature - * @param attributes Collection of attributes - * @param constant_pool Array of constants - */ - protected FieldOrMethod(int access_flags, int name_index, int signature_index, - Attribute[] attributes, ConstantPool constant_pool) - { - this.access_flags = access_flags; - this.name_index = name_index; - this.signature_index = signature_index; - this.constant_pool = constant_pool; - - setAttributes(attributes); + protected FieldOrMethod(DataInputStream file, ConstantPool cpool) throws IOException { + this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), null, cpool); + attributes = AttributeUtils.readAttributes(file,cpool); } - /** - * Dump object to file stream on binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump(DataOutputStream file) throws IOException - { - file.writeShort(access_flags); - file.writeShort(name_index); - file.writeShort(signature_index); - file.writeShort(attributes_count); - - for(int i=0; i < attributes_count; i++) - attributes[i].dump(file); + protected FieldOrMethod(int accessFlags, int nameIndex, int signatureIndex, Attribute[] attributes, ConstantPool cpool) { + this.modifiers = accessFlags; + this.nameIndex = nameIndex; + this.signatureIndex = signatureIndex; + this.cpool = cpool; + this.attributes = attributes; } - /** - * @return Collection of object attributes. - */ - public final Attribute[] getAttributes() { return attributes; } - - /** + + /** * @param attributes Collection of object attributes. */ public void setAttributes(Attribute[] attributes) { @@ -159,60 +114,34 @@ public abstract class FieldOrMethod extends AccessFlags implements Cloneable, No attributes_count = (attributes == null)? 0 : attributes.length; } - /** - * @return Constant pool used by this object. - */ - public final ConstantPool getConstantPool() { return constant_pool; } - - /** - * @param constant_pool Constant pool to be used for this object. - */ - public final void setConstantPool(ConstantPool constant_pool) { - this.constant_pool = constant_pool; - } - - /** - * @return Index in constant pool of object's name. - */ - public final int getNameIndex() { return name_index; } - - /** - * @param name_index Index in constant pool of object's name. - */ - public final void setNameIndex(int name_index) { - this.name_index = name_index; + + + public final void dump(DataOutputStream file) throws IOException { + file.writeShort(modifiers); + file.writeShort(nameIndex); + file.writeShort(signatureIndex); + AttributeUtils.writeAttributes(attributes,file); } - /** - * @return Index in constant pool of field signature. - */ - public final int getSignatureIndex() { return signature_index; } - - /** - * @param signature_index Index in constant pool of field signature. - */ - public final void setSignatureIndex(int signature_index) { - this.signature_index = signature_index; - } + public final Attribute[] getAttributes() { return attributes; } + public final ConstantPool getConstantPool() { return cpool; } + public final int getNameIndex() { return nameIndex; } + public final int getSignatureIndex() { return signatureIndex; } - /** - * @return Name of object, i.e., method name or field name - */ public final String getName() { - ConstantUtf8 c; - c = (ConstantUtf8)constant_pool.getConstant(name_index, - Constants.CONSTANT_Utf8); - return c.getBytes(); + if (name==null) { + ConstantUtf8 c = (ConstantUtf8)cpool.getConstant(nameIndex,Constants.CONSTANT_Utf8); + name = c.getBytes(); + } + return name; } - /** - * @return String representation of object's type signature (java style) - */ public final String getSignature() { - ConstantUtf8 c; - c = (ConstantUtf8)constant_pool.getConstant(signature_index, - Constants.CONSTANT_Utf8); - return c.getBytes(); + if (signature==null) { + ConstantUtf8 c = (ConstantUtf8)cpool.getConstant(signatureIndex,Constants.CONSTANT_Utf8); + signature = c.getBytes(); + } + return signature; } /** @@ -235,53 +164,34 @@ public abstract class FieldOrMethod extends AccessFlags implements Cloneable, No c = (FieldOrMethod)clone(); } catch(CloneNotSupportedException e) {} - c.constant_pool = constant_pool; - c.attributes = new Attribute[attributes_count]; - - for(int i=0; i < attributes_count; i++) - c.attributes[i] = attributes[i].copy(constant_pool); - + c.cpool = constant_pool; + c.attributes = AttributeUtils.copy(attributes,constant_pool); return c; } - - /** - * Ensure we have unpacked any attributes that contain annotations. - * We don't remove these annotation attributes from the attributes list, they - * remain there. - */ - private void ensureAnnotationsUpToDate() { - if (annotationsOutOfDate) { + public AnnotationGen[] getAnnotations() { + // Ensure we have unpacked any attributes that contain annotations. + // We don't remove these annotation attributes from the attributes list, they + // remain there. + if (annotations==null) { // Find attributes that contain annotation data - Attribute[] attrs = getAttributes(); List accumulatedAnnotations = new ArrayList(); - for (int i = 0; i < attrs.length; i++) { - Attribute attribute = attrs[i]; + for (int i = 0; i < attributes.length; i++) { + Attribute attribute = attributes[i]; if (attribute instanceof RuntimeAnnotations) { RuntimeAnnotations runtimeAnnotations = (RuntimeAnnotations)attribute; accumulatedAnnotations.addAll(runtimeAnnotations.getAnnotations()); } } - annotations = (Annotation[])accumulatedAnnotations.toArray(new Annotation[]{}); - annotationsOutOfDate = false; + if (accumulatedAnnotations.size()==0) { + annotations = AnnotationGen.NO_ANNOTATIONS; + } else { + annotations = (AnnotationGen[])accumulatedAnnotations.toArray(new AnnotationGen[]{}); + } } - } - - public Annotation[] getAnnotations() { - ensureAnnotationsUpToDate(); return annotations; } - public void addAnnotation(Annotation a) { - ensureAnnotationsUpToDate(); - int len = annotations.length; - Annotation[] newAnnotations = new Annotation[len+1]; - System.arraycopy(annotations, 0, newAnnotations, 0, len); - newAnnotations[len] = a; - annotations = newAnnotations; - } - - /** * Hunts for a signature attribute on the member and returns its contents. So where the 'regular' signature * may be (Ljava/util/Vector;)V the signature attribute may in fact say 'Ljava/lang/Vector;' @@ -289,13 +199,8 @@ public abstract class FieldOrMethod extends AccessFlags implements Cloneable, No */ public final String getGenericSignature() { if (!searchedForSignatureAttribute) { - boolean found=false; - for(int i=0; !found && i < attributes_count; i++) { - if(attributes[i] instanceof Signature) { - signatureAttributeString = ((Signature)attributes[i]).getSignature(); - found=true; - } - } + Signature sig = AttributeUtils.getSignatureAttribute(attributes); + signatureAttributeString = (sig==null?null:sig.getSignature()); searchedForSignatureAttribute=true; } return signatureAttributeString; diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/InnerClass.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/InnerClass.java index cb57f71af..8ccbeb93a 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/InnerClass.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/InnerClass.java @@ -62,7 +62,7 @@ import java.io.*; * indices of the inner and outer classes, the name and the attributes * of the inner class. * - * @version $Id: InnerClass.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: InnerClass.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see InnerClasses */ @@ -113,7 +113,7 @@ public final class InnerClass implements Cloneable, Node { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitInnerClass(this); } /** diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/InnerClasses.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/InnerClasses.java index d51a9405c..7bc5b6e1c 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/InnerClasses.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/InnerClasses.java @@ -63,7 +63,7 @@ import java.io.*; * to the source file of this class. * It is instantiated from the Attribute.readAttribute() method. * - * @version $Id: InnerClasses.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: InnerClasses.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Attribute */ @@ -122,7 +122,7 @@ public final class InnerClasses extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitInnerClasses(this); } /** @@ -160,7 +160,7 @@ public final class InnerClasses extends Attribute { StringBuffer buf = new StringBuffer(); for(int i=0; i < number_of_classes; i++) - buf.append(inner_classes[i].toString(constant_pool) + "\n"); + buf.append(inner_classes[i].toString(constantPool) + "\n"); return buf.toString(); } @@ -175,7 +175,7 @@ public final class InnerClasses extends Attribute { for(int i=0; i < number_of_classes; i++) c.inner_classes[i] = inner_classes[i].copy(); - c.constant_pool = constant_pool; + c.constantPool = constant_pool; return c; } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/JavaClass.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/JavaClass.java index e019947f5..8083441f6 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/JavaClass.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/JavaClass.java @@ -58,7 +58,7 @@ import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.util.SyntheticRepository; import org.aspectj.apache.bcel.util.ClassVector; import org.aspectj.apache.bcel.util.ClassQueue; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; import org.aspectj.apache.bcel.classfile.annotation.RuntimeAnnotations; import org.aspectj.apache.bcel.generic.Type; @@ -77,14 +77,14 @@ import java.util.StringTokenizer; * class file. Those interested in programatically generating classes * should see the ClassGen class. - * @version $Id: JavaClass.java,v 1.9 2005/12/02 06:56:14 acolyer Exp $ + * @version $Id: JavaClass.java,v 1.10 2008/05/28 23:53:02 aclement Exp $ * @see org.aspectj.apache.bcel.generic.ClassGen * @author M. Dahm */ -public class JavaClass extends AccessFlags implements Cloneable, Node { +public class JavaClass extends Modifiers implements Cloneable, Node { private String file_name; private String package_name; - private String source_file_name = ""; + private String source_file_name; private int class_name_index; private int superclass_name_index; private String class_name; @@ -96,8 +96,7 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { private Field[] fields; // Fields, i.e., variables of class private Method[] methods; // methods defined in the class private Attribute[] attributes; // attributes defined in the class - private Annotation[] annotations; // annotations defined on the class - private byte source = HEAP; // Generated in memory + private AnnotationGen[] annotations; // annotations defined on the class private boolean isGeneric = false; private boolean isAnonymous = false; private boolean isNested = false; @@ -154,39 +153,32 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { int[] interfaces, Field[] fields, Method[] methods, - Attribute[] attributes, - byte source) + Attribute[] attributes) { if(interfaces == null) // Allowed for backward compatibility interfaces = new int[0]; - if(attributes == null) - this.attributes = new Attribute[0]; + if (attributes == null) this.attributes = Attribute.NoAttributes; if(fields == null) - fields = new Field[0]; + fields = new Field[0]; // TODO create a constant for no fields if(methods == null) - methods = new Method[0]; + methods = new Method[0]; // TODO create a constant for no methods this.class_name_index = class_name_index; this.superclass_name_index = superclass_name_index; this.file_name = file_name; this.major = major; this.minor = minor; - this.access_flags = access_flags; + this.modifiers = access_flags; this.constant_pool = constant_pool; this.interfaces = interfaces; this.fields = fields; this.methods = methods; this.attributes = attributes; annotationsOutOfDate = true; - this.source = source; // Get source file name if available - for(int i=0; i < attributes.length; i++) { - if(attributes[i] instanceof SourceFile) { - source_file_name = ((SourceFile)attributes[i]).getSourceFileName(); - break; - } - } + SourceFile sfAttribute = AttributeUtils.getSourceFileAttribute(attributes); + source_file_name = (sfAttribute==null?"":sfAttribute.getSourceFileName()); /* According to the specification the following entries must be of type * `ConstantClass' but we check that anyway via the @@ -217,36 +209,6 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { } } - /** - * Constructor gets all contents as arguments. - * - * @param class_name_index Class name - * @param superclass_name_index Superclass name - * @param file_name File name - * @param major Major compiler version - * @param minor Minor compiler version - * @param access_flags Access rights defined by bit flags - * @param constant_pool Array of constants - * @param interfaces Implemented interfaces - * @param fields Class fields - * @param methods Class methods - * @param attributes Class attributes - */ - public JavaClass(int class_name_index, - int superclass_name_index, - String file_name, - int major, - int minor, - int access_flags, - ConstantPool constant_pool, - int[] interfaces, - Field[] fields, - Method[] methods, - Attribute[] attributes) { - this(class_name_index, superclass_name_index, file_name, major, minor, access_flags, - constant_pool, interfaces, fields, methods, attributes, HEAP); - } - /** * Called by objects that are traversing the nodes of the tree implicitely @@ -255,7 +217,7 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitJavaClass(this); } @@ -339,7 +301,7 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { constant_pool.dump(file); - file.writeShort(access_flags); + file.writeShort(modifiers); file.writeShort(class_name_index); file.writeShort(superclass_name_index); @@ -355,13 +317,7 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { for(int i=0; i < methods.length; i++) methods[i].dump(file); - if(attributes != null) { - file.writeShort(attributes.length); - for(int i=0; i < attributes.length; i++) - attributes[i].dump(file); - } - else - file.writeShort(0); + AttributeUtils.writeAttributes(attributes,file); file.close(); } @@ -371,19 +327,18 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { */ public Attribute[] getAttributes() { return attributes; } - public Annotation[] getAnnotations() { + public AnnotationGen[] getAnnotations() { if (annotationsOutOfDate) { // Find attributes that contain annotation data - Attribute[] attrs = getAttributes(); List accumulatedAnnotations = new ArrayList(); - for (int i = 0; i < attrs.length; i++) { - Attribute attribute = attrs[i]; + for (int i = 0; i < attributes.length; i++) { + Attribute attribute = attributes[i]; if (attribute instanceof RuntimeAnnotations) { RuntimeAnnotations runtimeAnnotations = (RuntimeAnnotations)attribute; accumulatedAnnotations.addAll(runtimeAnnotations.getAnnotations()); } } - annotations = (Annotation[])accumulatedAnnotations.toArray(new Annotation[]{}); + annotations = (AnnotationGen[])accumulatedAnnotations.toArray(new AnnotationGen[]{}); annotationsOutOfDate = false; } return annotations; @@ -618,11 +573,11 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { * @return String representing class contents. */ public String toString() { - String access = Utility.accessToString(access_flags, true); + String access = Utility.accessToString(modifiers, true); access = access.equals("")? "" : (access + " "); StringBuffer buf = new StringBuffer(access + - Utility.classOrInterface(access_flags) + + Utility.classOrInterface(modifiers) + " " + class_name + " extends " + Utility.compactClassName(superclass_name, @@ -644,14 +599,13 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { buf.append("filename\t\t" + file_name + '\n'); buf.append("compiled from\t\t" + source_file_name + '\n'); buf.append("compiler version\t" + major + "." + minor + '\n'); - buf.append("access flags\t\t" + access_flags + '\n'); + buf.append("access flags\t\t" + modifiers + '\n'); buf.append("constant pool\t\t" + constant_pool.getLength() + " entries\n"); buf.append("ACC_SUPER flag\t\t" + isSuper() + "\n"); if(attributes.length > 0) { buf.append("\nAttribute(s):\n"); - for(int i=0; i < attributes.length; i++) - buf.append(indent(attributes[i])); + for(int i=0; i < attributes.length; i++) buf.append(indent(attributes[i])); } if (annotations!=null && annotations.length>0) { @@ -707,9 +661,7 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { for(int i=0; i < methods.length; i++) c.methods[i] = methods[i].copy(c.constant_pool); - c.attributes = new Attribute[attributes.length]; - for(int i=0; i < attributes.length; i++) - c.attributes[i] = attributes[i].copy(c.constant_pool); + c.attributes = AttributeUtils.copy(attributes,c.constant_pool); //J5SUPPORT: As the annotations exist as attributes against the class, copying // the attributes will copy the annotations across, so we don't have to @@ -719,11 +671,11 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { } public final boolean isSuper() { - return (access_flags & Constants.ACC_SUPER) != 0; + return (modifiers & Constants.ACC_SUPER) != 0; } public final boolean isClass() { - return (access_flags & Constants.ACC_INTERFACE) == 0; + return (modifiers & Constants.ACC_INTERFACE) == 0; } public final boolean isAnonymous() { @@ -738,9 +690,10 @@ public class JavaClass extends AccessFlags implements Cloneable, Node { private final void computeNestedTypeStatus() { if (computedNestedTypeStatus) return; - for (int i = 0; i < this.attributes.length; i++) { - if (this.attributes[i] instanceof InnerClasses) { - InnerClass[] innerClasses = ((InnerClasses) this.attributes[i]).getInnerClasses(); + //Attribute[] attrs = attributes.getAttributes(); + for (int i = 0; i M. Dahm * @see LineNumberTable */ @@ -106,7 +106,7 @@ public final class LineNumber implements Cloneable, Node, Serializable { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitLineNumber(this); } @@ -150,7 +150,7 @@ public final class LineNumber implements Cloneable, Node, Serializable { * @return String representation */ public final String toString() { - return "LineNumber(pc=" + start_pc + ", line=" + line_number + ")"; + return "LineNumber(" + start_pc + ", " + line_number + ")"; } /** diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/LineNumberTable.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/LineNumberTable.java index ec6c3b197..1dc5183af 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/LineNumberTable.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/LineNumberTable.java @@ -62,7 +62,7 @@ import java.io.*; * purposes. This attribute is used by the Code attribute. It * contains pairs of PCs and line numbers. * - * @version $Id: LineNumberTable.java,v 1.3 2006/02/07 15:15:42 aclement Exp $ + * @version $Id: LineNumberTable.java,v 1.4 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm * @see Code * @@ -144,7 +144,7 @@ public final class LineNumberTable extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { unpack(); v.visitLineNumberTable(this); } @@ -268,7 +268,7 @@ public final class LineNumberTable extends Attribute { for(int i=0; i < line_number_table_length; i++) c.line_number_table[i] = line_number_table[i].copy(); - c.constant_pool = constant_pool; + c.constantPool = constant_pool; return c; } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariable.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariable.java index 2c155149f..c97ec1485 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariable.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariable.java @@ -61,7 +61,7 @@ import java.io.*; * This class represents a local variable within a method. It contains its * scope, name, signature and index on the method's frame. * - * @version $Id: LocalVariable.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: LocalVariable.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see LocalVariableTable */ @@ -127,7 +127,7 @@ public final class LocalVariable * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitLocalVariable(this); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariableTable.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariableTable.java index 476d4c66e..a85653e76 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariableTable.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariableTable.java @@ -61,7 +61,7 @@ import java.io.*; * This class represents collection of local variables in a * method. This attribute is contained in the Code attribute. * - * @version $Id: LocalVariableTable.java,v 1.3 2006/02/15 09:15:34 aclement Exp $ + * @version $Id: LocalVariableTable.java,v 1.4 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm * @see Code * @see LocalVariable @@ -128,7 +128,7 @@ public class LocalVariableTable extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { unpack(); v.visitLocalVariableTable(this); } @@ -204,7 +204,7 @@ public class LocalVariableTable extends Attribute { for(int i=0; i < localVariableTableLength; i++) c.localVariableTable[i] = localVariableTable[i].copy(); - c.constant_pool = constant_pool; + c.constantPool = constant_pool; return c; } @@ -223,7 +223,7 @@ public class LocalVariableTable extends Attribute { localVariableTableLength = (dis.readUnsignedShort()); localVariableTable = new LocalVariable[localVariableTableLength]; for (int i=0; i < localVariableTableLength; i++) - localVariableTable[i] = new LocalVariable(dis,constant_pool); + localVariableTable[i] = new LocalVariable(dis,constantPool); dis.close(); data = null; // throw it away now } catch (IOException e) { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariableTypeTable.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariableTypeTable.java index e54dda09b..81af0cc3a 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariableTypeTable.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/LocalVariableTypeTable.java @@ -71,7 +71,7 @@ public class LocalVariableTypeTable extends Attribute { local_variable_type_table[i] = new LocalVariable(dis, cpool); } - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitLocalVariableTypeTable(this); } @@ -127,7 +127,7 @@ public class LocalVariableTypeTable extends Attribute { for(int i=0; i < local_variable_type_table_length; i++) c.local_variable_type_table[i] = local_variable_type_table[i].copy(); - c.constant_pool = constant_pool; + c.constantPool = constant_pool; return c; } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Method.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Method.java index 63db26e68..3f552e536 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Method.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Method.java @@ -55,38 +55,35 @@ package org.aspectj.apache.bcel.classfile; */ import java.io.DataInputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleParameterAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleParameterAnnotations; import org.aspectj.apache.bcel.generic.Type; +import java.io.*; +import java.util.*; /** * This class represents the method info structure, i.e., the representation * for a method in the class. See JVM specification for details. * A method has access flags, a name, a signature and a number of attributes. * - * @version $Id: Method.java,v 1.4 2008/01/25 18:33:24 aclement Exp $ + * @version $Id: Method.java,v 1.5 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm */ public final class Method extends FieldOrMethod { - - public static final Annotation[][] NO_PARAMETER_ANNOTATIONS = new Annotation[][]{}; - public static final Annotation[] NO_ANNOTATIONS = new Annotation[]{}; - private boolean parameterAnnotationsOutOfDate; - private Annotation[][] unpackedParameterAnnotations; + public static final AnnotationGen[][] NO_PARAMETER_ANNOTATIONS = new AnnotationGen[][]{}; + public static final AnnotationGen[] NO_ANNOTATIONS = new AnnotationGen[]{}; + + public static final Method[] NoMethods = new Method[0]; + private boolean parameterAnnotationsOutOfDate = true; + private AnnotationGen[][] unpackedParameterAnnotations; - /** - * Empty constructor, all attributes have to be defined via `setXXX' - * methods. Use at your own risk. - */ - public Method() { - parameterAnnotationsOutOfDate = true; + private Method() { + parameterAnnotationsOutOfDate = true; } /** @@ -98,44 +95,20 @@ public final class Method extends FieldOrMethod { parameterAnnotationsOutOfDate = true; } - /** - * Construct object from file stream. - * @param file Input stream - * @throws IOException - * @throws ClassFormatException - */ - Method(DataInputStream file, ConstantPool constant_pool) - throws IOException, ClassFormatException - { + Method(DataInputStream file, ConstantPool constant_pool) throws IOException { super(file, constant_pool); - parameterAnnotationsOutOfDate = true; } - /** - * @param access_flags Access rights of method - * @param name_index Points to field name in constant pool - * @param signature_index Points to encoded signature - * @param attributes Collection of attributes - * @param constant_pool Array of constants - */ - public Method(int access_flags, int name_index, int signature_index, - Attribute[] attributes, ConstantPool constant_pool) - { + public Method(int access_flags, int name_index, int signature_index, Attribute[] attributes, ConstantPool constant_pool) { super(access_flags, name_index, signature_index, attributes, constant_pool); parameterAnnotationsOutOfDate = true; } - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitMethod(this); } + // CUSTARD mutable or not? public void setAttributes(Attribute[] attributes) { parameterAnnotationsOutOfDate = true; super.setAttributes(attributes); @@ -145,79 +118,59 @@ public final class Method extends FieldOrMethod { * @return Code attribute of method, if any */ public final Code getCode() { - for(int i=0; i < attributes_count; i++) - if(attributes[i] instanceof Code) - return (Code)attributes[i]; - - return null; + return AttributeUtils.getCodeAttribute(attributes); } - /** - * @return ExceptionTable attribute of method, if any, i.e., list all - * exceptions the method may throw not exception handlers! - */ public final ExceptionTable getExceptionTable() { - for(int i=0; i < attributes_count; i++) - if(attributes[i] instanceof ExceptionTable) - return (ExceptionTable)attributes[i]; - - return null; + return AttributeUtils.getExceptionTableAttribute(attributes); } - /** @return LocalVariableTable of code attribute if any, i.e. the call is forwarded - * to the Code atribute. + /** + * Return LocalVariableTable of code attribute if any (the call is forwarded + * to the Code attribute) */ public final LocalVariableTable getLocalVariableTable() { Code code = getCode(); - - if(code != null) - return code.getLocalVariableTable(); - else - return null; + if (code != null) return code.getLocalVariableTable(); + return null; } - /** @return LineNumberTable of code attribute if any, i.e. the call is forwarded - * to the Code atribute. + /** + * Return LineNumberTable of code attribute if any (the call is forwarded + * to the Code attribute) */ public final LineNumberTable getLineNumberTable() { Code code = getCode(); - - if(code != null) - return code.getLineNumberTable(); - else - return null; + if (code != null) return code.getLineNumberTable(); + return null; } /** - * Return string representation close to declaration format, - * `public static void main(String[] args) throws IOException', e.g. - * - * @return String representation of the method. + * Return string representation close to declaration format, eg: + * 'public static void main(String[] args) throws IOException' */ public final String toString() { ConstantUtf8 c; String name, signature, access; // Short cuts to constant pool StringBuffer buf; - access = Utility.accessToString(access_flags); + access = Utility.accessToString(modifiers); // Get name and signature from constant pool - c = (ConstantUtf8)constant_pool.getConstant(signature_index, + c = (ConstantUtf8)cpool.getConstant(signatureIndex, Constants.CONSTANT_Utf8); signature = c.getBytes(); - c = (ConstantUtf8)constant_pool.getConstant(name_index, Constants.CONSTANT_Utf8); + c = (ConstantUtf8)cpool.getConstant(nameIndex, Constants.CONSTANT_Utf8); name = c.getBytes(); signature = Utility.methodSignatureToString(signature, name, access, true, getLocalVariableTable()); buf = new StringBuffer(signature); - for(int i=0; i < attributes_count; i++) { + for(int i=0; i < attributes.length; i++) { Attribute a = attributes[i]; - - if(!((a instanceof Code) || (a instanceof ExceptionTable))) - buf.append(" [" + a.toString() + "]"); + if(!((a instanceof Code) || (a instanceof ExceptionTable))) buf.append(" [" + a.toString() + "]"); } ExceptionTable e = getExceptionTable(); @@ -231,7 +184,7 @@ public final class Method extends FieldOrMethod { } /** - * @return deep copy of this method + * Return a deep copy of this method */ public final Method copy(ConstantPool constant_pool) { return (Method)copy_(constant_pool); @@ -250,7 +203,7 @@ public final class Method extends FieldOrMethod { public Type[] getArgumentTypes() { return Type.getArgumentTypes(getSignature()); } - + private void ensureParameterAnnotationsUnpacked() { if (!parameterAnnotationsOutOfDate) return; parameterAnnotationsOutOfDate = false; @@ -264,62 +217,64 @@ public final class Method extends FieldOrMethod { RuntimeVisibleParameterAnnotations parameterAnnotationsVis = null; RuntimeInvisibleParameterAnnotations parameterAnnotationsInvis = null; - // Find attributes that contain annotation data + // Find attributes that contain annotation data Attribute[] attrs = getAttributes(); List accumulatedAnnotations = new ArrayList(); - + for (int i = 0; i < attrs.length; i++) { Attribute attribute = attrs[i]; - if (attribute instanceof RuntimeVisibleParameterAnnotations) { - parameterAnnotationsVis = (RuntimeVisibleParameterAnnotations)attribute; + if (attribute instanceof RuntimeVisibleParameterAnnotations) { + parameterAnnotationsVis = (RuntimeVisibleParameterAnnotations)attribute; } else if (attribute instanceof RuntimeInvisibleParameterAnnotations) { - parameterAnnotationsInvis = (RuntimeInvisibleParameterAnnotations)attribute; + parameterAnnotationsInvis = (RuntimeInvisibleParameterAnnotations)attribute; + } } - } - // Build a list of annotation arrays, one per argument - List annotationsForEachParameter = new ArrayList(); - Annotation[] visibleOnes = null; - Annotation[] invisibleOnes = null; boolean foundSome = false; - for (int i=0; i. */ +import org.aspectj.apache.bcel.Constants; + /** - * Denotes an unparameterized instruction to load a value from a local - * variable, e.g. ILOAD. - * - * @version $Id: LoadInstruction.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ + * Super class for all objects that have modifiers like private, final, ... I.e. + * classes, fields, and methods. + * was AccessFlags + * + * @version $Id: Modifiers.java,v 1.2 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm */ -public abstract class LoadInstruction extends LocalVariableInstruction - implements PushInstruction -{ - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - * tag and length are defined in readInstruction and initFromFile, respectively. - */ - LoadInstruction(short canon_tag, short c_tag) { - super(canon_tag, c_tag); - } - - /** - * @param opcode Instruction opcode - * @param c_tag Instruction number for compact version, ALOAD_0, e.g. - * @param n local variable index (unsigned short) - */ - protected LoadInstruction(short opcode, short c_tag, int n) { - super(opcode, c_tag, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitTypedInstruction(this); - v.visitLocalVariableInstruction(this); - v.visitLoadInstruction(this); - } -} +public abstract class Modifiers { + + protected int modifiers; + + public Modifiers() { } + + public Modifiers(int a) { + modifiers = a; + } + + public final int getModifiers() { + return modifiers; + } + + public final void setModifiers(int modifiers) { + this.modifiers = modifiers; + } + + public final boolean isPublic() { + return (modifiers & Constants.ACC_PUBLIC) != 0; + } + + public final boolean isPrivate() { + return (modifiers & Constants.ACC_PRIVATE) != 0; + } + + public final boolean isProtected() { + return (modifiers & Constants.ACC_PROTECTED) != 0; + } + + public final boolean isStatic() { + return (modifiers & Constants.ACC_STATIC) != 0; + } + public final boolean isFinal() { + return (modifiers & Constants.ACC_FINAL) != 0; + } + + public final boolean isSynchronized() { + return (modifiers & Constants.ACC_SYNCHRONIZED) != 0; + } + + public final boolean isVolatile() { + return (modifiers & Constants.ACC_VOLATILE) != 0; + } + + public final boolean isTransient() { + return (modifiers & Constants.ACC_TRANSIENT) != 0; + } + + public final boolean isNative() { + return (modifiers & Constants.ACC_NATIVE) != 0; + } + + public final boolean isInterface() { + return (modifiers & Constants.ACC_INTERFACE) != 0; + } + + public final boolean isAbstract() { + return (modifiers & Constants.ACC_ABSTRACT) != 0; + } + + public final boolean isStrictfp() { + return (modifiers & Constants.ACC_STRICT) != 0; + } + + public final boolean isVarargs() { + return (modifiers & Constants.ACC_VARARGS) != 0; + } + + public final boolean isBridge() { + return (modifiers & Constants.ACC_BRIDGE) != 0; + } +} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Node.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Node.java index 11ee287c2..5bef82979 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Node.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Node.java @@ -57,9 +57,9 @@ package org.aspectj.apache.bcel.classfile; /** * Denote class to have an accept method(); * - * @version $Id: Node.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: Node.java,v 1.3 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm */ public interface Node { - public void accept(Visitor obj); + public void accept(ClassVisitor obj); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/PMGClass.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/PMGClass.java index 2587dfa53..004043852 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/PMGClass.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/PMGClass.java @@ -62,7 +62,7 @@ import java.io.*; * to a PMG * attribute. * - * @version $Id: PMGClass.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: PMGClass.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Attribute */ @@ -114,7 +114,7 @@ public final class PMGClass extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { System.err.println("Visiting non-standard PMGClass object"); } @@ -159,7 +159,7 @@ public final class PMGClass extends Attribute { * @return PMG name. */ public final String getPMGName() { - ConstantUtf8 c = (ConstantUtf8)constant_pool.getConstant(pmg_index, + ConstantUtf8 c = (ConstantUtf8)constantPool.getConstant(pmg_index, Constants.CONSTANT_Utf8); return c.getBytes(); } @@ -168,7 +168,7 @@ public final class PMGClass extends Attribute { * @return PMG class name. */ public final String getPMGClassName() { - ConstantUtf8 c = (ConstantUtf8)constant_pool.getConstant(pmg_class_index, + ConstantUtf8 c = (ConstantUtf8)constantPool.getConstant(pmg_class_index, Constants.CONSTANT_Utf8); return c.getBytes(); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Signature.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Signature.java index bb9673103..1c80d4a02 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Signature.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Signature.java @@ -69,7 +69,7 @@ import org.aspectj.apache.bcel.Constants; * This class is derived from Attribute and represents a reference * to a GJ attribute. * - * @version $Id: Signature.java,v 1.6 2005/07/12 13:59:06 aclement Exp $ + * @version $Id: Signature.java,v 1.7 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Attribute */ @@ -118,7 +118,7 @@ public final class Signature extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { System.err.println("Visiting non-standard Signature object"); v.visitSignature(this); } @@ -151,7 +151,7 @@ public final class Signature extends Attribute { * @return GJ signature. */ public final String getSignature() { - ConstantUtf8 c = (ConstantUtf8)constant_pool.getConstant(signature_index, + ConstantUtf8 c = (ConstantUtf8)constantPool.getConstant(signature_index, Constants.CONSTANT_Utf8); return c.getBytes(); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/SourceFile.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/SourceFile.java index ee93d6321..9858be71d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/SourceFile.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/SourceFile.java @@ -63,7 +63,7 @@ import java.io.*; * should appear per classfile. The intention of this class is that it is * instantiated from the Attribute.readAttribute() method. * - * @version $Id: SourceFile.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: SourceFile.java,v 1.3 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm * @see Attribute */ @@ -120,7 +120,7 @@ public final class SourceFile extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitSourceFile(this); } @@ -152,7 +152,7 @@ public final class SourceFile extends Attribute { * @return Source file name. */ public final String getSourceFileName() { - ConstantUtf8 c = (ConstantUtf8)constant_pool.getConstant(sourcefile_index, + ConstantUtf8 c = (ConstantUtf8)constantPool.getConstant(sourcefile_index, Constants.CONSTANT_Utf8); return c.getBytes(); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMap.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMap.java index df976fc69..5878f1b2b 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMap.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMap.java @@ -66,7 +66,7 @@ import java.io.*; * within the Code attribute of a method. See CLDC specification * §5.3.1.2 * - * @version $Id: StackMap.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: StackMap.java,v 1.3 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm * @see Code * @see StackMapEntry @@ -166,7 +166,7 @@ public final class StackMap extends Attribute implements Node { for(int i=0; i < map_length; i++) c.map[i] = map[i].copy(); - c.constant_pool = constant_pool; + c.constantPool = constant_pool; return c; } @@ -177,7 +177,7 @@ public final class StackMap extends Attribute implements Node { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitStackMap(this); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMapEntry.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMapEntry.java index e20d11f5f..b369083fb 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMapEntry.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMapEntry.java @@ -63,7 +63,7 @@ import java.io.IOException; * local variables and the the of stack items at a given byte code offset. * See CLDC specification §5.3.1.2 * - * @version $Id: StackMapEntry.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: StackMapEntry.java,v 1.5 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see StackMap * @see StackMapType @@ -192,7 +192,7 @@ public final class StackMapEntry implements Cloneable { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitStackMapEntry(this); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMapType.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMapType.java index 0dd072d3b..b1116abbe 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMapType.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/StackMapType.java @@ -61,7 +61,7 @@ import java.io.*; * This class represents the type of a local variable or item on stack * used in the StackMap entries. * - * @version $Id: StackMapType.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: StackMapType.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see StackMapEntry * @see StackMap diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Synthetic.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Synthetic.java index 235c4bb4a..91f53b40d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Synthetic.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Synthetic.java @@ -55,6 +55,7 @@ package org.aspectj.apache.bcel.classfile; */ import org.aspectj.apache.bcel.Constants; + import java.io.*; /** @@ -66,7 +67,7 @@ import java.io.*; * is intended to be instantiated from the * Attribute.readAttribute() method. * - * @version $Id: Synthetic.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: Synthetic.java,v 1.3 2008/05/28 23:53:02 aclement Exp $ * @author M. Dahm * @see Attribute */ @@ -80,6 +81,13 @@ public final class Synthetic extends Attribute { public Synthetic(Synthetic c) { this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); } +// +// public Synthetic(ConstantPoolGen cpool) { +// super(Constants.ATTR_SYNTHETIC, cpool.addUtf8("Synthetic"), 0, cpool); +// ConstantPoolGen cpg = myGen.getConstantPool(); +// int index = ; +// Attribute synthetic = new Synthetic(index, 0, new byte[0], cpg.getConstantPool()); +// } /** * @param name_index Index in constant pool to CONSTANT_Utf8, which @@ -122,7 +130,7 @@ public final class Synthetic extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitSynthetic(this); } /** @@ -170,7 +178,7 @@ public final class Synthetic extends Attribute { if(bytes != null) c.bytes = (byte[])bytes.clone(); - c.constant_pool = constant_pool; + c.constantPool = constant_pool; return c; } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Unknown.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Unknown.java index 97fd6e8c8..279b1511d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Unknown.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Unknown.java @@ -68,9 +68,8 @@ import java.io.*; * org.aspectj.apache.bcel.classfile.AttributeReader)">Attribute.addAttributeReader. * - * @version $Id: Unknown.java,v 1.3 2006/03/04 10:43:17 aclement Exp $ + * @version $Id: Unknown.java,v 1.4 2008/05/28 23:53:01 aclement Exp $ * @see org.aspectj.apache.bcel.classfile.Attribute - * @see org.aspectj.apache.bcel.classfile.AttributeReader * @author M. Dahm */ public final class Unknown extends Attribute { @@ -147,7 +146,7 @@ public final class Unknown extends Attribute { * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(ClassVisitor v) { v.visitUnknown(this); } /** @@ -207,7 +206,7 @@ public final class Unknown extends Attribute { if(bytes != null) c.bytes = (byte[])bytes.clone(); - c.constant_pool = constant_pool; + c.constantPool = constant_pool; return c; } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Utility.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Utility.java index 7e1d4affe..0e221ff1b 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Utility.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Utility.java @@ -73,27 +73,24 @@ import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; -import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePair; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleParameterAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleParameterAnnotations; -import org.aspectj.apache.bcel.generic.ConstantPoolGen; -import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; import org.aspectj.apache.bcel.util.ByteSequence; /** * Utility functions that do not really belong to any class in particular. * - * @version $Id: Utility.java,v 1.5 2006/07/19 12:06:15 aclement Exp $ + * @version $Id: Utility.java,v 1.6 2008/05/28 23:53:01 aclement Exp $ * @author M. Dahm * * modified: Andy Clement 2-mar-05 Removed unnecessary static and optimized */ public abstract class Utility { - /* The `WIDE' instruction is used in the byte code to allow 16-bit wide indices for local + /* The 'WIDE' instruction is used in the byte code to allow 16-bit wide indices for local * variables. This opcode precedes an 'ILOAD', e.g.. The opcode immediately following takes * an extra byte which is combined with the following byte to form a 16-bit value. */ @@ -108,7 +105,6 @@ public abstract class Utility { public static final String accessToString(int access_flags) { return accessToString(access_flags, false); } - /** * Convert bit field of flags into string such as 'static final'. @@ -234,11 +230,14 @@ public abstract class Utility { str = str.replace('/', '.'); // Is '/' on all systems, even DOS if (chopit) { - // If string starts with 'prefix' and contains no further dots - if (str.startsWith(prefix) && (str.substring(len).indexOf('.') == -1)) - str = str.substring(len); + // If string starts with 'prefix' and contains no further dots + if (str.startsWith(prefix)) { + String result = str.substring(len); + if ( result.indexOf('.') == -1) { + str = result; + } + } } - return str; } @@ -257,144 +256,6 @@ public abstract class Utility { public static final String compactClassName(String str, boolean chopit) { return compactClassName(str, "java.lang.", chopit); } - - // bit modification - - /** - * @return 'flag' with bit 'i' set to 1 - */ - public static final int setBit(int flag, int i) { - return flag | pow2(i); - } - - /** - * @return 'flag' with bit 'i' set to 0 - */ - public static final int clearBit(int flag, int i) { - int bit = pow2(i); - return (flag & bit) == 0? flag : flag ^ bit; - } - - /** - * @return true, if bit 'i' in 'flag' is set - */ - public static final boolean isSet(int flag, int i) { - return (flag & pow2(i)) != 0; - } - - - - /** - * Converts string containing the method return and argument types - * to a byte code method signature. - * - * @param returnType Return type of method (e.g. "char" or "java.lang.String[]") - * @param methodArgs Types of method arguments - * @return Byte code representation of method signature - */ - public final static String methodTypeToSignature(String returnType, String[] methodArgs) throws ClassFormatException { - - StringBuffer buf = new StringBuffer("("); - - if (methodArgs != null) { - for (int i=0; i < methodArgs.length; i++) { - String str = getSignature(methodArgs[i]); - - if (str.equals("V")) // void can't be a method argument - throw new ClassFormatException("Invalid type: " + methodArgs[i]); - - buf.append(str); - } - } - - buf.append(")" + getSignature(returnType)); - - return buf.toString(); - } - - - - /** - * @param signature Method signature - * @return Array of argument types - * @throws ClassFormatException - */ - public static final String[] methodSignatureArgumentTypes(String signature) throws ClassFormatException { - return methodSignatureArgumentTypes(signature, true); - } - - - - - /** - * For some method signature (class file format) like '([Ljava/lang/String;Z)V' this returns an array - * of strings representing the arguments in their 'normal' form, e.g. '{java.lang.String[],boolean}' - * - * @param signature Method signature - * @param chopit Shorten class names - * @return Array of argument types - */ - public static final String[] methodSignatureArgumentTypes(String signature,boolean chopit) throws ClassFormatException { - ArrayList vec = new ArrayList(); - int index; - String[] types; - - try { // Read all declarations between for `(' and `)' - if (signature.charAt(0) != '(') - throw new ClassFormatException("Invalid method signature: " + signature); - - index = 1; // current string position - - while(signature.charAt(index) != ')') { - ResultHolder rh = signatureToStringInternal(signature.substring(index),chopit); - vec.add(rh.getResult()); - index += rh.getConsumedChars(); - } - } catch(StringIndexOutOfBoundsException e) { - throw new ClassFormatException("Invalid method signature: " + signature); - } - - types = new String[vec.size()]; - vec.toArray(types); - return types; - } - - - /** - * For some method signature (class file format) like '([Ljava/lang/String;)Z' this returns - * the string representing the return type its 'normal' form, e.g. 'boolean' - * - * @param signature Method signature - * @return return type of method - * @throws ClassFormatException - */ - public static final String methodSignatureReturnType(String signature) throws ClassFormatException { - return methodSignatureReturnType(signature, true); - } - - - /** - * For some method signature (class file format) like '([Ljava/lang/String;)Z' this returns - * the string representing the return type its 'normal' form, e.g. 'boolean' - * - * @param signature Method signature - * @param chopit Shorten class names - * @return return type of method - */ - public static final String methodSignatureReturnType(String signature,boolean chopit) throws ClassFormatException { - int index; - String type; - try { - // Read return type after `)' - index = signature.lastIndexOf(')') + 1; - type = signatureToString(signature.substring(index), chopit); - } catch (StringIndexOutOfBoundsException e) { - throw new ClassFormatException("Invalid method signature: " + signature); - } - return type; - } - - public static final String methodSignatureToString(String signature,String name,String access) { return methodSignatureToString(signature, name, access, true); @@ -622,64 +483,6 @@ public abstract class Utility { - /** - * Parse Java type such as "char", or "java.lang.String[]" and return the - * signature in byte code format, e.g. "C" or "[Ljava/lang/String;" respectively. - * - * @param type Java type - * @return byte code signature - */ - public static String getSignature(String type) { - StringBuffer buf = new StringBuffer(); - char[] chars = type.toCharArray(); - boolean char_found = false, delim = false; - int index = -1; - - loop: - for (int i=0; i < chars.length; i++) { - switch (chars[i]) { - case ' ': case '\t': case '\n': case '\r': case '\f': - if (char_found) delim = true; - break; - - case '[': - if (!char_found) throw new RuntimeException("Illegal type: " + type); - index = i; - break loop; - - default: - char_found = true; - if (!delim) buf.append(chars[i]); - } - } - - int brackets = 0; - - if(index > 0) brackets = countBrackets(type.substring(index)); - - type = buf.toString(); - buf.setLength(0); - - for (int i=0; i < brackets; i++) buf.append('['); - - boolean found = false; - - for(int i=Constants.T_BOOLEAN; (i <= Constants.T_VOID) && !found; i++) { - if (Constants.TYPE_NAMES[i].equals(type)) { - found = true; - buf.append(Constants.SHORT_TYPE_NAMES[i]); - } - } - - // Class name - if (!found) buf.append('L' + type.replace('.', '/') + ';'); - - return buf.toString(); - } - - - - /** * Return type of method signature as a byte value as defined in Constants * @@ -700,21 +503,6 @@ public abstract class Utility { } } - - - /** Map opcode names to opcode numbers. E.g., return Constants.ALOAD for "aload" - */ - public static short searchOpcode(String name) { - name = name.toLowerCase(); - - for (short i=0; i < Constants.OPCODE_NAMES.length; i++) { - if (Constants.OPCODE_NAMES[i].equals(name)) - return i; - } - - return -1; - } - /** * Convert (signed) byte to (unsigned) short value, i.e., all negative * values become positive. @@ -781,266 +569,7 @@ public abstract class Utility { else return new String(buf) + str; } - - static final boolean equals(byte[] a, byte[] b) { - int size; - - if((size=a.length) != b.length) - return false; - - for(int i=0; i < size; i++) - if(a[i] != b[i]) - return false; - - return true; - } - - public static final void printArray(PrintStream out, Object[] obj) { - out.println(printArray(obj, true)); - } - - public static final void printArray(PrintWriter out, Object[] obj) { - out.println(printArray(obj, true)); - } - - public static final String printArray(Object[] obj) { - return printArray(obj, true); - } - - public static final String printArray(Object[] obj, boolean braces) { - return printArray(obj, braces, false); - } - - public static final String printArray(Object[] obj, boolean braces, - boolean quote) { - if(obj == null) - return null; - - StringBuffer buf = new StringBuffer(); - if(braces) - buf.append('{'); - - for(int i=0; i < obj.length; i++) { - if(obj[i] != null) { - buf.append((quote? "\"" : "") + obj[i].toString() + (quote? "\"" : "")); - } else { - buf.append("null"); - } - - if(i < obj.length - 1) { - buf.append(", "); - } - } - - if(braces) - buf.append('}'); - - return buf.toString(); - } - - /** @return true, if character is one of (a, ... z, A, ... Z, 0, ... 9, _) - */ - public static boolean isJavaIdentifierPart(char ch) { - return ((ch >= 'a') && (ch <= 'z')) || - ((ch >= 'A') && (ch <= 'Z')) || - ((ch >= '0') && (ch <= '9')) || - (ch == '_'); - } - - /** - * Encode byte array it into Java identifier string, i.e., a string - * that only contains the following characters: (a, ... z, A, ... Z, - * 0, ... 9, _, $). The encoding algorithm itself is not too - * clever: if the current byte's ASCII value already is a valid Java - * identifier part, leave it as it is. Otherwise it writes the - * escape character($) followed by

      • the ASCII value as a - * hexadecimal string, if the value is not in the range - * 200..247
      • a Java identifier char not used in a lowercase - * hexadecimal string, if the value is in the range - * 200..247
        • - * - *

          This operation inflates the original byte array by roughly 40-50%

          - * - * @param bytes the byte array to convert - * @param compress use gzip to minimize string - */ - public static String encode(byte[] bytes, boolean compress) throws IOException { - if(compress) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - GZIPOutputStream gos = new GZIPOutputStream(baos); - - gos.write(bytes, 0, bytes.length); - gos.close(); - baos.close(); - - bytes = baos.toByteArray(); - } - - CharArrayWriter caw = new CharArrayWriter(); - JavaWriter jw = new JavaWriter(caw); - - for(int i=0; i < bytes.length; i++) { - int in = bytes[i] & 0x000000ff; // Normalize to unsigned - jw.write(in); - } - - return caw.toString(); - } - - /** Decode a string back to a byte array. - * - * @param bytes the byte array to convert - * @param uncompress use gzip to uncompress the stream of bytes - */ - public static byte[] decode(String s, boolean uncompress) throws IOException { - char[] chars = s.toCharArray(); - - CharArrayReader car = new CharArrayReader(chars); - JavaReader jr = new JavaReader(car); - - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - - int ch; - - while((ch = jr.read()) >= 0) { - bos.write(ch); - } - - bos.close(); - car.close(); - jr.close(); - - byte[] bytes = bos.toByteArray(); - - if(uncompress) { - GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(bytes)); - - byte[] tmp = new byte[bytes.length * 3]; // Rough estimate - int count = 0; - int b; - - while((b = gis.read()) >= 0) - tmp[count++] = (byte)b; - - bytes = new byte[count]; - System.arraycopy(tmp, 0, bytes, 0, count); - } - - return bytes; - } - - // A-Z, g-z, _, $ - private static final int FREE_CHARS = 48; - private static int[] CHAR_MAP = new int[FREE_CHARS]; - private static int[] MAP_CHAR = new int[256]; // Reverse map - private static final char ESCAPE_CHAR = '$'; - - static { - int j = 0, k = 0; - for(int i='A'; i <= 'Z'; i++) { - CHAR_MAP[j] = i; - MAP_CHAR[i] = j; - j++; - } - - for(int i='g'; i <= 'z'; i++) { - CHAR_MAP[j] = i; - MAP_CHAR[i] = j; - j++; - } - - CHAR_MAP[j] = '$'; - MAP_CHAR['$'] = j; - j++; - - CHAR_MAP[j] = '_'; - MAP_CHAR['_'] = j; - } - - /** Decode characters into bytes. - * Used by decode() - */ - private static class JavaReader extends FilterReader { - public JavaReader(Reader in) { - super(in); - } - - public int read() throws IOException { - int b = in.read(); - - if(b != ESCAPE_CHAR) { - return b; - } else { - int i = in.read(); - - if(i < 0) - return -1; - - if(((i >= '0') && (i <= '9')) || ((i >= 'a') && (i <= 'f'))) { // Normal escape - int j = in.read(); - - if(j < 0) - return -1; - - char[] tmp = { (char)i, (char)j }; - int s = Integer.parseInt(new String(tmp), 16); - - return s; - } else { // Special escape - return MAP_CHAR[i]; - } - } - } - - public int read(char[] cbuf, int off, int len) throws IOException { - for(int i=0; i < len; i++) - cbuf[off + i] = (char)read(); - - return len; - } - } - - /** Encode bytes into valid java identifier characters. - * Used by encode() - */ - private static class JavaWriter extends FilterWriter { - public JavaWriter(Writer out) { - super(out); - } - - public void write(int b) throws IOException { - if(isJavaIdentifierPart((char)b) && (b != ESCAPE_CHAR)) { - out.write(b); - } else { - out.write(ESCAPE_CHAR); // Escape character - - // Special escape - if(b >= 0 && b < FREE_CHARS) { - out.write(CHAR_MAP[b]); - } else { // Normal escape - char[] tmp = Integer.toHexString(b).toCharArray(); - - if(tmp.length == 1) { - out.write('0'); - out.write(tmp[0]); - } else { - out.write(tmp[0]); - out.write(tmp[1]); - } - } - } - } - - public void write(char[] cbuf, int off, int len) throws IOException { - for(int i=0; i < len; i++) - write(cbuf[off + i]); - } - - public void write(String str, int off, int len) throws IOException { - write(str.toCharArray(), off, len); - } - } - + /** * Escape all occurences of newline chars '\n', quotes \", etc. */ @@ -1068,17 +597,6 @@ public abstract class Utility { return buf.toString(); } - public static List getListOfAnnotationNames(Annotation a) { - List l = a.getValues(); - List names = new ArrayList(); - for (Iterator i = l.iterator(); i.hasNext();) { - ElementNameValuePair element = (ElementNameValuePair) i.next(); - names.add(element.getNameString()); - } - return names; - } - - /** * Converts a list of AnnotationGen objects into a set of attributes * that can be attached to the class file. @@ -1086,7 +604,7 @@ public abstract class Utility { * @param cp The constant pool gen where we can create the necessary name refs * @param vec A list of AnnotationGen objects */ - public static Attribute[] getAnnotationAttributes(ConstantPoolGen cp,List vec) { + public static Attribute[] getAnnotationAttributes(ConstantPool cp,List vec) { if (vec.size()==0) return null; @@ -1131,11 +649,11 @@ public abstract class Utility { List newAttributes = new ArrayList(); if (rvaData.length>2) { newAttributes.add( - new RuntimeVisibleAnnotations(rvaIndex,rvaData.length,rvaData,cp.getConstantPool())); + new RuntimeVisibleAnnotations(rvaIndex,rvaData.length,rvaData,cp)); } if (riaData.length>2) { newAttributes.add( - new RuntimeInvisibleAnnotations(riaIndex,riaData.length,riaData,cp.getConstantPool())); + new RuntimeInvisibleAnnotations(riaIndex,riaData.length,riaData,cp)); } return (Attribute[])newAttributes.toArray(new Attribute[]{}); @@ -1151,7 +669,8 @@ public abstract class Utility { * - RuntimeVisibleParameterAnnotations * - RuntimeInvisibleParameterAnnotations */ - public static Attribute[] getParameterAnnotationAttributes(ConstantPoolGen cp,List[] /*Array of lists, array size depends on #params */ vec) { + // OPTIMIZE looks heavyweight? + public static Attribute[] getParameterAnnotationAttributes(ConstantPool cp,List[] /*Array of lists, array size depends on #params */ vec) { int visCount[] = new int[vec.length]; int totalVisCount = 0; @@ -1217,13 +736,13 @@ public abstract class Utility { if (totalVisCount>0) { newAttributes.add( - new RuntimeVisibleParameterAnnotations(rvaIndex,rvaData.length,rvaData,cp.getConstantPool())); + new RuntimeVisibleParameterAnnotations(rvaIndex,rvaData.length,rvaData,cp)); } if (totalInvisCount>0) { newAttributes.add( - new RuntimeInvisibleParameterAnnotations(riaIndex,riaData.length,riaData,cp.getConstantPool())); + new RuntimeInvisibleParameterAnnotations(riaIndex,riaData.length,riaData,cp)); } return (Attribute[])newAttributes.toArray(new Attribute[]{}); @@ -1234,16 +753,7 @@ public abstract class Utility { return null; } - - private static final boolean is_digit(char ch) { - return (ch >= '0') && (ch <= '9'); - } - - private static final boolean is_space(char ch) { - return (ch == ' ') || (ch == '\t') || (ch == '\r') || (ch == '\n'); - } - - private static class ResultHolder { + public static class ResultHolder { private String result; private int consumed; @@ -1266,7 +776,6 @@ public abstract class Utility { public int getConsumedChars() { return consumed; } } - // code below here I am happy with .... /** * Return type of signature as a byte value as defined in Constants @@ -1315,122 +824,6 @@ public abstract class Utility { } } - public static final String readClassTypeSignatureFrom(String signature) { - StringBuffer sb = new StringBuffer(); - readClassTypeSignatureFrom(signature,0,sb,false); - return sb.toString(); - } - - /** - * Takes a string and consumes a single complete signature from it, returning - * how many chars it consumed. The chopit flag indicates whether to shorten - * type references ( java/lang/String => String ) - * - * FIXME asc this should also create some kind of object you can query for information about whether its parameterized, what the bounds are, etc... - */ - public static final int readClassTypeSignatureFrom(String signature, int posn, StringBuffer result, boolean chopit) { - int idx = posn; - try { - switch (signature.charAt(idx)) { - case 'B' : result.append("byte"); return 1; - case 'C' : result.append("char"); return 1; - case 'D' : result.append("double"); return 1; - case 'F' : result.append("float"); return 1; - case 'I' : result.append("int"); return 1; - case 'J' : result.append("long"); return 1; - case 'S' : result.append("short"); return 1; - case 'Z' : result.append("boolean");return 1; - case 'V' : result.append("void"); return 1; - - - //FIXME ASC Need a state machine to check we are parsing the right stuff here ! - case 'T' : - idx++; - int nextSemiIdx = signature.indexOf(';',idx); - result.append(signature.substring(idx,nextSemiIdx)); - return nextSemiIdx+1-posn; - - case '+' : - result.append("? extends "); - return readClassTypeSignatureFrom(signature,idx+1,result,chopit)+1; - - case '-' : - result.append("? super "); - return readClassTypeSignatureFrom(signature,idx+1,result,chopit)+1; - - case '*' : - result.append("?"); - return 1; - - case 'L' : // Full class name - boolean parameterized = false; - int idxSemicolon = signature.indexOf(';',idx); // Look for closing ';' or '<' - int idxAngly = signature.indexOf('<',idx); - int endOfSig = idxSemicolon; - if ((idxAngly!=-1) && idxAngly");idx++; - } - if (signature.charAt(idx)!=';') throw new RuntimeException("Did not find ';' at end of signature, found "+signature.charAt(idx)); - idx++; - return idx-posn; - - - case '[' : // Array declaration - int dim = 0; - while (signature.charAt(idx)=='[') {dim++;idx++;} - idx+=readClassTypeSignatureFrom(signature,idx,result,chopit); - while (dim>0) {result.append("[]");dim--;} - return idx-posn; - - default : throw new ClassFormatException("Invalid signature: `" + - signature + "'"); - } - } catch(StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid signature: " + e + ":" + signature); - } - } - - private static int countBrackets(String brackets) { - char[] chars = brackets.toCharArray(); - int count = 0; - boolean open = false; - - for(int i=0; i 0) { + if ((Constants.iLen[opcode]-1) > 0) { for (int i=0; i < Constants.TYPE_OF_OPERANDS[opcode].length; i++) { buf.append("\t\t"); switch(Constants.TYPE_OF_OPERANDS[opcode][i]) { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java deleted file mode 100644 index ac81ec805..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java +++ /dev/null @@ -1,155 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2004 IBM Corporation - * - * 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 initial implementation - * ******************************************************************/ -package org.aspectj.apache.bcel.classfile.annotation; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.classfile.ConstantPool; -import org.aspectj.apache.bcel.classfile.ConstantUtf8; -import org.aspectj.apache.bcel.classfile.Utility; - -/** - * An annotation is an immutable object (AnnotationGen is the mutable variant) - it basically contains a list - * of name-value pairs. - */ -public class Annotation { - private int typeIndex; - // OPTIMIZE don't need a new list instance for every annotation instance! - private List /* ElementNameValuePair */ evs = new ArrayList(); - private ConstantPool cpool; - private boolean isRuntimeVisible; - - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append("ANNOTATION ["+getTypeSignature()+"] ["+ - (isRuntimeVisible?"runtimeVisible":"runtimeInvisible")+"] ["); - for (Iterator iter = evs.iterator(); iter.hasNext();) { - ElementNameValuePair element = (ElementNameValuePair) iter.next(); - sb.append(element.toString()); - if (iter.hasNext()) sb.append(","); - } - sb.append("]"); - return sb.toString(); - } - - private Annotation(ConstantPool cpool) { - this.cpool = cpool; - } - - public Annotation(int index,ConstantPool cpool,boolean visible) { - this.cpool = cpool; - this.typeIndex = index; - this.isRuntimeVisible = visible; - } - - protected static Annotation read(DataInputStream dis,ConstantPool cpool,boolean isRuntimeVisible) throws IOException { - Annotation a = new Annotation(cpool); - a.typeIndex = dis.readUnsignedShort(); - int elemValuePairCount = dis.readUnsignedShort(); - for (int i=0;i0) { - result.append("("); - for (Iterator iter = getValues().iterator(); iter.hasNext();) { - ElementNameValuePair element = (ElementNameValuePair) iter.next(); - result.append(element.toShortString()); - } - result.append(")"); - } - return result.toString(); - } - - /** - * Return true if the annotation has a value with the specified name (n) and value (v) - */ - public boolean hasNameValuePair(String n, String v) { - for (int i=0;i - - - - - -

          -This package contains the classes that describe the structure of a -Java class file and a class file parser. -

          - - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/AALOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/AALOAD.java deleted file mode 100644 index e27a96b11..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/AALOAD.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * AALOAD - Load reference from array - *
          Stack: ..., arrayref, index -> value
          - * - * @version $Id: AALOAD.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class AALOAD extends ArrayInstruction implements StackProducer { - /** Load reference from array - */ - public AALOAD() { - super(org.aspectj.apache.bcel.Constants.AALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitAALOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/AASTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/AASTORE.java deleted file mode 100644 index dd45cf14a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/AASTORE.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * AASTORE - Store into reference array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: AASTORE.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class AASTORE extends ArrayInstruction implements StackConsumer { - /** Store into reference array - */ - public AASTORE() { - super(org.aspectj.apache.bcel.Constants.AASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitAASTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ACONST_NULL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ACONST_NULL.java deleted file mode 100644 index 8182e3ee7..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ACONST_NULL.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ACONST_NULL - Push null reference - *
          Stack: ... -> ..., null
          - * - * @version $Id: ACONST_NULL.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class ACONST_NULL extends Instruction - implements PushInstruction, TypedInstruction { - /** - * Push null reference - */ - public ACONST_NULL() { - super(org.aspectj.apache.bcel.Constants.ACONST_NULL, (short)1); - } - - /** @return Type.NULL - */ - public Type getType(ConstantPoolGen cp) { - return Type.NULL; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitTypedInstruction(this); - v.visitACONST_NULL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ALOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ALOAD.java deleted file mode 100644 index 7532331a6..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ALOAD.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ALOAD - Load reference from local variable - *
          Stack: ... -> ..., objectref
          - * - * @version $Id: ALOAD.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class ALOAD extends LoadInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ALOAD() { - super(org.aspectj.apache.bcel.Constants.ALOAD, org.aspectj.apache.bcel.Constants.ALOAD_0); - } - - /** Load reference from local variable - * @param n index of local variable - */ - public ALOAD(int n) { - super(org.aspectj.apache.bcel.Constants.ALOAD, org.aspectj.apache.bcel.Constants.ALOAD_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - super.accept(v); - v.visitALOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ANEWARRAY.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ANEWARRAY.java deleted file mode 100644 index c6e671eb9..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ANEWARRAY.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import org.aspectj.apache.bcel.ExceptionConstants; - -/** - * ANEWARRAY - Create new array of references - *
          Stack: ..., count -> ..., arrayref
          - * - * @version $Id: ANEWARRAY.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class ANEWARRAY extends CPInstruction - implements LoadClass, AllocationInstruction, ExceptionThrower, StackProducer { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ANEWARRAY() {} - - public ANEWARRAY(int index) { - super(org.aspectj.apache.bcel.Constants.ANEWARRAY, index); - } - - public Class[] getExceptions(){ - Class[] cs = new Class[1 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; - - System.arraycopy(ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, - cs, 0, ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = - ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION; - return cs; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitLoadClass(this); - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitANEWARRAY(this); - } - - public ObjectType getLoadClassType(ConstantPoolGen cpg) { - Type t = getType(cpg); - - if (t instanceof ArrayType){ - t = ((ArrayType) t).getBasicType(); - } - - return (t instanceof ObjectType)? (ObjectType) t : null; - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ARETURN.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ARETURN.java deleted file mode 100644 index 586779572..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ARETURN.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ARETURN - Return reference from method - *
          Stack: ..., objectref -> <empty>
          - * - * @version $Id: ARETURN.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class ARETURN extends ReturnInstruction { - /** - * Return reference from method - */ - public ARETURN() { - super(org.aspectj.apache.bcel.Constants.ARETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitARETURN(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ARRAYLENGTH.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ARRAYLENGTH.java deleted file mode 100644 index 23b095ca5..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ARRAYLENGTH.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ARRAYLENGTH - Get length of array - *
          Stack: ..., arrayref -> ..., length
          - * - * @version $Id: ARRAYLENGTH.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class ARRAYLENGTH extends Instruction - implements ExceptionThrower, StackProducer { - /** Get length of array - */ - public ARRAYLENGTH() { - super(org.aspectj.apache.bcel.Constants.ARRAYLENGTH, (short)1); - } - - /** @return exceptions this instruction may cause - */ - public Class[] getExceptions() { - return new Class[] { org.aspectj.apache.bcel.ExceptionConstants.NULL_POINTER_EXCEPTION }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitARRAYLENGTH(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ASTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ASTORE.java deleted file mode 100644 index fc6a578f1..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ASTORE.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ASTORE - Store reference into local variable - *
          Stack ..., objectref -> ... 
          - * - * @version $Id: ASTORE.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class ASTORE extends StoreInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ASTORE() { - super(org.aspectj.apache.bcel.Constants.ASTORE, org.aspectj.apache.bcel.Constants.ASTORE_0); - } - - /** Store reference into local variable - * @param n index of local variable - */ - public ASTORE(int n) { - super(org.aspectj.apache.bcel.Constants.ASTORE, org.aspectj.apache.bcel.Constants.ASTORE_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - super.accept(v); - v.visitASTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ATHROW.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ATHROW.java deleted file mode 100644 index 1ad434b8e..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ATHROW.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ATHROW - Throw exception - *
          Stack: ..., objectref -> objectref
          - * - * @version $Id: ATHROW.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class ATHROW extends Instruction implements UnconditionalBranch, ExceptionThrower { - /** - * Throw exception - */ - public ATHROW() { - super(org.aspectj.apache.bcel.Constants.ATHROW, (short)1); - } - - /** @return exceptions this instruction may cause - */ - public Class[] getExceptions() { - return new Class[] { org.aspectj.apache.bcel.ExceptionConstants.THROWABLE }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitUnconditionalBranch(this); - v.visitExceptionThrower(this); - v.visitATHROW(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/AllocationInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/AllocationInstruction.java deleted file mode 100644 index 6111ea5ae..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/AllocationInstruction.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denote family of instructions that allocates space in the heap. - * - * @version $Id: AllocationInstruction.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public interface AllocationInstruction {} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ArithmeticInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ArithmeticInstruction.java deleted file mode 100644 index ff39fe850..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ArithmeticInstruction.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import org.aspectj.apache.bcel.Constants; -/** - * Super class for the family of arithmetic instructions. - * - * @version $Id: ArithmeticInstruction.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public abstract class ArithmeticInstruction extends Instruction - implements TypedInstruction, StackProducer, StackConsumer { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ArithmeticInstruction() {} - - /** - * @param opcode of instruction - */ - protected ArithmeticInstruction(short opcode) { - super(opcode, (short)1); - } - - /** @return type associated with the instruction - */ - public Type getType(ConstantPoolGen cp) { - switch(opcode) { - case Constants.DADD: case Constants.DDIV: case Constants.DMUL: - case Constants.DNEG: case Constants.DREM: case Constants.DSUB: - return Type.DOUBLE; - - case Constants.FADD: case Constants.FDIV: case Constants.FMUL: - case Constants.FNEG: case Constants.FREM: case Constants.FSUB: - return Type.FLOAT; - - case Constants.IADD: case Constants.IAND: case Constants.IDIV: - case Constants.IMUL: case Constants.INEG: case Constants.IOR: case Constants.IREM: - case Constants.ISHL: case Constants.ISHR: case Constants.ISUB: - case Constants.IUSHR: case Constants.IXOR: - return Type.INT; - - case Constants.LADD: case Constants.LAND: case Constants.LDIV: - case Constants.LMUL: case Constants.LNEG: case Constants.LOR: case Constants.LREM: - case Constants.LSHL: case Constants.LSHR: case Constants.LSUB: - case Constants.LUSHR: case Constants.LXOR: - return Type.LONG; - - default: // Never reached - throw new ClassGenException("Unknown type " + opcode); - } - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ArrayInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ArrayInstruction.java deleted file mode 100644 index fc68fea79..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ArrayInstruction.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Super class for instructions dealing with array access such as IALOAD. - * - * @version $Id: ArrayInstruction.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public abstract class ArrayInstruction extends Instruction - implements ExceptionThrower, TypedInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ArrayInstruction() {} - - /** - * @param opcode of instruction - */ - protected ArrayInstruction(short opcode) { - super(opcode, (short)1); - } - - public Class[] getExceptions() { - return org.aspectj.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; - } - - /** @return type associated with the instruction - */ - public Type getType(ConstantPoolGen cp) { - switch(opcode) { - case org.aspectj.apache.bcel.Constants.IALOAD: case org.aspectj.apache.bcel.Constants.IASTORE: - return Type.INT; - case org.aspectj.apache.bcel.Constants.CALOAD: case org.aspectj.apache.bcel.Constants.CASTORE: - return Type.CHAR; - case org.aspectj.apache.bcel.Constants.BALOAD: case org.aspectj.apache.bcel.Constants.BASTORE: - return Type.BYTE; - case org.aspectj.apache.bcel.Constants.SALOAD: case org.aspectj.apache.bcel.Constants.SASTORE: - return Type.SHORT; - case org.aspectj.apache.bcel.Constants.LALOAD: case org.aspectj.apache.bcel.Constants.LASTORE: - return Type.LONG; - case org.aspectj.apache.bcel.Constants.DALOAD: case org.aspectj.apache.bcel.Constants.DASTORE: - return Type.DOUBLE; - case org.aspectj.apache.bcel.Constants.FALOAD: case org.aspectj.apache.bcel.Constants.FASTORE: - return Type.FLOAT; - case org.aspectj.apache.bcel.Constants.AALOAD: case org.aspectj.apache.bcel.Constants.AASTORE: - return Type.OBJECT; - - default: throw new ClassGenException("Oops: unknown case in switch" + opcode); - } - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ArrayType.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ArrayType.java index e937a7c1d..65cd88ded 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ArrayType.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/ArrayType.java @@ -58,7 +58,7 @@ import org.aspectj.apache.bcel.Constants; /** * Denotes array type, such as int[][] * - * @version $Id: ArrayType.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: ArrayType.java,v 1.3 2008/05/28 23:52:57 aclement Exp $ * @author M. Dahm */ public final class ArrayType extends ReferenceType { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/BALOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/BALOAD.java deleted file mode 100644 index fe48c3ae3..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/BALOAD.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * BALOAD - Load byte or boolean from array - *
          Stack: ..., arrayref, index -> ..., value
          - * - * @version $Id: BALOAD.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class BALOAD extends ArrayInstruction implements StackProducer { - /** Load byte or boolean from array - */ - public BALOAD() { - super(org.aspectj.apache.bcel.Constants.BALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitBALOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/BASTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/BASTORE.java deleted file mode 100644 index 265f5e6ca..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/BASTORE.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * BASTORE - Store into byte or boolean array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: BASTORE.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class BASTORE extends ArrayInstruction implements StackConsumer { - /** Store byte or boolean into array - */ - public BASTORE() { - super(org.aspectj.apache.bcel.Constants.BASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitBASTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/BIPUSH.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/BIPUSH.java deleted file mode 100644 index 12af9c85a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/BIPUSH.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import java.io.*; -import org.aspectj.apache.bcel.util.ByteSequence; - -/** - * BIPUSH - Push byte on stack - * - *
          Stack: ... -> ..., value
          - * - * @version $Id: BIPUSH.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class BIPUSH extends Instruction implements ConstantPushInstruction { - private byte b; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - BIPUSH() {} - - /** Push byte on stack - */ - public BIPUSH(byte b) { - super(org.aspectj.apache.bcel.Constants.BIPUSH, (short)2); - this.b = b; - } - - /** - * Dump instruction as byte code to stream out. - */ - public void dump(DataOutputStream out) throws IOException { - super.dump(out); - out.writeByte(b); - } - - /** - * @return mnemonic for instruction - */ - public String toString(boolean verbose) { - return super.toString(verbose) + " " + b; - } - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException - { - length = 2; - b = bytes.readByte(); - } - - public Number getValue() { return new Integer(b); } - - /** @return Type.BYTE - */ - public Type getType(ConstantPoolGen cp) { - return Type.BYTE; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitBIPUSH(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/BREAKPOINT.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/BREAKPOINT.java deleted file mode 100644 index a0c45f61c..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/BREAKPOINT.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * BREAKPOINT, JVM dependent, ignored by default - * - * @version $Id: BREAKPOINT.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class BREAKPOINT extends Instruction { - public BREAKPOINT() { - super(org.aspectj.apache.bcel.Constants.BREAKPOINT, (short)1); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitBREAKPOINT(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/BasicType.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/BasicType.java index d4a57a05f..1d2f4daa5 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/BasicType.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/BasicType.java @@ -58,7 +58,7 @@ import org.aspectj.apache.bcel.Constants; /** * Denotes basic type such as int. * - * @version $Id: BasicType.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: BasicType.java,v 1.3 2008/05/28 23:52:57 aclement Exp $ * @author M. Dahm */ public final class BasicType extends Type { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/BranchHandle.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/BranchHandle.java index 74788f5ea..c735075a4 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/BranchHandle.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/BranchHandle.java @@ -63,21 +63,18 @@ package org.aspectj.apache.bcel.generic; * @see InstructionHandle * @see Instruction * @see InstructionList - * @version $Id: BranchHandle.java,v 1.3 2007/05/22 09:11:40 aclement Exp $ + * @version $Id: BranchHandle.java,v 1.4 2008/05/28 23:52:55 aclement Exp $ * @author M. Dahm */ public final class BranchHandle extends InstructionHandle { - private BranchInstruction bi; // An alias in fact, but saves lots of casts + private InstructionBranch bi; // An alias in fact, but saves lots of casts - private BranchHandle(BranchInstruction i) { + private BranchHandle(InstructionBranch i) { super(i); bi = i; } - /** Factory methods. - */ - - static final BranchHandle getBranchHandle(BranchInstruction i) { + static final BranchHandle getBranchHandle(InstructionBranch i) { return new BranchHandle(i); } @@ -85,15 +82,15 @@ public final class BranchHandle extends InstructionHandle { * Through this overriding all access to the private i_position field should * be prevented. */ - public int getPosition() { return bi.position; } + public int getPosition() { return bi.positionOfThisInstruction; } void setPosition(int pos) { - i_position = bi.position = pos; + i_position = bi.positionOfThisInstruction = pos; } protected int updatePosition(int offset, int max_offset) { int x = bi.updatePosition(offset, max_offset); - i_position = bi.position; + i_position = bi.positionOfThisInstruction; return x; } @@ -124,11 +121,11 @@ public final class BranchHandle extends InstructionHandle { public void setInstruction(Instruction i) { super.setInstruction(i); - if(!(i instanceof BranchInstruction)) + if(!(i instanceof InstructionBranch)) throw new ClassGenException("Assigning " + i + " to branch handle which is not a branch instruction"); - bi = (BranchInstruction)i; + bi = (InstructionBranch)i; } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/BranchInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/BranchInstruction.java deleted file mode 100644 index f6dc3608a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/BranchInstruction.java +++ /dev/null @@ -1,246 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import java.io.*; -import org.aspectj.apache.bcel.util.ByteSequence; - -/** - * Abstract super class for branching instructions like GOTO, IFEQ, etc.. - * Branch instructions may have a variable length, namely GOTO, JSR, - * LOOKUPSWITCH and TABLESWITCH. - * - * @see InstructionList - * @version $Id: BranchInstruction.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public abstract class BranchInstruction extends Instruction implements InstructionTargeter { - protected int index; // Branch target relative to this instruction - protected InstructionHandle target; // Target object in instruction list - protected int position; // Byte code offset - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - BranchInstruction() {} - - /** Common super constructor - * @param opcodee Instruction opcode - * @param target instruction to branch to - */ - protected BranchInstruction(short opcode, InstructionHandle target) { - super(opcode, (short)3); - setTarget(target); - } - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); - - index = getTargetOffset(); - - if(Math.abs(index) >= 32767) // too large for short - throw new ClassGenException("Branch target offset too large for short"); - - out.writeShort(index); // May be negative, i.e., point backwards - } - - /** - * @param target branch target - * @return the offset to `target' relative to this instruction - */ - protected int getTargetOffset(InstructionHandle target) { - if(target == null) - throw new ClassGenException("Target of " + super.toString(true) + - " is invalid null handle"); - - int t = target.getPosition(); - - if(t < 0) - throw new ClassGenException("Invalid branch target position offset for " + - super.toString(true) + ":" + t + ":" + target); - - return t - position; - } - - /** - * @return the offset to this instruction's target - */ - protected int getTargetOffset() { return getTargetOffset(target); } - - /** - * Called by InstructionList.setPositions when setting the position for every - * instruction. In the presence of variable length instructions `setPositions' - * performs multiple passes over the instruction list to calculate the - * correct (byte) positions and offsets by calling this function. - * - * @param offset additional offset caused by preceding (variable length) instructions - * @param max_offset the maximum offset that may be caused by these instructions - * @return additional offset caused by possible change of this instruction's length - */ - protected int updatePosition(int offset, int max_offset) { - position += offset; - return 0; - } - - /** - * Long output format: - * - * <position in byte code> - * <name of opcode> "["<opcode number>"]" - * "("<length of instruction>")" - * "<"<target instruction>">" "@"<branch target offset> - * - * @param verbose long/short format switch - * @return mnemonic for instruction - */ - public String toString(boolean verbose) { - String s = super.toString(verbose); - String t = "null"; - - if(verbose) { - if(target != null) { - if(target.getInstruction() == this) - t = ""; - else if(target.getInstruction() == null) - t = ""; - else - t = target.getInstruction().toString(false); // Avoid circles - } - } else { - if(target != null) { - index = getTargetOffset(); - t = "" + (index + position); - } - } - - return s + " -> " + t; - } - - /** - * Read needed data (e.g. index) from file. Conversion to a InstructionHandle - * is done in InstructionList(byte[]). - * - * @param bytes input stream - * @param wide wide prefix? - * @see InstructionList - */ - protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException - { - length = 3; - index = bytes.readShort(); - } - - /** - * @return target offset in byte code - */ - public final int getIndex() { return index; } - - /** - * @return target of branch instruction - */ - public InstructionHandle getTarget() { return target; } - - /** - * Set branch target - * @param target branch target - */ - public void setTarget(InstructionHandle target) { - notifyTarget(this.target, target, this); - this.target = target; - } - - /** - * Used by BranchInstruction, LocalVariableGen, CodeExceptionGen - */ - static final void notifyTarget(InstructionHandle old_ih, InstructionHandle new_ih, - InstructionTargeter t) { - if(old_ih != null) - old_ih.removeTargeter(t); - if(new_ih != null) - new_ih.addTargeter(t); - } - - /** - * @param old_ih old target - * @param new_ih new target - */ - public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { - if(target == old_ih) - setTarget(new_ih); - else - throw new ClassGenException("Not targeting " + old_ih + ", but " + target); - } - - /** - * @return true, if ih is target of this instruction - */ - public boolean containsTarget(InstructionHandle ih) { - return (target == ih); - } - - /** - * Inform target that it's not targeted anymore. - */ - void dispose() { - setTarget(null); - index=-1; - position=-1; - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/CALOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/CALOAD.java deleted file mode 100644 index ba05a2f5a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/CALOAD.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * CALOAD - Load char from array - *
          Stack: ..., arrayref, index -> ..., value
          - * - * @version $Id: CALOAD.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class CALOAD extends ArrayInstruction implements StackProducer { - /** Load char from array - */ - public CALOAD() { - super(org.aspectj.apache.bcel.Constants.CALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitCALOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/CASTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/CASTORE.java deleted file mode 100644 index 10014cdac..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/CASTORE.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * CASTORE - Store into char array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: CASTORE.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class CASTORE extends ArrayInstruction implements StackConsumer { - /** Store char into array - */ - public CASTORE() { - super(org.aspectj.apache.bcel.Constants.CASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitCASTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/CHECKCAST.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/CHECKCAST.java deleted file mode 100644 index 2d2fa6574..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/CHECKCAST.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import org.aspectj.apache.bcel.ExceptionConstants; -/** - * CHECKCAST - Check whether object is of given type - *
          Stack: ..., objectref -> ..., objectref
          - * - * @version $Id: CHECKCAST.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class CHECKCAST extends CPInstruction - implements LoadClass, ExceptionThrower, StackProducer, StackConsumer { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - CHECKCAST() {} - - /** Check whether object is of given type - * @param n index to class in constant pool - */ - public CHECKCAST(int index) { - super(org.aspectj.apache.bcel.Constants.CHECKCAST, index); - } - - /** @return exceptions this instruction may cause - */ - public Class[] getExceptions() { - Class[] cs = new Class[1 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; - - System.arraycopy(ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, - cs, 0, ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = - ExceptionConstants.CLASS_CAST_EXCEPTION; - return cs; - } - - public ObjectType getLoadClassType(ConstantPoolGen cpg) { - Type t = getType(cpg); - - if(t instanceof ArrayType) - t = ((ArrayType) t).getBasicType(); - - return (t instanceof ObjectType)? (ObjectType) t : null; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitLoadClass(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitCHECKCAST(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ClassGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ClassGen.java index ee0c7d1bc..4396c2d04 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ClassGen.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/ClassGen.java @@ -66,7 +66,7 @@ import java.util.Iterator; import java.util.List; import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.classfile.AccessFlags; +import org.aspectj.apache.bcel.classfile.Modifiers; import org.aspectj.apache.bcel.classfile.Attribute; import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.classfile.Field; @@ -74,34 +74,31 @@ import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; import org.aspectj.apache.bcel.classfile.SourceFile; import org.aspectj.apache.bcel.classfile.Utility; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations; -import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; /** * Template class for building up a java class. May be initialized with an * existing java class (file). * * @see JavaClass - * @version $Id: ClassGen.java,v 1.8 2006/08/22 07:34:50 aclement Exp $ + * @version $Id: ClassGen.java,v 1.9 2008/05/28 23:52:58 aclement Exp $ * @author M. Dahm * * Upgraded, Andy Clement 9th Mar 06 - calculates SUID */ -public class ClassGen extends AccessFlags implements Cloneable { - /* Corresponds to the fields found in a JavaClass object. - */ +public class ClassGen extends Modifiers implements Cloneable { + private String class_name, super_class_name, file_name; private int class_name_index = -1, superclass_name_index = -1; private int major = Constants.MAJOR_1_1, minor = Constants.MINOR_1_1; - private ConstantPoolGen cp; // Template for building up constant pool + private ConstantPool cp; - // ArrayLists instead of arrays to gather fields, methods, etc. private ArrayList field_vec = new ArrayList(); private ArrayList method_vec = new ArrayList(); - private ArrayList attribute_vec = new ArrayList(); + private ArrayList attributesList = new ArrayList(); private ArrayList interface_vec = new ArrayList(); private ArrayList annotation_vec= new ArrayList(); private boolean unpackedAnnotations = false; @@ -116,24 +113,25 @@ public class ClassGen extends AccessFlags implements Cloneable { * @param cp constant pool to use */ public ClassGen(String class_name, String super_class_name, String file_name, - int access_flags, String[] interfaces, ConstantPoolGen cp) { + int access_flags, String[] interfaces, ConstantPool cp) { this.class_name = class_name; this.super_class_name = super_class_name; this.file_name = file_name; - this.access_flags = access_flags; + this.modifiers = access_flags; this.cp = cp; // Put everything needed by default into the constant pool and the vectors - if(file_name != null) - addAttribute(new SourceFile(cp.addUtf8("SourceFile"), 2, - cp.addUtf8(file_name), cp.getConstantPool())); + if (file_name != null) { + addAttribute(new SourceFile(cp.addUtf8("SourceFile"), 2, cp.addUtf8(file_name), cp)); + } class_name_index = cp.addClass(class_name); superclass_name_index = cp.addClass(super_class_name); - if(interfaces != null) + if (interfaces != null) { for(int i=0; i < interfaces.length; i++) - addInterface(interfaces[i]); + addInterface(interfaces[i]); + } } /** Convenience constructor to set up some important values initially. @@ -147,7 +145,7 @@ public class ClassGen extends AccessFlags implements Cloneable { public ClassGen(String class_name, String super_class_name, String file_name, int access_flags, String[] interfaces) { this(class_name, super_class_name, file_name, access_flags, interfaces, - new ConstantPoolGen()); + new ConstantPool()); } /** @@ -160,8 +158,8 @@ public class ClassGen extends AccessFlags implements Cloneable { class_name = clazz.getClassName(); super_class_name = clazz.getSuperclassName(); file_name = clazz.getSourceFileName(); - access_flags = clazz.getAccessFlags(); - cp = new ConstantPoolGen(clazz.getConstantPool()); + modifiers = clazz.getModifiers(); + cp = clazz.getConstantPool().copy(); major = clazz.getMajor(); minor = clazz.getMinor(); @@ -175,6 +173,7 @@ public class ClassGen extends AccessFlags implements Cloneable { for(int i=0; i < interfaces.length; i++) addInterface(interfaces[i]); + //Attribute[] attrs = attributes.getAttributes(); for(int i=0; i < attributes.length; i++) { // Dont add attributes for annotations as those will have been unpacked if (annotations.length==0) { @@ -207,14 +206,14 @@ public class ClassGen extends AccessFlags implements Cloneable { RuntimeVisibleAnnotations rva = (RuntimeVisibleAnnotations)attr; List annos = rva.getAnnotations(); for (Iterator iter = annos.iterator(); iter.hasNext();) { - Annotation a = (Annotation) iter.next(); + AnnotationGen a = (AnnotationGen) iter.next(); annotationGenObjs.add(new AnnotationGen(a,getConstantPool(),false)); } } else if (attr instanceof RuntimeInvisibleAnnotations) { RuntimeInvisibleAnnotations ria = (RuntimeInvisibleAnnotations)attr; List annos = ria.getAnnotations(); for (Iterator iter = annos.iterator(); iter.hasNext();) { - Annotation a = (Annotation) iter.next(); + AnnotationGen a = (AnnotationGen) iter.next(); annotationGenObjs.add(new AnnotationGen(a,getConstantPool(),false)); } } @@ -230,22 +229,23 @@ public class ClassGen extends AccessFlags implements Cloneable { Field[] fields = getFields(); Method[] methods = getMethods(); + // OPTIMIZE sort out this mangling of arrays and collections Attribute[] attributes = null; if (annotation_vec.size()==0) { attributes = getAttributes(); } else { // TODO: Sometime later, trash any attributes called 'RuntimeVisibleAnnotations' or 'RuntimeInvisibleAnnotations' Attribute[] annAttributes = Utility.getAnnotationAttributes(cp,annotation_vec); - attributes = new Attribute[attribute_vec.size()+annAttributes.length]; - attribute_vec.toArray(attributes); - System.arraycopy(annAttributes,0,attributes,attribute_vec.size(),annAttributes.length); + attributes = new Attribute[attributesList.size()+annAttributes.length]; + attributesList.toArray(attributes); + System.arraycopy(annAttributes,0,attributes,attributesList.size(),annAttributes.length); } // Must be last since the above calls may still add something to it ConstantPool cp = this.cp.getFinalConstantPool(); return new JavaClass(class_name_index, superclass_name_index, - file_name, major, minor, access_flags, + file_name, major, minor, modifiers, cp, interfaces, fields, methods, attributes); } @@ -293,7 +293,7 @@ public class ClassGen extends AccessFlags implements Cloneable { * Add an attribute to this class. * @param a attribute to add */ - public void addAttribute(Attribute a) { attribute_vec.add(a); } + public void addAttribute(Attribute a) { attributesList.add(a); } public void addAnnotation(AnnotationGen a) { annotation_vec.add(a); } /** @@ -311,8 +311,7 @@ public class ClassGen extends AccessFlags implements Cloneable { public void addEmptyConstructor(int access_flags) { InstructionList il = new InstructionList(); il.append(InstructionConstants.THIS); // Push `this' - il.append(new INVOKESPECIAL(cp.addMethodref(super_class_name, - "", "()V"))); + il.append(new InvokeInstruction(Constants.INVOKESPECIAL,cp.addMethodref(super_class_name,"", "()V"))); il.append(InstructionConstants.RETURN); MethodGen mg = new MethodGen(access_flags, Type.VOID, Type.NO_ARGS, null, @@ -358,7 +357,7 @@ public class ClassGen extends AccessFlags implements Cloneable { * Remove an attribute from this class. * @param a attribute to remove */ - public void removeAttribute(Attribute a) { attribute_vec.remove(a); } + public void removeAttribute(Attribute a) { attributesList.remove(a); } public void removeAnnotation(AnnotationGen a) {annotation_vec.remove(a);} /** @@ -376,7 +375,7 @@ public class ClassGen extends AccessFlags implements Cloneable { int i = method_vec.indexOf(old); - if(i < 0) + if (i < 0) method_vec.add(new_); else method_vec.set(i, new_); @@ -429,6 +428,12 @@ public class ClassGen extends AccessFlags implements Cloneable { addMethod(methods[m]); } + public void setFields(Field[] fs) { + field_vec.clear(); + for(int m=0; mM. Dahm */ public class ClassGenException extends RuntimeException { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ClassObserver.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ClassObserver.java deleted file mode 100644 index a52b5fc7a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ClassObserver.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Implement this interface if you're interested in changes to a ClassGen object - * and register yourself with addObserver(). - * - * @version $Id: ClassObserver.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public interface ClassObserver { - public void notify(ClassGen clazz); -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/CodeExceptionGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/CodeExceptionGen.java index 62c02ea49..01b839207 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/CodeExceptionGen.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/CodeExceptionGen.java @@ -55,6 +55,7 @@ package org.aspectj.apache.bcel.generic; */ import org.aspectj.apache.bcel.classfile.CodeException; +import org.aspectj.apache.bcel.classfile.ConstantPool; /** * This class represents an exception handler, i.e., specifies the region where @@ -65,7 +66,7 @@ import org.aspectj.apache.bcel.classfile.CodeException; * The end of the region is automatically mapped to be exclusive when calling * getCodeException(), i.e., there is no difference semantically. * - * @version $Id: CodeExceptionGen.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: CodeExceptionGen.java,v 1.5 2008/05/28 23:52:56 aclement Exp $ * @author M. Dahm * @see MethodGen * @see CodeException @@ -104,7 +105,7 @@ public final class CodeExceptionGen * * @param cp constant pool */ - public CodeException getCodeException(ConstantPoolGen cp) { + public CodeException getCodeException(ConstantPool cp) { return new CodeException(start_pc.getPosition(), end_pc.getPosition() + end_pc.getInstruction().getLength(), handler_pc.getPosition(), @@ -115,7 +116,7 @@ public final class CodeExceptionGen * @param start_pc Start of handled region (inclusive) */ public void setStartPC(InstructionHandle start_pc) { - BranchInstruction.notifyTarget(this.start_pc, start_pc, this); + InstructionBranch.notifyTarget(this.start_pc, start_pc, this); this.start_pc = start_pc; } @@ -123,7 +124,7 @@ public final class CodeExceptionGen * @param end_pc End of handled region (inclusive) */ public void setEndPC(InstructionHandle end_pc) { - BranchInstruction.notifyTarget(this.end_pc, end_pc, this); + InstructionBranch.notifyTarget(this.end_pc, end_pc, this); this.end_pc = end_pc; } @@ -131,7 +132,7 @@ public final class CodeExceptionGen * @param handler_pc Start of handler */ public void setHandlerPC(InstructionHandle handler_pc) { - BranchInstruction.notifyTarget(this.handler_pc, handler_pc, this); + InstructionBranch.notifyTarget(this.handler_pc, handler_pc, this); this.handler_pc = handler_pc; } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/CompoundInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/CompoundInstruction.java deleted file mode 100644 index 243d87e42..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/CompoundInstruction.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Wrapper class for `compound' operations, virtual instructions that - * don't exist as byte code, but give a useful meaning. For example, - * the (virtual) PUSH instruction takes an arbitray argument and produces the - * appropiate code at dump time (ICONST, LDC, BIPUSH, ...). Also you can use the - * SWITCH instruction as a useful template for either LOOKUPSWITCH or - * TABLESWITCH. - * - * The interface provides the possibilty for the user to write - * `templates' or `macros' for such reuseable code patterns. - * - * @version $Id: CompoundInstruction.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - * @see PUSH - * @see SWITCH - */ -public interface CompoundInstruction { - public InstructionList getInstructionList(); -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ConstantPoolGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ConstantPoolGen.java deleted file mode 100644 index a4b04e426..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ConstantPoolGen.java +++ /dev/null @@ -1,802 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import java.util.HashMap; - -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.classfile.Constant; -import org.aspectj.apache.bcel.classfile.ConstantCP; -import org.aspectj.apache.bcel.classfile.ConstantClass; -import org.aspectj.apache.bcel.classfile.ConstantDouble; -import org.aspectj.apache.bcel.classfile.ConstantFieldref; -import org.aspectj.apache.bcel.classfile.ConstantFloat; -import org.aspectj.apache.bcel.classfile.ConstantInteger; -import org.aspectj.apache.bcel.classfile.ConstantInterfaceMethodref; -import org.aspectj.apache.bcel.classfile.ConstantLong; -import org.aspectj.apache.bcel.classfile.ConstantMethodref; -import org.aspectj.apache.bcel.classfile.ConstantNameAndType; -import org.aspectj.apache.bcel.classfile.ConstantPool; -import org.aspectj.apache.bcel.classfile.ConstantString; -import org.aspectj.apache.bcel.classfile.ConstantUtf8; - -/** - * This class is used to build up a constant pool. The user adds - * constants via `addXXX' methods, `addString', `addClass', - * etc.. These methods return an index into the constant - * pool. Finally, `getFinalConstantPool()' returns the constant pool - * built up. Intermediate versions of the constant pool can be - * obtained with `getConstantPool()'. A constant pool has capacity for - * Constants.MAX_SHORT entries. Note that the first (0) is used by the - * JVM and that Double and Long constants need two slots. - * - * @version $Id: ConstantPoolGen.java,v 1.7 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - * @see Constant - */ -public class ConstantPoolGen implements java.io.Serializable { - protected int size = 1024; // Inital size, sufficient in most cases - protected Constant[] constants = new Constant[size]; - protected int index = 1; // First entry (0) used by JVM - - private static final String METHODREF_DELIM = ":"; - private static final String IMETHODREF_DELIM = "#"; - private static final String FIELDREF_DELIM = "&"; - private static final String NAT_DELIM = "%"; - - private static class Index implements java.io.Serializable { - int index; - Index(int i) { index = i; } - } - - /** - * Initialize with given array of constants. - * - * @param c array of given constants, new ones will be appended - */ - public ConstantPoolGen(Constant[] cs) { - if(cs.length > size) { - size = cs.length; - constants = new Constant[size]; - } - - System.arraycopy(cs, 0, constants, 0, cs.length); - - if(cs.length > 0) - index = cs.length; - - for(int i=1; i < index; i++) { - Constant c = constants[i]; - - if(c instanceof ConstantString) { - ConstantString s = (ConstantString)c; - ConstantUtf8 u8 = (ConstantUtf8)constants[s.getStringIndex()]; - - string_table.put(u8.getBytes(), new Index(i)); - } else if(c instanceof ConstantClass) { - ConstantClass s = (ConstantClass)c; - ConstantUtf8 u8 = (ConstantUtf8)constants[s.getNameIndex()]; - - class_table.put(u8.getBytes(), new Index(i)); - } else if(c instanceof ConstantNameAndType) { - ConstantNameAndType n = (ConstantNameAndType)c; - ConstantUtf8 u8 = (ConstantUtf8)constants[n.getNameIndex()]; - ConstantUtf8 u8_2 = (ConstantUtf8)constants[n.getSignatureIndex()]; - - n_a_t_table.put(u8.getBytes() + NAT_DELIM + u8_2.getBytes(), new Index(i)); - } else if(c instanceof ConstantUtf8) { - ConstantUtf8 u = (ConstantUtf8)c; - - utf8_table.put(u.getBytes(), new Index(i)); - } else if(c instanceof ConstantCP) { - ConstantCP m = (ConstantCP)c; - ConstantClass clazz = (ConstantClass)constants[m.getClassIndex()]; - ConstantNameAndType n = (ConstantNameAndType)constants[m.getNameAndTypeIndex()]; - - ConstantUtf8 u8 = (ConstantUtf8)constants[clazz.getNameIndex()]; - String class_name = u8.getBytes().replace('/', '.'); - - u8 = (ConstantUtf8)constants[n.getNameIndex()]; - String method_name = u8.getBytes(); - - u8 = (ConstantUtf8)constants[n.getSignatureIndex()]; - String signature = u8.getBytes(); - - String delim = METHODREF_DELIM; - - if(c instanceof ConstantInterfaceMethodref) - delim = IMETHODREF_DELIM; - else if(c instanceof ConstantFieldref) - delim = FIELDREF_DELIM; - - cp_table.put(class_name + delim + method_name + delim + signature, new Index(i)); - } - } - } - - /** - * Initialize with given constant pool. - */ - public ConstantPoolGen(ConstantPool cp) { - this(cp.getConstantPool()); - } - - /** - * Create empty constant pool. - */ - public ConstantPoolGen() {} - - /** Resize internal array of constants. - */ - protected void adjustSize() { - if(index + 3 >= size) { - Constant[] cs = constants; - - size *= 2; - constants = new Constant[size]; - System.arraycopy(cs, 0, constants, 0, index); - } - } - - private HashMap string_table = new HashMap(); - - /** - * Look for ConstantString in ConstantPool containing String `str'. - * - * @param str String to search for - * @return index on success, -1 otherwise - */ - public int lookupString(String str) { - Index index = (Index)string_table.get(str); - return (index != null)? index.index : -1; - } - - /** - * Add a new String constant to the ConstantPool, if it is not already in there. - * - * @param str String to add - * @return index of entry - */ - public int addString(String str) { - int ret; - - if((ret = lookupString(str)) != -1) - return ret; // Already in CP - - int utf8 = addUtf8(str); - - adjustSize(); - - ConstantString s = new ConstantString(utf8); - - ret = index; - constants[index++] = s; - - string_table.put(str, new Index(ret)); - - return ret; - } - - private HashMap class_table = new HashMap(); - - /** - * Look for ConstantClass in ConstantPool named `str'. - * - * @param str String to search for - * @return index on success, -1 otherwise - */ - public int lookupClass(String str) { - Index index = (Index)class_table.get(str.replace('.', '/')); - return (index != null)? index.index : -1; - } - - private int addClass_(String clazz) { - int ret; - - if((ret = lookupClass(clazz)) != -1) - return ret; // Already in CP - - adjustSize(); - - ConstantClass c = new ConstantClass(addUtf8(clazz)); - - ret = index; - constants[index++] = c; - - class_table.put(clazz, new Index(ret)); - - return ret; - } - - /** - * Add a new Class reference to the ConstantPool, if it is not already in there. - * - * @param str Class to add - * @return index of entry - */ - public int addClass(String str) { - return addClass_(str.replace('.', '/')); - } - - /** - * Add a new Class reference to the ConstantPool for a given type. - * - * @param str Class to add - * @return index of entry - */ - public int addClass(ObjectType type) { - //BCELBUG:? Should this we getClassName() - perhaps it should be getSignature() ?!? - return addClass(type.getClassName()); -// return addClass(type.getSignature()); - } - - /** - * Add a reference to an array class (e.g. String[][]) as needed by MULTIANEWARRAY - * instruction, e.g. to the ConstantPool. - * - * @param type type of array class - * @return index of entry - */ - public int addArrayClass(ArrayType type) { - return addClass_(type.getSignature()); - } - - /** - * Look for ConstantInteger in ConstantPool. - * - * @param n integer number to look for - * @return index on success, -1 otherwise - */ - public int lookupInteger(int n) { - for(int i=1; i < index; i++) { - if(constants[i] instanceof ConstantInteger) { - ConstantInteger c = (ConstantInteger)constants[i]; - - if(c.getBytes() == n) - return i; - } - } - - return -1; - } - - /** - * Add a new Integer constant to the ConstantPool, if it is not already in there. - * - * @param n integer number to add - * @return index of entry - */ - public int addInteger(int n) { - int ret; - - if((ret = lookupInteger(n)) != -1) - return ret; // Already in CP - - adjustSize(); - - ret = index; - constants[index++] = new ConstantInteger(n); - - return ret; - } - - /** - * Look for ConstantFloat in ConstantPool. - * - * @param n Float number to look for - * @return index on success, -1 otherwise - */ - public int lookupFloat(float n) { - int bits = Float.floatToIntBits(n); - - for(int i=1; i < index; i++) { - if(constants[i] instanceof ConstantFloat) { - ConstantFloat c = (ConstantFloat)constants[i]; - - if(Float.floatToIntBits(c.getBytes()) == bits) - return i; - } - } - - return -1; - } - - /** - * Add a new Float constant to the ConstantPool, if it is not already in there. - * - * @param n Float number to add - * @return index of entry - */ - public int addFloat(float n) { - int ret; - - if((ret = lookupFloat(n)) != -1) - return ret; // Already in CP - - adjustSize(); - - ret = index; - constants[index++] = new ConstantFloat(n); - - return ret; - } - - private HashMap utf8_table = new HashMap(); - - /** - * Look for ConstantUtf8 in ConstantPool. - * - * @param n Utf8 string to look for - * @return index on success, -1 otherwise - */ - public int lookupUtf8(String n) { - Index index = (Index)utf8_table.get(n); - - return (index != null)? index.index : -1; - } - - /** - * Add a new Utf8 constant to the ConstantPool, if it is not already in there. - * - * @param n Utf8 string to add - * @return index of entry - */ - public int addUtf8(String n) { - int ret; - - if((ret = lookupUtf8(n)) != -1) - return ret; // Already in CP - - adjustSize(); - - ret = index; - constants[index++] = new ConstantUtf8(n); - - utf8_table.put(n, new Index(ret)); - - return ret; - } - - /** - * Look for ConstantLong in ConstantPool. - * - * @param n Long number to look for - * @return index on success, -1 otherwise - */ - public int lookupLong(long n) { - for(int i=1; i < index; i++) { - if(constants[i] instanceof ConstantLong) { - ConstantLong c = (ConstantLong)constants[i]; - - if(c.getBytes() == n) - return i; - } - } - - return -1; - } - - /** - * Add a new long constant to the ConstantPool, if it is not already in there. - * - * @param n Long number to add - * @return index of entry - */ - public int addLong(long n) { - int ret; - - if((ret = lookupLong(n)) != -1) - return ret; // Already in CP - - adjustSize(); - - ret = index; - constants[index] = new ConstantLong(n); - index += 2; // Wastes one entry according to spec - - return ret; - } - - /** - * Look for ConstantDouble in ConstantPool. - * - * @param n Double number to look for - * @return index on success, -1 otherwise - */ - public int lookupDouble(double n) { - long bits = Double.doubleToLongBits(n); - - for(int i=1; i < index; i++) { - if(constants[i] instanceof ConstantDouble) { - ConstantDouble c = (ConstantDouble)constants[i]; - - if(Double.doubleToLongBits(c.getBytes()) == bits) - return i; - } - } - - return -1; - } - - /** - * Add a new double constant to the ConstantPool, if it is not already in there. - * - * @param n Double number to add - * @return index of entry - */ - public int addDouble(double n) { - int ret; - - if((ret = lookupDouble(n)) != -1) - return ret; // Already in CP - - adjustSize(); - - ret = index; - constants[index] = new ConstantDouble(n); - index += 2; // Wastes one entry according to spec - - return ret; - } - - private HashMap n_a_t_table = new HashMap(); - - /** - * Look for ConstantNameAndType in ConstantPool. - * - * @param name of variable/method - * @param signature of variable/method - * @return index on success, -1 otherwise - */ - public int lookupNameAndType(String name, String signature) { - Index index = (Index)n_a_t_table.get(name + NAT_DELIM + signature); - return (index != null)? index.index : -1; - } - - /** - * Add a new NameAndType constant to the ConstantPool if it is not already - * in there. - * - * @param n NameAndType string to add - * @return index of entry - */ - public int addNameAndType(String name, String signature) { - int ret; - int name_index, signature_index; - - if((ret = lookupNameAndType(name, signature)) != -1) - return ret; // Already in CP - - adjustSize(); - - name_index = addUtf8(name); - signature_index = addUtf8(signature); - ret = index; - constants[index++] = new ConstantNameAndType(name_index, signature_index); - - n_a_t_table.put(name + NAT_DELIM + signature, new Index(ret)); - return ret; - } - - private HashMap cp_table = new HashMap(); - - /** - * Look for ConstantMethodref in ConstantPool. - * - * @param class_name Where to find method - * @param method_name Guess what - * @param signature return and argument types - * @return index on success, -1 otherwise - */ - public int lookupMethodref(String class_name, String method_name, String signature) { - Index index = (Index)cp_table.get(class_name + METHODREF_DELIM + method_name + - METHODREF_DELIM + signature); - return (index != null)? index.index : -1; - } - - public int lookupMethodref(MethodGen method) { - return lookupMethodref(method.getClassName(), method.getName(), - method.getSignature()); - } - - /** - * Add a new Methodref constant to the ConstantPool, if it is not already - * in there. - * - * @param n Methodref string to add - * @return index of entry - */ - public int addMethodref(String class_name, String method_name, String signature) { - int ret, class_index, name_and_type_index; - - if((ret = lookupMethodref(class_name, method_name, signature)) != -1) - return ret; // Already in CP - - adjustSize(); - - name_and_type_index = addNameAndType(method_name, signature); - class_index = addClass(class_name); - ret = index; - constants[index++] = new ConstantMethodref(class_index, name_and_type_index); - - cp_table.put(class_name + METHODREF_DELIM + method_name + - METHODREF_DELIM + signature, new Index(ret)); - - return ret; - } - - public int addMethodref(MethodGen method) { - return addMethodref(method.getClassName(), method.getName(), - method.getSignature()); - } - - /** - * Look for ConstantInterfaceMethodref in ConstantPool. - * - * @param class_name Where to find method - * @param method_name Guess what - * @param signature return and argument types - * @return index on success, -1 otherwise - */ - public int lookupInterfaceMethodref(String class_name, String method_name, String signature) { - Index index = (Index)cp_table.get(class_name + IMETHODREF_DELIM + method_name + - IMETHODREF_DELIM + signature); - return (index != null)? index.index : -1; - } - - public int lookupInterfaceMethodref(MethodGen method) { - return lookupInterfaceMethodref(method.getClassName(), method.getName(), - method.getSignature()); - } - - /** - * Add a new InterfaceMethodref constant to the ConstantPool, if it is not already - * in there. - * - * @param n InterfaceMethodref string to add - * @return index of entry - */ - public int addInterfaceMethodref(String class_name, String method_name, String signature) { - int ret, class_index, name_and_type_index; - - if((ret = lookupInterfaceMethodref(class_name, method_name, signature)) != -1) - return ret; // Already in CP - - adjustSize(); - - class_index = addClass(class_name); - name_and_type_index = addNameAndType(method_name, signature); - ret = index; - constants[index++] = new ConstantInterfaceMethodref(class_index, name_and_type_index); - - cp_table.put(class_name + IMETHODREF_DELIM + method_name + - IMETHODREF_DELIM + signature, new Index(ret)); - - return ret; - } - - public int addInterfaceMethodref(MethodGen method) { - return addInterfaceMethodref(method.getClassName(), method.getName(), - method.getSignature()); - } - - /** - * Look for ConstantFieldref in ConstantPool. - * - * @param class_name Where to find method - * @param field_name Guess what - * @param signature return and argument types - * @return index on success, -1 otherwise - */ - public int lookupFieldref(String class_name, String field_name, String signature) { - Index index = (Index)cp_table.get(class_name + FIELDREF_DELIM + field_name + - FIELDREF_DELIM + signature); - return (index != null)? index.index : -1; - } - - /** - * Add a new Fieldref constant to the ConstantPool, if it is not already - * in there. - * - * @param n Fieldref string to add - * @return index of entry - */ - public int addFieldref(String class_name, String field_name, String signature) { - int ret; - int class_index, name_and_type_index; - - if((ret = lookupFieldref(class_name, field_name, signature)) != -1) - return ret; // Already in CP - - adjustSize(); - - class_index = addClass(class_name); - name_and_type_index = addNameAndType(field_name, signature); - ret = index; - constants[index++] = new ConstantFieldref(class_index, name_and_type_index); - - cp_table.put(class_name + FIELDREF_DELIM + field_name + FIELDREF_DELIM + signature, new Index(ret)); - - return ret; - } - - /** - * @param i index in constant pool - * @return constant pool entry at index i - */ - public Constant getConstant(int i) { return constants[i]; } - - /** - * Use with care! - * - * @param i index in constant pool - * @param c new constant pool entry at index i - */ - public void setConstant(int i, Constant c) { constants[i] = c; } - - /** - * @return intermediate constant pool - */ - public ConstantPool getConstantPool() { - return new ConstantPool(constants); - } - - /** - * @return current size of constant pool - */ - public int getSize() { - return index; - } - - /** - * @return constant pool with proper length - */ - public ConstantPool getFinalConstantPool() { - Constant[] cs = new Constant[index]; - - System.arraycopy(constants, 0, cs, 0, index); - - return new ConstantPool(cs); - } - - /** - * @return String representation. - */ - public String toString() { - StringBuffer buf = new StringBuffer(); - - for(int i=1; i < index; i++) - buf.append(i + ")" + constants[i] + "\n"); - - return buf.toString(); - } - - /** Import constant from another ConstantPool and return new index. - */ - public int addConstant(Constant c, ConstantPoolGen cp) { - Constant[] constants = cp.getConstantPool().getConstantPool(); - - switch(c.getTag()) { - case Constants.CONSTANT_String: { - ConstantString s = (ConstantString)c; - ConstantUtf8 u8 = (ConstantUtf8)constants[s.getStringIndex()]; - - return addString(u8.getBytes()); - } - - case Constants.CONSTANT_Class: { - ConstantClass s = (ConstantClass)c; - ConstantUtf8 u8 = (ConstantUtf8)constants[s.getNameIndex()]; - - return addClass(u8.getBytes()); - } - - case Constants.CONSTANT_NameAndType: { - ConstantNameAndType n = (ConstantNameAndType)c; - ConstantUtf8 u8 = (ConstantUtf8)constants[n.getNameIndex()]; - ConstantUtf8 u8_2 = (ConstantUtf8)constants[n.getSignatureIndex()]; - - return addNameAndType(u8.getBytes(), u8_2.getBytes()); - } - - case Constants.CONSTANT_Utf8: - return addUtf8(((ConstantUtf8)c).getBytes()); - - case Constants.CONSTANT_Double: - return addDouble(((ConstantDouble)c).getBytes()); - - case Constants.CONSTANT_Float: - return addFloat(((ConstantFloat)c).getBytes()); - - case Constants.CONSTANT_Long: - return addLong(((ConstantLong)c).getBytes()); - - case Constants.CONSTANT_Integer: - return addInteger(((ConstantInteger)c).getBytes()); - - case Constants.CONSTANT_InterfaceMethodref: case Constants.CONSTANT_Methodref: - case Constants.CONSTANT_Fieldref: { - ConstantCP m = (ConstantCP)c; - ConstantClass clazz = (ConstantClass)constants[m.getClassIndex()]; - ConstantNameAndType n = (ConstantNameAndType)constants[m.getNameAndTypeIndex()]; - ConstantUtf8 u8 = (ConstantUtf8)constants[clazz.getNameIndex()]; - String class_name = u8.getBytes().replace('/', '.'); - - u8 = (ConstantUtf8)constants[n.getNameIndex()]; - String name = u8.getBytes(); - - u8 = (ConstantUtf8)constants[n.getSignatureIndex()]; - String signature = u8.getBytes(); - - switch(c.getTag()) { - case Constants.CONSTANT_InterfaceMethodref: - return addInterfaceMethodref(class_name, name, signature); - - case Constants.CONSTANT_Methodref: - return addMethodref(class_name, name, signature); - - case Constants.CONSTANT_Fieldref: - return addFieldref(class_name, name, signature); - - default: // Never reached - throw new RuntimeException("Unknown constant type " + c); - } - } - - default: // Never reached - throw new RuntimeException("Unknown constant type " + c); - } - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ConstantPushInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ConstantPushInstruction.java deleted file mode 100644 index de0c600f5..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ConstantPushInstruction.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denotes a push instruction that produces a literal on the stack - * such as SIPUSH, BIPUSH, ICONST, etc. - * - * @version $Id: ConstantPushInstruction.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - - * @see ICONST - * @see SIPUSH - */ -public interface ConstantPushInstruction extends PushInstruction, TypedInstruction { - public Number getValue(); -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ConversionInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ConversionInstruction.java deleted file mode 100644 index c295bed95..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ConversionInstruction.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import org.aspectj.apache.bcel.Constants; -/** - * Super class for the x2y family of instructions. - * - * @version $Id: ConversionInstruction.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public abstract class ConversionInstruction extends Instruction - implements TypedInstruction, StackProducer, StackConsumer { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ConversionInstruction() {} - - /** - * @param opcode opcode of instruction - */ - protected ConversionInstruction(short opcode) { - super(opcode, (short)1); - } - - /** @return type associated with the instruction - */ - public Type getType(ConstantPoolGen cp) { - switch(opcode) { - case Constants.D2I: case Constants.F2I: case Constants.L2I: - return Type.INT; - case Constants.D2F: case Constants.I2F: case Constants.L2F: - return Type.FLOAT; - case Constants.D2L: case Constants.F2L: case Constants.I2L: - return Type.LONG; - case Constants.F2D: case Constants.I2D: case Constants.L2D: - return Type.DOUBLE; - case Constants.I2B: - return Type.BYTE; - case Constants.I2C: - return Type.CHAR; - case Constants.I2S: - return Type.SHORT; - - default: // Never reached - throw new ClassGenException("Unknown type " + opcode); - } - } -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/D2F.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/D2F.java deleted file mode 100644 index 5f57600a9..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/D2F.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * D2F - Convert double to float - *
          Stack: ..., value.word1, value.word2 -> ..., result
          - * - * @version $Id: D2F.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class D2F extends ConversionInstruction { - /** Convert double to float - */ - public D2F() { - super(org.aspectj.apache.bcel.Constants.D2F); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitD2F(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/D2I.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/D2I.java deleted file mode 100644 index 823014972..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/D2I.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * D2I - Convert double to int - *
          Stack: ..., value.word1, value.word2 -> ..., result
          - * - * @version $Id: D2I.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class D2I extends ConversionInstruction { - /** Convert double to int - */ - public D2I() { - super(org.aspectj.apache.bcel.Constants.D2I); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitD2I(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/D2L.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/D2L.java deleted file mode 100644 index c5c305841..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/D2L.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * D2L - Convert double to long - *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          - * - * @version $Id: D2L.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class D2L extends ConversionInstruction { - /** Convert double to long - */ - public D2L() { - super(org.aspectj.apache.bcel.Constants.D2L); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitD2L(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DADD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DADD.java deleted file mode 100644 index 568ca46b2..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DADD.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DADD - Add doubles - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result1.word2 - * - * @version $Id: DADD.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class DADD extends ArithmeticInstruction { - /** Add doubles - */ - public DADD() { - super(org.aspectj.apache.bcel.Constants.DADD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDADD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DALOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DALOAD.java deleted file mode 100644 index a7c0bd9af..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DALOAD.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DALOAD - Load double from array - *
          Stack: ..., arrayref, index -> ..., result.word1, result.word2
          - * - * @version $Id: DALOAD.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class DALOAD extends ArrayInstruction implements StackProducer { - /** Load double from array - */ - public DALOAD() { - super(org.aspectj.apache.bcel.Constants.DALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitDALOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DASTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DASTORE.java deleted file mode 100644 index 3c1cef331..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DASTORE.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DASTORE - Store into double array - *
          Stack: ..., arrayref, index, value.word1, value.word2 -> ...
          - * - * @version $Id: DASTORE.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class DASTORE extends ArrayInstruction implements StackConsumer { - /** Store double into array - */ - public DASTORE() { - super(org.aspectj.apache.bcel.Constants.DASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitDASTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DCMPG.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DCMPG.java deleted file mode 100644 index 627ec726e..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DCMPG.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DCMPG - Compare doubles: value1 > value2 - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result - * - * @version $Id: DCMPG.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class DCMPG extends Instruction - implements TypedInstruction, StackProducer, StackConsumer { - - public DCMPG() { - super(org.aspectj.apache.bcel.Constants.DCMPG, (short)1); - } - - /** @return Type.DOUBLE - */ - public Type getType(ConstantPoolGen cp) { - return Type.DOUBLE; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitDCMPG(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DCMPL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DCMPL.java deleted file mode 100644 index 85d4f4ef5..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DCMPL.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DCMPL - Compare doubles: value1 < value2 - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result - * - * @version $Id: DCMPL.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class DCMPL extends Instruction - implements TypedInstruction, StackProducer, StackConsumer { - public DCMPL() { - super(org.aspectj.apache.bcel.Constants.DCMPL, (short)1); - } - - /** @return Type.DOUBLE - */ - public Type getType(ConstantPoolGen cp) { - return Type.DOUBLE; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitDCMPL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DCONST.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DCONST.java deleted file mode 100644 index 2a5f9bb4a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DCONST.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DCONST - Push 0.0 or 1.0, other values cause an exception - * - *
          Stack: ... -> ..., 
          - * - * @version $Id: DCONST.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class DCONST extends Instruction - implements ConstantPushInstruction, TypedInstruction { - private double value; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - DCONST() {} - - public DCONST(double f) { - super(org.aspectj.apache.bcel.Constants.DCONST_0, (short)1); - - if(f == 0.0) - opcode = org.aspectj.apache.bcel.Constants.DCONST_0; - else if(f == 1.0) - opcode = org.aspectj.apache.bcel.Constants.DCONST_1; - else - throw new ClassGenException("DCONST can be used only for 0.0 and 1.0: " + f); - - value = f; - } - - public Number getValue() { return new Double(value); } - - /** @return Type.DOUBLE - */ - public Type getType(ConstantPoolGen cp) { - return Type.DOUBLE; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitDCONST(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DDIV.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DDIV.java deleted file mode 100644 index cba7c3b24..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DDIV.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DDIV - Divide doubles - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: DDIV.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class DDIV extends ArithmeticInstruction { - /** Divide doubles - */ - public DDIV() { - super(org.aspectj.apache.bcel.Constants.DDIV); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDDIV(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DLOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DLOAD.java deleted file mode 100644 index 5a1b9e428..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DLOAD.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DLOAD - Load double from local variable - *
          Stack ... -> ..., result.word1, result.word2
          - * - * @version $Id: DLOAD.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class DLOAD extends LoadInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - DLOAD() { - super(org.aspectj.apache.bcel.Constants.DLOAD, org.aspectj.apache.bcel.Constants.DLOAD_0); - } - - /** Load double from local variable - * @param n index of local variable - */ - public DLOAD(int n) { - super(org.aspectj.apache.bcel.Constants.DLOAD, org.aspectj.apache.bcel.Constants.DLOAD_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - super.accept(v); - v.visitDLOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DMUL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DMUL.java deleted file mode 100644 index d8de4c631..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DMUL.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DMUL - Multiply doubles - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: DMUL.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class DMUL extends ArithmeticInstruction { - /** Multiply doubles - */ - public DMUL() { - super(org.aspectj.apache.bcel.Constants.DMUL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDMUL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DNEG.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DNEG.java deleted file mode 100644 index dbe39bd87..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DNEG.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DNEG - Negate double - *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          - * - * @version $Id: DNEG.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class DNEG extends ArithmeticInstruction { - public DNEG() { - super(org.aspectj.apache.bcel.Constants.DNEG); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDNEG(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DREM.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DREM.java deleted file mode 100644 index 1b364f43e..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DREM.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DREM - Remainder of doubles - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: DREM.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class DREM extends ArithmeticInstruction { - /** Remainder of doubles - */ - public DREM() { - super(org.aspectj.apache.bcel.Constants.DREM); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDREM(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DRETURN.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DRETURN.java deleted file mode 100644 index 4782efea4..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DRETURN.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DRETURN - Return double from method - *
          Stack: ..., value.word1, value.word2 -> <empty>
          - * - * @version $Id: DRETURN.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class DRETURN extends ReturnInstruction { - /** Return double from method - */ - public DRETURN() { - super(org.aspectj.apache.bcel.Constants.DRETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitDRETURN(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DSTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DSTORE.java deleted file mode 100644 index faa280e6b..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DSTORE.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DSTORE - Store double into local variable - *
          Stack: ..., value.word1, value.word2 -> ... 
          - * - * @version $Id: DSTORE.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class DSTORE extends StoreInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - DSTORE() { - super(org.aspectj.apache.bcel.Constants.DSTORE, org.aspectj.apache.bcel.Constants.DSTORE_0); - } - - /** Store double into local variable - * @param n index of local variable - */ - public DSTORE(int n) { - super(org.aspectj.apache.bcel.Constants.DSTORE, org.aspectj.apache.bcel.Constants.DSTORE_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - super.accept(v); - v.visitDSTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DSUB.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DSUB.java deleted file mode 100644 index 75fb97bef..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DSUB.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DSUB - Substract doubles - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: DSUB.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class DSUB extends ArithmeticInstruction { - /** Substract doubles - */ - public DSUB() { - super(org.aspectj.apache.bcel.Constants.DSUB); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDSUB(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP.java deleted file mode 100644 index 2945d0ca7..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DUP - Duplicate top operand stack word - *
          Stack: ..., word -> ..., word, word
          - * - * @version $Id: DUP.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class DUP extends StackInstruction implements PushInstruction { - public DUP() { - super(org.aspectj.apache.bcel.Constants.DUP); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitStackInstruction(this); - v.visitDUP(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2.java deleted file mode 100644 index 6e061862e..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DUP2 - Duplicate two top operand stack words - *
          Stack: ..., word2, word1 -> ..., word2, word1, word2, word1
          - * - * @version $Id: DUP2.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class DUP2 extends StackInstruction implements PushInstruction { - public DUP2() { - super(org.aspectj.apache.bcel.Constants.DUP2); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitStackInstruction(this); - v.visitDUP2(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2_X1.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2_X1.java deleted file mode 100644 index beb0c4499..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2_X1.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DUP2_X1 - Duplicate two top operand stack words and put three down - *
          Stack: ..., word3, word2, word1 -> ..., word2, word1, word3, word2, word1
          - * - * @version $Id: DUP2_X1.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class DUP2_X1 extends StackInstruction { - public DUP2_X1() { - super(org.aspectj.apache.bcel.Constants.DUP2_X1); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackInstruction(this); - v.visitDUP2_X1(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2_X2.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2_X2.java deleted file mode 100644 index e5bbeac05..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP2_X2.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DUP2_X2 - Duplicate two top operand stack words and put four down - *
          Stack: ..., word4, word3, word2, word1 -> ..., word2, word1, word4, word3, word2, word1
          - * - * @version $Id: DUP2_X2.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class DUP2_X2 extends StackInstruction { - public DUP2_X2() { - super(org.aspectj.apache.bcel.Constants.DUP2_X2); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackInstruction(this); - v.visitDUP2_X2(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP_X1.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP_X1.java deleted file mode 100644 index 8f967ef88..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP_X1.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DUP_X1 - Duplicate top operand stack word and put two down - *
          Stack: ..., word2, word1 -> ..., word1, word2, word1
          - * - * @version $Id: DUP_X1.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class DUP_X1 extends StackInstruction { - public DUP_X1() { - super(org.aspectj.apache.bcel.Constants.DUP_X1); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackInstruction(this); - v.visitDUP_X1(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP_X2.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP_X2.java deleted file mode 100644 index d395a7e70..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/DUP_X2.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * DUP_X2 - Duplicate top operand stack word and put three down - *
          Stack: ..., word3, word2, word1 -> ..., word1, word3, word2, word1
          - * - * @version $Id: DUP_X2.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class DUP_X2 extends StackInstruction { - public DUP_X2() { - super(org.aspectj.apache.bcel.Constants.DUP_X2); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackInstruction(this); - v.visitDUP_X2(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/EmptyVisitor.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/EmptyVisitor.java deleted file mode 100644 index ca983400b..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/EmptyVisitor.java +++ /dev/null @@ -1,244 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Supplies empty method bodies to be overridden by subclasses. - * - * @version $Id: EmptyVisitor.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ - * @author M. Dahm - */ -public abstract class EmptyVisitor implements Visitor { - public void visitStackInstruction(StackInstruction obj) { } - public void visitLocalVariableInstruction(LocalVariableInstruction obj) { } - public void visitBranchInstruction(BranchInstruction obj) { } - public void visitLoadClass(LoadClass obj) { } - public void visitFieldInstruction(FieldInstruction obj) { } - public void visitIfInstruction(IfInstruction obj) { } - public void visitConversionInstruction(ConversionInstruction obj) { } - public void visitPopInstruction(PopInstruction obj) { } - public void visitJsrInstruction(JsrInstruction obj) { } - public void visitGotoInstruction(GotoInstruction obj) { } - public void visitStoreInstruction(StoreInstruction obj) { } - public void visitTypedInstruction(TypedInstruction obj) { } - public void visitSelect(Select obj) { } - public void visitUnconditionalBranch(UnconditionalBranch obj) { } - public void visitPushInstruction(PushInstruction obj) { } - public void visitArithmeticInstruction(ArithmeticInstruction obj) { } - public void visitCPInstruction(CPInstruction obj) { } - public void visitInvokeInstruction(InvokeInstruction obj) { } - public void visitArrayInstruction(ArrayInstruction obj) { } - public void visitAllocationInstruction(AllocationInstruction obj) { } - public void visitReturnInstruction(ReturnInstruction obj) { } - public void visitFieldOrMethod(FieldOrMethod obj) { } - public void visitConstantPushInstruction(ConstantPushInstruction obj) { } - public void visitExceptionThrower(ExceptionThrower obj) { } - public void visitLoadInstruction(LoadInstruction obj) { } - public void visitVariableLengthInstruction(VariableLengthInstruction obj) { } - public void visitStackProducer(StackProducer obj) { } - public void visitStackConsumer(StackConsumer obj) { } - public void visitACONST_NULL(ACONST_NULL obj) { } - public void visitGETSTATIC(GETSTATIC obj) { } - public void visitIF_ICMPLT(IF_ICMPLT obj) { } - public void visitMONITOREXIT(MONITOREXIT obj) { } - public void visitIFLT(IFLT obj) { } - public void visitLSTORE(LSTORE obj) { } - public void visitPOP2(POP2 obj) { } - public void visitBASTORE(BASTORE obj) { } - public void visitISTORE(ISTORE obj) { } - public void visitCHECKCAST(CHECKCAST obj) { } - public void visitFCMPG(FCMPG obj) { } - public void visitI2F(I2F obj) { } - public void visitATHROW(ATHROW obj) { } - public void visitDCMPL(DCMPL obj) { } - public void visitARRAYLENGTH(ARRAYLENGTH obj) { } - public void visitDUP(DUP obj) { } - public void visitINVOKESTATIC(INVOKESTATIC obj) { } - public void visitLCONST(LCONST obj) { } - public void visitDREM(DREM obj) { } - public void visitIFGE(IFGE obj) { } - public void visitCALOAD(CALOAD obj) { } - public void visitLASTORE(LASTORE obj) { } - public void visitI2D(I2D obj) { } - public void visitDADD(DADD obj) { } - public void visitINVOKESPECIAL(INVOKESPECIAL obj) { } - public void visitIAND(IAND obj) { } - public void visitPUTFIELD(PUTFIELD obj) { } - public void visitILOAD(ILOAD obj) { } - public void visitDLOAD(DLOAD obj) { } - public void visitDCONST(DCONST obj) { } - public void visitNEW(NEW obj) { } - public void visitIFNULL(IFNULL obj) { } - public void visitLSUB(LSUB obj) { } - public void visitL2I(L2I obj) { } - public void visitISHR(ISHR obj) { } - public void visitTABLESWITCH(TABLESWITCH obj) { } - public void visitIINC(IINC obj) { } - public void visitDRETURN(DRETURN obj) { } - public void visitFSTORE(FSTORE obj) { } - public void visitDASTORE(DASTORE obj) { } - public void visitIALOAD(IALOAD obj) { } - public void visitDDIV(DDIV obj) { } - public void visitIF_ICMPGE(IF_ICMPGE obj) { } - public void visitLAND(LAND obj) { } - public void visitIDIV(IDIV obj) { } - public void visitLOR(LOR obj) { } - public void visitCASTORE(CASTORE obj) { } - public void visitFREM(FREM obj) { } - public void visitLDC(LDC obj) { } - public void visitBIPUSH(BIPUSH obj) { } - public void visitDSTORE(DSTORE obj) { } - public void visitF2L(F2L obj) { } - public void visitFMUL(FMUL obj) { } - public void visitLLOAD(LLOAD obj) { } - public void visitJSR(JSR obj) { } - public void visitFSUB(FSUB obj) { } - public void visitSASTORE(SASTORE obj) { } - public void visitALOAD(ALOAD obj) { } - public void visitDUP2_X2(DUP2_X2 obj) { } - public void visitRETURN(RETURN obj) { } - public void visitDALOAD(DALOAD obj) { } - public void visitSIPUSH(SIPUSH obj) { } - public void visitDSUB(DSUB obj) { } - public void visitL2F(L2F obj) { } - public void visitIF_ICMPGT(IF_ICMPGT obj) { } - public void visitF2D(F2D obj) { } - public void visitI2L(I2L obj) { } - public void visitIF_ACMPNE(IF_ACMPNE obj) { } - public void visitPOP(POP obj) { } - public void visitI2S(I2S obj) { } - public void visitIFEQ(IFEQ obj) { } - public void visitSWAP(SWAP obj) { } - public void visitIOR(IOR obj) { } - public void visitIREM(IREM obj) { } - public void visitIASTORE(IASTORE obj) { } - public void visitNEWARRAY(NEWARRAY obj) { } - public void visitINVOKEINTERFACE(INVOKEINTERFACE obj) { } - public void visitINEG(INEG obj) { } - public void visitLCMP(LCMP obj) { } - public void visitJSR_W(JSR_W obj) { } - public void visitMULTIANEWARRAY(MULTIANEWARRAY obj) { } - public void visitDUP_X2(DUP_X2 obj) { } - public void visitSALOAD(SALOAD obj) { } - public void visitIFNONNULL(IFNONNULL obj) { } - public void visitDMUL(DMUL obj) { } - public void visitIFNE(IFNE obj) { } - public void visitIF_ICMPLE(IF_ICMPLE obj) { } - public void visitLDC2_W(LDC2_W obj) { } - public void visitGETFIELD(GETFIELD obj) { } - public void visitLADD(LADD obj) { } - public void visitNOP(NOP obj) { } - public void visitFALOAD(FALOAD obj) { } - public void visitINSTANCEOF(INSTANCEOF obj) { } - public void visitIFLE(IFLE obj) { } - public void visitLXOR(LXOR obj) { } - public void visitLRETURN(LRETURN obj) { } - public void visitFCONST(FCONST obj) { } - public void visitIUSHR(IUSHR obj) { } - public void visitBALOAD(BALOAD obj) { } - public void visitDUP2(DUP2 obj) { } - public void visitIF_ACMPEQ(IF_ACMPEQ obj) { } - public void visitIMPDEP1(IMPDEP1 obj) { } - public void visitMONITORENTER(MONITORENTER obj) { } - public void visitLSHL(LSHL obj) { } - public void visitDCMPG(DCMPG obj) { } - public void visitD2L(D2L obj) { } - public void visitIMPDEP2(IMPDEP2 obj) { } - public void visitL2D(L2D obj) { } - public void visitRET(RET obj) { } - public void visitIFGT(IFGT obj) { } - public void visitIXOR(IXOR obj) { } - public void visitINVOKEVIRTUAL(INVOKEVIRTUAL obj) { } - public void visitFASTORE(FASTORE obj) { } - public void visitIRETURN(IRETURN obj) { } - public void visitIF_ICMPNE(IF_ICMPNE obj) { } - public void visitFLOAD(FLOAD obj) { } - public void visitLDIV(LDIV obj) { } - public void visitPUTSTATIC(PUTSTATIC obj) { } - public void visitAALOAD(AALOAD obj) { } - public void visitD2I(D2I obj) { } - public void visitIF_ICMPEQ(IF_ICMPEQ obj) { } - public void visitAASTORE(AASTORE obj) { } - public void visitARETURN(ARETURN obj) { } - public void visitDUP2_X1(DUP2_X1 obj) { } - public void visitFNEG(FNEG obj) { } - public void visitGOTO_W(GOTO_W obj) { } - public void visitD2F(D2F obj) { } - public void visitGOTO(GOTO obj) { } - public void visitISUB(ISUB obj) { } - public void visitF2I(F2I obj) { } - public void visitDNEG(DNEG obj) { } - public void visitICONST(ICONST obj) { } - public void visitFDIV(FDIV obj) { } - public void visitI2B(I2B obj) { } - public void visitLNEG(LNEG obj) { } - public void visitLREM(LREM obj) { } - public void visitIMUL(IMUL obj) { } - public void visitIADD(IADD obj) { } - public void visitLSHR(LSHR obj) { } - public void visitLOOKUPSWITCH(LOOKUPSWITCH obj) { } - public void visitDUP_X1(DUP_X1 obj) { } - public void visitFCMPL(FCMPL obj) { } - public void visitI2C(I2C obj) { } - public void visitLMUL(LMUL obj) { } - public void visitLUSHR(LUSHR obj) { } - public void visitISHL(ISHL obj) { } - public void visitLALOAD(LALOAD obj) { } - public void visitASTORE(ASTORE obj) { } - public void visitANEWARRAY(ANEWARRAY obj) { } - public void visitFRETURN(FRETURN obj) { } - public void visitFADD(FADD obj) { } - public void visitBREAKPOINT(BREAKPOINT obj) { } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ExceptionThrower.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ExceptionThrower.java deleted file mode 100644 index e9db4a84d..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ExceptionThrower.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denote an instruction that may throw a run-time or a linking - * exception (or both) during execution. This is not quite the truth - * as such; because all instructions may throw an - * java.lang.VirtualMachineError. These exceptions are omitted. - * - * The Lava Language Specification specifies exactly which - * RUN-TIME and which LINKING exceptions each - * instruction may throw which is reflected by the implementers. Due - * to the structure of the JVM specification, it may be possible that - * an Instruction implementing this interface returns a Class[] of - * size 0. - * - * Please note that we speak of an "exception" here when we mean any - * "Throwable" object; so this term is equally used for "Exception" - * and "Error" objects. - * - * @version $Id: ExceptionThrower.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author Enver Haase - */ -public interface ExceptionThrower { - public java.lang.Class[] getExceptions(); -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/F2D.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/F2D.java deleted file mode 100644 index cb09e5f9c..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/F2D.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * F2D - Convert float to double - *
          Stack: ..., value -> ..., result.word1, result.word2
          - * - * @version $Id: F2D.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class F2D extends ConversionInstruction { - /** Convert float to double - */ - public F2D() { - super(org.aspectj.apache.bcel.Constants.F2D); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitF2D(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/F2I.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/F2I.java deleted file mode 100644 index 8f76a8c57..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/F2I.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * F2I - Convert float to int - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: F2I.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class F2I extends ConversionInstruction { - /** Convert float to int - */ - public F2I() { - super(org.aspectj.apache.bcel.Constants.F2I); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitF2I(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/F2L.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/F2L.java deleted file mode 100644 index e60da046a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/F2L.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * F2L - Convert float to long - *
          Stack: ..., value -> ..., result.word1, result.word2
          - * - * @version $Id: F2L.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class F2L extends ConversionInstruction { - /** Convert float to long - */ - public F2L() { - super(org.aspectj.apache.bcel.Constants.F2L); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitF2L(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FADD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FADD.java deleted file mode 100644 index 5ec8d578e..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FADD.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FADD - Add floats - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: FADD.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class FADD extends ArithmeticInstruction { - /** Add floats - */ - public FADD() { - super(org.aspectj.apache.bcel.Constants.FADD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFADD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FALOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FALOAD.java deleted file mode 100644 index 03ff7aeaf..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FALOAD.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FALOAD - Load float from array - *
          Stack: ..., arrayref, index -> ..., value
          - * - * @version $Id: FALOAD.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class FALOAD extends ArrayInstruction implements StackProducer { - /** Load float from array - */ - public FALOAD() { - super(org.aspectj.apache.bcel.Constants.FALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitFALOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FASTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FASTORE.java deleted file mode 100644 index c95eea1e7..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FASTORE.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FASTORE - Store into float array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: FASTORE.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class FASTORE extends ArrayInstruction implements StackConsumer { - /** Store float into array - */ - public FASTORE() { - super(org.aspectj.apache.bcel.Constants.FASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitFASTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FCMPG.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FCMPG.java deleted file mode 100644 index a9e41ba66..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FCMPG.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FCMPG - Compare floats: value1 > value2 - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: FCMPG.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class FCMPG extends Instruction - implements TypedInstruction, StackProducer, StackConsumer { - public FCMPG() { - super(org.aspectj.apache.bcel.Constants.FCMPG, (short)1); - } - - /** @return Type.FLOAT - */ - public Type getType(ConstantPoolGen cp) { - return Type.FLOAT; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitFCMPG(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FCMPL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FCMPL.java deleted file mode 100644 index 5c995efe8..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FCMPL.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FCMPL - Compare floats: value1 < value2 - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: FCMPL.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class FCMPL extends Instruction - implements TypedInstruction, StackProducer, StackConsumer { - public FCMPL() { - super(org.aspectj.apache.bcel.Constants.FCMPL, (short)1); - } - - /** @return Type.FLOAT - */ - public Type getType(ConstantPoolGen cp) { - return Type.FLOAT; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitFCMPL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FCONST.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FCONST.java deleted file mode 100644 index 61ae33caf..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FCONST.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FCONST - Push 0.0, 1.0 or 2.0, other values cause an exception - * - *
          Stack: ... -> ..., 
          - * - * @version $Id: FCONST.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class FCONST extends Instruction - implements ConstantPushInstruction, TypedInstruction { - private float value; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FCONST() {} - - public FCONST(float f) { - super(org.aspectj.apache.bcel.Constants.FCONST_0, (short)1); - - if(f == 0.0) - opcode = org.aspectj.apache.bcel.Constants.FCONST_0; - else if(f == 1.0) - opcode = org.aspectj.apache.bcel.Constants.FCONST_1; - else if(f == 2.0) - opcode = org.aspectj.apache.bcel.Constants.FCONST_2; - else - throw new ClassGenException("FCONST can be used only for 0.0, 1.0 and 2.0: " + f); - - value = f; - } - - public Number getValue() { return new Float(value); } - - /** @return Type.FLOAT - */ - public Type getType(ConstantPoolGen cp) { - return Type.FLOAT; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitFCONST(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FDIV.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FDIV.java deleted file mode 100644 index 1d006b3c0..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FDIV.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FDIV - Divide floats - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: FDIV.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class FDIV extends ArithmeticInstruction { - /** Divide floats - */ - public FDIV() { - super(org.aspectj.apache.bcel.Constants.FDIV); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFDIV(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FLOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FLOAD.java deleted file mode 100644 index ca05f6354..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FLOAD.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FLOAD - Load float from local variable - *
          Stack ... -> ..., result
          - * - * @version $Id: FLOAD.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class FLOAD extends LoadInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FLOAD() { - super(org.aspectj.apache.bcel.Constants.FLOAD, org.aspectj.apache.bcel.Constants.FLOAD_0); - } - - /** Load float from local variable - * @param n index of local variable - */ - public FLOAD(int n) { - super(org.aspectj.apache.bcel.Constants.FLOAD, org.aspectj.apache.bcel.Constants.FLOAD_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - super.accept(v); - v.visitFLOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FMUL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FMUL.java deleted file mode 100644 index f52ee3b1f..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FMUL.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FMUL - Multiply floats - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: FMUL.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class FMUL extends ArithmeticInstruction { - /** Multiply floats - */ - public FMUL() { - super(org.aspectj.apache.bcel.Constants.FMUL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFMUL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FNEG.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FNEG.java deleted file mode 100644 index 8457ae258..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FNEG.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FNEG - Negate float - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: FNEG.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class FNEG extends ArithmeticInstruction { - public FNEG() { - super(org.aspectj.apache.bcel.Constants.FNEG); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFNEG(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FREM.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FREM.java deleted file mode 100644 index 6a6c4bc82..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FREM.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FREM - Remainder of floats - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: FREM.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class FREM extends ArithmeticInstruction { - /** Remainder of floats - */ - public FREM() { - super(org.aspectj.apache.bcel.Constants.FREM); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFREM(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FRETURN.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FRETURN.java deleted file mode 100644 index 575610d35..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FRETURN.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FRETURN - Return float from method - *
          Stack: ..., value -> <empty>
          - * - * @version $Id: FRETURN.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class FRETURN extends ReturnInstruction { - /** Return float from method - */ - public FRETURN() { - super(org.aspectj.apache.bcel.Constants.FRETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitFRETURN(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FSTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FSTORE.java deleted file mode 100644 index b1f031e7f..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FSTORE.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FSTORE - Store float into local variable - *
          Stack: ..., value -> ... 
          - * - * @version $Id: FSTORE.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class FSTORE extends StoreInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FSTORE() { - super(org.aspectj.apache.bcel.Constants.FSTORE, org.aspectj.apache.bcel.Constants.FSTORE_0); - } - - /** Store float into local variable - * @param n index of local variable - */ - public FSTORE(int n) { - super(org.aspectj.apache.bcel.Constants.FSTORE, org.aspectj.apache.bcel.Constants.FSTORE_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - super.accept(v); - v.visitFSTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FSUB.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FSUB.java deleted file mode 100644 index dfc2f26d4..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FSUB.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * FSUB - Substract floats - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: FSUB.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class FSUB extends ArithmeticInstruction { - /** Substract floats - */ - public FSUB() { - super(org.aspectj.apache.bcel.Constants.FSUB); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFSUB(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldGen.java index 71e453dfd..e4d2d0917 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldGen.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldGen.java @@ -54,7 +54,6 @@ package org.aspectj.apache.bcel.generic; * . */ -import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -66,16 +65,15 @@ import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.classfile.ConstantValue; import org.aspectj.apache.bcel.classfile.Field; import org.aspectj.apache.bcel.classfile.Utility; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; import org.aspectj.apache.bcel.classfile.annotation.RuntimeAnnotations; -import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; /** * Template class for building up a field. The only extraordinary thing * one can do is to add a constant value attribute to a field (which must of - * course be compatible with to the declared type). + * course be compatible with the declared type). * - * @version $Id: FieldGen.java,v 1.4 2005/03/10 12:15:04 aclement Exp $ + * @version $Id: FieldGen.java,v 1.5 2008/05/28 23:52:59 aclement Exp $ * @author M. Dahm * @see Field */ @@ -92,8 +90,8 @@ public class FieldGen extends FieldGenOrMethodGen { * @param name field name * @param cp constant pool */ - public FieldGen(int access_flags, Type type, String name, ConstantPoolGen cp) { - setAccessFlags(access_flags); + public FieldGen(int access_flags, Type type, String name, ConstantPool cp) { + setModifiers(access_flags); setType(type); setName(name); setConstantPool(cp); @@ -105,8 +103,8 @@ public class FieldGen extends FieldGenOrMethodGen { * @param field Field object * @param cp constant pool (must contain the same entries as the field's constant pool) */ - public FieldGen(Field field, ConstantPoolGen cp) { - this(field.getAccessFlags(), Type.getType(field.getSignature()), field.getName(), cp); + public FieldGen(Field field, ConstantPool cp) { + this(field.getModifiers(), Type.getType(field.getSignature()), field.getName(), cp); Attribute[] attrs = field.getAttributes(); @@ -117,7 +115,7 @@ public class FieldGen extends FieldGenOrMethodGen { RuntimeAnnotations runtimeAnnotations = (RuntimeAnnotations)attrs[i]; List l = runtimeAnnotations.getAnnotations(); for (Iterator it = l.iterator(); it.hasNext();) { - Annotation element = (Annotation) it.next(); + AnnotationGen element = (AnnotationGen) it.next(); addAnnotation(new AnnotationGen(element,cp,false)); } } else { @@ -127,81 +125,13 @@ public class FieldGen extends FieldGenOrMethodGen { } private void setValue(int index) { - ConstantPool cp = this.cp.getConstantPool(); + ConstantPool cp = this.cp; Constant c = cp.getConstant(index); value = ((ConstantObject)c).getConstantValue(cp); } - /** - * Set (optional) initial value of field, otherwise it will be set to null/0/false - * by the JVM automatically. - */ - public void setInitValue(String str) { - checkType(new ObjectType("java.lang.String")); - - if(str != null) - value = str; - } - - public void setInitValue(long l) { - checkType(Type.LONG); - - if(l != 0L) - value = new Long(l); - } - - public void setInitValue(int i) { - checkType(Type.INT); - - if(i != 0) - value = new Integer(i); - } - - public void setInitValue(short s) { - checkType(Type.SHORT); - - if(s != 0) - value = new Integer(s); - } - - public void setInitValue(char c) { - checkType(Type.CHAR); - - if(c != 0) - value = new Integer(c); - } - - public void setInitValue(byte b) { - checkType(Type.BYTE); - - if(b != 0) - value = new Integer(b); - } - - public void setInitValue(boolean b) { - checkType(Type.BOOLEAN); - if(b) - value = new Integer(1); - } - - public void setInitValue(float f) { - checkType(Type.FLOAT); - - if(f != 0.0) - value = new Float(f); - } - - public void setInitValue(double d) { - checkType(Type.DOUBLE); - - if(d != 0.0) - value = new Double(d); - } - - /** Remove any initial value. - */ - public void cancelInitValue() { + public void wipeValue() { value = null; } @@ -228,22 +158,12 @@ public class FieldGen extends FieldGenOrMethodGen { checkType(type); int index = addConstant(); addAttribute(new ConstantValue(cp.addUtf8("ConstantValue"), - 2, index, cp.getConstantPool())); + 2, index, cp)); } addAnnotationsAsAttribute(cp); - return new Field(access_flags, name_index, signature_index, getAttributes(), - cp.getConstantPool()); - } - - private void addAnnotationsAsAttribute(ConstantPoolGen cp) { - Attribute[] attrs = Utility.getAnnotationAttributes(cp,annotation_vec); - if (attrs!=null) { - for (int i = 0; i < attrs.length; i++) { - addAttribute(attrs[i]); - } - } + return new Field(modifiers, name_index, signature_index, getAttributesImmutable(), cp); } private int addConstant() { @@ -271,35 +191,8 @@ public class FieldGen extends FieldGenOrMethodGen { public String getSignature() { return type.getSignature(); } - private ArrayList observers; - - /** Add observer for this object. - */ - public void addObserver(FieldObserver o) { - if(observers == null) - observers = new ArrayList(); - - observers.add(o); - } - - /** Remove observer for this object. - */ - public void removeObserver(FieldObserver o) { - if(observers != null) - observers.remove(o); - } - - /** Call notify() method on all observers. This method is not called - * automatically whenever the state has changed, but has to be - * called by the user after he has finished editing the object. - */ - public void update() { - if(observers != null) - for(Iterator e = observers.iterator(); e.hasNext(); ) - ((FieldObserver)e.next()).notify(this); - } - public String getInitValue() { + public String getInitialValue() { if(value != null) { return value.toString(); } else @@ -315,26 +208,26 @@ public class FieldGen extends FieldGenOrMethodGen { public final String toString() { String name, signature, access; // Short cuts to constant pool - access = Utility.accessToString(access_flags); + access = Utility.accessToString(modifiers); access = access.equals("")? "" : (access + " "); signature = type.toString(); name = getName(); StringBuffer buf = new StringBuffer(access + signature + " " + name); - String value = getInitValue(); + String value = getInitialValue(); if(value != null) buf.append(" = " + value); - // J5TODO: Add attributes and annotations to the string + // TODO: Add attributes and annotations to the string return buf.toString(); } /** @return deep copy of this field */ - public FieldGen copy(ConstantPoolGen cp) { + public FieldGen copy(ConstantPool cp) { FieldGen fg = (FieldGen)clone(); fg.setConstantPool(cp); diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldGenOrMethodGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldGenOrMethodGen.java index 12c995991..724c37ad8 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldGenOrMethodGen.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldGenOrMethodGen.java @@ -55,94 +55,114 @@ package org.aspectj.apache.bcel.generic; */ import java.util.ArrayList; +import java.util.List; -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.classfile.AccessFlags; +import org.aspectj.apache.bcel.classfile.Modifiers; import org.aspectj.apache.bcel.classfile.Attribute; -import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; +import org.aspectj.apache.bcel.classfile.ConstantPool; +import org.aspectj.apache.bcel.classfile.Utility; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; /** - * Super class for FieldGen and MethodGen objects, since they have - * some methods in common! - * - * @version $Id: FieldGenOrMethodGen.java,v 1.3 2004/11/22 08:31:27 aclement Exp $ - * @author M. Dahm + * Super class for FieldGen and MethodGen objects, since they have some methods + * in common! + * + * @version $Id: FieldGenOrMethodGen.java,v 1.4 2008/05/28 23:52:59 aclement Exp $ + * @author M. Dahm */ -public abstract class FieldGenOrMethodGen extends AccessFlags - implements NamedAndTyped, Cloneable -{ - protected String name; - protected Type type; - protected ConstantPoolGen cp; - private ArrayList attribute_vec = new ArrayList(); - protected ArrayList annotation_vec= new ArrayList(); - - protected FieldGenOrMethodGen() {} - - public void setType(Type type) { - if(type.getType() == Constants.T_ADDRESS) - throw new IllegalArgumentException("Type can not be " + type); - - this.type = type; - } - public Type getType() { return type; } - - /** @return name of method/field. - */ - public String getName() { return name; } - public void setName(String name) { this.name = name; } - - public ConstantPoolGen getConstantPool() { return cp; } - public void setConstantPool(ConstantPoolGen cp) { this.cp = cp; } - - /** - * Add an attribute to this method. Currently, the JVM knows about - * the `Code', `ConstantValue', `Synthetic' and `Exceptions' - * attributes. Other attributes will be ignored by the JVM but do no - * harm. - * - * @param a attribute to be added - */ - public void addAttribute(Attribute a) { attribute_vec.add(a); } - public void addAnnotation(AnnotationGen ag) { annotation_vec.add(ag);} - - /** - * Remove an attribute. - */ - public void removeAttribute(Attribute a) { attribute_vec.remove(a); } - public void removeAnnotation(AnnotationGen ag) { annotation_vec.remove(ag);} - - /** - * Remove all attributes. - */ - public void removeAttributes() { attribute_vec.clear(); } - public void removeAnnotations(){ annotation_vec.clear();} - - /** - * @return all attributes of this method. - */ - public Attribute[] getAttributes() { - Attribute[] attributes = new Attribute[attribute_vec.size()]; - attribute_vec.toArray(attributes); - return attributes; - } - - public AnnotationGen[] getAnnotations() { - AnnotationGen[] annotations = new AnnotationGen[annotation_vec.size()]; - annotation_vec.toArray(annotations); - return annotations; - } - - /** @return signature of method/field. - */ - public abstract String getSignature(); - - public Object clone() { - try { - return super.clone(); - } catch(CloneNotSupportedException e) { - System.err.println(e); - return null; - } - } +public abstract class FieldGenOrMethodGen extends Modifiers implements Cloneable { + + protected String name; + protected Type type; + protected ConstantPool cp; + private ArrayList/**/ attributeList = new ArrayList(); + private ArrayList annotationList = new ArrayList(); + + protected FieldGenOrMethodGen() { + } + + public void setType(Type type) { + this.type = type; + } + + public Type getType() { + return type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public ConstantPool getConstantPool() { + return cp; + } + + public void setConstantPool(ConstantPool cp) { + this.cp = cp; + } + + public void addAttribute(Attribute a) { + attributeList.add(a); + } + + public void removeAttribute(Attribute a) { + attributeList.remove(a); + } + + public void removeAttributes() { + attributeList.clear(); + } + + public void addAnnotation(AnnotationGen ag) { + annotationList.add(ag); + } + + public void removeAnnotation(AnnotationGen ag) { + annotationList.remove(ag); + } + + public void removeAnnotations() { + annotationList.clear(); + } + + public List/**/ getAttributes() { + return attributeList; + } + + public Attribute[] getAttributesImmutable() { + Attribute[] attributes = new Attribute[attributeList.size()]; + attributeList.toArray(attributes); + return attributes; + } + + protected void addAnnotationsAsAttribute(ConstantPool cp) { + Attribute[] attrs = Utility.getAnnotationAttributes(cp,annotationList); + if (attrs!=null) { + for (int i = 0; i < attrs.length; i++) { + addAttribute(attrs[i]); + } + } + } + + public AnnotationGen[] getAnnotations() { + AnnotationGen[] annotations = new AnnotationGen[annotationList.size()]; + annotationList.toArray(annotations); + return annotations; + } + + public abstract String getSignature(); + + // OPTIMIZE clone any use??? + public Object clone() { + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + System.err.println(e); + return null; + } + } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldInstruction.java index c60419560..e7c67d2ef 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldInstruction.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldInstruction.java @@ -59,27 +59,15 @@ import org.aspectj.apache.bcel.classfile.ConstantPool; /** * Super class for the GET/PUTxxx family of instructions. * - * @version $Id: FieldInstruction.java,v 1.5 2006/07/19 12:06:16 aclement Exp $ + * @version $Id: FieldInstruction.java,v 1.6 2008/05/28 23:52:56 aclement Exp $ * @author M. Dahm */ -public abstract class FieldInstruction extends FieldOrMethod - implements TypedInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FieldInstruction() {} +public class FieldInstruction extends FieldOrMethod { - /** - * @param index to constant pool - */ - protected FieldInstruction(short opcode, int index) { + public FieldInstruction(short opcode, int index) { super(opcode, index); } - /** - * @return mnemonic for instruction with symbolic references resolved - */ public String toString(ConstantPool cp) { return org.aspectj.apache.bcel.Constants.OPCODE_NAMES[opcode] + " " + cp.constantToString(index, org.aspectj.apache.bcel.Constants.CONSTANT_Fieldref); @@ -87,26 +75,33 @@ public abstract class FieldInstruction extends FieldOrMethod /** @return size of field (1 or 2) */ - protected int getFieldSize(ConstantPoolGen cpg) { + protected int getFieldSize(ConstantPool cpg) { return Type.getTypeSize(getSignature(cpg)); } - /** @return return type of referenced field - */ - public Type getType(ConstantPoolGen cpg) { + public Type getType(ConstantPool cpg) { return getFieldType(cpg); } - /** @return type of field - */ - public Type getFieldType(ConstantPoolGen cpg) { + public Type getFieldType(ConstantPool cpg) { return Type.getType(getSignature(cpg)); } - /** @return name of referenced field. - */ - public String getFieldName(ConstantPoolGen cpg) { + + public String getFieldName(ConstantPool cpg) { return getName(cpg); } + + public int produceStack(ConstantPool cpg) { + if (!isStackProducer()) return 0; + + return getFieldSize(cpg); // SAME FOR GETFIELD/GETSTATIC + } + + public int consumeStack(ConstantPool cpg) { + if (!isStackConsumer()) return 0; + if (opcode==GETFIELD) return 1; + return getFieldSize(cpg)+(opcode==PUTFIELD?1:0); + } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldObserver.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldObserver.java deleted file mode 100644 index dfbf47970..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldObserver.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Imnplement this interface if you're interested in changes to a FieldGen object - * and register yourself with addObserver(). - * - * @version $Id: FieldObserver.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public interface FieldObserver { - public void notify(FieldGen field); -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldOrMethod.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldOrMethod.java index 548be1f20..434ca757b 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldOrMethod.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/FieldOrMethod.java @@ -62,23 +62,18 @@ import org.aspectj.apache.bcel.classfile.ConstantUtf8; * Super class for InvokeInstruction and FieldInstruction, since they have * some methods in common! * - * @version $Id: FieldOrMethod.java,v 1.5 2006/02/22 14:58:25 aclement Exp $ + * @version $Id: FieldOrMethod.java,v 1.6 2008/05/28 23:52:57 aclement Exp $ * @author M. Dahm */ -public abstract class FieldOrMethod extends CPInstruction implements LoadClass { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FieldOrMethod() {} +public abstract class FieldOrMethod extends InstructionCP { - private boolean dontKnowSignature=true; +// private boolean dontKnowSignature=true; private String signature; - private boolean dontKnowName =true; +// private boolean dontKnowName =true; private String name; - private boolean dontKnowClassname =true; +// private boolean dontKnowClassname =true; private String classname; /** @@ -90,54 +85,50 @@ public abstract class FieldOrMethod extends CPInstruction implements LoadClass { /** @return signature of referenced method/field. */ - public String getSignature(ConstantPoolGen cpg) { - if (dontKnowSignature) { - ConstantPool cp = cpg.getConstantPool(); + public String getSignature(ConstantPool cp) { + if (signature==null) { ConstantCP cmr = (ConstantCP)cp.getConstant(index); ConstantNameAndType cnat = (ConstantNameAndType)cp.getConstant(cmr.getNameAndTypeIndex()); signature = ((ConstantUtf8)cp.getConstant(cnat.getSignatureIndex())).getBytes(); - dontKnowSignature=false; +// dontKnowSignature=false; } return signature; } /** @return name of referenced method/field. */ - public String getName(ConstantPoolGen cpg) { - if (dontKnowName) { - ConstantPool cp = cpg.getConstantPool(); + public String getName(ConstantPool cp) { + if (name==null) { ConstantCP cmr = (ConstantCP)cp.getConstant(index); ConstantNameAndType cnat = (ConstantNameAndType)cp.getConstant(cmr.getNameAndTypeIndex()); name = ((ConstantUtf8)cp.getConstant(cnat.getNameIndex())).getBytes(); - dontKnowName = false; +// dontKnowName = false; } return name; } /** @return name of the referenced class/interface */ - public String getClassName(ConstantPoolGen cpg) { - if (dontKnowClassname) { - ConstantPool cp = cpg.getConstantPool(); + public String getClassName(ConstantPool cp) { + if (classname==null) { ConstantCP cmr = (ConstantCP)cp.getConstant(index); - String str = cp.getConstantString(cmr.getClassIndex(), org.aspectj.apache.bcel.Constants.CONSTANT_Class); - if (str.charAt(0)=='[') classname= str; - else classname= str.replace('/', '.'); - dontKnowClassname = false; + String str = cp.getConstantString(cmr.getClassIndex(), CONSTANT_Class); + if (str.charAt(0)=='[') classname= str; else classname= str.replace('/', '.'); +// dontKnowClassname = false; } return classname; } /** @return type of the referenced class/interface */ - public ObjectType getClassType(ConstantPoolGen cpg) { + public ObjectType getClassType(ConstantPool cpg) { return new ObjectType(getClassName(cpg)); } /** @return type of the referenced class/interface */ - public ObjectType getLoadClassType(ConstantPoolGen cpg) { + public ObjectType getLoadClassType(ConstantPool cpg) { return getClassType(cpg); } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/GETFIELD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/GETFIELD.java deleted file mode 100644 index c49b393ba..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/GETFIELD.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.ExceptionConstants; - -/** - * GETFIELD - Fetch field from object - *
          Stack: ..., objectref -> ..., value
          - * OR - *
          Stack: ..., objectref -> ..., value.word1, value.word2
          - * - * @version $Id: GETFIELD.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class GETFIELD extends FieldInstruction - implements ExceptionThrower, StackConsumer, StackProducer { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GETFIELD() {} - - public GETFIELD(int index) { - super(Constants.GETFIELD, index); - } - - public int produceStack(ConstantPoolGen cpg) { return getFieldSize(cpg); } - - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, - cs, 0, ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+1] = - ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = - ExceptionConstants.NULL_POINTER_EXCEPTION; - - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitGETFIELD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/GETSTATIC.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/GETSTATIC.java deleted file mode 100644 index 214182096..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/GETSTATIC.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.ExceptionConstants; - -/** - * GETSTATIC - Fetch static field from class - *
          Stack: ..., -> ..., value
          - * OR - *
          Stack: ..., -> ..., value.word1, value.word2
          - * - * @version $Id: GETSTATIC.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class GETSTATIC extends FieldInstruction implements PushInstruction, ExceptionThrower { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GETSTATIC() {} - - public GETSTATIC(int index) { - super(Constants.GETSTATIC, index); - } - - public int produceStack(ConstantPoolGen cpg) { return getFieldSize(cpg); } - - public Class[] getExceptions() { - Class[] cs = new Class[1 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, - cs, 0, ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = - ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitGETSTATIC(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/GOTO.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/GOTO.java deleted file mode 100644 index d36a2f5a8..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/GOTO.java +++ /dev/null @@ -1,122 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import java.io.*; - -/** - * GOTO - Branch always (to relative offset, not absolute address) - * - * @version $Id: GOTO.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class GOTO extends GotoInstruction implements VariableLengthInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GOTO() {} - - public GOTO(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.GOTO, target); - } - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump(DataOutputStream out) throws IOException { - index = getTargetOffset(); - if(opcode == org.aspectj.apache.bcel.Constants.GOTO) - super.dump(out); - else { // GOTO_W - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - } - - /** Called in pass 2 of InstructionList.setPositions() in order to update - * the branch target, that may shift due to variable length instructions. - */ - protected int updatePosition(int offset, int max_offset) { - int i = getTargetOffset(); // Depending on old position value - - position += offset; // Position may be shifted by preceding expansions - - if(Math.abs(i) >= (32767 - max_offset)) { // to large for short (estimate) - opcode = org.aspectj.apache.bcel.Constants.GOTO_W; - length = 5; - return 2; // 5 - 3 - } - - return 0; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitVariableLengthInstruction(this); - v.visitUnconditionalBranch(this); - v.visitBranchInstruction(this); - v.visitGotoInstruction(this); - v.visitGOTO(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/GOTO_W.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/GOTO_W.java deleted file mode 100644 index 9212255b1..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/GOTO_W.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import java.io.*; -import org.aspectj.apache.bcel.util.ByteSequence; - -/** - * GOTO_W - Branch always (to relative offset, not absolute address) - * - * @version $Id: GOTO_W.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class GOTO_W extends GotoInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GOTO_W() {} - - public GOTO_W(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.GOTO_W, target); - length = 5; - } - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump(DataOutputStream out) throws IOException { - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException - { - index = bytes.readInt(); - length = 5; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitUnconditionalBranch(this); - v.visitBranchInstruction(this); - v.visitGotoInstruction(this); - v.visitGOTO_W(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2B.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/I2B.java deleted file mode 100644 index 11b456459..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2B.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * I2B - Convert int to byte - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: I2B.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class I2B extends ConversionInstruction { - /** Convert int to byte - */ - public I2B() { - super(org.aspectj.apache.bcel.Constants.I2B); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2B(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2C.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/I2C.java deleted file mode 100644 index 02cc1f1ab..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2C.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * I2C - Convert int to char - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: I2C.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class I2C extends ConversionInstruction { - /** Convert int to char - */ - public I2C() { - super(org.aspectj.apache.bcel.Constants.I2C); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2C(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2D.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/I2D.java deleted file mode 100644 index ae965dbcc..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2D.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * I2D - Convert int to double - *
          Stack: ..., value -> ..., result.word1, result.word2
          - * - * @version $Id: I2D.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class I2D extends ConversionInstruction { - /** Convert int to double - */ - public I2D() { - super(org.aspectj.apache.bcel.Constants.I2D); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2D(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2F.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/I2F.java deleted file mode 100644 index 3e68badef..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2F.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * I2F - Convert int to float - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: I2F.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class I2F extends ConversionInstruction { - /** Convert int to float - */ - public I2F() { - super(org.aspectj.apache.bcel.Constants.I2F); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2F(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2L.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/I2L.java deleted file mode 100644 index ef5866280..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2L.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * I2L - Convert int to long - *
          Stack: ..., value -> ..., result.word1, result.word2
          - * - * @version $Id: I2L.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class I2L extends ConversionInstruction { - /** Convert int to long - */ - public I2L() { - super(org.aspectj.apache.bcel.Constants.I2L); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2L(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2S.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/I2S.java deleted file mode 100644 index 83f991d6d..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/I2S.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * I2S - Convert int to short - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: I2S.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class I2S extends ConversionInstruction { - public I2S() { - super(org.aspectj.apache.bcel.Constants.I2S); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2S(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IADD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IADD.java deleted file mode 100644 index 528b5158b..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IADD.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IADD - Add ints - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: IADD.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class IADD extends ArithmeticInstruction { - /** Add ints - */ - public IADD() { - super(org.aspectj.apache.bcel.Constants.IADD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIADD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IALOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IALOAD.java deleted file mode 100644 index 64ff778a2..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IALOAD.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IALOAD - Load int from array - *
          Stack: ..., arrayref, index -> ..., value
          - * - * @version $Id: IALOAD.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IALOAD extends ArrayInstruction implements StackProducer { - /** - * Load int from array - */ - public IALOAD() { - super(org.aspectj.apache.bcel.Constants.IALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitIALOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IAND.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IAND.java deleted file mode 100644 index 3cddc41a7..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IAND.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IAND - Bitwise AND int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: IAND.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IAND extends ArithmeticInstruction { - public IAND() { - super(org.aspectj.apache.bcel.Constants.IAND); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIAND(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IASTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IASTORE.java deleted file mode 100644 index 6cc20d5b7..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IASTORE.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IASTORE - Store into int array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: IASTORE.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IASTORE extends ArrayInstruction implements StackConsumer { - /** - * Store into int array - */ - public IASTORE() { - super(org.aspectj.apache.bcel.Constants.IASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitIASTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ICONST.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ICONST.java deleted file mode 100644 index d83418ca3..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ICONST.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ICONST - Push value between -1, ..., 5, other values cause an exception - * - *
          Stack: ... -> ..., 
          - * - * @version $Id: ICONST.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class ICONST extends Instruction - implements ConstantPushInstruction, TypedInstruction { - private int value; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ICONST() {} - - public ICONST(int i) { - super(org.aspectj.apache.bcel.Constants.ICONST_0, (short)1); - - if((i >= -1) && (i <= 5)) - opcode = (short)(org.aspectj.apache.bcel.Constants.ICONST_0 + i); // Even works for i == -1 - else - throw new ClassGenException("ICONST can be used only for value between -1 and 5: " + - i); - value = i; - } - - public Number getValue() { return new Integer(value); } - - /** @return Type.INT - */ - public Type getType(ConstantPoolGen cp) { - return Type.INT; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitICONST(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IDIV.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IDIV.java deleted file mode 100644 index a56e52636..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IDIV.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IDIV - Divide ints - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: IDIV.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class IDIV extends ArithmeticInstruction implements ExceptionThrower { - /** Divide ints - */ - public IDIV() { - super(org.aspectj.apache.bcel.Constants.IDIV); - } - - /** @return exceptions this instruction may cause - */ - public Class[] getExceptions() { - return new Class[] { org.aspectj.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIDIV(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFEQ.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IFEQ.java deleted file mode 100644 index 904956676..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFEQ.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IFEQ - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFEQ.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IFEQ extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFEQ() {} - - public IFEQ(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IFEQ, target); - } - - /** - * @return negation of instruction, e.g. IFEQ.negate() == IFNE - */ - public IfInstruction negate() { - return new IFNE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFEQ(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFGE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IFGE.java deleted file mode 100644 index 0eba8b050..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFGE.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IFGE - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFGE.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class IFGE extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFGE() {} - - public IFGE(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IFGE, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFLT(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFGE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFGT.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IFGT.java deleted file mode 100644 index e36493f79..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFGT.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IFGT - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFGT.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class IFGT extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFGT() {} - - public IFGT(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IFGT, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFLE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFGT(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFLE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IFLE.java deleted file mode 100644 index 706095e39..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFLE.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IFLE - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFLE.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class IFLE extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFLE() {} - - public IFLE(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IFLE, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFGT(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFLE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFLT.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IFLT.java deleted file mode 100644 index c0ca3ebbb..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFLT.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IFLT - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFLT.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class IFLT extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFLT() {} - - public IFLT(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IFLT, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFGE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFLT(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFNE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IFNE.java deleted file mode 100644 index 7a0770f4d..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFNE.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IFNE - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFNE.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IFNE extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFNE() {} - - public IFNE(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IFNE, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFEQ(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFNE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFNONNULL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IFNONNULL.java deleted file mode 100644 index 147f63062..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFNONNULL.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IFNONNULL - Branch if reference is not null - * - *
          Stack: ..., reference -> ...
          - * - * @version $Id: IFNONNULL.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class IFNONNULL extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFNONNULL() {} - - public IFNONNULL(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IFNONNULL, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFNULL(target); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFNONNULL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFNULL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IFNULL.java deleted file mode 100644 index 6275c7692..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IFNULL.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IFNULL - Branch if reference is not null - * - *
          Stack: ..., reference -> ...
          - * - * @version $Id: IFNULL.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IFNULL extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFNULL() {} - - public IFNULL(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IFNULL, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFNONNULL(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFNULL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ACMPEQ.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ACMPEQ.java deleted file mode 100644 index eeb39fb29..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ACMPEQ.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IF_ACMPEQ - Branch if reference comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ACMPEQ.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IF_ACMPEQ extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ACMPEQ() {} - - public IF_ACMPEQ(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IF_ACMPEQ, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ACMPNE(target); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ACMPEQ(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ACMPNE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ACMPNE.java deleted file mode 100644 index db74748ef..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ACMPNE.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IF_ACMPNE - Branch if reference comparison doesn't succeed - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ACMPNE.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IF_ACMPNE extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ACMPNE() {} - - public IF_ACMPNE(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IF_ACMPNE, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ACMPEQ(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ACMPNE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPEQ.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPEQ.java deleted file mode 100644 index 26de9e2b1..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPEQ.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IF_ICMPEQ - Branch if int comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPEQ.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IF_ICMPEQ extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPEQ() {} - - public IF_ICMPEQ(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IF_ICMPEQ, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPNE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPEQ(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPGE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPGE.java deleted file mode 100644 index a679fae95..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPGE.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IF_ICMPGE - Branch if int comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPGE.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class IF_ICMPGE extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPGE() {} - - public IF_ICMPGE(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IF_ICMPGE, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPLT(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPGE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPGT.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPGT.java deleted file mode 100644 index 99cde3dd8..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPGT.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IF_ICMPGT - Branch if int comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPGT.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class IF_ICMPGT extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPGT() {} - - public IF_ICMPGT(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IF_ICMPGT, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPLE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPGT(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPLE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPLE.java deleted file mode 100644 index 1149c0918..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPLE.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IF_ICMPLE - Branch if int comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPLE.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class IF_ICMPLE extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPLE() {} - - public IF_ICMPLE(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IF_ICMPLE, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPGT(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPLE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPLT.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPLT.java deleted file mode 100644 index 1ad059507..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPLT.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IF_ICMPLT - Branch if int comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPLT.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class IF_ICMPLT extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPLT() {} - - public IF_ICMPLT(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IF_ICMPLT, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPGE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPLT(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPNE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPNE.java deleted file mode 100644 index 0fafcbd5a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IF_ICMPNE.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IF_ICMPNE - Branch if int comparison doesn't succeed - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPNE.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class IF_ICMPNE extends IfInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPNE() {} - - public IF_ICMPNE(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.IF_ICMPNE, target); - } - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPEQ(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPNE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IINC.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IINC.java index 7440221e5..6df506e44 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IINC.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/IINC.java @@ -54,130 +54,55 @@ package org.aspectj.apache.bcel.generic; * . */ import java.io.*; -import org.aspectj.apache.bcel.util.ByteSequence; + +import org.aspectj.apache.bcel.Constants; /** * IINC - Increment local variable by constant * - * @version $Id: IINC.java,v 1.3 2005/08/12 15:58:50 acolyer Exp $ + * @version $Id: IINC.java,v 1.4 2008/05/28 23:52:57 aclement Exp $ * @author M. Dahm */ -public class IINC extends LocalVariableInstruction { - private boolean wide; +public class IINC extends InstructionLV { private int c; - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IINC() {} - - /** - * @param n index of local variable - * @param c increment factor - */ - public IINC(int n, int c) { - super(); // Default behaviour of LocalVariableInstruction causes error - - this.opcode = org.aspectj.apache.bcel.Constants.IINC; - this.length = (short)3; + public IINC(int n, int c,boolean w) { + super(Constants.IINC,n); + this.c=c; +// this.wide = w;//((n > org.aspectj.apache.bcel.Constants.MAX_BYTE) || (Math.abs(c) > Byte.MAX_VALUE)); + } - setIndex(n); // May set wide as side effect - setIncrement(c); + private boolean wide() { + return ((lvar > org.aspectj.apache.bcel.Constants.MAX_BYTE) || (Math.abs(c) > Byte.MAX_VALUE)); } - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ public void dump(DataOutputStream out) throws IOException { - if(wide) // Need WIDE prefix ? - out.writeByte(org.aspectj.apache.bcel.Constants.WIDE); - - out.writeByte(opcode); - - if(wide) { - out.writeShort(n); - out.writeShort(c); - } else { - out.writeByte(n); - out.writeByte(c); - } + if (wide()) { + out.writeByte(WIDE); + out.writeByte(opcode); + out.writeShort(lvar); + out.writeShort(c); + } else { + out.writeByte(opcode); + out.writeByte(lvar); + out.writeByte(c); + } } - - private final void setWide() { - if(wide = ((n > org.aspectj.apache.bcel.Constants.MAX_BYTE) || - (Math.abs(c) > Byte.MAX_VALUE))) - length = 6; // wide byte included - else - length = 3; + + + public int getLength() { + if (wide()) return 6; else return 3; // includes wide byte } - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException - { - this.wide = wide; - - if(wide) { - length = 6; - n = bytes.readUnsignedShort(); - c = bytes.readShort(); - } else { - length = 3; - n = bytes.readUnsignedByte(); - c = bytes.readByte(); - } - } - - /** - * @return mnemonic for instruction - */ public String toString(boolean verbose) { return super.toString(verbose) + " " + c; } - /** - * Set index of local variable. - */ - public final void setIndex(int n) { - if(n < 0) - throw new ClassGenException("Negative index value: " + n); - - this.n = n; - setWide(); - } - - /** - * @return increment factor - */ public final int getIncrement() { return c; } - /** - * Set increment factor. - */ - public final void setIncrement(int c) { - this.c = c; - setWide(); - } - - /** @return int type - */ - public Type getType(ConstantPoolGen cp) { - return Type.INT; - } +// //fixme promote or stick in a table +// public Type getType(ConstantPoolGen cp) { +// return Type.INT; +// } - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitLocalVariableInstruction(this); - v.visitIINC(this); - } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ILOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ILOAD.java deleted file mode 100644 index 5c68bff3f..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ILOAD.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ILOAD - Load int from local variable onto stack - *
          Stack: ... -> ..., result
          - * - * @version $Id: ILOAD.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class ILOAD extends LoadInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ILOAD() { - super(org.aspectj.apache.bcel.Constants.ILOAD, org.aspectj.apache.bcel.Constants.ILOAD_0); - } - - /** Load int from local variable - * @param n index of local variable - */ - public ILOAD(int n) { - super(org.aspectj.apache.bcel.Constants.ILOAD, org.aspectj.apache.bcel.Constants.ILOAD_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - super.accept(v); - v.visitILOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IMPDEP1.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IMPDEP1.java deleted file mode 100644 index 0084156a4..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IMPDEP1.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IMPDEP1 - Implementation dependent - * - * @version $Id: IMPDEP1.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class IMPDEP1 extends Instruction { - public IMPDEP1() { - super(org.aspectj.apache.bcel.Constants.IMPDEP1, (short)1); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitIMPDEP1(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IMPDEP2.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IMPDEP2.java deleted file mode 100644 index 20cdc7758..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IMPDEP2.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IMPDEP2 - Implementation dependent - * - * @version $Id: IMPDEP2.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class IMPDEP2 extends Instruction { - public IMPDEP2() { - super(org.aspectj.apache.bcel.Constants.IMPDEP2, (short)1); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitIMPDEP2(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IMUL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IMUL.java deleted file mode 100644 index f435d8899..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IMUL.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IMUL - Multiply ints - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: IMUL.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class IMUL extends ArithmeticInstruction { - /** Multiply ints - */ - public IMUL() { - super(org.aspectj.apache.bcel.Constants.IMUL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIMUL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/INEG.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/INEG.java deleted file mode 100644 index b5d72cb6b..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/INEG.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * INEG - Negate int - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: INEG.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class INEG extends ArithmeticInstruction { - public INEG() { - super(org.aspectj.apache.bcel.Constants.INEG); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitINEG(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/INSTANCEOF.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/INSTANCEOF.java deleted file mode 100644 index ea6dbdf8a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/INSTANCEOF.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * INSTANCEOF - Determine if object is of given type - *
          Stack: ..., objectref -> ..., result
          - * - * @version $Id: INSTANCEOF.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class INSTANCEOF extends CPInstruction - implements LoadClass, ExceptionThrower, StackProducer, StackConsumer { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INSTANCEOF() {} - - public INSTANCEOF(int index) { - super(org.aspectj.apache.bcel.Constants.INSTANCEOF, index); - } - - public Class[] getExceptions() { - return org.aspectj.apache.bcel.ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION; - } - - public ObjectType getLoadClassType(ConstantPoolGen cpg) { - Type t = getType(cpg); - - if(t instanceof ArrayType) - t = ((ArrayType) t).getBasicType(); - - return (t instanceof ObjectType)? (ObjectType) t : null; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitLoadClass(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitINSTANCEOF(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKEINTERFACE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKEINTERFACE.java index 2d49539fd..6f60afdac 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKEINTERFACE.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKEINTERFACE.java @@ -55,30 +55,22 @@ package org.aspectj.apache.bcel.generic; */ import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.ExceptionConstants; import java.io.*; -import org.aspectj.apache.bcel.util.ByteSequence; /** * INVOKEINTERFACE - Invoke interface method *
          Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
          * - * @version $Id: INVOKEINTERFACE.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: INVOKEINTERFACE.java,v 1.3 2008/05/28 23:52:58 aclement Exp $ * @author M. Dahm */ public final class INVOKEINTERFACE extends InvokeInstruction { private int nargs; // Number of arguments on stack (number of stack slots), called "count" in vmspec2 - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKEINTERFACE() {} - public INVOKEINTERFACE(int index, int nargs) { + public INVOKEINTERFACE(int index, int nargs,int zerobyte) { super(Constants.INVOKEINTERFACE, index); - length = 5; if(nargs < 1) throw new ClassGenException("Number of arguments must be > 0 " + nargs); @@ -103,18 +95,6 @@ public final class INVOKEINTERFACE extends InvokeInstruction { */ public int getCount() { return nargs; } - /** - * Read needed data (i.e., index) from file. - */ - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException - { - super.initFromFile(bytes, wide); - - length = 5; - nargs = bytes.readUnsignedByte(); - bytes.readByte(); // Skip 0 byte - } /** * @return mnemonic for instruction with symbolic references resolved @@ -123,41 +103,8 @@ public final class INVOKEINTERFACE extends InvokeInstruction { return super.toString(cp) + " " + nargs; } - public int consumeStack(ConstantPoolGen cpg) { // nargs is given in byte-code + public int consumeStack(ConstantPool cpg) { // nargs is given in byte-code return nargs; // nargs includes this reference } - public Class[] getExceptions() { - Class[] cs = new Class[4 + ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length]; - - System.arraycopy(ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION, 0, - cs, 0, ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length); - - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length+3] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length+2] = ExceptionConstants.ILLEGAL_ACCESS_ERROR; - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length+1] = ExceptionConstants.ABSTRACT_METHOD_ERROR; - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - - return cs; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKEINTERFACE(this); - } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKESPECIAL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKESPECIAL.java deleted file mode 100644 index 7cc32776b..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKESPECIAL.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.ExceptionConstants; - -/** - * INVOKESPECIAL - Invoke instance method; special handling for superclass, private - * and instance initialization method invocations - * - *
          Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
          - * - * @version $Id: INVOKESPECIAL.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class INVOKESPECIAL extends InvokeInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKESPECIAL() {} - - public INVOKESPECIAL(int index) { - super(Constants.INVOKESPECIAL, index); - } - - public Class[] getExceptions() { - Class[] cs = new Class[4 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, - cs, 0, ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+3] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+2] = ExceptionConstants.ABSTRACT_METHOD_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; - - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKESPECIAL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKESTATIC.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKESTATIC.java deleted file mode 100644 index d905ae9c6..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKESTATIC.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.ExceptionConstants; - -/** - * INVOKESTATIC - Invoke a class (static) method - * - *
          Stack: ..., [arg1, [arg2 ...]] -> ...
          - * - * @version $Id: INVOKESTATIC.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class INVOKESTATIC extends InvokeInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKESTATIC() {} - - public INVOKESTATIC(int index) { - super(Constants.INVOKESTATIC, index); - } - - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, - cs, 0, ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKESTATIC(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKEVIRTUAL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKEVIRTUAL.java deleted file mode 100644 index 00c6531f2..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/INVOKEVIRTUAL.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.ExceptionConstants; - -/** - * INVOKEVIRTUAL - Invoke instance method; dispatch based on class - * - *
          Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
          - * - * @version $Id: INVOKEVIRTUAL.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class INVOKEVIRTUAL extends InvokeInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKEVIRTUAL() {} - - public INVOKEVIRTUAL(int index) { - super(Constants.INVOKEVIRTUAL, index); - } - - public Class[] getExceptions() { - Class[] cs = new Class[4 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, - cs, 0, ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+3] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+2] = ExceptionConstants.ABSTRACT_METHOD_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; - - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKEVIRTUAL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IOR.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IOR.java deleted file mode 100644 index c0e0e503a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IOR.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IOR - Bitwise OR int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: IOR.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IOR extends ArithmeticInstruction { - public IOR() { - super(org.aspectj.apache.bcel.Constants.IOR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIOR(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IREM.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IREM.java deleted file mode 100644 index 5c43ec9a9..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IREM.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IREM - Remainder of int - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: IREM.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class IREM extends ArithmeticInstruction implements ExceptionThrower { - /** Remainder of ints - */ - public IREM() { - super(org.aspectj.apache.bcel.Constants.IREM); - } - - /** @return exceptions this instruction may cause - */ - public Class[] getExceptions() { - return new Class[] { org.aspectj.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIREM(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IRETURN.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IRETURN.java deleted file mode 100644 index dea659568..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IRETURN.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IRETURN - Return int from method - *
          Stack: ..., value -> <empty>
          - * - * @version $Id: IRETURN.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IRETURN extends ReturnInstruction { - /** Return int from method - */ - public IRETURN() { - super(org.aspectj.apache.bcel.Constants.IRETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitIRETURN(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ISHL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ISHL.java deleted file mode 100644 index d976045e4..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ISHL.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ISHL - Arithmetic shift left int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: ISHL.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class ISHL extends ArithmeticInstruction { - public ISHL() { - super(org.aspectj.apache.bcel.Constants.ISHL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitISHL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ISHR.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ISHR.java deleted file mode 100644 index 2cf6213a6..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ISHR.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ISHR - Arithmetic shift right int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: ISHR.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class ISHR extends ArithmeticInstruction { - public ISHR() { - super(org.aspectj.apache.bcel.Constants.ISHR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitISHR(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ISTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ISTORE.java deleted file mode 100644 index 9e2e685bf..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ISTORE.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ISTORE - Store int from stack into local variable - *
          Stack: ..., value -> ... 
          - * - * @version $Id: ISTORE.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class ISTORE extends StoreInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ISTORE() { - super(org.aspectj.apache.bcel.Constants.ISTORE, org.aspectj.apache.bcel.Constants.ISTORE_0); - } - - /** Store int into local variable - * @param n index of local variable - */ - public ISTORE(int n) { - super(org.aspectj.apache.bcel.Constants.ISTORE, org.aspectj.apache.bcel.Constants.ISTORE_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - super.accept(v); - v.visitISTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ISUB.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ISUB.java deleted file mode 100644 index a6e4722e1..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ISUB.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * ISUB - Substract ints - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: ISUB.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class ISUB extends ArithmeticInstruction { - /** Substract ints - */ - public ISUB() { - super(org.aspectj.apache.bcel.Constants.ISUB); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitISUB(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IUSHR.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IUSHR.java deleted file mode 100644 index c0d53c436..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IUSHR.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IUSHR - Logical shift right int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: IUSHR.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class IUSHR extends ArithmeticInstruction { - public IUSHR() { - super(org.aspectj.apache.bcel.Constants.IUSHR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIUSHR(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IXOR.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IXOR.java deleted file mode 100644 index 8fdcecb19..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IXOR.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * IXOR - Bitwise XOR int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: IXOR.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class IXOR extends ArithmeticInstruction { - public IXOR() { - super(org.aspectj.apache.bcel.Constants.IXOR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIXOR(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IfInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IfInstruction.java deleted file mode 100644 index 8465879cf..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IfInstruction.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Super class for the IFxxx family of instructions. - * - * @version $Id: IfInstruction.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public abstract class IfInstruction extends BranchInstruction implements StackConsumer { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IfInstruction() {} - - /** - * @param instruction Target instruction to branch to - */ - protected IfInstruction(short opcode, InstructionHandle target) { - super(opcode, target); - } - - /** - * @return negation of instruction, e.g. IFEQ.negate() == IFNE - */ - public abstract IfInstruction negate(); -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/IndexedInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/IndexedInstruction.java deleted file mode 100644 index 7fb4cd4de..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/IndexedInstruction.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denote entity that refers to an index, e.g. local variable instructions, - * RET, CPInstruction, etc. - * - * @version $Id: IndexedInstruction.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public interface IndexedInstruction { - public int getIndex(); - public void setIndex(int index); -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstVisitor.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstVisitor.java new file mode 100644 index 000000000..424ff4a66 --- /dev/null +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstVisitor.java @@ -0,0 +1,247 @@ +package org.aspectj.apache.bcel.generic; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache BCEL" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache BCEL", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +/** + * Interface implementing the Visitor pattern programming style. + * I.e., a class that implements this interface can handle all types of + * instructions with the properly typed methods just by calling the accept() + * method. + * + * @version $Id: InstVisitor.java,v 1.2 2008/05/28 23:52:59 aclement Exp $ + * @author M. Dahm + */ +public interface InstVisitor { + public void visitStackInstruction(Instruction obj); + public void visitLocalVariableInstruction(InstructionLV obj); + public void visitBranchInstruction(InstructionBranch obj); + public void visitLoadClass(Instruction obj); + public void visitFieldInstruction(Instruction obj); + public void visitIfInstruction(Instruction obj); + public void visitConversionInstruction(Instruction obj); + public void visitPopInstruction(Instruction obj); + public void visitStoreInstruction(Instruction obj); + public void visitTypedInstruction(Instruction obj); + public void visitSelect(InstructionSelect obj); + public void visitJsrInstruction(InstructionBranch obj); + public void visitGotoInstruction(Instruction obj); + public void visitUnconditionalBranch(Instruction obj); + public void visitPushInstruction(Instruction obj); + public void visitArithmeticInstruction(Instruction obj); + public void visitCPInstruction(Instruction obj); + public void visitInvokeInstruction(InvokeInstruction obj); + public void visitArrayInstruction(Instruction obj); + public void visitAllocationInstruction(Instruction obj); + public void visitReturnInstruction(Instruction obj); + public void visitFieldOrMethod(Instruction obj); + public void visitConstantPushInstruction(Instruction obj); + public void visitExceptionThrower(Instruction obj); + public void visitLoadInstruction(Instruction obj); + public void visitVariableLengthInstruction(Instruction obj); + public void visitStackProducer(Instruction obj); + public void visitStackConsumer(Instruction obj); + public void visitACONST_NULL(Instruction obj); + public void visitGETSTATIC(FieldInstruction obj); + public void visitIF_ICMPLT(Instruction obj); + public void visitMONITOREXIT(Instruction obj); + public void visitIFLT(Instruction obj); + public void visitLSTORE(Instruction obj); + public void visitPOP2(Instruction obj); + public void visitBASTORE(Instruction obj); + public void visitISTORE(Instruction obj); + public void visitCHECKCAST(Instruction obj); + public void visitFCMPG(Instruction obj); + public void visitI2F(Instruction obj); + public void visitATHROW(Instruction obj); + public void visitDCMPL(Instruction obj); + public void visitARRAYLENGTH(Instruction obj); + public void visitDUP(Instruction obj); + public void visitINVOKESTATIC(InvokeInstruction obj); + public void visitLCONST(Instruction obj); + public void visitDREM(Instruction obj); + public void visitIFGE(Instruction obj); + public void visitCALOAD(Instruction obj); + public void visitLASTORE(Instruction obj); + public void visitI2D(Instruction obj); + public void visitDADD(Instruction obj); + public void visitINVOKESPECIAL(InvokeInstruction obj); + public void visitIAND(Instruction obj); + public void visitPUTFIELD(FieldInstruction obj); + public void visitILOAD(Instruction obj); + public void visitDLOAD(Instruction obj); + public void visitDCONST(Instruction obj); + public void visitNEW(Instruction obj); + public void visitIFNULL(Instruction obj); + public void visitLSUB(Instruction obj); + public void visitL2I(Instruction obj); + public void visitISHR(Instruction obj); + public void visitTABLESWITCH(TABLESWITCH obj); + public void visitIINC(IINC obj); + public void visitDRETURN(Instruction obj); + public void visitFSTORE(Instruction obj); + public void visitDASTORE(Instruction obj); + public void visitIALOAD(Instruction obj); + public void visitDDIV(Instruction obj); + public void visitIF_ICMPGE(Instruction obj); + public void visitLAND(Instruction obj); + public void visitIDIV(Instruction obj); + public void visitLOR(Instruction obj); + public void visitCASTORE(Instruction obj); + public void visitFREM(Instruction obj); + public void visitLDC(Instruction obj); + public void visitBIPUSH(Instruction obj); + public void visitDSTORE(Instruction obj); + public void visitF2L(Instruction obj); + public void visitFMUL(Instruction obj); + public void visitLLOAD(Instruction obj); + public void visitJSR(InstructionBranch obj); + public void visitFSUB(Instruction obj); + public void visitSASTORE(Instruction obj); + public void visitALOAD(Instruction obj); + public void visitDUP2_X2(Instruction obj); + public void visitRETURN(Instruction obj); + public void visitDALOAD(Instruction obj); + public void visitSIPUSH(Instruction obj); + public void visitDSUB(Instruction obj); + public void visitL2F(Instruction obj); + public void visitIF_ICMPGT(Instruction obj); + public void visitF2D(Instruction obj); + public void visitI2L(Instruction obj); + public void visitIF_ACMPNE(Instruction obj); + public void visitPOP(Instruction obj); + public void visitI2S(Instruction obj); + public void visitIFEQ(Instruction obj); + public void visitSWAP(Instruction obj); + public void visitIOR(Instruction obj); + public void visitIREM(Instruction obj); + public void visitIASTORE(Instruction obj); + public void visitNEWARRAY(Instruction obj); + public void visitINVOKEINTERFACE(INVOKEINTERFACE obj); + public void visitINEG(Instruction obj); + public void visitLCMP(Instruction obj); + public void visitJSR_W(InstructionBranch obj); + public void visitMULTIANEWARRAY(MULTIANEWARRAY obj); + public void visitDUP_X2(Instruction obj); + public void visitSALOAD(Instruction obj); + public void visitIFNONNULL(Instruction obj); + public void visitDMUL(Instruction obj); + public void visitIFNE(Instruction obj); + public void visitIF_ICMPLE(Instruction obj); + public void visitLDC2_W(Instruction obj); + public void visitGETFIELD(FieldInstruction obj); + public void visitLADD(Instruction obj); + public void visitNOP(Instruction obj); + public void visitFALOAD(Instruction obj); + public void visitINSTANCEOF(Instruction obj); + public void visitIFLE(Instruction obj); + public void visitLXOR(Instruction obj); + public void visitLRETURN(Instruction obj); + public void visitFCONST(Instruction obj); + public void visitIUSHR(Instruction obj); + public void visitBALOAD(Instruction obj); + public void visitDUP2(Instruction obj); + public void visitIF_ACMPEQ(Instruction obj); + public void visitIMPDEP1(Instruction obj); + public void visitMONITORENTER(Instruction obj); + public void visitLSHL(Instruction obj); + public void visitDCMPG(Instruction obj); + public void visitD2L(Instruction obj); + public void visitIMPDEP2(Instruction obj); + public void visitL2D(Instruction obj); + public void visitRET(RET obj); + public void visitIFGT(Instruction obj); + public void visitIXOR(Instruction obj); + public void visitINVOKEVIRTUAL(InvokeInstruction obj); + public void visitFASTORE(Instruction obj); + public void visitIRETURN(Instruction obj); + public void visitIF_ICMPNE(Instruction obj); + public void visitFLOAD(Instruction obj); + public void visitLDIV(Instruction obj); + public void visitPUTSTATIC(FieldInstruction obj); + public void visitAALOAD(Instruction obj); + public void visitD2I(Instruction obj); + public void visitIF_ICMPEQ(Instruction obj); + public void visitAASTORE(Instruction obj); + public void visitARETURN(Instruction obj); + public void visitDUP2_X1(Instruction obj); + public void visitFNEG(Instruction obj); + public void visitGOTO_W(Instruction obj); + public void visitD2F(Instruction obj); + public void visitGOTO(Instruction obj); + public void visitISUB(Instruction obj); + public void visitF2I(Instruction obj); + public void visitDNEG(Instruction obj); + public void visitICONST(Instruction obj); + public void visitFDIV(Instruction obj); + public void visitI2B(Instruction obj); + public void visitLNEG(Instruction obj); + public void visitLREM(Instruction obj); + public void visitIMUL(Instruction obj); + public void visitIADD(Instruction obj); + public void visitLSHR(Instruction obj); + public void visitLOOKUPSWITCH(LOOKUPSWITCH obj); + public void visitDUP_X1(Instruction obj); + public void visitFCMPL(Instruction obj); + public void visitI2C(Instruction obj); + public void visitLMUL(Instruction obj); + public void visitLUSHR(Instruction obj); + public void visitISHL(Instruction obj); + public void visitLALOAD(Instruction obj); + public void visitASTORE(Instruction obj); + public void visitANEWARRAY(Instruction obj); + public void visitFRETURN(Instruction obj); + public void visitFADD(Instruction obj); + public void visitBREAKPOINT(Instruction obj); +} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/Instruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/Instruction.java index 69de15199..1470c3637 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/Instruction.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/Instruction.java @@ -62,72 +62,43 @@ import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.util.ByteSequence; + /** * Abstract super class for all Java byte codes. * - * @version $Id: Instruction.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: Instruction.java,v 1.5 2008/05/28 23:52:58 aclement Exp $ * @author M. Dahm */ -public abstract class Instruction implements Cloneable, Serializable { - protected short length = 1; // Length of instruction in bytes - protected short opcode = -1; // Opcode number +public class Instruction implements Cloneable, Serializable, Constants { + public short opcode = -1; private static InstructionComparator cmp = InstructionComparator.DEFAULT; - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ Instruction() {} - public Instruction(short opcode, short length) { - this.length = length; - this.opcode = opcode; - } - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); // Common for all instructions - } + public Instruction(short opcode) { this.opcode = opcode; } + + public void dump(DataOutputStream out) throws IOException { out.writeByte(opcode); } - /** @return name of instruction, i.e., opcode name - */ - public String getName() { - return Constants.OPCODE_NAMES[opcode]; - } + public String getName() { return Constants.OPCODE_NAMES[opcode]; } /** * Long output format: - * - * <name of opcode> "["<opcode number>"]" - * "("<length of instruction>")" - * - * @param verbose long/short format switch - * @return mnemonic for instruction + * 'name of opcode' "[" 'opcode number' "]" "(" 'length of instruction' ")" */ public String toString(boolean verbose) { - if(verbose) - return getName() + "[" + opcode + "](" + length + ")"; - else + if (verbose) { + StringBuffer sb = new StringBuffer(); + sb.append(getName()).append("[").append(opcode).append("](size").append(Constants.iLen[opcode]).append(")"); + return sb.toString(); + } else { return getName(); + } } - /** - * @return mnemonic for instruction in verbose format - */ - public String toString() { - return toString(true); - } + public String toString() { return toString(true); } - /** - * @return mnemonic for instruction with sumbolic references resolved - */ - public String toString(ConstantPool cp) { - return toString(false); - } + public String toString(ConstantPool cp) { return toString(false); } /** * Use with caution, since `BranchInstruction's have a `target' reference which @@ -137,32 +108,20 @@ public abstract class Instruction implements Cloneable, Serializable { * @see BranchInstruction * @return (shallow) copy of an instruction */ - public Instruction copy() { - Instruction i = null; - - // "Constant" instruction, no need to duplicate - if(InstructionConstants.INSTRUCTIONS[this.getOpcode()] != null) - i = this; - else { - try { - i = (Instruction)clone(); + final public Instruction copy() { + if (InstructionConstants.INSTRUCTIONS[opcode] != null) { // immutable instructions do not need copying + return this; + } else { + Instruction i = null; + try {//OPTIMIZE is clone the right thing to do here? it is horrible + i = (Instruction)clone(); } catch(CloneNotSupportedException e) { - System.err.println(e); + System.err.println(e); } + return i; } - - return i; } - /** - * Read needed data (e.g. index) from file. - * - * @param bytes byte sequence to read from - * @param wide "wide" instruction flag - */ - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException - {} /** * Read an instruction from (byte code) input stream and return the @@ -171,265 +130,179 @@ public abstract class Instruction implements Cloneable, Serializable { * @param file file to read from * @return instruction object being read */ - public static final Instruction readInstruction(ByteSequence bytes) - throws IOException - { + public static final Instruction readInstruction(ByteSequence bytes) throws IOException { boolean wide = false; short opcode = (short)bytes.readUnsignedByte(); Instruction obj = null; - if(opcode == Constants.WIDE) { // Read next opcode after wide byte + if (opcode == Constants.WIDE) { wide = true; opcode = (short)bytes.readUnsignedByte(); } - if(InstructionConstants.INSTRUCTIONS[opcode] != null) - return InstructionConstants.INSTRUCTIONS[opcode]; // Used predefined immutable object, if available - - /* Find appropiate class, instantiate an (empty) instruction object - * and initialize it by hand. - */ - Class clazz; + Instruction constantInstruction = InstructionConstants.INSTRUCTIONS[opcode]; + if (constantInstruction != null) return constantInstruction; try { - switch(opcode) { - case Constants.NOP: obj = new NOP(); break; - case Constants.ACONST_NULL: obj = new ACONST_NULL(); break; - case Constants.ICONST_M1: - case Constants.ICONST_0: - case Constants.ICONST_1: - case Constants.ICONST_2: - case Constants.ICONST_3: - case Constants.ICONST_4: - case Constants.ICONST_5: obj = new ICONST(); break; - case Constants.LCONST_0: - case Constants.LCONST_1: obj = new LCONST(); break; - case Constants.FCONST_0: - case Constants.FCONST_1: - case Constants.FCONST_2: obj = new FCONST(); break; - case Constants.DCONST_0: - case Constants.DCONST_1: obj = new DCONST(); break; - case Constants.BIPUSH : obj = new BIPUSH(); break; - case Constants.SIPUSH : obj = new SIPUSH(); break; - case Constants.LDC : obj = new LDC(); break; - case Constants.LDC_W: obj = new LDC_W(); break; - case Constants.LDC2_W: obj = new LDC2_W(); break; - case Constants.ILOAD : obj = new ILOAD(); break; - case Constants.LLOAD : obj = new LLOAD(); break; - case Constants.FLOAD : obj = new FLOAD(); break; - case Constants.DLOAD : obj = new DLOAD(); break; - case Constants.ALOAD : obj = new ALOAD(); break; - case Constants.ILOAD_0: - case Constants.ILOAD_1: - case Constants.ILOAD_2: - case Constants.ILOAD_3: obj = new ILOAD(); break; - case Constants.LLOAD_0: - case Constants.LLOAD_1: - case Constants.LLOAD_2: - case Constants.LLOAD_3: obj = new LLOAD(); break; - case Constants.FLOAD_0: - case Constants.FLOAD_1: - case Constants.FLOAD_2: - case Constants.FLOAD_3: obj = new FLOAD(); break; - case Constants.DLOAD_0: - case Constants.DLOAD_1: - case Constants.DLOAD_2: - case Constants.DLOAD_3: obj = new DLOAD(); break; - case Constants.ALOAD_0: - case Constants.ALOAD_1: - case Constants.ALOAD_2: - case Constants.ALOAD_3: obj = new ALOAD(); break; - case Constants.IALOAD : obj = new IALOAD(); break; - case Constants.LALOAD : obj = new LALOAD(); break; - case Constants.FALOAD : obj = new FALOAD(); break; - case Constants.DALOAD : obj = new DALOAD(); break; - case Constants.AALOAD : obj = new AALOAD(); break; - case Constants.BALOAD : obj = new BALOAD(); break; - case Constants.CALOAD : obj = new CALOAD(); break; - case Constants.SALOAD : obj = new SALOAD(); break; - case Constants.ISTORE : obj = new ISTORE(); break; - case Constants.LSTORE : obj = new LSTORE(); break; - case Constants.FSTORE : obj = new FSTORE(); break; - case Constants.DSTORE : obj = new DSTORE(); break; - case Constants.ASTORE : obj = new ASTORE(); break; - case Constants.ISTORE_0: - case Constants.ISTORE_1: - case Constants.ISTORE_2: - case Constants.ISTORE_3: obj = new ISTORE(); break; - case Constants.LSTORE_0: - case Constants.LSTORE_1: - case Constants.LSTORE_2: - case Constants.LSTORE_3: obj = new LSTORE(); break; - case Constants.FSTORE_0: - case Constants.FSTORE_1: - case Constants.FSTORE_2: - case Constants.FSTORE_3: obj = new FSTORE(); break; - case Constants.DSTORE_0: - case Constants.DSTORE_1: - case Constants.DSTORE_2: - case Constants.DSTORE_3: obj = new DSTORE(); break; - case Constants.ASTORE_0: - case Constants.ASTORE_1: - case Constants.ASTORE_2: - case Constants.ASTORE_3: obj = new ASTORE(); break; - case Constants.IASTORE : obj = new IASTORE(); break; - case Constants.LASTORE : obj = new LASTORE(); break; - case Constants.FASTORE : obj = new FASTORE(); break; - case Constants.DASTORE : obj = new DASTORE(); break; - case Constants.AASTORE : obj = new AASTORE(); break; - case Constants.BASTORE : obj = new BASTORE(); break; - case Constants.CASTORE : obj = new CASTORE(); break; - case Constants.SASTORE : obj = new SASTORE(); break; - case Constants.POP : obj = new POP(); break; - case Constants.POP2 : obj = new POP2(); break; - case Constants.DUP : obj = new DUP(); break; - case Constants.DUP_X1: obj = new DUP_X1(); break; - case Constants.DUP_X2: obj = new DUP_X2(); break; - case Constants.DUP2 : obj = new DUP2(); break; - case Constants.DUP2_X1: obj = new DUP2_X1(); break; - case Constants.DUP2_X2: obj = new DUP2_X2(); break; - case Constants.SWAP : obj = new SWAP(); break; - case Constants.IADD : obj = new IADD(); break; - case Constants.LADD : obj = new LADD(); break; - case Constants.FADD : obj = new FADD(); break; - case Constants.DADD : obj = new DADD(); break; - case Constants.ISUB : obj = new ISUB(); break; - case Constants.LSUB : obj = new LSUB(); break; - case Constants.FSUB : obj = new FSUB(); break; - case Constants.DSUB : obj = new DSUB(); break; - case Constants.IMUL : obj = new IMUL(); break; - case Constants.LMUL : obj = new LMUL(); break; - case Constants.FMUL : obj = new FMUL(); break; - case Constants.DMUL : obj = new DMUL(); break; - case Constants.IDIV : obj = new IDIV(); break; - case Constants.LDIV : obj = new LDIV(); break; - case Constants.FDIV : obj = new FDIV(); break; - case Constants.DDIV : obj = new DDIV(); break; - case Constants.IREM : obj = new IREM(); break; - case Constants.LREM : obj = new LREM(); break; - case Constants.FREM : obj = new FREM(); break; - case Constants.DREM : obj = new DREM(); break; - case Constants.INEG : obj = new INEG(); break; - case Constants.LNEG : obj = new LNEG(); break; - case Constants.FNEG : obj = new FNEG(); break; - case Constants.DNEG : obj = new DNEG(); break; - case Constants.ISHL : obj = new ISHL(); break; - case Constants.LSHL : obj = new LSHL(); break; - case Constants.ISHR : obj = new ISHR(); break; - case Constants.LSHR : obj = new LSHR(); break; - case Constants.IUSHR : obj = new IUSHR(); break; - case Constants.LUSHR : obj = new LUSHR(); break; - case Constants.IAND : obj = new IAND(); break; - case Constants.LAND : obj = new LAND(); break; - case Constants.IOR : obj = new IOR(); break; - case Constants.LOR : obj = new LOR(); break; - case Constants.IXOR : obj = new IXOR(); break; - case Constants.LXOR : obj = new LXOR(); break; - case Constants.IINC : obj = new IINC(); break; - case Constants.I2L : obj = new I2L(); break; - case Constants.I2F : obj = new I2F(); break; - case Constants.I2D : obj = new I2D(); break; - case Constants.L2I : obj = new L2I(); break; - case Constants.L2F : obj = new L2F(); break; - case Constants.L2D : obj = new L2D(); break; - case Constants.F2I : obj = new F2I(); break; - case Constants.F2L : obj = new F2L(); break; - case Constants.F2D : obj = new F2D(); break; - case Constants.D2I : obj = new D2I(); break; - case Constants.D2L : obj = new D2L(); break; - case Constants.D2F : obj = new D2F(); break; - case Constants.I2B : obj = new I2B(); break; - case Constants.I2C : obj = new I2C(); break; - case Constants.I2S : obj = new I2S(); break; - case Constants.LCMP : obj = new LCMP(); break; - case Constants.FCMPL : obj = new FCMPL(); break; - case Constants.FCMPG : obj = new FCMPG(); break; - case Constants.DCMPL : obj = new DCMPL(); break; - case Constants.DCMPG : obj = new DCMPG(); break; - case Constants.IFEQ : obj = new IFEQ(); break; - case Constants.IFNE : obj = new IFNE(); break; - case Constants.IFLT : obj = new IFLT(); break; - case Constants.IFGE : obj = new IFGE(); break; - case Constants.IFGT : obj = new IFGT(); break; - case Constants.IFLE : obj = new IFLE(); break; - case Constants.IF_ICMPEQ: obj = new IF_ICMPEQ(); break; - case Constants.IF_ICMPNE: obj = new IF_ICMPNE(); break; - case Constants.IF_ICMPLT: obj = new IF_ICMPLT(); break; - case Constants.IF_ICMPGE: obj = new IF_ICMPGE(); break; - case Constants.IF_ICMPGT: obj = new IF_ICMPGT(); break; - case Constants.IF_ICMPLE: obj = new IF_ICMPLE(); break; - case Constants.IF_ACMPEQ: obj = new IF_ACMPEQ(); break; - case Constants.IF_ACMPNE : obj = new IF_ACMPNE(); break; - case Constants.GOTO : obj = new GOTO(); break; - case Constants.JSR : obj = new JSR(); break; - case Constants.RET : obj = new RET(); break; - case Constants.TABLESWITCH : obj = new TABLESWITCH(); break; - case Constants.LOOKUPSWITCH : obj = new LOOKUPSWITCH(); break; - case Constants.IRETURN : obj = new IRETURN(); break; - case Constants.LRETURN : obj = new LRETURN(); break; - case Constants.FRETURN : obj = new FRETURN(); break; - case Constants.DRETURN : obj = new DRETURN(); break; - case Constants.ARETURN : obj = new ARETURN(); break; - case Constants.RETURN : obj = new RETURN(); break; - case Constants.GETSTATIC : obj = new GETSTATIC(); break; - case Constants.PUTSTATIC : obj = new PUTSTATIC(); break; - case Constants.GETFIELD : obj = new GETFIELD(); break; - case Constants.PUTFIELD : obj = new PUTFIELD(); break; - case Constants.INVOKEVIRTUAL : obj = new INVOKEVIRTUAL(); break; - case Constants.INVOKESPECIAL : obj = new INVOKESPECIAL(); break; - case Constants.INVOKESTATIC : obj = new INVOKESTATIC(); break; - case Constants.INVOKEINTERFACE : obj = new INVOKEINTERFACE(); break; - case Constants.NEW : obj = new NEW(); break; - case Constants.NEWARRAY : obj = new NEWARRAY(); break; - case Constants.ANEWARRAY : obj = new ANEWARRAY(); break; - case Constants.ARRAYLENGTH : obj = new ARRAYLENGTH(); break; - case Constants.ATHROW : obj = new ATHROW(); break; - case Constants.CHECKCAST : obj = new CHECKCAST(); break; - case Constants.INSTANCEOF : obj = new INSTANCEOF(); break; - case Constants.MONITORENTER : obj = new MONITORENTER(); break; - case Constants.MONITOREXIT : obj = new MONITOREXIT(); break; - case Constants.MULTIANEWARRAY : obj = new MULTIANEWARRAY(); break; - case Constants.IFNULL : obj = new IFNULL(); break; - case Constants.IFNONNULL : obj = new IFNONNULL(); break; - case Constants.GOTO_W : obj = new GOTO_W(); break; - case Constants.JSR_W : obj = new JSR_W(); break; + switch (opcode) { + case Constants.BIPUSH : obj = new InstructionByte(Constants.BIPUSH,bytes.readByte()); break; + case Constants.SIPUSH : obj = new InstructionShort(Constants.SIPUSH,bytes.readShort()); break; + case Constants.LDC : obj = new InstructionCP(Constants.LDC,bytes.readUnsignedByte()); break; + case Constants.LDC_W : obj = new InstructionCP(Constants.LDC_W,bytes.readUnsignedShort()); break; + case Constants.LDC2_W: obj = new InstructionCP(Constants.LDC2_W,bytes.readUnsignedShort()); break; + case Constants.ILOAD : obj = new InstructionLV(Constants.ILOAD,wide?bytes.readUnsignedShort():bytes.readUnsignedByte()); break; + case Constants.LLOAD : obj = new InstructionLV(Constants.LLOAD,wide?bytes.readUnsignedShort():bytes.readUnsignedByte()); break; + case Constants.FLOAD : obj = new InstructionLV(Constants.FLOAD,wide?bytes.readUnsignedShort():bytes.readUnsignedByte()); break; + case Constants.DLOAD : obj = new InstructionLV(Constants.DLOAD,wide?bytes.readUnsignedShort():bytes.readUnsignedByte()); break; + case Constants.ALOAD : obj = new InstructionLV(Constants.ALOAD,wide?bytes.readUnsignedShort():bytes.readUnsignedByte()); break; + + // move these to InstructionConstants + case Constants.ILOAD_0: obj = new InstructionLV(Constants.ILOAD_0);break; + case Constants.ILOAD_1: obj = new InstructionLV(Constants.ILOAD_1);break; + case Constants.ILOAD_2: obj = new InstructionLV(Constants.ILOAD_2);break; + case Constants.ILOAD_3: obj = new InstructionLV(Constants.ILOAD_3);break; + case Constants.LLOAD_0: obj = new InstructionLV(Constants.LLOAD_0);break; + case Constants.LLOAD_1: obj = new InstructionLV(Constants.LLOAD_1);break; + case Constants.LLOAD_2: obj = new InstructionLV(Constants.LLOAD_2);break; + case Constants.LLOAD_3: obj = new InstructionLV(Constants.LLOAD_3);break; + case Constants.FLOAD_0: obj = new InstructionLV(Constants.FLOAD_0);break; + case Constants.FLOAD_1: obj = new InstructionLV(Constants.FLOAD_1);break; + case Constants.FLOAD_2: obj = new InstructionLV(Constants.FLOAD_2);break; + case Constants.FLOAD_3: obj = new InstructionLV(Constants.FLOAD_3);break; + case Constants.DLOAD_0: obj = new InstructionLV(Constants.DLOAD_0);break; + case Constants.DLOAD_1: obj = new InstructionLV(Constants.DLOAD_1);break; + case Constants.DLOAD_2: obj = new InstructionLV(Constants.DLOAD_2);break; + case Constants.DLOAD_3: obj = new InstructionLV(Constants.DLOAD_3);break; + case Constants.ALOAD_0: obj = new InstructionLV(Constants.ALOAD_0);break; + case Constants.ALOAD_1: obj = new InstructionLV(Constants.ALOAD_1);break; + case Constants.ALOAD_2: obj = new InstructionLV(Constants.ALOAD_2);break; + case Constants.ALOAD_3: obj = new InstructionLV(Constants.ALOAD_3);break; + + // move to constants? + case Constants.ISTORE_0: obj = new InstructionLV(Constants.ISTORE_0);break; + case Constants.ISTORE_1: obj = new InstructionLV(Constants.ISTORE_1);break; + case Constants.ISTORE_2: obj = new InstructionLV(Constants.ISTORE_2);break; + case Constants.ISTORE_3: obj = new InstructionLV(Constants.ISTORE_3);break; + case Constants.LSTORE_0: obj = new InstructionLV(Constants.LSTORE_0);break; + case Constants.LSTORE_1: obj = new InstructionLV(Constants.LSTORE_1);break; + case Constants.LSTORE_2: obj = new InstructionLV(Constants.LSTORE_2);break; + case Constants.LSTORE_3: obj = new InstructionLV(Constants.LSTORE_3);break; + case Constants.FSTORE_0: obj = new InstructionLV(Constants.FSTORE_0);break; + case Constants.FSTORE_1: obj = new InstructionLV(Constants.FSTORE_1);break; + case Constants.FSTORE_2: obj = new InstructionLV(Constants.FSTORE_2);break; + case Constants.FSTORE_3: obj = new InstructionLV(Constants.FSTORE_3);break; + case Constants.DSTORE_0: obj = new InstructionLV(Constants.DSTORE_0);break; + case Constants.DSTORE_1: obj = new InstructionLV(Constants.DSTORE_1);break; + case Constants.DSTORE_2: obj = new InstructionLV(Constants.DSTORE_2);break; + case Constants.DSTORE_3: obj = new InstructionLV(Constants.DSTORE_3);break; + case Constants.ASTORE_0: obj = new InstructionLV(Constants.ASTORE_0);break; + case Constants.ASTORE_1: obj = new InstructionLV(Constants.ASTORE_1);break; + case Constants.ASTORE_2: obj = new InstructionLV(Constants.ASTORE_2);break; + case Constants.ASTORE_3: obj = new InstructionLV(Constants.ASTORE_3);break; +// case Constants.IALOAD : obj = new IALOAD(); break; +// case Constants.LALOAD : obj = new LALOAD(); break; +// case Constants.FALOAD : obj = new FALOAD(); break; +// case Constants.DALOAD : obj = new DALOAD(); break; +// case Constants.AALOAD : obj = new AALOAD(); break; +// case Constants.BALOAD : obj = new BALOAD(); break; +// case Constants.CALOAD : obj = new CALOAD(); break; +// case Constants.SALOAD : obj = new SALOAD(); break; + + case Constants.ISTORE : obj = new InstructionLV(Constants.ISTORE,wide?bytes.readUnsignedShort():bytes.readUnsignedByte()); break; + case Constants.LSTORE : obj = new InstructionLV(Constants.LSTORE,wide?bytes.readUnsignedShort():bytes.readUnsignedByte()); break; + case Constants.FSTORE : obj = new InstructionLV(Constants.FSTORE,wide?bytes.readUnsignedShort():bytes.readUnsignedByte()); break; + case Constants.DSTORE : obj = new InstructionLV(Constants.DSTORE,wide?bytes.readUnsignedShort():bytes.readUnsignedByte()); break; + case Constants.ASTORE : obj = new InstructionLV(Constants.ASTORE,wide?bytes.readUnsignedShort():bytes.readUnsignedByte()); break; + + +// case Constants.IASTORE : obj = new IASTORE(); break; +// case Constants.LASTORE : obj = new LASTORE(); break; +// case Constants.FASTORE : obj = new FASTORE(); break; +// case Constants.DASTORE : obj = new DASTORE(); break; +// case Constants.AASTORE : obj = new AASTORE(); break; +// case Constants.BASTORE : obj = new BASTORE(); break; +// case Constants.CASTORE : obj = new CASTORE(); break; +// case Constants.SASTORE : obj = new SASTORE(); break; + +// case Constants.POP : obj = new POP(); break; +// case Constants.POP2 : obj = new POP2(); break; +// case Constants.DUP : obj = new DUP(); break; +// case Constants.DUP_X1: obj = new DUP_X1(); break; +// case Constants.DUP_X2: obj = new DUP_X2(); break; +// case Constants.DUP2 : obj = new DUP2(); break; +// case Constants.DUP2_X1: obj = new DUP2_X1(); break; +// case Constants.DUP2_X2: obj = new DUP2_X2(); break; +// case Constants.SWAP : obj = new SWAP(); break; + + case Constants.IINC : obj = new IINC(wide?bytes.readUnsignedShort():bytes.readUnsignedByte(), + wide?bytes.readShort():bytes.readByte(),wide); break; + +// case Constants.LCMP : obj = new LCMP(); break; +// case Constants.FCMPL : obj = new FCMPL(); break; +// case Constants.FCMPG : obj = new FCMPG(); break; +// case Constants.DCMPL : obj = new DCMPL(); break; +// case Constants.DCMPG : obj = new DCMPG(); break; +// case Constants.ARRAYLENGTH : obj = new Instruction(Constants.ARRAYLENGTH); break; +// case Constants.ATHROW : obj = new ATHROW(); break; +// case Constants.MONITORENTER : obj = new MONITORENTER(); break; +// case Constants.MONITOREXIT : obj = new MONITOREXIT(); break; + case Constants.IFNULL : obj = new InstructionBranch(Constants.IFNULL,bytes.readShort()); break; + case Constants.IFNONNULL : obj = new InstructionBranch(Constants.IFNONNULL,bytes.readShort()); break; + case Constants.IFEQ : obj = new InstructionBranch(Constants.IFEQ,bytes.readShort()); break; + case Constants.IFNE : obj = new InstructionBranch(Constants.IFNE,bytes.readShort()); break; + case Constants.IFLT : obj = new InstructionBranch(Constants.IFLT,bytes.readShort()); break; + case Constants.IFGE : obj = new InstructionBranch(Constants.IFGE,bytes.readShort()); break; + case Constants.IFGT : obj = new InstructionBranch(Constants.IFGT,bytes.readShort()); break; + case Constants.IFLE : obj = new InstructionBranch(Constants.IFLE,bytes.readShort()); break; + case Constants.IF_ICMPEQ: obj = new InstructionBranch(Constants.IF_ICMPEQ,bytes.readShort()); break; + case Constants.IF_ICMPNE: obj = new InstructionBranch(Constants.IF_ICMPNE,bytes.readShort()); break; + case Constants.IF_ICMPLT: obj = new InstructionBranch(Constants.IF_ICMPLT,bytes.readShort()); break; + case Constants.IF_ICMPGE: obj = new InstructionBranch(Constants.IF_ICMPGE,bytes.readShort()); break; + case Constants.IF_ICMPGT: obj = new InstructionBranch(Constants.IF_ICMPGT,bytes.readShort()); break; + case Constants.IF_ICMPLE: obj = new InstructionBranch(Constants.IF_ICMPLE,bytes.readShort()); break; + case Constants.IF_ACMPEQ: obj = new InstructionBranch(Constants.IF_ACMPEQ,bytes.readShort()); break; + case Constants.IF_ACMPNE : obj = new InstructionBranch(Constants.IF_ACMPNE,bytes.readShort()); break; + case Constants.GOTO : obj = new InstructionBranch(Constants.GOTO,bytes.readShort()); break; + case Constants.GOTO_W : obj = new InstructionBranch(Constants.GOTO_W,bytes.readInt()); break; + case Constants.JSR : obj = new InstructionBranch(Constants.JSR,bytes.readShort()); break; + case Constants.JSR_W : obj = new InstructionBranch(Constants.JSR_W,bytes.readInt()); break; + + case Constants.TABLESWITCH : obj = new TABLESWITCH(bytes); break; + case Constants.LOOKUPSWITCH : obj = new LOOKUPSWITCH(bytes); break; + + case Constants.RET : obj = new RET(wide?bytes.readUnsignedShort():bytes.readUnsignedByte(),wide); break; + +// case Constants.IRETURN : obj = new IRETURN(); break; +// case Constants.LRETURN : obj = new LRETURN(); break; +// case Constants.FRETURN : obj = new FRETURN(); break; +// case Constants.DRETURN : obj = new DRETURN(); break; +// case Constants.ARETURN : obj = new ARETURN(); break; +// case Constants.RETURN : obj = new RETURN(); break; + case Constants.NEW : obj = new InstructionCP(Constants.NEW,bytes.readUnsignedShort()); break; + + case Constants.GETSTATIC : obj = new FieldInstruction(Constants.GETSTATIC,bytes.readUnsignedShort()); break; + case Constants.PUTSTATIC : obj = new FieldInstruction(Constants.PUTSTATIC,bytes.readUnsignedShort()); break; + case Constants.GETFIELD : obj = new FieldInstruction(Constants.GETFIELD,bytes.readUnsignedShort()); break; + case Constants.PUTFIELD : obj = new FieldInstruction(Constants.PUTFIELD,bytes.readUnsignedShort()); break; + case Constants.INVOKEVIRTUAL : obj = new InvokeInstruction(Constants.INVOKEVIRTUAL,bytes.readUnsignedShort()); break; + case Constants.INVOKESPECIAL : obj = new InvokeInstruction(Constants.INVOKESPECIAL,bytes.readUnsignedShort()); break; + case Constants.INVOKESTATIC : obj = new InvokeInstruction(Constants.INVOKESTATIC,bytes.readUnsignedShort()); break; + case Constants.INVOKEINTERFACE : obj = new INVOKEINTERFACE(bytes.readUnsignedShort(),bytes.readUnsignedByte(),bytes.readByte());break; + case Constants.NEWARRAY : obj = new InstructionByte(Constants.NEWARRAY,bytes.readByte()); break; + case Constants.ANEWARRAY : obj = new InstructionCP(Constants.ANEWARRAY,bytes.readUnsignedShort()); break; + case Constants.CHECKCAST : obj = new InstructionCP(Constants.CHECKCAST,bytes.readUnsignedShort()); break; + case Constants.INSTANCEOF : obj = new InstructionCP(Constants.INSTANCEOF,bytes.readUnsignedShort()); break; + case Constants.MULTIANEWARRAY : obj = new MULTIANEWARRAY(bytes.readUnsignedShort(),bytes.readByte()); break; default: throw new ClassGenException("Illegal opcode detected"); } } catch (ClassGenException e) { - throw e; + throw e; } catch (Exception e) { - throw new ClassGenException(e.toString()); + throw new ClassGenException(e.toString()); } - if(wide && !((obj instanceof LocalVariableInstruction) || - (obj instanceof IINC) || - (obj instanceof RET))) - throw new ClassGenException("Illegal opcode after wide: " + opcode); - - obj.setOpcode(opcode); - obj.initFromFile(bytes, wide); // Do further initializations, if any - // Byte code offset set in InstructionList - return obj; - } - - private static final String className(short opcode) { - String name = Constants.OPCODE_NAMES[opcode].toUpperCase(); - - /* ICONST_0, etc. will be shortened to ICONST, etc., since ICONST_0 and the like - * are not implemented (directly). - */ - try { - int len = name.length(); - char ch1 = name.charAt(len - 2), ch2 = name.charAt(len - 1); - - if((ch1 == '_') && (ch2 >= '0') && (ch2 <= '5')) - name = name.substring(0, len - 2); - if(name.equals("ICONST_M1")) // Special case - name = "ICONST"; - } catch(StringIndexOutOfBoundsException e) { System.err.println(e); } - - return "org.aspectj.apache.bcel.generic." + name; + return obj; } /** @@ -439,7 +312,7 @@ public abstract class Instruction implements Cloneable, Serializable { * @return Number of words consumed from stack by this instruction, * or Constants.UNPREDICTABLE, if this can not be computed statically */ - public int consumeStack(ConstantPoolGen cpg) { + public int consumeStack(ConstantPool cpg) { return Constants.CONSUME_STACK[opcode]; } @@ -450,8 +323,8 @@ public abstract class Instruction implements Cloneable, Serializable { * @return Number of words produced onto stack by this instruction, * or Constants.UNPREDICTABLE, if this can not be computed statically */ - public int produceStack(ConstantPoolGen cpg) { - return Constants.PRODUCE_STACK[opcode]; + public int produceStack(ConstantPool cpg) { + return Constants.stackEntriesProduced[opcode]; } /** @@ -459,18 +332,14 @@ public abstract class Instruction implements Cloneable, Serializable { */ public short getOpcode() { return opcode; } - /** - * @return length (in bytes) of instruction - */ - public int getLength() { return length; } - - /** - * Needed in readInstruction. - */ - private void setOpcode(short opcode) { this.opcode = opcode; } + public int getLength() { + // if it is zero, it should have been provided by an overriding implementation of getLength() + int len = Constants.iLen[opcode]; + if (len==0) throw new IllegalStateException("Length not right for "+getName().toUpperCase()); + return len; + } - /** Some instructions may be reused, so don't do anything by default. - */ + /** Some instructions may be reused, so don't do anything by default */ void dispose() {} /** @@ -481,18 +350,369 @@ public abstract class Instruction implements Cloneable, Serializable { * * @param v Visitor object */ - public abstract void accept(Visitor v); - - /** Get Comparator object used in the equals() method to determine - * equality of instructions. - * - * @return currently used comparator for equals() - */ - public static InstructionComparator getComparator() { return cmp; } - - /** Set comparator to be used for equals(). - */ - public static void setComparator(InstructionComparator c) { cmp = c; } + public void accept(InstVisitor v) { + switch (opcode) { + case IMPDEP1:v.visitIMPDEP1(this);break; + case IMPDEP2:v.visitIMPDEP2(this);break; + case MONITORENTER: + v.visitExceptionThrower(this); + v.visitStackConsumer(this); + v.visitMONITORENTER(this); + break; + case MONITOREXIT: + v.visitExceptionThrower(this); + v.visitStackConsumer(this); + v.visitMONITOREXIT(this); + break; + case LCMP: + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitLCMP(this); + break; + case FCMPL: + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitFCMPL(this); + break; + case FCMPG: + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitFCMPG(this); + break; + case DCMPL: + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitDCMPL(this); + break; + case DCMPG: + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitDCMPG(this); + break; + case NOP: + v.visitNOP(this); + break; + case BREAKPOINT: + v.visitBREAKPOINT(this); + break; + case SWAP: + v.visitStackConsumer(this); + v.visitStackProducer(this); + v.visitStackInstruction(this); + v.visitSWAP(this); + break; + case POP: + v.visitStackConsumer(this); + v.visitPopInstruction(this); + v.visitStackInstruction(this); + v.visitPOP(this); + break; + case POP2: + v.visitStackConsumer(this); + v.visitPopInstruction(this); + v.visitStackInstruction(this); + v.visitPOP2(this); + break; + case DUP2_X1: + v.visitStackInstruction(this); + v.visitDUP2_X1(this); + break; + case DUP2_X2: + v.visitStackInstruction(this); + v.visitDUP2_X2(this); + break; + case DUP2: + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitStackInstruction(this); + v.visitDUP2(this); + break; + case DUP_X1: + v.visitStackInstruction(this); + v.visitDUP_X1(this); + break; + case DUP_X2: + v.visitStackInstruction(this); + v.visitDUP_X2(this); + break; + case DUP: + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitStackInstruction(this); + v.visitDUP(this); + break; + case BASTORE: + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitBASTORE(this); + break; + case CASTORE: + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitCASTORE(this); + break; + case SASTORE: + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitSASTORE(this); + break; + case DASTORE: + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitDASTORE(this); + break; + case FASTORE: + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitFASTORE(this); + break; + case LASTORE: + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitLASTORE(this); + break; + case IASTORE: + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitIASTORE(this); + break; + case AASTORE: + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitAASTORE(this); + break; + case SALOAD: + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitSALOAD(this); + break; + case CALOAD: + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitCALOAD(this); + break; + case DALOAD: + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitDALOAD(this); + break; + case FALOAD: + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitFALOAD(this); + break; + case LALOAD: + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitLALOAD(this); + break; + case AALOAD: + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitAALOAD(this); + break; + case ATHROW: + v.visitUnconditionalBranch(this); + v.visitExceptionThrower(this); + v.visitATHROW(this); + break; + case ACONST_NULL: + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitTypedInstruction(this); + v.visitACONST_NULL(this); + break; + case ICONST_M1:case ICONST_0:case ICONST_1:case ICONST_2:case ICONST_3:case ICONST_4:case ICONST_5: + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitICONST(this); + break; + case LCONST_0:case LCONST_1: + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitLCONST(this); + break; + case FCONST_0:case FCONST_1:case FCONST_2: + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitFCONST(this); + break; + case DCONST_0:case DCONST_1: + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitDCONST(this); + case BALOAD: + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitBALOAD(this); + break; + case IALOAD: + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitIALOAD(this); + case BIPUSH: + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitBIPUSH(this); + break; + case SIPUSH: + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitSIPUSH(this); + break; + case LDC:case LDC_W: + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitCPInstruction(this); + v.visitLDC(this); + break; + case LDC2_W: + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitTypedInstruction(this); + v.visitCPInstruction(this); + v.visitLDC2_W(this); + break; + case ARRAYLENGTH: + v.visitExceptionThrower(this); + v.visitStackProducer(this); + v.visitARRAYLENGTH(this); + break; + case ASTORE_0: + v.visitStackConsumer(this); + v.visitPopInstruction(this); + v.visitStoreInstruction(this); + v.visitTypedInstruction(this); + v.visitLocalVariableInstruction((InstructionLV)this); + v.visitStoreInstruction(this); + v.visitASTORE(this); + break; + case ALOAD_0: + v.visitStackConsumer(this); + v.visitPopInstruction(this); + v.visitStoreInstruction(this); + v.visitTypedInstruction(this); + v.visitLocalVariableInstruction((InstructionLV)this); + v.visitStoreInstruction(this); + v.visitALOAD(this); + break; + // for store instructions: ISTORE > ASTORE_3 - needs to visit the instruction too +// v.visitStackConsumer(this); +// v.visitPopInstruction(this); +// v.visitStoreInstruction(this); +// v.visitTypedInstruction(this); +// v.visitLocalVariableInstruction(this); +// v.visitStoreInstruction(this); + // for load instructions: ILOAD > ALOAD_3 - needs to visit the instruction too +// v.visitStackProducer(this); +// v.visitPushInstruction(this); +// v.visitTypedInstruction(this); +// v.visitLocalVariableInstruction(this); +// v.visitLoadInstruction(this); + + // for conversion instructions: (all 15 of them) - needs to visit conversion instruction too +// v.visitTypedInstruction(this); +// v.visitStackProducer(this); +// v.visitStackConsumer(this); +// v.visitConversionInstruction(this); + + // arithmetic instructions - need to visit the instructions too (iadd etc) +// v.visitTypedInstruction(this); +// v.visitStackProducer(this); +// v.visitStackConsumer(this); +// v.visitArithmeticInstruction(this); + + case INVOKESTATIC: + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitStackProducer(this); + v.visitLoadClass(this); + v.visitCPInstruction(this); + v.visitFieldOrMethod(this); + v.visitInvokeInstruction((InvokeInstruction)this); + v.visitINVOKESTATIC((InvokeInstruction)this); + break; + + case GOTO: + v.visitVariableLengthInstruction(this); + v.visitUnconditionalBranch(this); + v.visitBranchInstruction((InstructionBranch)this); + v.visitGotoInstruction(this); + v.visitGOTO(this); + break; + case PUTSTATIC: + v.visitExceptionThrower(this); + v.visitStackConsumer(this); + v.visitPopInstruction(this); + v.visitTypedInstruction(this); + v.visitLoadClass(this); + v.visitCPInstruction(this); + v.visitFieldOrMethod(this); + v.visitFieldInstruction(this); + v.visitPUTSTATIC((FieldInstruction)this); + break; + case RETURN: + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitReturnInstruction(this); + v.visitRETURN(this); + break; + default: throw new IllegalStateException("visiting not yet implemented for "+getName().toUpperCase()); + } + } /** Check for equality, delegated to comparator * @return true if that is an Instruction and has the same opcode @@ -501,4 +721,176 @@ public abstract class Instruction implements Cloneable, Serializable { return (that instanceof Instruction)? cmp.equals(this, (Instruction)that) : false; } + + public Type getType() { return getType(null); } + + public Type getType(ConstantPool cp) { + // if (types[opcode]==null) throw new RuntimeException(getName()+" is not a typed instruction"); + Type t = Constants.types[opcode]; + if (t!=null) return t; + switch (opcode) { + case Constants.IRETURN: return Type.INT; + case Constants.LRETURN: return Type.LONG; + case Constants.FRETURN: return Type.FLOAT; + case Constants.DRETURN: return Type.DOUBLE; + case Constants.ARETURN: return Type.OBJECT; + case Constants.RETURN: return Type.VOID; + case LCMP: return Type.LONG; + case DCMPG: case DCMPL: return Type.DOUBLE; + case FCMPG: case FCMPL: return Type.FLOAT; + case ACONST_NULL: + return Type.NULL; + case ICONST_M1:case ICONST_0:case ICONST_1:case ICONST_2:case ICONST_3:case ICONST_4:case ICONST_5: + return Type.INT; + case IALOAD: case IASTORE: + return Type.INT; + case CALOAD: case CASTORE: + return Type.CHAR; + case BALOAD: case BASTORE: + return Type.BYTE; + case SALOAD: case SASTORE: + return Type.SHORT; + case LALOAD: case LASTORE: + return Type.LONG; + case DALOAD: case DASTORE: + return Type.DOUBLE; + case FALOAD: case FASTORE: + return Type.FLOAT; + case AALOAD: case AASTORE: + return Type.OBJECT; + + case ASTORE: + case ALOAD: + return Type.OBJECT; + + case Constants.D2I: case Constants.F2I: case Constants.L2I: + return Type.INT; + case Constants.D2F: case Constants.I2F: case Constants.L2F: + return Type.FLOAT; + case Constants.D2L: case Constants.F2L: case Constants.I2L: + return Type.LONG; + case Constants.F2D: case Constants.I2D: case Constants.L2D: + return Type.DOUBLE; + case Constants.I2B: + return Type.BYTE; + case Constants.I2C: + return Type.CHAR; + case Constants.I2S: + return Type.SHORT; + + // arithmetic instructions + case Constants.IADD: case Constants.IAND: case Constants.IDIV: case Constants.IMUL: + case Constants.INEG: case Constants.IOR: case Constants.IREM: case Constants.ISHL: + case Constants.ISHR: case Constants.ISUB: case Constants.IUSHR: case Constants.IXOR: + return Type.INT; + + case Constants.DADD: case Constants.DDIV: case Constants.DMUL: case Constants.DNEG: + case Constants.DREM: case Constants.DSUB: + return Type.DOUBLE; + + case Constants.FADD: case Constants.FDIV: case Constants.FMUL: + case Constants.FNEG: case Constants.FREM: case Constants.FSUB: + return Type.FLOAT; + + + case Constants.LADD: case Constants.LAND: case Constants.LDIV: + case Constants.LMUL: case Constants.LNEG: case Constants.LOR: + case Constants.LREM: case Constants.LSHL: case Constants.LSHR: + case Constants.LSUB:case Constants.LUSHR: case Constants.LXOR: + return Type.LONG; + default: + throw new IllegalStateException("Not implemented yet for "+getName().toUpperCase()); + } + } + + public Number getValue() { + if ((instFlags[opcode]&CONSTANT_INST)==0) throw new RuntimeException(getName()+" is not a constant instruction"); + switch (opcode) { + case ICONST_M1:case ICONST_0:case ICONST_1:case ICONST_2:case ICONST_3:case ICONST_4:case ICONST_5: + return new Integer(opcode-ICONST_0); + default: + throw new IllegalStateException("Not implemented yet for "+getName()); + } + } + + public int getIndex() { return -1; } + public void setIndex(int i) { + throw new IllegalStateException("Shouldnt be asking "+getName().toUpperCase()); + } + + public Object getValue(ConstantPool cpg) { + throw new IllegalStateException("Shouldnt be asking "+getName().toUpperCase()); + } + + public boolean isLoadInstruction() { + return (Constants.instFlags[opcode]&LOAD_INST)!=0; + } + + public boolean isALOAD() { + return false; + } + + public boolean isStoreInstruction() { + return (Constants.instFlags[opcode]&STORE_INST)!=0; + } + + public boolean isASTORE() { + return false; + } + public java.lang.Class[] getExceptions() { + // fixme + return Constants.instExcs[opcode]; + } + + public boolean containsTarget(InstructionHandle ih) { throw new IllegalStateException("Dont ask!!");} + public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { throw new IllegalStateException("Dont ask!!");} + + public boolean isJsrInstruction() { + return (Constants.instFlags[opcode]&JSR_INSTRUCTION)!=0; + } + + public boolean isConstantInstruction() { + return (Constants.instFlags[opcode]&CONSTANT_INST)!=0; + } + + public boolean isConstantPoolInstruction() { + return (Constants.instFlags[opcode]&CP_INST)!=0; + } + public boolean isStackProducer() { + return (Constants.stackEntriesProduced[opcode]!=0); +// return ((Constants.instFlags[opcode]&STACK_PRODUCER)!=0); + } + public boolean isStackConsumer() { + return (Constants.CONSUME_STACK[opcode]!=0); +// return ((Constants.instFlags[opcode]&STACK_CONSUMER)!=0); + } + + public boolean isIndexedInstruction() { + return (Constants.instFlags[opcode]&INDEXED)!=0; + } + public boolean isArrayCreationInstruction() { + return (opcode==NEWARRAY || opcode==ANEWARRAY || opcode==MULTIANEWARRAY); + } + + // Asserts a property of an instruction - can be commented out after a lot of testing ;) + public void assertSomething(long flag) { + if ((Constants.instFlags[opcode]&flag)==0) throw new IllegalStateException("This opcode "+opcode+" does not have the property "+Long.toHexString(flag)); + } + + public ObjectType getLoadClassType(ConstantPool cpg) { + assertSomething(Constants.LOADCLASS_INST); + Type t = getType(cpg); + if (t instanceof ArrayType) t = ((ArrayType)t).getBasicType(); + return (t instanceof ObjectType)?(ObjectType)t:null; + } + + public boolean isReturnInstruction() { + return (Constants.instFlags[opcode]&RET_INST)!=0; + } + public boolean isGoto() { + return opcode==GOTO || opcode==GOTO_W; + } + public boolean isLocalVariableInstruction() { + return (Constants.instFlags[opcode]&LV_INST)!=0; + } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionBranch.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionBranch.java new file mode 100644 index 000000000..3fd9b4c75 --- /dev/null +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionBranch.java @@ -0,0 +1,340 @@ +package org.aspectj.apache.bcel.generic; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache BCEL" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache BCEL", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +import java.io.*; + +import org.aspectj.apache.bcel.Constants; +import org.aspectj.apache.bcel.classfile.ConstantPool; + +/** + * Abstract super class for branching instructions like GOTO, IFEQ, etc.. + * Branch instructions may have a variable length, namely GOTO, JSR, + * LOOKUPSWITCH and TABLESWITCH. + * + * @see InstructionList + * @version $Id: InstructionBranch.java,v 1.2 2008/05/28 23:53:00 aclement Exp $ + * @author M. Dahm + */ +/** + * A branch instruction may be talking in terms of absolute destination (targetIndex) or about an instruction it + * doesnt yet know the position if (targetInstruction). targetInstruction (if set) overrides targetIndex + */ +public class InstructionBranch extends Instruction implements InstructionTargeter { + private static final int UNSET = -1; + + protected int targetIndex = UNSET; // Branch target relative to this instruction + protected InstructionHandle targetInstruction; // Target object in instruction list + protected int positionOfThisInstruction; // for calculating relative branch destinations! + + /** + * Constructor if building an instruction branch that targets a handle (ie. we don't need to actual targetIndex in the bytecode yet) + */ + public InstructionBranch(short opcode, InstructionHandle target) { +// if (opcode == GOTO ) System.err.println("building GOTO"); + this.opcode = opcode; + setTarget(target); + } + + public InstructionBranch(short opcode, int index) { +// if (opcode == GOTO ) System.err.println("targetIndex set to "+index); + this.opcode = opcode; + this.targetIndex = index; + } + + // used when we know nothing + public InstructionBranch(short opcode) { + this.opcode = opcode; + } + + public void dump(DataOutputStream out) throws IOException { + out.writeByte(opcode); + int target = getTargetOffset(); +// System.err.println("Writing out target for branch instruction "+getName()); + switch (opcode) { + case GOTO: +// System.err.println("Writing out target "+target); + out.writeShort(target); + break; + case GOTO_W: +// System.err.println("Writing out target "+target); + out.writeInt(target); + break; + + case IF_ACMPEQ: + case IF_ACMPNE: + case IF_ICMPEQ: + case IF_ICMPGE: + case IF_ICMPGT: + case IF_ICMPLE: + case IF_ICMPLT: + case IF_ICMPNE: + case IFEQ: + case IFLE: + case IFLT: + case IFGT: + case IFNE: + case IFGE: + case IFNULL: + case IFNONNULL: + out.writeShort(target); + break; + + case JSR: + out.writeShort(target); + break; + case JSR_W: + out.writeInt(target); + break; + + default: + throw new IllegalStateException("Don't know how to write out "+getName().toUpperCase()); + } + + if(Math.abs(target) >= 32767) // too large for short + throw new ClassGenException("Branch target offset too large for short"); + } + + protected int getTargetOffset() { + if(targetInstruction == null && targetIndex==UNSET) + throw new ClassGenException("Target of " + super.toString(true) + " is unknown"); + + if (targetInstruction==null) { + return targetIndex; + } else { + return targetInstruction.getPosition()-positionOfThisInstruction; + } + } + + + /** + * Called by InstructionList.setPositions when setting the position for every + * instruction. In the presence of variable length instructions `setPositions' + * performs multiple passes over the instruction list to calculate the + * correct (byte) positions and offsets by calling this function. + * + * @param offset additional offset caused by preceding (variable length) instructions + * @param max_offset the maximum offset that may be caused by these instructions + * @return additional offset caused by possible change of this instruction's length + */ + protected int updatePosition(int offset, int max_offset) { + int i = getTargetOffset(); + + positionOfThisInstruction += offset; + + if (Math.abs(i)>=(32767-max_offset)) { // too larget for short (we think) + throw new IllegalStateException("Argh!"); + } + + return 0; + } + + /** + * Long output format: + * + * <position in byte code> + * <name of opcode> "["<opcode number>"]" + * "("<length of instruction>")" + * "<"<target instruction>">" "@"<branch target offset> + * + * @param verbose long/short format switch + * @return mnemonic for instruction + */ + public String toString(boolean verbose) { + String s = super.toString(verbose); + String t = "null"; + + if(verbose) { + if(targetInstruction != null) { + if(targetInstruction.getInstruction() == this) + t = ""; + else if(targetInstruction.getInstruction() == null) + t = ""; + else + t = targetInstruction.getInstruction().toString(false); // Avoid circles + } + } else { + if(targetInstruction != null) { + targetIndex = getTargetOffset(); + t = "" + (targetIndex + positionOfThisInstruction); + } + } + + return s + " -> " + t; + } + + + /** + * @return target offset in byte code + */ + public final int getIndex() { return targetIndex; } + + /** + * @return target of branch instruction + */ + public InstructionHandle getTarget() { return targetInstruction; } + + /** + * Set branch target + * @param target branch target + */ + public void setTarget(InstructionHandle target) { +// if (opcode==GOTO) System.err.println("Set target to "+target); + notifyTarget(this.targetInstruction, target, this); + this.targetInstruction = target; + } + + /** + * Used by BranchInstruction, LocalVariableGen, CodeExceptionGen + */ + static final void notifyTarget(InstructionHandle old_ih, InstructionHandle new_ih, + InstructionTargeter t) { + if(old_ih != null) + old_ih.removeTargeter(t); + if(new_ih != null) + new_ih.addTargeter(t); + } + + /** + * @param old_ih old target + * @param new_ih new target + */ + public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { + if(targetInstruction == old_ih) + setTarget(new_ih); + else + throw new ClassGenException("Not targeting " + old_ih + ", but " + targetInstruction); + } + + /** + * @return true, if ih is target of this instruction + */ + public boolean containsTarget(InstructionHandle ih) { + return (targetInstruction == ih); + } + + /** + * Inform target that it's not targeted anymore. + */ + void dispose() { + setTarget(null); + targetIndex=-1; + positionOfThisInstruction=-1; + } + + // OPTIMIZE why bother with this? +// public InstructionBranch negate() { +// if ((Constants.instFlags[opcode]&Constants.NEGATABLE)==0) throw new IllegalStateException("Operation is not negatable"); +// switch (opcode) { +// case IFGT: return copy(Constants.IFNE); +// case IFLE: return copy(Constants.IFGT); +// default: +// throw new IllegalStateException("Dunno:"+opcode); +// } +// } +// +// private InstructionBranch copy(short opcode) { +// InstructionBranch ib = null; +// if (targetInstruction!=null) { +// ib = new InstructionBranch(opcode,targetInstruction); +// } else { +// ib = new InstructionBranch(opcode,targetIndex); +// } +// ib.positionOfThisInstruction = positionOfThisInstruction; +// return ib; +// } + public Type getType(ConstantPool cp) { + if ((Constants.instFlags[opcode]&Constants.JSR_INSTRUCTION)!=0) return new ReturnaddressType(physicalSuccessor()); + return super.getType(cp); + } + + /** + * Returns an InstructionHandle to the physical successor + * of this JsrInstruction. For this method to work, + * this JsrInstruction object must not be shared between + * multiple InstructionHandle objects! + * Formally, there must not be InstructionHandle objects + * i, j where i != j and i.getInstruction() == this == + * j.getInstruction(). + * @return an InstructionHandle to the "next" instruction that + * will be executed when RETurned from a subroutine. + */ + public InstructionHandle physicalSuccessor(){ + InstructionHandle ih = this.targetInstruction; + + // Rewind! + while(ih.getPrev() != null) + ih = ih.getPrev(); + + // Find the handle for "this" JsrInstruction object. + while(ih.getInstruction() != this) + ih = ih.getNext(); + + InstructionHandle toThis = ih; + + while(ih != null){ + ih = ih.getNext(); + if ((ih != null) && (ih.getInstruction() == this)) + throw new RuntimeException("physicalSuccessor() called on a shared JsrInstruction."); + } + + // Return the physical successor + return toThis.getNext(); + } + + public boolean isIfInstruction() { + return ((Constants.instFlags[opcode]&Constants.IF_INST)!=0); + } +} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/GotoInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionByte.java similarity index 82% rename from bcel-builder/src/org/aspectj/apache/bcel/generic/GotoInstruction.java rename to bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionByte.java index 291834fbd..d0611306c 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/GotoInstruction.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionByte.java @@ -54,22 +54,33 @@ package org.aspectj.apache.bcel.generic; * . */ +import java.io.*; + + /** - * Super class for GOTO - * - * @version $Id: GotoInstruction.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm + * Instruction that needs one byte */ -public abstract class GotoInstruction extends BranchInstruction - implements UnconditionalBranch -{ - GotoInstruction(short opcode, InstructionHandle target) { - super(opcode, target); +public class InstructionByte extends Instruction { + private byte b; + + public InstructionByte(short opcode, byte b) { + this.opcode = opcode; + this.b = b; + } + + public void dump(DataOutputStream out) throws IOException { + out.writeByte(opcode); + out.writeByte(b); + } + + public String toString(boolean verbose) { + return super.toString(verbose) + " " + b; } + + public final byte getTypecode() { return b; } // NEWARRAY - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GotoInstruction(){} + // NEWARRAY + public final Type getType() { + return new ArrayType(BasicType.getType(b), 1); + } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionCLV.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionCLV.java new file mode 100644 index 000000000..21e504c73 --- /dev/null +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionCLV.java @@ -0,0 +1,22 @@ +package org.aspectj.apache.bcel.generic; + +/** + * A small subclass of the local variable accessing instruction class InstructionLV - this subclass does + * not allow the index to be altered. + */ +public class InstructionCLV extends InstructionLV { + + public InstructionCLV(short opcode) { + super(opcode); + } + + public InstructionCLV(short opcode,int localVariableIndex) { + super(opcode,localVariableIndex); + } + + public void setIndex(int localVariableIndex) { + if (localVariableIndex!=getIndex())//allow this, shouldnt really... + throw new ClassGenException("Do not attempt to modify the index for this constant instruction: "+this); + } + +} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/CPInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionCP.java similarity index 57% rename from bcel-builder/src/org/aspectj/apache/bcel/generic/CPInstruction.java rename to bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionCP.java index ff7ee1c3e..175f89914 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/CPInstruction.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionCP.java @@ -60,45 +60,45 @@ import java.io.IOException; import org.aspectj.apache.bcel.classfile.Constant; import org.aspectj.apache.bcel.classfile.ConstantClass; import org.aspectj.apache.bcel.classfile.ConstantPool; -import org.aspectj.apache.bcel.util.ByteSequence; +import org.aspectj.apache.bcel.Constants; /** - * Abstract super class for instructions that use an index into the + * Slass for instructions that use an index into the * constant pool such as LDC, INVOKEVIRTUAL, etc. * * @see ConstantPoolGen * @see LDC * @see INVOKEVIRTUAL * - * @version $Id: CPInstruction.java,v 1.8 2008/04/25 17:58:20 aclement Exp $ + * @version $Id: InstructionCP.java,v 1.2 2008/05/28 23:52:57 aclement Exp $ * @author M. Dahm */ -public abstract class CPInstruction extends Instruction - implements TypedInstruction, IndexedInstruction -{ +public class InstructionCP extends Instruction { protected int index; // index to constant pool - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - CPInstruction() {} - - /** - * @param index to constant pool - */ - protected CPInstruction(short opcode, int index) { - super(opcode, (short)3); - setIndex(index); + public InstructionCP(short opcode, int index) { + this.opcode = opcode; + this.index = index; } - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); - out.writeShort(index); + if (opcode==LDC_W && index<256) { + out.writeByte(LDC); + out.writeByte(index); + } else { + out.writeByte(opcode); + if(Constants.iLen[opcode] == 2) { + if (index>255) { + throw new IllegalStateException(); + } + out.writeByte(index); + } else + out.writeShort(index); + } + } + + public int getLength() { + if (opcode==LDC_W && index<256) return 2; else return super.getLength(); } /** @@ -127,43 +127,70 @@ public abstract class CPInstruction extends Instruction return org.aspectj.apache.bcel.Constants.OPCODE_NAMES[opcode] + " " + str; } - /** - * Read needed data (i.e., index) from file. - * @param bytes input stream - * @param wide wide prefix? - */ - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException - { - setIndex(bytes.readUnsignedShort()); - length = 3; - } - /** * @return index in constant pool referred by this instruction. */ public final int getIndex() { return index; } - /** - * Set the index to constant pool. - * @param index in constant pool. - */ - public void setIndex(int index) { - if(index < 0) - throw new ClassGenException("Negative index value: " + index); - - this.index = index; + public void setIndex(int index) { + this.index = index; + if (this.index>255 && opcode==LDC) { + // promote it + opcode = LDC_W; + } } - /** @return type related with this instruction. - */ - public Type getType(ConstantPoolGen cpg) { - ConstantPool cp = cpg.getConstantPool(); - String name = cp.getConstantString(index, org.aspectj.apache.bcel.Constants.CONSTANT_Class); - - if(!name.startsWith("[")) - name = "L" + name + ";"; - - return Type.getType(name); + public Type getType(ConstantPool cpg) { + switch (cpg.getConstant(index).getTag()) { + case CONSTANT_String: return Type.STRING; + case CONSTANT_Float: return Type.FLOAT; + case CONSTANT_Integer: return Type.INT; + case CONSTANT_Long: return Type.LONG; + case CONSTANT_Double: return Type.DOUBLE; + case CONSTANT_Class: + String name = cpg.getConstantString_CONSTANTClass(index); +// ConstantPool cp = cpg.getConstantPool(); +// String name = cp.getConstantString(index, CONSTANT_Class); + if(!name.startsWith("[")) { + StringBuffer sb = new StringBuffer(); + sb.append("L").append(name).append(";"); + return Type.getType(sb.toString()); + } else { + return Type.getType(name); + } + default: // Never reached + throw new RuntimeException("Unknown or invalid constant type at " + index); + } } + + public Object getValue(ConstantPool cpg) { + org.aspectj.apache.bcel.classfile.Constant c = cpg.getConstant(index); + + switch(c.getTag()) { + case org.aspectj.apache.bcel.Constants.CONSTANT_String: + int i = ((org.aspectj.apache.bcel.classfile.ConstantString)c).getStringIndex(); + c = cpg.getConstant(i); + return ((org.aspectj.apache.bcel.classfile.ConstantUtf8)c).getBytes(); + + case org.aspectj.apache.bcel.Constants.CONSTANT_Float: + return new Float(((org.aspectj.apache.bcel.classfile.ConstantFloat)c).getBytes()); + + case org.aspectj.apache.bcel.Constants.CONSTANT_Integer: + return new Integer(((org.aspectj.apache.bcel.classfile.ConstantInteger)c).getBytes()); + + // from ldc2_w: + case org.aspectj.apache.bcel.Constants.CONSTANT_Long: + return new Long(((org.aspectj.apache.bcel.classfile.ConstantLong)c).getBytes()); + + case org.aspectj.apache.bcel.Constants.CONSTANT_Double: + return new Double(((org.aspectj.apache.bcel.classfile.ConstantDouble)c).getBytes()); + default: // Never reached + throw new RuntimeException("Unknown or invalid constant type at " + index); + } + } + + + public Class[] getExceptions() { + return org.aspectj.apache.bcel.ExceptionConstants.EXCS_STRING_RESOLUTION; + } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionComparator.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionComparator.java index 029952887..1c8b5ec3e 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionComparator.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionComparator.java @@ -1,5 +1,7 @@ package org.aspectj.apache.bcel.generic; +import org.aspectj.apache.bcel.Constants; + /* ==================================================================== * The Apache Software License, Version 1.1 * @@ -64,16 +66,16 @@ package org.aspectj.apache.bcel.generic; * instructions must have the same target. * * @see Instruction - * @version $Id: InstructionComparator.java,v 1.3 2005/09/21 16:28:36 acolyer Exp $ + * @version $Id: InstructionComparator.java,v 1.4 2008/05/28 23:52:56 aclement Exp $ * @author M. Dahm */ public interface InstructionComparator { public static final InstructionComparator DEFAULT = new InstructionComparator() { public boolean equals(Instruction i1, Instruction i2) { if (i1.opcode == i2.opcode) { - if (i1 instanceof Select) { - InstructionHandle[] t1 = ((Select) i1).getTargets(); - InstructionHandle[] t2 = ((Select) i2).getTargets(); + if (i1 instanceof InstructionSelect) { + InstructionHandle[] t1 = ((InstructionSelect) i1).getTargets(); + InstructionHandle[] t2 = ((InstructionSelect) i2).getTargets(); // See AspectJ bug 104957 if (t1 == null && t2 == null) return true; @@ -88,16 +90,14 @@ public interface InstructionComparator { return true; } - } else if (i1 instanceof BranchInstruction) { - return ((BranchInstruction) i1).target == ((BranchInstruction) i2).target; - } else if (i1 instanceof ConstantPushInstruction) { - return ((ConstantPushInstruction) i1).getValue().equals( - ((ConstantPushInstruction) i2).getValue()); - } else if (i1 instanceof IndexedInstruction) { - return ((IndexedInstruction) i1).getIndex() == ((IndexedInstruction) i2) - .getIndex(); - } else if (i1 instanceof NEWARRAY) { - return ((NEWARRAY) i1).getTypecode() == ((NEWARRAY) i2) + } else if (i1 instanceof InstructionBranch) { + return ((InstructionBranch) i1).targetInstruction == ((InstructionBranch) i2).targetInstruction; + } else if (i1.isConstantInstruction()) { + return i1.getValue().equals(i2.getValue()); + } else if (i1.isIndexedInstruction()) { + return i1.getIndex() == i2.getIndex(); + } else if (i1.opcode==Constants.NEWARRAY) { + return ((InstructionByte) i1).getTypecode() == ((InstructionByte) i2) .getTypecode(); } else { return true; diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionConstants.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionConstants.java index cf1a390e5..553b67986 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionConstants.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionConstants.java @@ -70,136 +70,165 @@ import org.aspectj.apache.bcel.Constants; * The Instructions can also accessed directly under their names, so * it's possible to write il.append(Instruction.ICONST_0); * - * @version $Id: InstructionConstants.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: InstructionConstants.java,v 1.3 2008/05/28 23:52:55 aclement Exp $ * @author M. Dahm */ public interface InstructionConstants { /** Predefined instruction objects */ - public static final Instruction NOP = new NOP(); - public static final Instruction ACONST_NULL = new ACONST_NULL(); - public static final Instruction ICONST_M1 = new ICONST(-1); - public static final Instruction ICONST_0 = new ICONST(0); - public static final Instruction ICONST_1 = new ICONST(1); - public static final Instruction ICONST_2 = new ICONST(2); - public static final Instruction ICONST_3 = new ICONST(3); - public static final Instruction ICONST_4 = new ICONST(4); - public static final Instruction ICONST_5 = new ICONST(5); - public static final Instruction LCONST_0 = new LCONST(0); - public static final Instruction LCONST_1 = new LCONST(1); - public static final Instruction FCONST_0 = new FCONST(0); - public static final Instruction FCONST_1 = new FCONST(1); - public static final Instruction FCONST_2 = new FCONST(2); - public static final Instruction DCONST_0 = new DCONST(0); - public static final Instruction DCONST_1 = new DCONST(1); - public static final ArrayInstruction IALOAD = new IALOAD(); - public static final ArrayInstruction LALOAD = new LALOAD(); - public static final ArrayInstruction FALOAD = new FALOAD(); - public static final ArrayInstruction DALOAD = new DALOAD(); - public static final ArrayInstruction AALOAD = new AALOAD(); - public static final ArrayInstruction BALOAD = new BALOAD(); - public static final ArrayInstruction CALOAD = new CALOAD(); - public static final ArrayInstruction SALOAD = new SALOAD(); - public static final ArrayInstruction IASTORE = new IASTORE(); - public static final ArrayInstruction LASTORE = new LASTORE(); - public static final ArrayInstruction FASTORE = new FASTORE(); - public static final ArrayInstruction DASTORE = new DASTORE(); - public static final ArrayInstruction AASTORE = new AASTORE(); - public static final ArrayInstruction BASTORE = new BASTORE(); - public static final ArrayInstruction CASTORE = new CASTORE(); - public static final ArrayInstruction SASTORE = new SASTORE(); - public static final StackInstruction POP = new POP(); - public static final StackInstruction POP2 = new POP2(); - public static final StackInstruction DUP = new DUP(); - public static final StackInstruction DUP_X1 = new DUP_X1(); - public static final StackInstruction DUP_X2 = new DUP_X2(); - public static final StackInstruction DUP2 = new DUP2(); - public static final StackInstruction DUP2_X1 = new DUP2_X1(); - public static final StackInstruction DUP2_X2 = new DUP2_X2(); - public static final StackInstruction SWAP = new SWAP(); - public static final ArithmeticInstruction IADD = new IADD(); - public static final ArithmeticInstruction LADD = new LADD(); - public static final ArithmeticInstruction FADD = new FADD(); - public static final ArithmeticInstruction DADD = new DADD(); - public static final ArithmeticInstruction ISUB = new ISUB(); - public static final ArithmeticInstruction LSUB = new LSUB(); - public static final ArithmeticInstruction FSUB = new FSUB(); - public static final ArithmeticInstruction DSUB = new DSUB(); - public static final ArithmeticInstruction IMUL = new IMUL(); - public static final ArithmeticInstruction LMUL = new LMUL(); - public static final ArithmeticInstruction FMUL = new FMUL(); - public static final ArithmeticInstruction DMUL = new DMUL(); - public static final ArithmeticInstruction IDIV = new IDIV(); - public static final ArithmeticInstruction LDIV = new LDIV(); - public static final ArithmeticInstruction FDIV = new FDIV(); - public static final ArithmeticInstruction DDIV = new DDIV(); - public static final ArithmeticInstruction IREM = new IREM(); - public static final ArithmeticInstruction LREM = new LREM(); - public static final ArithmeticInstruction FREM = new FREM(); - public static final ArithmeticInstruction DREM = new DREM(); - public static final ArithmeticInstruction INEG = new INEG(); - public static final ArithmeticInstruction LNEG = new LNEG(); - public static final ArithmeticInstruction FNEG = new FNEG(); - public static final ArithmeticInstruction DNEG = new DNEG(); - public static final ArithmeticInstruction ISHL = new ISHL(); - public static final ArithmeticInstruction LSHL = new LSHL(); - public static final ArithmeticInstruction ISHR = new ISHR(); - public static final ArithmeticInstruction LSHR = new LSHR(); - public static final ArithmeticInstruction IUSHR = new IUSHR(); - public static final ArithmeticInstruction LUSHR = new LUSHR(); - public static final ArithmeticInstruction IAND = new IAND(); - public static final ArithmeticInstruction LAND = new LAND(); - public static final ArithmeticInstruction IOR = new IOR(); - public static final ArithmeticInstruction LOR = new LOR(); - public static final ArithmeticInstruction IXOR = new IXOR(); - public static final ArithmeticInstruction LXOR = new LXOR(); - public static final ConversionInstruction I2L = new I2L(); - public static final ConversionInstruction I2F = new I2F(); - public static final ConversionInstruction I2D = new I2D(); - public static final ConversionInstruction L2I = new L2I(); - public static final ConversionInstruction L2F = new L2F(); - public static final ConversionInstruction L2D = new L2D(); - public static final ConversionInstruction F2I = new F2I(); - public static final ConversionInstruction F2L = new F2L(); - public static final ConversionInstruction F2D = new F2D(); - public static final ConversionInstruction D2I = new D2I(); - public static final ConversionInstruction D2L = new D2L(); - public static final ConversionInstruction D2F = new D2F(); - public static final ConversionInstruction I2B = new I2B(); - public static final ConversionInstruction I2C = new I2C(); - public static final ConversionInstruction I2S = new I2S(); - public static final Instruction LCMP = new LCMP(); - public static final Instruction FCMPL = new FCMPL(); - public static final Instruction FCMPG = new FCMPG(); - public static final Instruction DCMPL = new DCMPL(); - public static final Instruction DCMPG = new DCMPG(); - public static final ReturnInstruction IRETURN = new IRETURN(); - public static final ReturnInstruction LRETURN = new LRETURN(); - public static final ReturnInstruction FRETURN = new FRETURN(); - public static final ReturnInstruction DRETURN = new DRETURN(); - public static final ReturnInstruction ARETURN = new ARETURN(); - public static final ReturnInstruction RETURN = new RETURN(); - public static final Instruction ARRAYLENGTH = new ARRAYLENGTH(); - public static final Instruction ATHROW = new ATHROW(); - public static final Instruction MONITORENTER = new MONITORENTER(); - public static final Instruction MONITOREXIT = new MONITOREXIT(); + public static final Instruction NOP = new Instruction(Constants.NOP); + public static final Instruction ACONST_NULL = new Instruction(Constants.ACONST_NULL); + public static final Instruction ICONST_M1 = new Instruction(Constants.ICONST_M1); + public static final Instruction ICONST_0 = new Instruction(Constants.ICONST_0); + public static final Instruction ICONST_1 = new Instruction(Constants.ICONST_1); + public static final Instruction ICONST_2 = new Instruction(Constants.ICONST_2); + public static final Instruction ICONST_3 = new Instruction(Constants.ICONST_3); + public static final Instruction ICONST_4 = new Instruction(Constants.ICONST_4); + public static final Instruction ICONST_5 = new Instruction(Constants.ICONST_5); + public static final Instruction LCONST_0 = new Instruction(Constants.LCONST_0); + public static final Instruction LCONST_1 = new Instruction(Constants.LCONST_1); + public static final Instruction FCONST_0 = new Instruction(Constants.FCONST_0); + public static final Instruction FCONST_1 = new Instruction(Constants.FCONST_1); + public static final Instruction FCONST_2 = new Instruction(Constants.FCONST_2); + public static final Instruction DCONST_0 = new Instruction(Constants.DCONST_0); + public static final Instruction DCONST_1 = new Instruction(Constants.DCONST_1); + public static final Instruction IALOAD = new Instruction(Constants.IALOAD); + public static final Instruction LALOAD = new Instruction(Constants.LALOAD); + public static final Instruction FALOAD = new Instruction(Constants.FALOAD); + public static final Instruction DALOAD = new Instruction(Constants.DALOAD); + public static final Instruction AALOAD = new Instruction(Constants.AALOAD); + public static final Instruction BALOAD = new Instruction(Constants.BALOAD); + public static final Instruction CALOAD = new Instruction(Constants.CALOAD); + public static final Instruction SALOAD = new Instruction(Constants.SALOAD); + public static final Instruction IASTORE = new Instruction(Constants.IASTORE); + public static final Instruction LASTORE = new Instruction(Constants.LASTORE); + public static final Instruction FASTORE = new Instruction(Constants.FASTORE); + public static final Instruction DASTORE = new Instruction(Constants.DASTORE); + public static final Instruction AASTORE = new Instruction(Constants.AASTORE); + public static final Instruction BASTORE = new Instruction(Constants.BASTORE); + public static final Instruction CASTORE = new Instruction(Constants.CASTORE); + public static final Instruction SASTORE = new Instruction(Constants.SASTORE); + public static final Instruction POP = new Instruction(Constants.POP); + public static final Instruction POP2 = new Instruction(Constants.POP2); + public static final Instruction DUP = new Instruction(Constants.DUP); + public static final Instruction DUP_X1 = new Instruction(Constants.DUP_X1); + public static final Instruction DUP_X2 = new Instruction(Constants.DUP_X2); + public static final Instruction DUP2 = new Instruction(Constants.DUP2); + public static final Instruction DUP2_X1 = new Instruction(Constants.DUP2_X1); + public static final Instruction DUP2_X2 = new Instruction(Constants.DUP2_X2); + public static final Instruction SWAP = new Instruction(Constants.SWAP); + public static final Instruction IADD = new Instruction(Constants.IADD); + public static final Instruction LADD = new Instruction(Constants.LADD); + public static final Instruction FADD = new Instruction(Constants.FADD); + public static final Instruction DADD = new Instruction(Constants.DADD); + public static final Instruction ISUB = new Instruction(Constants.ISUB); + public static final Instruction LSUB = new Instruction(Constants.LSUB); + public static final Instruction FSUB = new Instruction(Constants.FSUB); + public static final Instruction DSUB = new Instruction(Constants.DSUB); + public static final Instruction IMUL = new Instruction(Constants.IMUL); + public static final Instruction LMUL = new Instruction(Constants.LMUL); + public static final Instruction FMUL = new Instruction(Constants.FMUL); + public static final Instruction DMUL = new Instruction(Constants.DMUL); + public static final Instruction IDIV = new Instruction(Constants.IDIV); + public static final Instruction LDIV = new Instruction(Constants.LDIV); + public static final Instruction FDIV = new Instruction(Constants.FDIV); + public static final Instruction DDIV = new Instruction(Constants.DDIV); + public static final Instruction IREM = new Instruction(Constants.IREM); + public static final Instruction LREM = new Instruction(Constants.LREM); + public static final Instruction FREM = new Instruction(Constants.FREM); + public static final Instruction DREM = new Instruction(Constants.DREM); + public static final Instruction INEG = new Instruction(Constants.INEG); + public static final Instruction LNEG = new Instruction(Constants.LNEG); + public static final Instruction FNEG = new Instruction(Constants.FNEG); + public static final Instruction DNEG = new Instruction(Constants.DNEG); + public static final Instruction ISHL = new Instruction(Constants.ISHL); + public static final Instruction LSHL = new Instruction(Constants.LSHL); + public static final Instruction ISHR = new Instruction(Constants.ISHR); + public static final Instruction LSHR = new Instruction(Constants.LSHR); + public static final Instruction IUSHR = new Instruction(Constants.IUSHR); + public static final Instruction LUSHR = new Instruction(Constants.LUSHR); + public static final Instruction IAND = new Instruction(Constants.IAND); + public static final Instruction LAND = new Instruction(Constants.LAND); + public static final Instruction IOR = new Instruction(Constants.IOR); + public static final Instruction LOR = new Instruction(Constants.LOR); + public static final Instruction IXOR = new Instruction(Constants.IXOR); + public static final Instruction LXOR = new Instruction(Constants.LXOR); + public static final Instruction I2L = new Instruction(Constants.I2L); + public static final Instruction I2F = new Instruction(Constants.I2F); + public static final Instruction I2D = new Instruction(Constants.I2D); + public static final Instruction L2I = new Instruction(Constants.L2I); + public static final Instruction L2F = new Instruction(Constants.L2F); + public static final Instruction L2D = new Instruction(Constants.L2D); + public static final Instruction F2I = new Instruction(Constants.F2I); + public static final Instruction F2L = new Instruction(Constants.F2L); + public static final Instruction F2D = new Instruction(Constants.F2D); + public static final Instruction D2I = new Instruction(Constants.D2I); + public static final Instruction D2L = new Instruction(Constants.D2L); + public static final Instruction D2F = new Instruction(Constants.D2F); + public static final Instruction I2B = new Instruction(Constants.I2B); + public static final Instruction I2C = new Instruction(Constants.I2C); + public static final Instruction I2S = new Instruction(Constants.I2S); + public static final Instruction LCMP = new Instruction(Constants.LCMP); + public static final Instruction FCMPL = new Instruction(Constants.FCMPL); + public static final Instruction FCMPG = new Instruction(Constants.FCMPG); + public static final Instruction DCMPL = new Instruction(Constants.DCMPL); + public static final Instruction DCMPG = new Instruction(Constants.DCMPG); + public static final Instruction IRETURN = new Instruction(Constants.IRETURN); + public static final Instruction LRETURN = new Instruction(Constants.LRETURN); + public static final Instruction FRETURN = new Instruction(Constants.FRETURN); + public static final Instruction DRETURN = new Instruction(Constants.DRETURN); + public static final Instruction ARETURN = new Instruction(Constants.ARETURN); + public static final Instruction RETURN = new Instruction(Constants.RETURN); + public static final Instruction ARRAYLENGTH = new Instruction(Constants.ARRAYLENGTH); + public static final Instruction ATHROW = new Instruction(Constants.ATHROW); + public static final Instruction MONITORENTER = new Instruction(Constants.MONITORENTER); + public static final Instruction MONITOREXIT = new Instruction(Constants.MONITOREXIT); + public static final Instruction IMPDEP1 = new Instruction(Constants.IMPDEP1); + public static final Instruction IMPDEP2 = new Instruction(Constants.IMPDEP2); - /** You can use these constants in multiple places safely, if you can guarantee - * that you will never alter their internal values, e.g. call setIndex(). - */ - public static final LocalVariableInstruction THIS = new ALOAD(0); - public static final LocalVariableInstruction ALOAD_0 = THIS; - public static final LocalVariableInstruction ALOAD_1 = new ALOAD(1); - public static final LocalVariableInstruction ALOAD_2 = new ALOAD(2); - public static final LocalVariableInstruction ILOAD_0 = new ILOAD(0); - public static final LocalVariableInstruction ILOAD_1 = new ILOAD(1); - public static final LocalVariableInstruction ILOAD_2 = new ILOAD(2); - public static final LocalVariableInstruction ASTORE_0 = new ASTORE(0); - public static final LocalVariableInstruction ASTORE_1 = new ASTORE(1); - public static final LocalVariableInstruction ASTORE_2 = new ASTORE(2); - public static final LocalVariableInstruction ISTORE_0 = new ISTORE(0); - public static final LocalVariableInstruction ISTORE_1 = new ISTORE(1); - public static final LocalVariableInstruction ISTORE_2 = new ISTORE(2); + // You can use these constants in multiple places safely, any attempt to change the index + // for these constants will cause an exception + public static final InstructionLV THIS = new InstructionCLV(Constants.ALOAD,0); + public static final InstructionLV ALOAD_0 = new InstructionCLV(Constants.ALOAD_0); + public static final InstructionLV ALOAD_1 = new InstructionCLV(Constants.ALOAD_1); + public static final InstructionLV ALOAD_2 = new InstructionCLV(Constants.ALOAD_2); + public static final InstructionLV ALOAD_3 = new InstructionCLV(Constants.ALOAD_3); + public static final InstructionLV ILOAD_0 = new InstructionCLV(Constants.ILOAD_0); + public static final InstructionLV ILOAD_1 = new InstructionCLV(Constants.ILOAD_1); + public static final InstructionLV ILOAD_2 = new InstructionCLV(Constants.ILOAD_2); + public static final InstructionLV ILOAD_3 = new InstructionCLV(Constants.ILOAD_3); + public static final InstructionLV DLOAD_0 = new InstructionCLV(Constants.DLOAD_0); + public static final InstructionLV DLOAD_1 = new InstructionCLV(Constants.DLOAD_1); + public static final InstructionLV DLOAD_2 = new InstructionCLV(Constants.DLOAD_2); + public static final InstructionLV DLOAD_3 = new InstructionCLV(Constants.DLOAD_3); + public static final InstructionLV FLOAD_0 = new InstructionCLV(Constants.FLOAD_0); + public static final InstructionLV FLOAD_1 = new InstructionCLV(Constants.FLOAD_1); + public static final InstructionLV FLOAD_2 = new InstructionCLV(Constants.FLOAD_2); + public static final InstructionLV FLOAD_3 = new InstructionCLV(Constants.FLOAD_3); + public static final InstructionLV LLOAD_0 = new InstructionCLV(Constants.LLOAD_0); + public static final InstructionLV LLOAD_1 = new InstructionCLV(Constants.LLOAD_1); + public static final InstructionLV LLOAD_2 = new InstructionCLV(Constants.LLOAD_2); + public static final InstructionLV LLOAD_3 = new InstructionCLV(Constants.LLOAD_3); + public static final InstructionLV ASTORE_0 = new InstructionCLV(Constants.ASTORE_0); + public static final InstructionLV ASTORE_1 = new InstructionCLV(Constants.ASTORE_1); + public static final InstructionLV ASTORE_2 = new InstructionCLV(Constants.ASTORE_2); + public static final InstructionLV ASTORE_3 = new InstructionCLV(Constants.ASTORE_3); + public static final InstructionLV ISTORE_0 = new InstructionCLV(Constants.ISTORE_0); + public static final InstructionLV ISTORE_1 = new InstructionCLV(Constants.ISTORE_1); + public static final InstructionLV ISTORE_2 = new InstructionCLV(Constants.ISTORE_2); + public static final InstructionLV ISTORE_3 = new InstructionCLV(Constants.ISTORE_3); + public static final InstructionLV LSTORE_0 = new InstructionCLV(Constants.LSTORE_0); + public static final InstructionLV LSTORE_1 = new InstructionCLV(Constants.LSTORE_1); + public static final InstructionLV LSTORE_2 = new InstructionCLV(Constants.LSTORE_2); + public static final InstructionLV LSTORE_3 = new InstructionCLV(Constants.LSTORE_3); + public static final InstructionLV FSTORE_0 = new InstructionCLV(Constants.FSTORE_0); + public static final InstructionLV FSTORE_1 = new InstructionCLV(Constants.FSTORE_1); + public static final InstructionLV FSTORE_2 = new InstructionCLV(Constants.FSTORE_2); + public static final InstructionLV FSTORE_3 = new InstructionCLV(Constants.FSTORE_3); + public static final InstructionLV DSTORE_0 = new InstructionCLV(Constants.DSTORE_0); + public static final InstructionLV DSTORE_1 = new InstructionCLV(Constants.DSTORE_1); + public static final InstructionLV DSTORE_2 = new InstructionCLV(Constants.DSTORE_2); + public static final InstructionLV DSTORE_3 = new InstructionCLV(Constants.DSTORE_3); /** Get object via its opcode, for immutable instructions like @@ -321,6 +350,18 @@ public interface InstructionConstants { INSTRUCTIONS[Constants.ATHROW] = ATHROW; INSTRUCTIONS[Constants.MONITORENTER] = MONITORENTER; INSTRUCTIONS[Constants.MONITOREXIT] = MONITOREXIT; + INSTRUCTIONS[Constants.IMPDEP1] = IMPDEP1; + INSTRUCTIONS[Constants.IMPDEP2] = IMPDEP2; +// INSTRUCTIONS[Constants.ALOAD_0] = ALOAD_0;INSTRUCTIONS[Constants.ALOAD_1] = ALOAD_1; +// INSTRUCTIONS[Constants.ALOAD_2] = ALOAD_2;INSTRUCTIONS[Constants.ALOAD_3] = ALOAD_3; +// INSTRUCTIONS[Constants.LLOAD_0] = LLOAD_0;INSTRUCTIONS[Constants.LLOAD_1] = LLOAD_1; +// INSTRUCTIONS[Constants.LLOAD_2] = LLOAD_2;INSTRUCTIONS[Constants.LLOAD_3] = LLOAD_3; +// INSTRUCTIONS[Constants.DLOAD_0] = DLOAD_0;INSTRUCTIONS[Constants.DLOAD_1] = DLOAD_1; +// INSTRUCTIONS[Constants.DLOAD_2] = DLOAD_2;INSTRUCTIONS[Constants.DLOAD_3] = DLOAD_3; +// INSTRUCTIONS[Constants.FLOAD_0] = FLOAD_0;INSTRUCTIONS[Constants.FLOAD_1] = FLOAD_1; +// INSTRUCTIONS[Constants.FLOAD_2] = FLOAD_2;INSTRUCTIONS[Constants.FLOAD_3] = FLOAD_3; +// INSTRUCTIONS[Constants.ILOAD_0] = ILOAD_0;INSTRUCTIONS[Constants.ILOAD_1] = ILOAD_1; +// INSTRUCTIONS[Constants.ILOAD_2] = ILOAD_2;INSTRUCTIONS[Constants.ILOAD_3] = ILOAD_3; } } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionFactory.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionFactory.java index 9943e0949..07aed8852 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionFactory.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionFactory.java @@ -54,6 +54,7 @@ package org.aspectj.apache.bcel.generic; * . */ import org.aspectj.apache.bcel.Constants; +import org.aspectj.apache.bcel.classfile.ConstantPool; /** * Instances of this class may be used, e.g., to generate typed @@ -61,35 +62,28 @@ import org.aspectj.apache.bcel.Constants; * byte code generating backend of a compiler. You can subclass it to * add your own create methods. * - * @version $Id: InstructionFactory.java,v 1.3 2005/01/31 11:32:21 aclement Exp $ + * @version $Id: InstructionFactory.java,v 1.4 2008/05/28 23:52:59 aclement Exp $ * @author M. Dahm * @see Constants */ -public class InstructionFactory - implements InstructionConstants, java.io.Serializable -{ +public class InstructionFactory implements InstructionConstants, java.io.Serializable { protected ClassGen cg; - protected ConstantPoolGen cp; + protected ConstantPool cp; - public InstructionFactory(ClassGen cg, ConstantPoolGen cp) { + public InstructionFactory(ClassGen cg, ConstantPool cp) { this.cg = cg; this.cp = cp; } - /** Initialize with ClassGen object - */ public InstructionFactory(ClassGen cg) { this(cg, cg.getConstantPool()); } - /** Initialize just with ConstantPoolGen object - */ - public InstructionFactory(ConstantPoolGen cp) { + public InstructionFactory(ConstantPool cp) { this(null, cp); } /** Create an invoke instruction. - * * @param class_name name of the called class * @param name name of the called method * @param ret_type return type of method @@ -100,66 +94,89 @@ public class InstructionFactory */ public InvokeInstruction createInvoke(String class_name, String name, Type ret_type, Type[] arg_types, short kind) { - int index; - int nargs = 0; + String signature = Type.getMethodSignature(ret_type, arg_types); - - for(int i=0; i < arg_types.length; i++) // Count size of arguments - nargs += arg_types[i].getSize(); - - if(kind == Constants.INVOKEINTERFACE) + + int index; + if (kind == Constants.INVOKEINTERFACE) index = cp.addInterfaceMethodref(class_name, name, signature); else index = cp.addMethodref(class_name, name, signature); switch(kind) { - case Constants.INVOKESPECIAL: return new INVOKESPECIAL(index); - case Constants.INVOKEVIRTUAL: return new INVOKEVIRTUAL(index); - case Constants.INVOKESTATIC: return new INVOKESTATIC(index); - case Constants.INVOKEINTERFACE: return new INVOKEINTERFACE(index, nargs + 1); + case Constants.INVOKESPECIAL: return new InvokeInstruction(Constants.INVOKESPECIAL,index); + case Constants.INVOKEVIRTUAL: return new InvokeInstruction(Constants.INVOKEVIRTUAL,index); + case Constants.INVOKESTATIC: return new InvokeInstruction(Constants.INVOKESTATIC,index); + case Constants.INVOKEINTERFACE: + int nargs = 0; + for(int i=0; i < arg_types.length; i++) // Count size of arguments + nargs += arg_types[i].getSize(); + return new INVOKEINTERFACE(index, nargs + 1,0); default: throw new RuntimeException("Oops: Unknown invoke kind:" + kind); } } - /** Create a call to the most popular System.out.println() method. - * - * @param s the string to print - */ - public InstructionList createPrintln(String s) { - InstructionList il = new InstructionList(); - int out = cp.addFieldref("java.lang.System", "out", - "Ljava/io/PrintStream;"); - int println = cp.addMethodref("java.io.PrintStream", "println", - "(Ljava/lang/String;)V"); - - il.append(new GETSTATIC(out)); - il.append(new PUSH(cp, s)); - il.append(new INVOKEVIRTUAL(println)); - - return il; + public InvokeInstruction createInvoke(String class_name, String name, String signature, short kind) { + int index; + if(kind == Constants.INVOKEINTERFACE) { + index = cp.addInterfaceMethodref(class_name, name, signature); + } else { + index = cp.addMethodref(class_name, name, signature); + } + + switch(kind) { + case Constants.INVOKESPECIAL: return new InvokeInstruction(Constants.INVOKESPECIAL,index); + case Constants.INVOKEVIRTUAL: return new InvokeInstruction(Constants.INVOKEVIRTUAL,index); + case Constants.INVOKESTATIC: return new InvokeInstruction(Constants.INVOKESTATIC,index); + case Constants.INVOKEINTERFACE: + Type[] argumentTypes = Type.getArgumentTypes(signature); + int nargs = 0; + for(int i=0; i < argumentTypes.length; i++) {// Count size of arguments + nargs += argumentTypes[i].getSize(); + } + return new INVOKEINTERFACE(index, nargs + 1,0); + default: + throw new RuntimeException("Oops: Unknown invoke kind:" + kind); + } + } + + public static Instruction createALOAD(int n) { + if (n<4) { + return new InstructionLV((short)(Constants.ALOAD_0+n)); + } + return new InstructionLV(Constants.ALOAD,n); + } + + public static Instruction createASTORE(int n) { + if (n<4) { + return new InstructionLV((short)(Constants.ASTORE_0+n)); + } + return new InstructionLV(Constants.ASTORE,n); } + /** Uses PUSH to push a constant value onto the stack. * @param value must be of type Number, Boolean, Character or String */ + // OPTIMIZE callers should use the PUSH methods where possible if they know the types public Instruction createConstant(Object value) { - PUSH push; + Instruction instruction; if(value instanceof Number) - push = new PUSH(cp, (Number)value); + instruction = InstructionFactory.PUSH(cp, (Number)value); else if(value instanceof String) - push = new PUSH(cp, (String)value); + instruction = InstructionFactory.PUSH(cp, (String)value); else if(value instanceof Boolean) - push = new PUSH(cp, (Boolean)value); + instruction = InstructionFactory.PUSH(cp, (Boolean)value); else if(value instanceof Character) - push = new PUSH(cp, (Character)value); + instruction = InstructionFactory.PUSH(cp, (Character)value); else if (value instanceof ObjectType) - push = new PUSH(cp, (ObjectType)value); + instruction = InstructionFactory.PUSH(cp, (ObjectType)value); else throw new ClassGenException("Illegal type: " + value.getClass()); - return push.getInstruction(); + return instruction; } private static class MethodObject { @@ -183,58 +200,6 @@ public class InstructionFactory return createInvoke(m.class_name, m.name, m.result_type, m.arg_types, kind); } - private static MethodObject[] append_mos = { - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, - new Type[] { Type.STRING }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, - new Type[] { Type.OBJECT }, Constants.ACC_PUBLIC), - null, null, // indices 2, 3 - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, - new Type[] { Type.BOOLEAN }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, - new Type[] { Type.CHAR }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, - new Type[] { Type.FLOAT }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, - new Type[] { Type.DOUBLE }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, - new Type[] { Type.INT }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, // No append(byte) - new Type[] { Type.INT }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, // No append(short) - new Type[] { Type.INT }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, - new Type[] { Type.LONG }, Constants.ACC_PUBLIC) - }; - - private static final boolean isString(Type type) { - return ((type instanceof ObjectType) && - ((ObjectType)type).getClassName().equals("java.lang.String")); - } - - public Instruction createAppend(Type type) { - byte t = type.getType(); - - if(isString(type)) - return createInvoke(append_mos[0], Constants.INVOKEVIRTUAL); - - switch(t) { - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_FLOAT: - case Constants.T_DOUBLE: - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: - case Constants.T_LONG - : return createInvoke(append_mos[t], Constants.INVOKEVIRTUAL); - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return createInvoke(append_mos[1], Constants.INVOKEVIRTUAL); - default: - throw new RuntimeException("Oops: No append for this type? " + type); - } - } /** Create a field instruction. * @@ -251,25 +216,25 @@ public class InstructionFactory index = cp.addFieldref(class_name, name, signature); switch(kind) { - case Constants.GETFIELD: return new GETFIELD(index); - case Constants.PUTFIELD: return new PUTFIELD(index); - case Constants.GETSTATIC: return new GETSTATIC(index); - case Constants.PUTSTATIC: return new PUTSTATIC(index); - - default: - throw new RuntimeException("Oops: Unknown getfield kind:" + kind); + case Constants.GETFIELD: return new FieldInstruction(Constants.GETFIELD,index); + case Constants.PUTFIELD: return new FieldInstruction(Constants.PUTFIELD,index); + case Constants.GETSTATIC: return new FieldInstruction(Constants.GETSTATIC,index); + case Constants.PUTSTATIC: return new FieldInstruction(Constants.PUTSTATIC,index); + + default: + throw new RuntimeException("Oops: Unknown getfield kind:" + kind); } } /** Create reference to `this' */ public static Instruction createThis() { - return new ALOAD(0); + return new InstructionLV(Constants.ALOAD,0); } /** Create typed return */ - public static ReturnInstruction createReturn(Type type) { + public static Instruction createReturn(Type type) { switch(type.getType()) { case Constants.T_ARRAY: case Constants.T_OBJECT: return ARETURN; @@ -288,154 +253,76 @@ public class InstructionFactory } } - private static final ArithmeticInstruction createBinaryIntOp(char first, String op) { - switch(first) { - case '-' : return ISUB; - case '+' : return IADD; - case '%' : return IREM; - case '*' : return IMUL; - case '/' : return IDIV; - case '&' : return IAND; - case '|' : return IOR; - case '^' : return IXOR; - case '<' : return ISHL; - case '>' : return op.equals(">>>")? (ArithmeticInstruction)IUSHR : - (ArithmeticInstruction)ISHR; - default: throw new RuntimeException("Invalid operand " + op); - } - } - - private static final ArithmeticInstruction createBinaryLongOp(char first, String op) { - switch(first) { - case '-' : return LSUB; - case '+' : return LADD; - case '%' : return LREM; - case '*' : return LMUL; - case '/' : return LDIV; - case '&' : return LAND; - case '|' : return LOR; - case '^' : return LXOR; - case '<' : return LSHL; - case '>' : return op.equals(">>>")? (ArithmeticInstruction)LUSHR : - (ArithmeticInstruction)LSHR; - default: throw new RuntimeException("Invalid operand " + op); - } - } - - private static final ArithmeticInstruction createBinaryFloatOp(char op) { - switch(op) { - case '-' : return FSUB; - case '+' : return FADD; - case '*' : return FMUL; - case '/' : return FDIV; - default: throw new RuntimeException("Invalid operand " + op); - } - } - - private static final ArithmeticInstruction createBinaryDoubleOp(char op) { - switch(op) { - case '-' : return DSUB; - case '+' : return DADD; - case '*' : return DMUL; - case '/' : return DDIV; - default: throw new RuntimeException("Invalid operand " + op); - } - } - - /** - * Create binary operation for simple basic types, such as int and float. - * - * @param op operation, such as "+", "*", "<<", etc. - */ - public static ArithmeticInstruction createBinaryOperation(String op, Type type) { - char first = op.toCharArray()[0]; - - switch(type.getType()) { - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: - case Constants.T_CHAR: return createBinaryIntOp(first, op); - case Constants.T_LONG: return createBinaryLongOp(first, op); - case Constants.T_FLOAT: return createBinaryFloatOp(first); - case Constants.T_DOUBLE: return createBinaryDoubleOp(first); - default: throw new RuntimeException("Invalid type " + type); - } - } - /** * @param size size of operand, either 1 (int, e.g.) or 2 (double) */ - public static StackInstruction createPop(int size) { - return (size == 2)? (StackInstruction)POP2 : - (StackInstruction)POP; + public static Instruction createPop(int size) { + return (size == 2)? POP2 : POP; } /** * @param size size of operand, either 1 (int, e.g.) or 2 (double) */ - public static StackInstruction createDup(int size) { - return (size == 2)? (StackInstruction)DUP2 : - (StackInstruction)DUP; + public static Instruction createDup(int size) { + return (size == 2)? DUP2:DUP; } /** * @param size size of operand, either 1 (int, e.g.) or 2 (double) */ - public static StackInstruction createDup_2(int size) { - return (size == 2)? (StackInstruction)DUP2_X2 : - (StackInstruction)DUP_X2; + public static Instruction createDup_2(int size) { + return (size == 2)? DUP2_X2 :DUP_X2; } /** * @param size size of operand, either 1 (int, e.g.) or 2 (double) */ - public static StackInstruction createDup_1(int size) { - return (size == 2)? (StackInstruction)DUP2_X1 : - (StackInstruction)DUP_X1; + public static Instruction createDup_1(int size) { + return (size == 2)? DUP2_X1 : DUP_X1; } /** * @param index index of local variable */ - public static LocalVariableInstruction createStore(Type type, int index) { + public static InstructionLV createStore(Type type, int index) { switch(type.getType()) { - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: return new ISTORE(index); - case Constants.T_FLOAT: return new FSTORE(index); - case Constants.T_DOUBLE: return new DSTORE(index); - case Constants.T_LONG: return new LSTORE(index); - case Constants.T_ARRAY: - case Constants.T_OBJECT: return new ASTORE(index); - default: throw new RuntimeException("Invalid type " + type); + case Constants.T_BOOLEAN: + case Constants.T_CHAR: + case Constants.T_BYTE: + case Constants.T_SHORT: + case Constants.T_INT: return new InstructionLV(Constants.ISTORE,index); + case Constants.T_FLOAT: return new InstructionLV(Constants.FSTORE,index); + case Constants.T_DOUBLE: return new InstructionLV(Constants.DSTORE,index); + case Constants.T_LONG: return new InstructionLV(Constants.LSTORE,index); + case Constants.T_ARRAY: + case Constants.T_OBJECT: return new InstructionLV(Constants.ASTORE,index); + default: throw new RuntimeException("Invalid type " + type); } } /** * @param index index of local variable */ - public static LocalVariableInstruction createLoad(Type type, int index) { + public static InstructionLV createLoad(Type type, int index) { switch(type.getType()) { - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: return new ILOAD(index); - case Constants.T_FLOAT: return new FLOAD(index); - case Constants.T_DOUBLE: return new DLOAD(index); - case Constants.T_LONG: return new LLOAD(index); - case Constants.T_ARRAY: - case Constants.T_OBJECT: return new ALOAD(index); - default: throw new RuntimeException("Invalid type " + type); + case Constants.T_BOOLEAN: + case Constants.T_CHAR: + case Constants.T_BYTE: + case Constants.T_SHORT: + case Constants.T_INT: return new InstructionLV(Constants.ILOAD,index); + case Constants.T_FLOAT: return new InstructionLV(Constants.FLOAD,index); + case Constants.T_DOUBLE: return new InstructionLV(Constants.DLOAD,index); + case Constants.T_LONG: return new InstructionLV(Constants.LLOAD,index); + case Constants.T_ARRAY: + case Constants.T_OBJECT: return new InstructionLV(Constants.ALOAD,index); + default: throw new RuntimeException("Invalid type " + type); } } /** * @param type type of elements of array, i.e., array.getElementType() */ - public static ArrayInstruction createArrayLoad(Type type) { + public static Instruction createArrayLoad(Type type) { switch(type.getType()) { case Constants.T_BOOLEAN: case Constants.T_BYTE: return BALOAD; @@ -454,7 +341,7 @@ public class InstructionFactory /** * @param type type of elements of array, i.e., array.getElementType() */ - public static ArrayInstruction createArrayStore(Type type) { + public static Instruction createArrayStore(Type type) { switch(type.getType()) { case Constants.T_BOOLEAN: case Constants.T_BYTE: return BASTORE; @@ -470,7 +357,7 @@ public class InstructionFactory } } - + private static final char[] shortNames = { 'C', 'F', 'D', 'B', 'S', 'I', 'L' }; /** Create conversion operation for two stack operands, this may be an I2C, instruction, e.g., * if the operands are basic types and CHECKCAST if they are reference types. */ @@ -479,68 +366,95 @@ public class InstructionFactory byte dest = dest_type.getType(); byte src = src_type.getType(); - if(dest == Constants.T_LONG && (src == Constants.T_CHAR || src == Constants.T_BYTE || - src == Constants.T_SHORT)) - src = Constants.T_INT; - - String[] short_names = { "C", "F", "D", "B", "S", "I", "L" }; - - String name = "org.aspectj.apache.bcel.generic." + short_names[src - Constants.T_CHAR] + - "2" + short_names[dest - Constants.T_CHAR]; + if (dest == Constants.T_LONG && (src == Constants.T_CHAR || src == Constants.T_BYTE || src == Constants.T_SHORT)) + src = Constants.T_INT; + + if (src==Constants.T_DOUBLE) { + switch (dest) { + case Constants.T_FLOAT: return InstructionConstants.D2F; + case Constants.T_INT: return InstructionConstants.D2I; + case Constants.T_LONG: return InstructionConstants.D2L; + } + } else if (src==Constants.T_FLOAT) { + switch (dest) { + case Constants.T_DOUBLE: return InstructionConstants.F2D; + case Constants.T_INT: return InstructionConstants.F2I; + case Constants.T_LONG: return InstructionConstants.F2L; + } + } else if (src==Constants.T_INT) { + switch (dest) { + case Constants.T_BYTE: return InstructionConstants.I2B; + case Constants.T_CHAR: return InstructionConstants.I2C; + case Constants.T_DOUBLE: return InstructionConstants.I2D; + case Constants.T_FLOAT: return InstructionConstants.I2F; + case Constants.T_LONG: return InstructionConstants.I2L; + case Constants.T_SHORT: return InstructionConstants.I2S; + } + } else if (src==Constants.T_LONG) { + switch (dest) { + case Constants.T_DOUBLE: return InstructionConstants.L2D; + case Constants.T_FLOAT: return InstructionConstants.L2F; + case Constants.T_INT: return InstructionConstants.L2I; + } + } + +// String name = "org.aspectj.apache.bcel.generic." + short_names[src - Constants.T_CHAR] + +// "2" + short_names[dest - Constants.T_CHAR]; - Instruction i = null; - try { - i = (Instruction)java.lang.Class.forName(name).newInstance(); - } catch(Exception e) { - throw new RuntimeException("Could not find instruction: " + name); - } - - return i; +// Instruction i = null; +// try { +// i = (Instruction)java.lang.Class.forName(name).newInstance(); +// } catch(Exception e) { +// throw new RuntimeException("Could not find instruction: " + name); +// } + + return null; +// return i; } else if((src_type instanceof ReferenceType) && (dest_type instanceof ReferenceType)) { if(dest_type instanceof ArrayType) - return new CHECKCAST(cp.addArrayClass((ArrayType)dest_type)); + return new InstructionCP(Constants.CHECKCAST,cp.addArrayClass((ArrayType)dest_type)); else - return new CHECKCAST(cp.addClass(((ObjectType)dest_type).getClassName())); + return new InstructionCP(Constants.CHECKCAST,cp.addClass(((ObjectType)dest_type).getClassName())); } else throw new RuntimeException("Can not cast " + src_type + " to " + dest_type); } - public GETFIELD createGetField(String class_name, String name, Type t) { - return new GETFIELD(cp.addFieldref(class_name, name, t.getSignature())); + public FieldInstruction createGetField(String class_name, String name, Type t) { + return new FieldInstruction(Constants.GETFIELD,cp.addFieldref(class_name, name, t.getSignature())); } - public GETSTATIC createGetStatic(String class_name, String name, Type t) { - return new GETSTATIC(cp.addFieldref(class_name, name, t.getSignature())); + public FieldInstruction createGetStatic(String class_name, String name, Type t) { + return new FieldInstruction(Constants.GETSTATIC,cp.addFieldref(class_name, name, t.getSignature())); } - public PUTFIELD createPutField(String class_name, String name, Type t) { - return new PUTFIELD(cp.addFieldref(class_name, name, t.getSignature())); + public FieldInstruction createPutField(String class_name, String name, Type t) { + return new FieldInstruction(Constants.PUTFIELD,cp.addFieldref(class_name, name, t.getSignature())); } - public PUTSTATIC createPutStatic(String class_name, String name, Type t) { - return new PUTSTATIC(cp.addFieldref(class_name, name, t.getSignature())); + public FieldInstruction createPutStatic(String class_name, String name, Type t) { + return new FieldInstruction(Constants.PUTSTATIC,cp.addFieldref(class_name, name, t.getSignature())); } - public CHECKCAST createCheckCast(ReferenceType t) { + public Instruction createCheckCast(ReferenceType t) { if(t instanceof ArrayType) - return new CHECKCAST(cp.addArrayClass((ArrayType)t)); + return new InstructionCP(Constants.CHECKCAST,cp.addArrayClass((ArrayType)t)); else - return new CHECKCAST(cp.addClass((ObjectType)t)); + return new InstructionCP(Constants.CHECKCAST,cp.addClass((ObjectType)t)); } - public INSTANCEOF createInstanceOf(ReferenceType t) { + public Instruction createInstanceOf(ReferenceType t) { if(t instanceof ArrayType) - return new INSTANCEOF(cp.addArrayClass((ArrayType)t)); + return new InstructionCP(Constants.INSTANCEOF,cp.addArrayClass((ArrayType)t)); else - return new INSTANCEOF(cp.addClass((ObjectType)t)); + return new InstructionCP(Constants.INSTANCEOF,cp.addClass((ObjectType)t)); } - public NEW createNew(ObjectType t) { - return new NEW(cp.addClass(t)); + public Instruction createNew(ObjectType t) { + return new InstructionCP(Constants.NEW,cp.addClass(t)); } - public NEW createNew(String s) { + public Instruction createNew(String s) { return createNew(new ObjectType(s)); } @@ -550,11 +464,11 @@ public class InstructionFactory public Instruction createNewArray(Type t, short dim) { if(dim == 1) { if(t instanceof ObjectType) - return new ANEWARRAY(cp.addClass((ObjectType)t)); + return new InstructionCP(Constants.ANEWARRAY,cp.addClass((ObjectType)t)); else if(t instanceof ArrayType) - return new ANEWARRAY(cp.addArrayClass((ArrayType)t)); + return new InstructionCP(Constants.ANEWARRAY,cp.addArrayClass((ArrayType)t)); else - return new NEWARRAY(((BasicType)t).getType()); + return new InstructionByte(Constants.NEWARRAY,((BasicType)t).getType()); } else { ArrayType at; @@ -591,28 +505,28 @@ public class InstructionFactory /** Create branch instruction by given opcode, except LOOKUPSWITCH and TABLESWITCH. * For those you should use the SWITCH compound instruction. */ - public static BranchInstruction createBranchInstruction(short opcode, InstructionHandle target) { + public static InstructionBranch createBranchInstruction(short opcode, InstructionHandle target) { switch(opcode) { - case Constants.IFEQ: return new IFEQ(target); - case Constants.IFNE: return new IFNE(target); - case Constants.IFLT: return new IFLT(target); - case Constants.IFGE: return new IFGE(target); - case Constants.IFGT: return new IFGT(target); - case Constants.IFLE: return new IFLE(target); - case Constants.IF_ICMPEQ: return new IF_ICMPEQ(target); - case Constants.IF_ICMPNE: return new IF_ICMPNE(target); - case Constants.IF_ICMPLT: return new IF_ICMPLT(target); - case Constants.IF_ICMPGE: return new IF_ICMPGE(target); - case Constants.IF_ICMPGT: return new IF_ICMPGT(target); - case Constants.IF_ICMPLE: return new IF_ICMPLE(target); - case Constants.IF_ACMPEQ: return new IF_ACMPEQ(target); - case Constants.IF_ACMPNE: return new IF_ACMPNE(target); - case Constants.GOTO: return new GOTO(target); - case Constants.JSR: return new JSR(target); - case Constants.IFNULL: return new IFNULL(target); - case Constants.IFNONNULL: return new IFNONNULL(target); - case Constants.GOTO_W: return new GOTO_W(target); - case Constants.JSR_W: return new JSR_W(target); + case Constants.IFEQ: return new InstructionBranch(Constants.IFEQ,target); + case Constants.IFNE: return new InstructionBranch(Constants.IFNE,target); + case Constants.IFLT: return new InstructionBranch(Constants.IFLT,target); + case Constants.IFGE: return new InstructionBranch(Constants.IFGE,target); + case Constants.IFGT: return new InstructionBranch(Constants.IFGT,target); + case Constants.IFLE: return new InstructionBranch(Constants.IFLE,target); + case Constants.IF_ICMPEQ: return new InstructionBranch(Constants.IF_ICMPEQ,target); + case Constants.IF_ICMPNE: return new InstructionBranch(Constants.IF_ICMPNE,target); + case Constants.IF_ICMPLT: return new InstructionBranch(Constants.IF_ICMPLT,target); + case Constants.IF_ICMPGE: return new InstructionBranch(Constants.IF_ICMPGE,target); + case Constants.IF_ICMPGT: return new InstructionBranch(Constants.IF_ICMPGT,target); + case Constants.IF_ICMPLE: return new InstructionBranch(Constants.IF_ICMPLE,target); + case Constants.IF_ACMPEQ: return new InstructionBranch(Constants.IF_ACMPEQ,target); + case Constants.IF_ACMPNE: return new InstructionBranch(Constants.IF_ACMPNE,target); + case Constants.GOTO: return new InstructionBranch(Constants.GOTO,target); + case Constants.JSR: return new InstructionBranch(Constants.JSR,target); + case Constants.IFNULL: return new InstructionBranch(Constants.IFNULL,target); + case Constants.IFNONNULL: return new InstructionBranch(Constants.IFNONNULL,target); + case Constants.GOTO_W: return new InstructionBranch(Constants.GOTO_W,target); + case Constants.JSR_W: return new InstructionBranch(Constants.JSR_W,target); default: throw new RuntimeException("Invalid opcode: " + opcode); } @@ -620,6 +534,113 @@ public class InstructionFactory public void setClassGen(ClassGen c) { cg = c; } public ClassGen getClassGen() { return cg; } - public void setConstantPool(ConstantPoolGen c) { cp = c; } - public ConstantPoolGen getConstantPool() { return cp; } + public void setConstantPool(ConstantPool c) { cp = c; } + public ConstantPool getConstantPool() { return cp; } + + + /** + * Returns the right instruction for putting whatever you want onto the stack + */ + public static Instruction PUSH(ConstantPool cp, int value) { + Instruction instruction = null; + if ((value >= -1) && (value <= 5)) { + return INSTRUCTIONS[Constants.ICONST_0 + value]; + } else if ((value >= -128) && (value <= 127)) // Use BIPUSH + instruction = new InstructionByte(Constants.BIPUSH,(byte)value); + else if((value >= -32768) && (value <= 32767)) // Use SIPUSH + instruction = new InstructionShort(Constants.SIPUSH,(short)value); + else // If everything fails create a Constant pool entry + { + int pos = cp.addInteger(value); + if (pos<=Constants.MAX_BYTE) { + instruction = new InstructionCP(Constants.LDC,pos); + } else { + instruction = new InstructionCP(Constants.LDC_W,pos); + } + } + return instruction; + } + + public static Instruction PUSH(ConstantPool cp, ObjectType t) { + return new InstructionCP(Constants.LDC_W,cp.addClass(t)); + } + + public static Instruction PUSH(ConstantPool cp, boolean value) { + return INSTRUCTIONS[Constants.ICONST_0 + (value? 1 : 0)]; + } + + public static Instruction PUSH(ConstantPool cp, float value) { + Instruction instruction = null; + if(value == 0.0) + instruction = FCONST_0; + else if(value == 1.0) + instruction = FCONST_1; + else if(value == 2.0) + instruction = FCONST_2; + else { + // Create a Constant pool entry + int i = cp.addFloat(value); + instruction = new InstructionCP(i<=Constants.MAX_BYTE?Constants.LDC:Constants.LDC_W,i); + } + return instruction; + } + + public static Instruction PUSH(ConstantPool cp, long value) { + Instruction instruction = null; + if(value == 0) + instruction = LCONST_0; + else if(value == 1) + instruction = LCONST_1; + else // Create a Constant pool entry + instruction = new InstructionCP(Constants.LDC2_W,cp.addLong(value)); + return instruction; + } + + public static Instruction PUSH(ConstantPool cp, double value) { + Instruction instruction = null; + if(value == 0.0) + instruction = DCONST_0; + else if(value == 1.0) + instruction = DCONST_1; + else { + // Create a Constant pool entry + instruction = new InstructionCP(Constants.LDC2_W,cp.addDouble(value)); + } + return instruction; + } + + public static Instruction PUSH(ConstantPool cp, String value) { + Instruction instruction = null; + if(value == null) + instruction = ACONST_NULL; + else { + int i = cp.addString(value); + instruction = new InstructionCP(i<=Constants.MAX_BYTE?Constants.LDC:Constants.LDC_W,i); + } + return instruction; + } + + public static Instruction PUSH(ConstantPool cp, Number value) { + Instruction instruction = null; + if((value instanceof Integer) || (value instanceof Short) || (value instanceof Byte)) + instruction = PUSH(cp, value.intValue()); + else if(value instanceof Double) + instruction = PUSH(cp, value.doubleValue()); + else if(value instanceof Float) + instruction = PUSH(cp, value.floatValue()); + else if(value instanceof Long) + instruction = PUSH(cp, value.longValue()); + else + throw new ClassGenException("What's this: " + value); + return instruction; + } + + public static Instruction PUSH(ConstantPool cp, Character value) { + return PUSH(cp, (int)value.charValue()); + } + + public static Instruction PUSH(ConstantPool cp, Boolean value) { + return PUSH(cp, value.booleanValue()); + } + } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionHandle.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionHandle.java index b4a2b4c8e..7680cd841 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionHandle.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionHandle.java @@ -71,7 +71,7 @@ import java.util.HashMap; * can traverse the list via an Enumeration returned by * InstructionList.elements(). * - * @version $Id: InstructionHandle.java,v 1.3 2007/05/22 09:11:40 aclement Exp $ + * @version $Id: InstructionHandle.java,v 1.4 2008/05/28 23:52:59 aclement Exp $ * @author M. Dahm * @see Instruction * @see BranchHandle @@ -82,7 +82,6 @@ public class InstructionHandle implements java.io.Serializable { Instruction instruction; protected int i_position = -1; // byte code offset of instruction private HashSet targeters; - private HashMap attributes; public final InstructionHandle getNext() { return next; } public final InstructionHandle getPrev() { return prev; } @@ -93,11 +92,11 @@ public class InstructionHandle implements java.io.Serializable { * Old instruction is disposed using Instruction.dispose(). */ public void setInstruction(Instruction i) { // Overridden in BranchHandle - if(i == null) - throw new ClassGenException("Assigning null to handle"); - - if((this.getClass() != BranchHandle.class) && (i instanceof BranchInstruction)) - throw new ClassGenException("Assigning branch instruction " + i + " to plain handle"); +// if(i == null) +// throw new ClassGenException("Assigning null to handle"); +// +// if((this.getClass() != BranchHandle.class) && (i instanceof InstructionBranch)) +// throw new ClassGenException("Assigning branch instruction " + i + " to plain handle"); if(instruction != null) instruction.dispose(); @@ -121,11 +120,12 @@ public class InstructionHandle implements java.io.Serializable { } - /** Factory method. + /** + * Factory method. */ static final InstructionHandle getInstructionHandle(Instruction i) { return new InstructionHandle(i); - } + } /** * Called by InstructionList.setPositions when setting the position for every @@ -157,12 +157,12 @@ public class InstructionHandle implements java.io.Serializable { /** * Delete contents, i.e., remove user access and make handle reusable. */ + // OPTIMIZE get rid of this? why do we need it void dispose() { next = prev = null; instruction.dispose(); instruction = null; i_position = -1; - attributes = null; removeAllTargeters(); } @@ -219,49 +219,11 @@ public class InstructionHandle implements java.io.Serializable { return toString(true); } - /** Add an attribute to an instruction handle. - * - * @param key the key object to store/retrieve the attribute - * @param attr the attribute to associate with this handle - */ - public void addAttribute(Object key, Object attr) { - if(attributes == null) - attributes = new HashMap(3); - - attributes.put(key, attr); - } - - /** Delete an attribute of an instruction handle. - * - * @param key the key object to retrieve the attribute - */ - public void removeAttribute(Object key) { - if(attributes != null) - attributes.remove(key); - } - - /** Get attribute of an instruction handle. - * - * @param key the key object to store/retrieve the attribute - */ - public Object getAttribute(Object key) { - if(attributes != null) - return attributes.get(key); - - return null; - } - - /** @return all attributes associated with this handle - */ - public Collection getAttributes() { - return attributes.values(); - } - /** Convenience method, simply calls accept() on the contained instruction. * * @param v Visitor object */ - public void accept(Visitor v) { + public void accept(InstVisitor v) { instruction.accept(v); } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionLV.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionLV.java new file mode 100644 index 000000000..cfeeac0bd --- /dev/null +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionLV.java @@ -0,0 +1,183 @@ +package org.aspectj.apache.bcel.generic; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache BCEL" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache BCEL", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ +import java.io.DataOutputStream; +import java.io.IOException; + +import org.aspectj.apache.bcel.Constants; + +/** + * Abstract super class for instructions dealing with local variables. + * + * @version $Id: InstructionLV.java,v 1.2 2008/05/28 23:52:57 aclement Exp $ + * @author M. Dahm + */ +public class InstructionLV extends Instruction { + protected int lvar = -1; + + + public InstructionLV(short opcode, int lvar) { + this.opcode = opcode; + this.lvar = lvar; + } + + public InstructionLV(short opcode) { + this.opcode = opcode; + } + + public void dump(DataOutputStream out) throws IOException { + if (lvar==-1) { + out.writeByte(opcode); + } else { + if (lvar<4) { + if (opcode==ALOAD) { out.writeByte(ALOAD_0+lvar); + } else if (opcode==ASTORE) { out.writeByte(ASTORE_0+lvar); + } else if (opcode==ILOAD) { out.writeByte(ILOAD_0+lvar); + } else if (opcode==ISTORE) { out.writeByte(ISTORE_0+lvar); + } else if (opcode==DLOAD) { out.writeByte(DLOAD_0+lvar); + } else if (opcode==DSTORE) { out.writeByte(DSTORE_0+lvar); + } else if (opcode==FLOAD) { out.writeByte(FLOAD_0+lvar); + } else if (opcode==FSTORE) { out.writeByte(FSTORE_0+lvar); + } else if (opcode==LLOAD) { out.writeByte(LLOAD_0+lvar); + } else if (opcode==LSTORE) { out.writeByte(LSTORE_0+lvar); + } else { + if (wide()) out.writeByte(Constants.WIDE); + out.writeByte(opcode); + if (wide()) out.writeShort(lvar); + else out.writeByte(lvar); + } + } else { + if (wide()) out.writeByte(Constants.WIDE); + out.writeByte(opcode); + if (wide()) out.writeShort(lvar); + else out.writeByte(lvar); + } + } + } + + /** + * Long output format: + * + * 'name of opcode' "[" 'opcode number' "]" + * "(" 'length of instruction' ")" "<" 'local variable index' ">" + */ + public String toString(boolean verbose) { + if(((opcode >= Constants.ILOAD_0) && (opcode <= Constants.ALOAD_3)) || + ((opcode >= Constants.ISTORE_0) && (opcode <= Constants.ASTORE_3))) + return super.toString(verbose); + else + return super.toString(verbose) + ((lvar!=-1&&lvar<4)?"_":" ") + lvar; + } + + public boolean isALOAD() { + return opcode==ALOAD || (opcode>=ALOAD_0 && opcode<=ALOAD_3); + } + + public boolean isASTORE() { + return opcode==ASTORE || (opcode>=ASTORE_0 && opcode<=ASTORE_3); + } + + /** + * @return local variable index referred by this instruction. + */ + // optimize! + public final int getIndex() { + if (lvar!=-1) return lvar; + if (opcode>= Constants.ILOAD_0 && opcode <= Constants.ALOAD_3) { + return (opcode - Constants.ILOAD_0) % 4; + } else if (opcode>= Constants.ISTORE_0 && opcode <= Constants.ASTORE_3) { + return (opcode - Constants.ISTORE_0) % 4; + } + return -1; + } + + public void setIndex(int i) { + // Switching the index for a load/store without a current index specified (ie. an aload_1 or istore_2) + // means we need to should adjust to a normal aload/istore opcode + if (getIndex()!=i) { + if(opcode>= Constants.ILOAD_0 && opcode <= Constants.ALOAD_3) { + opcode = (short)(ILOAD + (opcode-ILOAD_0)/4); + } else if (opcode>= Constants.ISTORE_0 && opcode <= Constants.ASTORE_3) { + opcode = (short)(ISTORE+ (opcode-ISTORE_0)/4); + } + this.lvar = i; + } + } + + public int getLength() { + int size=Constants.iLen[opcode]; + if (lvar==-1) { + return size; + } else { + if (lvar<4) { + if (opcode==ALOAD || opcode==ASTORE) return 1; + else if (opcode==ILOAD || opcode==ISTORE) return 1; + else if (opcode==DLOAD || opcode==DSTORE) return 1; + else if (opcode==FLOAD || opcode==FSTORE) return 1; + else if (opcode==LLOAD || opcode==LSTORE) return 1; + else { + if (wide()) return size +2; + return size; + } + } else { + if (wide()) return size +2; + return size; + } + } + } + + private final boolean wide() { return lvar > Constants.MAX_BYTE; } + +} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionList.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionList.java index cbf6adf90..8482e13a8 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionList.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionList.java @@ -56,6 +56,7 @@ package org.aspectj.apache.bcel.generic; import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.classfile.Constant; +import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.util.ByteSequence; import java.io.*; import java.util.Iterator; @@ -75,7 +76,7 @@ import java.util.ArrayList; * A list is finally dumped to a byte code array with getByteCode. * - * @version $Id: InstructionList.java,v 1.5 2007/02/28 13:10:32 aclement Exp $ + * @version $Id: InstructionList.java,v 1.6 2008/05/28 23:52:57 aclement Exp $ * @author M. Dahm * @see Instruction * @see InstructionHandle @@ -103,19 +104,10 @@ public class InstructionList implements Serializable { * Create instruction list containing one instruction. * @param i initial instruction */ - public InstructionList(BranchInstruction i) { + public InstructionList(InstructionBranch i) { append(i); } - /** - * Initialize list with (nonnull) compound instruction. Consumes argument - * list, i.e., it becomes empty. - * - * @param c compound instruction (list) - */ - public InstructionList(CompoundInstruction c) { - append(c.getInstructionList()); - } /** * Test for empty list. @@ -138,7 +130,6 @@ public class InstructionList implements Serializable { public static InstructionHandle findHandle(InstructionHandle[] ihs, int[] pos, int count,int target,boolean returnClosestIfNoExactMatch) { int l=0, r = count - 1; - // Do a binary search since the pos array is ordered int i,j; do { @@ -147,7 +138,7 @@ public class InstructionList implements Serializable { if (j == target) return ihs[i]; // found it else if (target < j) r=i-1; // else constrain search area else l=i+1; // target > j - } while(l <= r); + } while (l <= r); if (returnClosestIfNoExactMatch) { i = (l+r)/2; if (i<0) i=0; @@ -172,11 +163,11 @@ public class InstructionList implements Serializable { public InstructionHandle[] getInstructionsAsArray() { return getInstructionHandles(); } - + public InstructionHandle findHandle(int pos,InstructionHandle[] instructionArray) { return findHandle(instructionArray,byte_positions,length,pos); } - + public InstructionHandle findHandle(int pos,InstructionHandle[] instructionArray,boolean useClosestApproximationIfNoExactFound) { return findHandle(instructionArray,byte_positions,length,pos,useClosestApproximationIfNoExactFound); } @@ -197,24 +188,24 @@ public class InstructionList implements Serializable { */ try { while(bytes.available() > 0) { - // Remember byte offset and associate it with the instruction - int off = bytes.getIndex(); - pos[count] = off; + // Remember byte offset and associate it with the instruction + int off = bytes.getIndex(); + pos[count] = off; + + /* Read one instruction from the byte stream, the byte position is set + * accordingly. + */ + Instruction i = Instruction.readInstruction(bytes); + InstructionHandle ih; + if (i instanceof InstructionBranch) // Use proper append() method + ih = append((InstructionBranch)i); + else + ih = append(i); - /* Read one instruction from the byte stream, the byte position is set - * accordingly. - */ - Instruction i = Instruction.readInstruction(bytes); - InstructionHandle ih; - if(i instanceof BranchInstruction) // Use proper append() method - ih = append((BranchInstruction)i); - else - ih = append(i); - - ih.setPosition(off); - ihs[count] = ih; - - count++; + ih.setPosition(off); + ihs[count] = ih; + + count++; } } catch(IOException e) { throw new ClassGenException(e.toString()); } @@ -224,34 +215,35 @@ public class InstructionList implements Serializable { /* Pass 2: Look for BranchInstruction and update their targets, i.e., * convert offsets to instruction handles. */ + // OPTIMIZE better way of doing this? keep little map from earlier from pos -> instruction handle? for(int i=0; i < count; i++) { if(ihs[i] instanceof BranchHandle) { - BranchInstruction bi = (BranchInstruction)ihs[i].instruction; - int target = bi.position + bi.getIndex(); /* Byte code position: - * relative -> absolute. */ - // Search for target position - InstructionHandle ih = findHandle(ihs, pos, count, target); - - if(ih == null) // Search failed - throw new ClassGenException("Couldn't find target for branch: " + bi); + InstructionBranch bi = (InstructionBranch)ihs[i].instruction; + int target = bi.positionOfThisInstruction + bi.getIndex(); /* Byte code position: + * relative -> absolute. */ + // Search for target position + InstructionHandle ih = findHandle(ihs, pos, count, target); - bi.setTarget(ih); // Update target + if(ih == null) // Search failed + throw new ClassGenException("Couldn't find target for branch: " + bi); + + bi.setTarget(ih); // Update target + + // If it is a Select instruction, update all branch targets + if(bi instanceof InstructionSelect) { // Either LOOKUPSWITCH or TABLESWITCH + InstructionSelect s = (InstructionSelect)bi; + int[] indices = s.getIndices(); + + for(int j=0; j < indices.length; j++) { + target = bi.positionOfThisInstruction + indices[j]; + ih = findHandle(ihs, pos, count, target); + + if(ih == null) // Search failed + throw new ClassGenException("Couldn't find target for switch: " + bi); - // If it is a Select instruction, update all branch targets - if(bi instanceof Select) { // Either LOOKUPSWITCH or TABLESWITCH - Select s = (Select)bi; - int[] indices = s.getIndices(); - - for(int j=0; j < indices.length; j++) { - target = bi.position + indices[j]; - ih = findHandle(ihs, pos, count, target); - - if(ih == null) // Search failed - throw new ClassGenException("Couldn't find target for switch: " + bi); - - s.setTarget(j, ih); // Update target - } - } + s.setTarget(j, ih); // Update target + } + } } } } @@ -373,7 +365,7 @@ public class InstructionList implements Serializable { * @param i branch instruction to append * @return branch instruction handle of the appended instruction */ - public BranchHandle append(BranchInstruction i) { + public BranchHandle append(InstructionBranch i) { BranchHandle ih = BranchHandle.getBranchHandle(i); append(ih); @@ -392,37 +384,6 @@ public class InstructionList implements Serializable { return append(i, new InstructionList(j)); } - /** - * Append a compound instruction, after instruction i. - * - * @param i Instruction in list - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append(Instruction i, CompoundInstruction c) { - return append(i, c.getInstructionList()); - } - - /** - * Append a compound instruction. - * - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append(CompoundInstruction c) { - return append(c.getInstructionList()); - } - - /** - * Append a compound instruction. - * - * @param ih where to append the instruction list - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append(InstructionHandle ih, CompoundInstruction c) { - return append(ih, c.getInstructionList()); - } /** * Append an instruction after instruction (handle) ih contained in this list. @@ -442,7 +403,7 @@ public class InstructionList implements Serializable { * @param i Instruction to append * @return instruction handle pointing to the first appended instruction */ - public BranchHandle append(InstructionHandle ih, BranchInstruction i) { + public BranchHandle append(InstructionHandle ih, InstructionBranch i) { BranchHandle bh = BranchHandle.getBranchHandle(i); InstructionList il = new InstructionList(); il.append(bh); @@ -558,7 +519,7 @@ public class InstructionList implements Serializable { * @param i branch instruction to insert * @return branch instruction handle of the appended instruction */ - public BranchHandle insert(BranchInstruction i) { + public BranchHandle insert(InstructionBranch i) { BranchHandle ih = BranchHandle.getBranchHandle(i); insert(ih); return ih; @@ -576,26 +537,6 @@ public class InstructionList implements Serializable { return insert(i, new InstructionList(j)); } - /** - * Insert a compound instruction before instruction i. - * - * @param i Instruction in list - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert(Instruction i, CompoundInstruction c) { - return insert(i, c.getInstructionList()); - } - - /** - * Insert a compound instruction. - * - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert(CompoundInstruction c) { - return insert(c.getInstructionList()); - } /** * Insert an instruction before instruction (handle) ih contained in this list. @@ -608,17 +549,6 @@ public class InstructionList implements Serializable { return insert(ih, new InstructionList(i)); } - /** - * Insert a compound instruction. - * - * @param ih where to insert the instruction list - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert(InstructionHandle ih, CompoundInstruction c) { - return insert(ih, c.getInstructionList()); - } - /** * Insert an instruction before instruction (handle) ih contained in this list. * @@ -626,7 +556,7 @@ public class InstructionList implements Serializable { * @param i Instruction to insert * @return instruction handle of the first inserted instruction */ - public BranchHandle insert(InstructionHandle ih, BranchInstruction i) { + public BranchHandle insert(InstructionHandle ih, InstructionBranch i) { BranchHandle bh = BranchHandle.getBranchHandle(i); InstructionList il = new InstructionList(); il.append(bh); @@ -709,42 +639,44 @@ public class InstructionList implements Serializable { } /** - * Remove from instruction `prev' to instruction `next' both contained - * in this list. Throws TargetLostException when one of the removed instruction handles + * Remove from instruction 'prev' to instruction 'next' both contained + * in this list. + * + * If careAboutLostTargeters is true then this method will throw a + * TargetLostException when one of the removed instruction handles * is still being targeted. * * @param prev where to start deleting (predecessor, exclusive) * @param next where to end deleting (successor, exclusive) */ - private void remove(InstructionHandle prev, InstructionHandle next) - throws TargetLostException - { + private void remove(InstructionHandle prev, InstructionHandle next, boolean careAboutLostTargeters) throws TargetLostException { InstructionHandle first, last; // First and last deleted instruction - if((prev == null) && (next == null)) { // singleton list + if ((prev == null) && (next == null)) { // singleton list first = last = start; start = end = null; } else { - if(prev == null) { // At start of list - first = start; - start = next; + if (prev == null) { // At start of list + first = start; + start = next; } else { - first = prev.next; - prev.next = next; + first = prev.next; + prev.next = next; } - - if(next == null) { // At end of list - last = end; - end = prev; + if (next == null) { // At end of list + last = end; + end = prev; } else { - last = next.prev; - next.prev = prev; + last = next.prev; + next.prev = prev; } } first.prev = null; // Completely separated from rest of list last.next = null; + if (!careAboutLostTargeters) return; + ArrayList target_vec = new ArrayList(); for(InstructionHandle ih=first; ih != null; ih = ih.next) @@ -756,11 +688,26 @@ public class InstructionList implements Serializable { length--; if(ih.hasTargeters()) { // Still got targeters? - target_vec.add(ih); - buf.append(ih.toString(true) + " "); - ih.next = ih.prev = null; - } else - ih.dispose(); + InstructionTargeter[] targeters = ih.getTargeters(); + boolean isOK = false; + for (int i = 0; i < targeters.length; i++) { + InstructionTargeter instructionTargeter = targeters[i]; + if (instructionTargeter.getClass().getName().endsWith("ShadowRange") || + instructionTargeter.getClass().getName().endsWith("ExceptionRange") || + instructionTargeter.getClass().getName().endsWith("LineNumberTag") ) isOK=true; + else System.out.println(instructionTargeter.getClass()); + } + if (!isOK) { + + target_vec.add(ih); + buf.append(ih.toString(true) + " "); + ih.next = ih.prev = null; + } else { + ih.dispose(); + } + } else { + ih.dispose(); + } } buf.append("}"); @@ -779,7 +726,7 @@ public class InstructionList implements Serializable { * @param ih instruction (handle) to remove */ public void delete(InstructionHandle ih) throws TargetLostException { - remove(ih.prev, ih.next); + remove(ih.prev, ih.next,false); } /** @@ -788,14 +735,14 @@ public class InstructionList implements Serializable { * * @param i instruction to remove */ - public void delete(Instruction i) throws TargetLostException { - InstructionHandle ih; - - if((ih = findInstruction1(i)) == null) - throw new ClassGenException("Instruction " + i + - " is not contained in this list."); - delete(ih); - } +// public void delete(Instruction i) throws TargetLostException { +// InstructionHandle ih; +// +// if((ih = findInstruction1(i)) == null) +// throw new ClassGenException("Instruction " + i + +// " is not contained in this list."); +// delete(ih); +// } /** * Remove instructions from instruction `from' to instruction `to' contained @@ -808,7 +755,7 @@ public class InstructionList implements Serializable { public void delete(InstructionHandle from, InstructionHandle to) throws TargetLostException { - remove(from.prev, to.next); + remove(from.prev, to.next,false); } /** @@ -891,73 +838,72 @@ public class InstructionList implements Serializable { int index = 0, count = 0; int[] pos = new int[length]; - /* Pass 0: Sanity checks - */ - if(check) { - for(InstructionHandle ih=start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - - if(i instanceof BranchInstruction) { // target instruction within list? - Instruction inst = ((BranchInstruction)i).getTarget().instruction; - if(!contains(inst)) - throw new ClassGenException("Branch target of " + - Constants.OPCODE_NAMES[i.opcode] + ":" + - inst + " not in instruction list"); - - if(i instanceof Select) { - InstructionHandle[] targets = ((Select)i).getTargets(); - - for(int j=0; j < targets.length; j++) { - inst = targets[j].instruction; - if(!contains(inst)) - throw new ClassGenException("Branch target of " + - Constants.OPCODE_NAMES[i.opcode] + ":" + - inst + " not in instruction list"); - } - } - - if(!(ih instanceof BranchHandle)) - throw new ClassGenException("Branch instruction " + - Constants.OPCODE_NAMES[i.opcode] + ":" + - inst + " not contained in BranchHandle."); - - } + // Pass 0: Sanity checks + if (check) { + for (InstructionHandle ih=start; ih != null; ih = ih.next) { + Instruction i = ih.instruction; + + if (i instanceof InstructionBranch) { // target instruction within list? + Instruction inst = ((InstructionBranch)i).getTarget().instruction; + if(!contains(inst)) + throw new ClassGenException("Branch target of " + + Constants.OPCODE_NAMES[i.opcode] + ":" + + inst + " not in instruction list"); + + if(i instanceof InstructionSelect) { + InstructionHandle[] targets = ((InstructionSelect)i).getTargets(); + + for(int j=0; j < targets.length; j++) { + inst = targets[j].instruction; + if(!contains(inst)) + throw new ClassGenException("Branch target of " + + Constants.OPCODE_NAMES[i.opcode] + ":" + + inst + " not in instruction list"); + } + } + + if(!(ih instanceof BranchHandle)) + throw new ClassGenException("Branch instruction " + + Constants.OPCODE_NAMES[i.opcode] + ":" + + inst + " not contained in BranchHandle."); + + } } } - /* Pass 1: Set position numbers and sum up the maximum number of bytes an - * instruction may be shifted. - */ - for(InstructionHandle ih=start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - - ih.setPosition(index); - pos[count++] = index; - - /* Get an estimate about how many additional bytes may be added, because - * BranchInstructions may have variable length depending on the target - * offset (short vs. int) or alignment issues (TABLESWITCH and - * LOOKUPSWITCH). - */ - switch(i.getOpcode()) { - case Constants.JSR: case Constants.GOTO: - max_additional_bytes += 2; - break; - - case Constants.TABLESWITCH: case Constants.LOOKUPSWITCH: - max_additional_bytes += 3; - break; - } - - index += i.getLength(); + // Pass 1: Set position numbers and sum up the maximum number of bytes an + // instruction may be shifted. + for (InstructionHandle ih=start; ih != null; ih = ih.next) { + Instruction i = ih.instruction; + ih.setPosition(index); + pos[count++] = index; + + /* Get an estimate about how many additional bytes may be added, because + * BranchInstructions may have variable length depending on the target + * offset (short vs. int) or alignment issues (TABLESWITCH and + * LOOKUPSWITCH). + */ + switch(i.opcode) { + case Constants.JSR: + case Constants.GOTO: + max_additional_bytes += 2; + break; + + case Constants.TABLESWITCH: + case Constants.LOOKUPSWITCH: + max_additional_bytes += 3; + break; + } + index += i.getLength(); } /* Pass 2: Expand the variable-length (Branch)Instructions depending on * the target offset (short or int) and ensure that branch targets are * within this list. */ - for(InstructionHandle ih=start; ih != null; ih = ih.next) - additional_bytes += ih.updatePosition(additional_bytes, max_additional_bytes); + for (InstructionHandle ih=start; ih != null; ih = ih.next) { + additional_bytes += ih.updatePosition(additional_bytes, max_additional_bytes); + } /* Pass 3: Update position numbers (which may have changed due to the * preceding expansions), like pass 1. @@ -965,7 +911,6 @@ public class InstructionList implements Serializable { index=count=0; for(InstructionHandle ih=start; ih != null; ih = ih.next) { Instruction i = ih.instruction; - ih.setPosition(index); pos[count++] = index; index += i.getLength(); @@ -990,8 +935,8 @@ public class InstructionList implements Serializable { try { for(InstructionHandle ih=start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - i.dump(out); // Traverse list + Instruction i = ih.instruction; + i.dump(out); // Traverse list } } catch(IOException e) { System.err.println(e); @@ -1100,8 +1045,8 @@ public class InstructionList implements Serializable { Instruction i = ih.instruction; Instruction c = i.copy(); // Use clone for shallow copy - if(c instanceof BranchInstruction) - map.put(ih, il.append((BranchInstruction)c)); + if(c instanceof InstructionBranch) + map.put(ih, il.append((InstructionBranch)c)); else map.put(ih, il.append(c)); } @@ -1115,17 +1060,17 @@ public class InstructionList implements Serializable { Instruction i = ih.instruction; Instruction c = ch.instruction; - if(i instanceof BranchInstruction) { - BranchInstruction bi = (BranchInstruction)i; - BranchInstruction bc = (BranchInstruction)c; + if(i instanceof InstructionBranch) { + InstructionBranch bi = (InstructionBranch)i; + InstructionBranch bc = (InstructionBranch)c; InstructionHandle itarget = bi.getTarget(); // old target // New target is in hash map bc.setTarget((InstructionHandle)map.get(itarget)); - if(bi instanceof Select) { // Either LOOKUPSWITCH or TABLESWITCH - InstructionHandle[] itargets = ((Select)bi).getTargets(); - InstructionHandle[] ctargets = ((Select)bc).getTargets(); + if(bi instanceof InstructionSelect) { // Either LOOKUPSWITCH or TABLESWITCH + InstructionHandle[] itargets = ((InstructionSelect)bi).getTargets(); + InstructionHandle[] ctargets = ((InstructionSelect)bc).getTargets(); for(int j=0; j < itargets.length; j++) { // Update all targets ctargets[j] = (InstructionHandle)map.get(itargets[j]); @@ -1143,14 +1088,14 @@ public class InstructionList implements Serializable { /** Replace all references to the old constant pool with references to the new * constant pool */ - public void replaceConstantPool(ConstantPoolGen old_cp, ConstantPoolGen new_cp) { + public void replaceConstantPool(ConstantPool old_cp, ConstantPool new_cp) { for(InstructionHandle ih=start; ih != null; ih = ih.next) { Instruction i = ih.instruction; - if(i instanceof CPInstruction) { - CPInstruction ci = (CPInstruction)i; - Constant c = old_cp.getConstant(ci.getIndex()); - ci.setIndex(new_cp.addConstant(c, old_cp)); + if(i.isConstantPoolInstruction()) { + InstructionCP ci = (InstructionCP)i; + Constant c = old_cp.getConstant(ci.getIndex()); + ci.setIndex(new_cp.addConstant(c, old_cp)); } } } @@ -1209,19 +1154,19 @@ public class InstructionList implements Serializable { for(InstructionHandle ih = start; ih != null; ih = ih.next) { Instruction i = ih.getInstruction(); - if(i instanceof BranchInstruction) { - BranchInstruction b = (BranchInstruction)i; + if(i instanceof InstructionBranch) { + InstructionBranch b = (InstructionBranch)i; InstructionHandle target = b.getTarget(); if(target == old_target) b.setTarget(new_target); - if(b instanceof Select) { // Either LOOKUPSWITCH or TABLESWITCH - InstructionHandle[] targets = ((Select)b).getTargets(); + if(b instanceof InstructionSelect) { // Either LOOKUPSWITCH or TABLESWITCH + InstructionHandle[] targets = ((InstructionSelect)b).getTargets(); for(int j=0; j < targets.length; j++) // Update targets if(targets[j] == old_target) - ((Select)b).setTarget(j, new_target); + ((InstructionSelect)b).setTarget(j, new_target); } } } @@ -1242,11 +1187,8 @@ public class InstructionList implements Serializable { InstructionHandle start = lg[i].getStart(); InstructionHandle end = lg[i].getEnd(); - if(start == old_target) - lg[i].setStart(new_target); - - if(end == old_target) - lg[i].setEnd(new_target); + if (start == old_target) lg[i].setStart(new_target); + if (end == old_target) lg[i].setEnd(new_target); } } @@ -1273,32 +1215,6 @@ public class InstructionList implements Serializable { } } - private ArrayList observers; - - /** Add observer for this object. - */ - public void addObserver(InstructionListObserver o) { - if(observers == null) - observers = new ArrayList(); - - observers.add(o); - } - /** Remove observer for this object. - */ - public void removeObserver(InstructionListObserver o) { - if(observers != null) - observers.remove(o); - } - - /** Call notify() method on all observers. This method is not called - * automatically whenever the state has changed, but has to be - * called by the user after he has finished editing the object. - */ - public void update() { - if(observers != null) - for(Iterator e = observers.iterator(); e.hasNext(); ) - ((InstructionListObserver)e.next()).notify(this); - } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionListObserver.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionListObserver.java deleted file mode 100644 index df0740168..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionListObserver.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Implement this interface if you're interested in changes to an InstructionList object - * and register yourself with addObserver(). - * - * @version $Id: InstructionListObserver.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public interface InstructionListObserver { - public void notify(InstructionList list); -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/Select.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionSelect.java similarity index 75% rename from bcel-builder/src/org/aspectj/apache/bcel/generic/Select.java rename to bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionSelect.java index f8a8faf9c..8556aebf9 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/Select.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionSelect.java @@ -59,28 +59,22 @@ import org.aspectj.apache.bcel.util.ByteSequence; /** * Select - Abstract super class for LOOKUPSWITCH and TABLESWITCH instructions. * - * @version $Id: Select.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ + * @version $Id: InstructionSelect.java,v 1.2 2008/05/28 23:52:59 aclement Exp $ * @author M. Dahm * @see LOOKUPSWITCH * @see TABLESWITCH * @see InstructionList */ -public abstract class Select extends BranchInstruction - implements VariableLengthInstruction, StackProducer -{ +public abstract class InstructionSelect extends InstructionBranch { protected int[] match; // matches, i.e., case 1: ... protected int[] indices; // target offsets protected InstructionHandle[] targets; // target objects in instruction list - protected int fixed_length; // fixed length defined by subclasses - protected int match_length; // number of cases + protected int fixedLength; // fixed length defined by subclasses + protected int matchLength; // number of cases protected int padding = 0; // number of pad bytes for alignment - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - Select() {} - + protected short length; + public int getLength() { return length; } /** * (Match, target) pairs for switch. * `Match' and `targets' must have the same length of course. @@ -89,7 +83,7 @@ public abstract class Select extends BranchInstruction * @param targets instruction targets * @param target default instruction target */ - Select(short opcode, int[] match, InstructionHandle[] targets, + InstructionSelect(short opcode, int[] match, InstructionHandle[] targets, InstructionHandle target) { super(opcode, target); @@ -99,12 +93,25 @@ public abstract class Select extends BranchInstruction this.match = match; - if((match_length = match.length) != targets.length) + if((matchLength = match.length) != targets.length) throw new ClassGenException("Match and target array have not the same length"); - indices = new int[match_length]; + indices = new int[matchLength]; } + + protected int getTargetOffset(InstructionHandle target) { + if(target == null) + throw new ClassGenException("Target of " + super.toString(true) + + " is invalid null handle"); + + int t = target.getPosition(); + + if(t < 0) + throw new ClassGenException("Invalid branch target position offset for " + + super.toString(true) + ":" + t + ":" + target); + return t - positionOfThisInstruction; + } /** * Since this is a variable length instruction, it may shift the following * instructions which then need to update their position. @@ -119,14 +126,14 @@ public abstract class Select extends BranchInstruction * @return additional offset caused by possible change of this instruction's length */ protected int updatePosition(int offset, int max_offset) { - position += offset; // Additional offset caused by preceding SWITCHs, GOTOs, etc. + positionOfThisInstruction += offset; // Additional offset caused by preceding SWITCHs, GOTOs, etc. short old_length = length; /* Alignment on 4-byte-boundary, + 1, because of tag byte. */ - padding = (4 - ((position + 1) % 4)) % 4; - length = (short)(fixed_length + padding); // Update length + padding = (4 - ((positionOfThisInstruction + 1) % 4)) % 4; + length = (short)(fixedLength + padding); // Update length return length - old_length; } @@ -141,23 +148,35 @@ public abstract class Select extends BranchInstruction for(int i=0; i < padding; i++) // Padding bytes out.writeByte(0); - index = getTargetOffset(); // Write default target offset - out.writeInt(index); + targetIndex = getTargetOffset(); // Write default target offset + out.writeInt(targetIndex); } - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException - { - padding = (4 - (bytes.getIndex() % 4)) % 4; // Compute number of pad bytes +// /** +// * Read needed data (e.g. index) from file. +// */ +// protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException +// { +// padding = (4 - (bytes.getIndex() % 4)) % 4; // Compute number of pad bytes +// +// for(int i=0; i < padding; i++) { +// bytes.readByte(); +// } +// +// // Default branch target common for both cases (TABLESWITCH, LOOKUPSWITCH) +// targetIndex = bytes.readInt(); +// } + + public InstructionSelect(short opcode, ByteSequence bytes) throws IOException { + super(opcode); + padding = (4 - (bytes.getIndex() % 4)) % 4; // Compute number of pad bytes - for(int i=0; i < padding; i++) { - bytes.readByte(); - } - - // Default branch target common for both cases (TABLESWITCH, LOOKUPSWITCH) - index = bytes.readInt(); + for(int i=0; i < padding; i++) { + bytes.readByte(); + } + + // Default branch target common for both cases (TABLESWITCH, LOOKUPSWITCH) + targetIndex = bytes.readInt(); } /** @@ -167,7 +186,7 @@ public abstract class Select extends BranchInstruction StringBuffer buf = new StringBuffer(super.toString(verbose)); if(verbose) { - for(int i=0; i < match_length; i++) { + for(int i=0; i < matchLength; i++) { String s = "null"; if(targets[i] != null) @@ -197,7 +216,7 @@ public abstract class Select extends BranchInstruction public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { boolean targeted = false; - if(target == old_ih) { + if(targetInstruction == old_ih) { targeted = true; setTarget(new_ih); } @@ -217,7 +236,7 @@ public abstract class Select extends BranchInstruction * @return true, if ih is target of this instruction */ public boolean containsTarget(InstructionHandle ih) { - if(target == ih) + if(targetInstruction == ih) return true; for(int i=0; i < targets.length; i++) diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/NamedAndTyped.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionShort.java similarity index 85% rename from bcel-builder/src/org/aspectj/apache/bcel/generic/NamedAndTyped.java rename to bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionShort.java index 4b4ed30d5..08f7854d0 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/NamedAndTyped.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionShort.java @@ -54,18 +54,26 @@ package org.aspectj.apache.bcel.generic; * . */ -/** - * Denote entity that has both name and type. This is true for local variables, - * methods and fields. - * - * @version $Id: NamedAndTyped.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ - * @author M. Dahm +import java.io.*; + +/** + * Instruction that needs one short */ -public interface NamedAndTyped { - public String getName(); - public Type getType(); - public void setName(String name); - public void setType(Type type); +public class InstructionShort extends Instruction { + private short s; -} + public InstructionShort(short opcode, short s) { + this.opcode = opcode; + this.s = s; + } + + public void dump(DataOutputStream out) throws IOException { + out.writeByte(opcode); + out.writeShort(s); + } + public String toString(boolean verbose) { + return super.toString(verbose) + " " + s; + } + +} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionTargeter.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionTargeter.java index 1d19aacb7..950ed3fa9 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionTargeter.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InstructionTargeter.java @@ -61,7 +61,7 @@ package org.aspectj.apache.bcel.generic; * @see BranchHandle * @see LocalVariableGen * @see CodeExceptionGen - * @version $Id: InstructionTargeter.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: InstructionTargeter.java,v 1.3 2008/05/28 23:52:57 aclement Exp $ * @author M. Dahm */ public interface InstructionTargeter { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/InvokeInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/InvokeInstruction.java index 93fef42a5..fbc55a66a 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/InvokeInstruction.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/InvokeInstruction.java @@ -62,21 +62,15 @@ import org.aspectj.apache.bcel.classfile.ConstantPool; /** * Super class for the INVOKExxx family of instructions. * - * @version $Id: InvokeInstruction.java,v 1.4 2006/07/19 12:06:17 aclement Exp $ + * @version $Id: InvokeInstruction.java,v 1.5 2008/05/28 23:52:54 aclement Exp $ * @author M. Dahm */ -public abstract class InvokeInstruction extends FieldOrMethod - implements ExceptionThrower, TypedInstruction, StackConsumer, StackProducer { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - InvokeInstruction() {} +public class InvokeInstruction extends FieldOrMethod { /** * @param index to constant pool */ - protected InvokeInstruction(short opcode, int index) { + public InvokeInstruction(short opcode, int index) { super(opcode, index); } @@ -96,7 +90,7 @@ public abstract class InvokeInstruction extends FieldOrMethod * constant pool entry they reference. * @return Number of words consumed from stack by this instruction */ - public int consumeStack(ConstantPoolGen cpg) { + public int consumeStack(ConstantPool cpg) { String signature = getSignature(cpg); int sum = Type.getArgumentSizes(signature); if (opcode!=Constants.INVOKESTATIC) sum+=1; @@ -108,31 +102,31 @@ public abstract class InvokeInstruction extends FieldOrMethod * constant pool entry they reference. * @return Number of words produced onto stack by this instruction */ - public int produceStack(ConstantPoolGen cpg) { + public int produceStack(ConstantPool cpg) { return getReturnType(cpg).getSize(); } /** @return return type of referenced method. */ - public Type getType(ConstantPoolGen cpg) { + public Type getType(ConstantPool cpg) { return getReturnType(cpg); } /** @return name of referenced method. */ - public String getMethodName(ConstantPoolGen cpg) { + public String getMethodName(ConstantPool cpg) { return getName(cpg); } /** @return return type of referenced method. */ - public Type getReturnType(ConstantPoolGen cpg) { + public Type getReturnType(ConstantPool cpg) { return Type.getReturnType(getSignature(cpg)); } /** @return argument types of referenced method. */ - public Type[] getArgumentTypes(ConstantPoolGen cpg) { + public Type[] getArgumentTypes(ConstantPool cpg) { return Type.getArgumentTypes(getSignature(cpg)); } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/JSR.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/JSR.java deleted file mode 100644 index 0c91d2d9b..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/JSR.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import java.io.*; - -/** - * JSR - Jump to subroutine - * - * @version $Id: JSR.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class JSR extends JsrInstruction implements VariableLengthInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - JSR() {} - - public JSR(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.JSR, target); - } - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump(DataOutputStream out) throws IOException { - index = getTargetOffset(); - if(opcode == org.aspectj.apache.bcel.Constants.JSR) - super.dump(out); - else { // JSR_W - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - } - - protected int updatePosition(int offset, int max_offset) { - int i = getTargetOffset(); // Depending on old position value - - position += offset; // Position may be shifted by preceding expansions - - if(Math.abs(i) >= (32767 - max_offset)) { // to large for short (estimate) - opcode = org.aspectj.apache.bcel.Constants.JSR_W; - length = 5; - return 2; // 5 - 3 - } - - return 0; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitVariableLengthInstruction(this); - v.visitBranchInstruction(this); - v.visitJsrInstruction(this); - v.visitJSR(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/JSR_W.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/JSR_W.java deleted file mode 100644 index 8de66f0d1..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/JSR_W.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import java.io.*; -import org.aspectj.apache.bcel.util.ByteSequence; - -/** - * JSR_W - Jump to subroutine - * - * @version $Id: JSR_W.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class JSR_W extends JsrInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - JSR_W() {} - - public JSR_W(InstructionHandle target) { - super(org.aspectj.apache.bcel.Constants.JSR_W, target); - length = 5; - } - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump(DataOutputStream out) throws IOException { - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException - { - index = bytes.readInt(); - length = 5; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitBranchInstruction(this); - v.visitJsrInstruction(this); - v.visitJSR_W(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/JsrInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/JsrInstruction.java deleted file mode 100644 index 4967f88c3..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/JsrInstruction.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Super class for JSR - Jump to subroutine - * - * @version $Id: JsrInstruction.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public abstract class JsrInstruction extends BranchInstruction - implements UnconditionalBranch, TypedInstruction, StackProducer -{ - JsrInstruction(short opcode, InstructionHandle target) { - super(opcode, target); - } - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - JsrInstruction(){} - - /** @return return address type - */ - public Type getType(ConstantPoolGen cp) { - return new ReturnaddressType(physicalSuccessor()); - } - - /** - * Returns an InstructionHandle to the physical successor - * of this JsrInstruction. For this method to work, - * this JsrInstruction object must not be shared between - * multiple InstructionHandle objects! - * Formally, there must not be InstructionHandle objects - * i, j where i != j and i.getInstruction() == this == - * j.getInstruction(). - * @return an InstructionHandle to the "next" instruction that - * will be executed when RETurned from a subroutine. - */ - public InstructionHandle physicalSuccessor(){ - InstructionHandle ih = this.target; - - // Rewind! - while(ih.getPrev() != null) - ih = ih.getPrev(); - - // Find the handle for "this" JsrInstruction object. - while(ih.getInstruction() != this) - ih = ih.getNext(); - - InstructionHandle toThis = ih; - - while(ih != null){ - ih = ih.getNext(); - if ((ih != null) && (ih.getInstruction() == this)) - throw new RuntimeException("physicalSuccessor() called on a shared JsrInstruction."); - } - - // Return the physical successor - return toThis.getNext(); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/L2D.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/L2D.java deleted file mode 100644 index f9384bf1b..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/L2D.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * L2D - Convert long to double - *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          - * - * @version $Id: L2D.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class L2D extends ConversionInstruction { - public L2D() { - super(org.aspectj.apache.bcel.Constants.L2D); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitL2D(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/L2F.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/L2F.java deleted file mode 100644 index 6bd9307ac..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/L2F.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * L2F - Convert long to float - *
          Stack: ..., value.word1, value.word2 -> ..., result
          - * - * @version $Id: L2F.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class L2F extends ConversionInstruction { - public L2F() { - super(org.aspectj.apache.bcel.Constants.L2F); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitL2F(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/L2I.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/L2I.java deleted file mode 100644 index 26614e697..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/L2I.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * L2I - Convert long to int - *
          Stack: ..., value.word1, value.word2 -> ..., result
          - * - * @version $Id: L2I.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class L2I extends ConversionInstruction { - public L2I() { - super(org.aspectj.apache.bcel.Constants.L2I); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitL2I(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LADD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LADD.java deleted file mode 100644 index ddd181d01..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LADD.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LADD - Add longs - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: LADD.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class LADD extends ArithmeticInstruction { - public LADD() { - super(org.aspectj.apache.bcel.Constants.LADD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLADD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LALOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LALOAD.java deleted file mode 100644 index da3dcc225..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LALOAD.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LALOAD - Load long from array - *
          Stack: ..., arrayref, index -> ..., value1, value2
          - * - * @version $Id: LALOAD.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class LALOAD extends ArrayInstruction implements StackProducer { - /** Load long from array - */ - public LALOAD() { - super(org.aspectj.apache.bcel.Constants.LALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitLALOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LAND.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LAND.java deleted file mode 100644 index 057be5202..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LAND.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LAND - Bitwise AND longs - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: LAND.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class LAND extends ArithmeticInstruction { - public LAND() { - super(org.aspectj.apache.bcel.Constants.LAND); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLAND(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LASTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LASTORE.java deleted file mode 100644 index 0f80f5242..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LASTORE.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LASTORE - Store into long array - *
          Stack: ..., arrayref, index, value.word1, value.word2 -> ...
          - * - * @version $Id: LASTORE.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class LASTORE extends ArrayInstruction implements StackConsumer { - /** Store long into array - */ - public LASTORE() { - super(org.aspectj.apache.bcel.Constants.LASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitLASTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LCMP.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LCMP.java deleted file mode 100644 index c7497a0f4..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LCMP.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LCMP - Compare longs: - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result <= -1, 0, 1> - * - * @version $Id: LCMP.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class LCMP extends Instruction - implements TypedInstruction, StackProducer, StackConsumer -{ - public LCMP() { - super(org.aspectj.apache.bcel.Constants.LCMP, (short)1); - } - - /** @return Type.LONG - */ - public Type getType(ConstantPoolGen cp) { - return Type.LONG; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitLCMP(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LCONST.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LCONST.java deleted file mode 100644 index ecda1ba4c..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LCONST.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LCONST - Push 0 or 1, other values cause an exception - * - *
          Stack: ... -> ..., 
          - * - * @version $Id: LCONST.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class LCONST extends Instruction - implements ConstantPushInstruction, TypedInstruction { - private long value; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LCONST() {} - - public LCONST(long l) { - super(org.aspectj.apache.bcel.Constants.LCONST_0, (short)1); - - if(l == 0) - opcode = org.aspectj.apache.bcel.Constants.LCONST_0; - else if(l == 1) - opcode = org.aspectj.apache.bcel.Constants.LCONST_1; - else - throw new ClassGenException("LCONST can be used only for 0 and 1: " + l); - - value = l; - } - - public Number getValue() { return new Long(value); } - - /** @return Type.LONG - */ - public Type getType(ConstantPoolGen cp) { - return Type.LONG; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitLCONST(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LDC.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LDC.java deleted file mode 100644 index 7f7922847..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LDC.java +++ /dev/null @@ -1,172 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import java.io.*; -import org.aspectj.apache.bcel.util.ByteSequence; - -/** - * LDC - Push item from constant pool. - * - *
          Stack: ... -> ..., item
          - * - * @version $Id: LDC.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class LDC extends CPInstruction - implements PushInstruction, ExceptionThrower, TypedInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LDC() {} - - public LDC(int index) { - super(org.aspectj.apache.bcel.Constants.LDC_W, index); - setSize(); - } - - // Adjust to proper size - protected final void setSize() { - if(index <= org.aspectj.apache.bcel.Constants.MAX_BYTE) { // Fits in one byte? - opcode = org.aspectj.apache.bcel.Constants.LDC; - length = 2; - } else { - opcode = org.aspectj.apache.bcel.Constants.LDC_W; - length = 3; - } - } - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); - - if(length == 2) - out.writeByte(index); - else // Applies for LDC_W - out.writeShort(index); - } - - /** - * Set the index to constant pool and adjust size. - */ - public final void setIndex(int index) { - super.setIndex(index); - setSize(); - } - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException - { - length = 2; - index = bytes.readUnsignedByte(); - } - - public Object getValue(ConstantPoolGen cpg) { - org.aspectj.apache.bcel.classfile.Constant c = cpg.getConstantPool().getConstant(index); - - switch(c.getTag()) { - case org.aspectj.apache.bcel.Constants.CONSTANT_String: - int i = ((org.aspectj.apache.bcel.classfile.ConstantString)c).getStringIndex(); - c = cpg.getConstantPool().getConstant(i); - return ((org.aspectj.apache.bcel.classfile.ConstantUtf8)c).getBytes(); - - case org.aspectj.apache.bcel.Constants.CONSTANT_Float: - return new Float(((org.aspectj.apache.bcel.classfile.ConstantFloat)c).getBytes()); - - case org.aspectj.apache.bcel.Constants.CONSTANT_Integer: - return new Integer(((org.aspectj.apache.bcel.classfile.ConstantInteger)c).getBytes()); - - default: // Never reached - throw new RuntimeException("Unknown or invalid constant type at " + index); - } - } - - public Type getType(ConstantPoolGen cpg) { - switch(cpg.getConstantPool().getConstant(index).getTag()) { - case org.aspectj.apache.bcel.Constants.CONSTANT_String: return Type.STRING; - case org.aspectj.apache.bcel.Constants.CONSTANT_Float: return Type.FLOAT; - case org.aspectj.apache.bcel.Constants.CONSTANT_Integer: return Type.INT; - default: // Never reached - throw new RuntimeException("Unknown or invalid constant type at " + index); - } - } - - public Class[] getExceptions() { - return org.aspectj.apache.bcel.ExceptionConstants.EXCS_STRING_RESOLUTION; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitLDC(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LDC2_W.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LDC2_W.java deleted file mode 100644 index e031c6c23..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LDC2_W.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LDC2_W - Push long or double from constant pool - * - *
          Stack: ... -> ..., item.word1, item.word2
          - * - * @version $Id: LDC2_W.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class LDC2_W extends CPInstruction - implements PushInstruction, TypedInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LDC2_W() {} - - public LDC2_W(int index) { - super(org.aspectj.apache.bcel.Constants.LDC2_W, index); - } - - public Type getType(ConstantPoolGen cpg) { - switch(cpg.getConstantPool().getConstant(index).getTag()) { - case org.aspectj.apache.bcel.Constants.CONSTANT_Long: return Type.LONG; - case org.aspectj.apache.bcel.Constants.CONSTANT_Double: return Type.DOUBLE; - default: // Never reached - throw new RuntimeException("Unknown constant type " + opcode); - } - } - - public Number getValue(ConstantPoolGen cpg) { - org.aspectj.apache.bcel.classfile.Constant c = cpg.getConstantPool().getConstant(index); - - switch(c.getTag()) { - case org.aspectj.apache.bcel.Constants.CONSTANT_Long: - return new Long(((org.aspectj.apache.bcel.classfile.ConstantLong)c).getBytes()); - - case org.aspectj.apache.bcel.Constants.CONSTANT_Double: - return new Double(((org.aspectj.apache.bcel.classfile.ConstantDouble)c).getBytes()); - - default: // Never reached - throw new RuntimeException("Unknown or invalid constant type at " + index); - } - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitLDC2_W(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LDC_W.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LDC_W.java deleted file mode 100644 index 1a057dc0a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LDC_W.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import java.io.IOException; -import org.aspectj.apache.bcel.util.ByteSequence; - -/** - * LDC_W - Push item from constant pool (wide index) - * - *
          Stack: ... -> ..., item.word1, item.word2
          - * - * @version $Id: LDC_W.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class LDC_W extends LDC { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LDC_W() {} - - public LDC_W(int index) { - super(index); - } - - /** - * Read needed data (i.e., index) from file. - */ - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException - { - setIndex(bytes.readUnsignedShort()); - // Override just in case it has been changed - // opcode = org.aspectj.apache.bcel.Constants.LDC_W; - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LDIV.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LDIV.java deleted file mode 100644 index 23be3a49d..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LDIV.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LDIV - Divide longs - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: LDIV.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class LDIV extends ArithmeticInstruction implements ExceptionThrower { - public LDIV() { - super(org.aspectj.apache.bcel.Constants.LDIV); - } - - public Class[] getExceptions() { - return new Class[] { org.aspectj.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLDIV(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LLOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LLOAD.java deleted file mode 100644 index 51b819727..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LLOAD.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LLOAD - Load long from local variable - *
          Stack ... -> ..., result.word1, result.word2
          - * - * @version $Id: LLOAD.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class LLOAD extends LoadInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LLOAD() { - super(org.aspectj.apache.bcel.Constants.LLOAD, org.aspectj.apache.bcel.Constants.LLOAD_0); - } - - public LLOAD(int n) { - super(org.aspectj.apache.bcel.Constants.LLOAD, org.aspectj.apache.bcel.Constants.LLOAD_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - super.accept(v); - v.visitLLOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LMUL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LMUL.java deleted file mode 100644 index 9106cc737..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LMUL.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LMUL - Multiply longs - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: LMUL.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class LMUL extends ArithmeticInstruction { - public LMUL() { - super(org.aspectj.apache.bcel.Constants.LMUL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLMUL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LNEG.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LNEG.java deleted file mode 100644 index 23cfd1508..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LNEG.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LNEG - Negate long - *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          - * - * @version $Id: LNEG.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class LNEG extends ArithmeticInstruction { - public LNEG() { - super(org.aspectj.apache.bcel.Constants.LNEG); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLNEG(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LOOKUPSWITCH.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LOOKUPSWITCH.java index 5b0e93890..889bbbc6d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LOOKUPSWITCH.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/LOOKUPSWITCH.java @@ -54,29 +54,27 @@ package org.aspectj.apache.bcel.generic; * . */ import java.io.*; + +import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.util.ByteSequence; /** * LOOKUPSWITCH - Switch with unordered set of values * - * @version $Id: LOOKUPSWITCH.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: LOOKUPSWITCH.java,v 1.3 2008/05/28 23:52:57 aclement Exp $ * @author M. Dahm * @see SWITCH */ -public class LOOKUPSWITCH extends Select { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LOOKUPSWITCH() {} +public class LOOKUPSWITCH extends InstructionSelect { + public LOOKUPSWITCH(int[] match, InstructionHandle[] targets, InstructionHandle target) { super(org.aspectj.apache.bcel.Constants.LOOKUPSWITCH, match, targets, target); - length = (short)(9 + match_length * 8); /* alignment remainder assumed + length = (short)(9 + matchLength * 8); /* alignment remainder assumed * 0 here, until dump time. */ - fixed_length = length; + fixedLength = length; } /** @@ -85,9 +83,9 @@ public class LOOKUPSWITCH extends Select { */ public void dump(DataOutputStream out) throws IOException { super.dump(out); - out.writeInt(match_length); // npairs + out.writeInt(matchLength); // npairs - for(int i=0; i < match_length; i++) { + for(int i=0; i < matchLength; i++) { out.writeInt(match[i]); // match-offset pairs out.writeInt(indices[i] = getTargetOffset(targets[i])); } @@ -96,38 +94,22 @@ public class LOOKUPSWITCH extends Select { /** * Read needed data (e.g. index) from file. */ - protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException + public LOOKUPSWITCH(ByteSequence bytes) throws IOException { - super.initFromFile(bytes, wide); // reads padding + super(Constants.LOOKUPSWITCH,bytes); // reads padding - match_length = bytes.readInt(); - fixed_length = (short)(9 + match_length * 8); - length = (short)(fixed_length + padding); + matchLength = bytes.readInt(); + fixedLength = (short)(9 + matchLength * 8); + length = (short)(fixedLength + padding); - match = new int[match_length]; - indices = new int[match_length]; - targets = new InstructionHandle[match_length]; + match = new int[matchLength]; + indices = new int[matchLength]; + targets = new InstructionHandle[matchLength]; - for(int i=0; i < match_length; i++) { + for(int i=0; i < matchLength; i++) { match[i] = bytes.readInt(); indices[i] = bytes.readInt(); } } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitVariableLengthInstruction(this); - v.visitStackProducer(this); - v.visitBranchInstruction(this); - v.visitSelect(this); - v.visitLOOKUPSWITCH(this); - } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LOR.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LOR.java deleted file mode 100644 index 9fe18bdbc..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LOR.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LOR - Bitwise OR long - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: LOR.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class LOR extends ArithmeticInstruction { - public LOR() { - super(org.aspectj.apache.bcel.Constants.LOR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLOR(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LREM.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LREM.java deleted file mode 100644 index cfc0ac1f6..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LREM.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LREM - Remainder of long - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: LREM.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class LREM extends ArithmeticInstruction implements ExceptionThrower { - public LREM() { - super(org.aspectj.apache.bcel.Constants.LREM); - } - - public Class[] getExceptions() { return new Class[] { org.aspectj.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION }; } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLREM(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LRETURN.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LRETURN.java deleted file mode 100644 index e80362351..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LRETURN.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LRETURN - Return long from method - *
          Stack: ..., value.word1, value.word2 -> <empty>
          - * - * @version $Id: LRETURN.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class LRETURN extends ReturnInstruction { - public LRETURN() { - super(org.aspectj.apache.bcel.Constants.LRETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitLRETURN(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LSHL.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LSHL.java deleted file mode 100644 index cc26d99d6..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LSHL.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LSHL - Arithmetic shift left long - *
          Stack: ..., value1.word1, value1.word2, value2 -> ..., result.word1, result.word2
          - * - * @version $Id: LSHL.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class LSHL extends ArithmeticInstruction { - public LSHL() { - super(org.aspectj.apache.bcel.Constants.LSHL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLSHL(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LSHR.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LSHR.java deleted file mode 100644 index fa4813b8d..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LSHR.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LSHR - Arithmetic shift right long - *
          Stack: ..., value1.word1, value1.word2, value2 -> ..., result.word1, result.word2
          - * - * @version $Id: LSHR.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class LSHR extends ArithmeticInstruction { - public LSHR() { - super(org.aspectj.apache.bcel.Constants.LSHR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLSHR(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LSTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LSTORE.java deleted file mode 100644 index 42f0c2d7e..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LSTORE.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LSTORE - Store long into local variable - *
          Stack: ..., value.word1, value.word2 -> ... 
          - * - * @version $Id: LSTORE.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class LSTORE extends StoreInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LSTORE() { - super(org.aspectj.apache.bcel.Constants.LSTORE, org.aspectj.apache.bcel.Constants.LSTORE_0); - } - - public LSTORE(int n) { - super(org.aspectj.apache.bcel.Constants.LSTORE, org.aspectj.apache.bcel.Constants.LSTORE_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - super.accept(v); - v.visitLSTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LSUB.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LSUB.java deleted file mode 100644 index efc96f637..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LSUB.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LSUB - Substract longs - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: LSUB.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class LSUB extends ArithmeticInstruction { - public LSUB() { - super(org.aspectj.apache.bcel.Constants.LSUB); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLSUB(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LUSHR.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LUSHR.java deleted file mode 100644 index a96f652b5..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LUSHR.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LUSHR - Logical shift right long - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: LUSHR.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class LUSHR extends ArithmeticInstruction { - public LUSHR() { - super(org.aspectj.apache.bcel.Constants.LUSHR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLUSHR(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LXOR.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LXOR.java deleted file mode 100644 index e162b4e32..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LXOR.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * LXOR - Bitwise XOR long - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: LXOR.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class LXOR extends ArithmeticInstruction { - public LXOR() { - super(org.aspectj.apache.bcel.Constants.LXOR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLXOR(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LineNumberGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LineNumberGen.java index 7504ecce4..237720c7b 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LineNumberGen.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/LineNumberGen.java @@ -60,7 +60,7 @@ import org.aspectj.apache.bcel.classfile.LineNumber; * This class represents a line number within a method, i.e., give an instruction * a line number corresponding to the source code line. * - * @version $Id: LineNumberGen.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: LineNumberGen.java,v 1.5 2008/05/28 23:53:00 aclement Exp $ * @author M. Dahm * @see LineNumber * @see MethodGen @@ -110,7 +110,7 @@ public class LineNumberGen } public void setInstruction(InstructionHandle ih) { - BranchInstruction.notifyTarget(this.ih, ih, this); + InstructionBranch.notifyTarget(this.ih, ih, this); this.ih = ih; } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LineNumberTag.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LineNumberTag.java index a35b86594..fe1d56c27 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LineNumberTag.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/LineNumberTag.java @@ -14,7 +14,9 @@ package org.aspectj.apache.bcel.generic; -/** we don't actually target instructions, but instructions target us. */ +/** + * we don't actually target instructions, but instructions target us. + */ public class LineNumberTag extends Tag { private final int lineNumber; @@ -23,17 +25,19 @@ public class LineNumberTag extends Tag { this.lineNumber = lineNumber; } - public int getLineNumber() { return lineNumber; } + public int getLineNumber() { + return lineNumber; + } - // ---- from Object - public String toString() { return "line " + lineNumber; - } + } + public boolean equals(Object other) { - if (! (other instanceof LineNumberTag)) return false; + if (!(other instanceof LineNumberTag)) return false; return lineNumber == ((LineNumberTag)other).lineNumber; } + public int hashCode() { return lineNumber; } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LoadClass.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LoadClass.java deleted file mode 100644 index 7b105542c..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LoadClass.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denotes that an instruction may start the process of loading and resolving - * the referenced class in the Virtual Machine. - * - * @version $Id: LoadClass.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public interface LoadClass { - /** - * Returns the ObjectType of the referenced class or interface - * that may be loaded and resolved. - * @return object type that may be loaded or null if a primitive is - * referenced - */ - public ObjectType getLoadClassType(ConstantPoolGen cpg); - - /** - * Returns the type associated with this instruction. - * LoadClass instances are always typed, but this type - * does not always refer to the type of the class or interface - * that it possibly forces to load. For example, GETFIELD would - * return the type of the field and not the type of the class - * where the field is defined. - * If no class is forced to be loaded, null is returned. - * An example for this is an ANEWARRAY instruction that creates - * an int[][]. - * @see #getLoadClassType(ConstantPoolGen) - */ - public Type getType(ConstantPoolGen cpg); -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableGen.java index 49f50591b..ee615993e 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableGen.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableGen.java @@ -56,6 +56,7 @@ package org.aspectj.apache.bcel.generic; import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.classfile.LocalVariable; +import org.aspectj.apache.bcel.classfile.ConstantPool; /** * This class represents a local variable within a method. It contains its @@ -63,13 +64,13 @@ import org.aspectj.apache.bcel.classfile.LocalVariable; * with getLocalVariable which needs the instruction list and the constant * pool as parameters. * - * @version $Id: LocalVariableGen.java,v 1.5 2005/09/28 06:07:20 acolyer Exp $ + * @version $Id: LocalVariableGen.java,v 1.6 2008/05/28 23:52:54 aclement Exp $ * @author M. Dahm * @see LocalVariable * @see MethodGen */ public class LocalVariableGen - implements InstructionTargeter, NamedAndTyped, Cloneable, + implements InstructionTargeter, /*NamedAndTyped,*/ Cloneable, java.io.Serializable { private int index; @@ -114,7 +115,7 @@ public class LocalVariableGen * @param il instruction list (byte code) which this variable belongs to * @param cp constant pool */ - public LocalVariable getLocalVariable(ConstantPoolGen cp) { + public LocalVariable getLocalVariable(ConstantPool cp) { int start_pc = start.getPosition(); int length = end.getPosition() - start_pc; @@ -126,7 +127,7 @@ public class LocalVariableGen int signature_index = cp.addUtf8(type.getSignature()); return new LocalVariable(start_pc, length, name_index, - signature_index, index, cp.getConstantPool()); + signature_index, index, cp); } public void setIndex(int index) { this.index = index; } @@ -140,12 +141,12 @@ public class LocalVariableGen public InstructionHandle getEnd() { return end; } public void setStart(InstructionHandle start) { - BranchInstruction.notifyTarget(this.start, start, this); + InstructionBranch.notifyTarget(this.start, start, this); this.start = start; } public void setEnd(InstructionHandle end) { - BranchInstruction.notifyTarget(this.end, end, this); + InstructionBranch.notifyTarget(this.end, end, this); this.end = end; } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableInstruction.java deleted file mode 100644 index fd27935ff..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableInstruction.java +++ /dev/null @@ -1,224 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import java.io.DataOutputStream; -import java.io.IOException; - -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.util.ByteSequence; - -/** - * Abstract super class for instructions dealing with local variables. - * - * @version $Id: LocalVariableInstruction.java,v 1.9 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public abstract class LocalVariableInstruction extends Instruction - implements TypedInstruction, IndexedInstruction { - protected int n = -1; // index of referenced variable - private short c_tag = -1; // compact version, such as ILOAD_0 - private short canon_tag = -1; // canonical tag such as ILOAD - - private final boolean wide() { return n > Constants.MAX_BYTE; } - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - * tag and length are defined in readInstruction and initFromFile, respectively. - */ - LocalVariableInstruction(short canon_tag, short c_tag) { - super(); - this.canon_tag = canon_tag; - this.c_tag = c_tag; - } - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Also used by IINC()! - */ - LocalVariableInstruction() { - } - - /** - * @param opcode Instruction opcode - * @param c_tag Instruction number for compact version, ALOAD_0, e.g. - * @param n local variable index (unsigned short) - */ - protected LocalVariableInstruction(short opcode, short c_tag, int n) { - super(opcode, (short)2); - - this.c_tag = c_tag; - canon_tag = opcode; - - setIndex(n); - } - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump(DataOutputStream out) throws IOException { - if(wide()) // Need WIDE prefix ? - out.writeByte(Constants.WIDE); - - out.writeByte(opcode); - - if(length > 1) { // Otherwise ILOAD_n, instruction, e.g. - if(wide()) - out.writeShort(n); - else - out.writeByte(n); - } - } - - /** - * Long output format: - * - * <name of opcode> "["<opcode number>"]" - * "("<length of instruction>")" "<"< local variable index>">" - * - * @param verbose long/short format switch - * @return mnemonic for instruction - */ - public String toString(boolean verbose) { - if(((opcode >= Constants.ILOAD_0) && - (opcode <= Constants.ALOAD_3)) || - ((opcode >= Constants.ISTORE_0) && - (opcode <= Constants.ASTORE_3))) - return super.toString(verbose); - else - return super.toString(verbose) + " " + n; - } - - /** - * Read needed data (e.g. index) from file. - * PRE: (ILOAD <= tag <= ALOAD_3) || (ISTORE <= tag <= ASTORE_3) - */ - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException - { - if(wide) { - n = bytes.readUnsignedShort(); - } else if(((opcode >= Constants.ILOAD) && - (opcode <= Constants.ALOAD)) || - ((opcode >= Constants.ISTORE) && - (opcode <= Constants.ASTORE))) { - n = bytes.readUnsignedByte(); - } else if(opcode <= Constants.ALOAD_3) { // compact load instruction such as ILOAD_2 - n = (opcode - Constants.ILOAD_0) % 4; - } else { // Assert ISTORE_0 <= tag <= ASTORE_3 - n = (opcode - Constants.ISTORE_0) % 4; - } - workOutLength(); - } - - private void workOutLength() { - if(n >= 0 && n <= 3) { // Use more compact instruction xLOAD_n - opcode = (short)(c_tag + n); - length = 1; - } else { - opcode = canon_tag; - if(wide()) length = 4; - else length = 2; - } - } - - /** - * @return local variable index referred by this instruction. - */ - public final int getIndex() { return n; } - - /** - * Set the local variable index - */ - public void setIndex(int n) { - if((n < 0) || (n > Constants.MAX_SHORT)) - throw new ClassGenException("Illegal value: " + n); - - this.n = n; - workOutLength(); - } - - /** @return canonical tag for instruction, e.g., ALOAD for ALOAD_0 - */ - public short getCanonicalTag() { - return canon_tag; - } - - /** - * Returns the type associated with the instruction - - * in case of ALOAD or ASTORE Type.OBJECT is returned. - * This is just a bit incorrect, because ALOAD and ASTORE - * may work on every ReferenceType (including Type.NULL) and - * ASTORE may even work on a ReturnaddressType . - * @return type associated with the instruction - */ - public Type getType(ConstantPoolGen cp) { - switch(canon_tag) { - case Constants.ILOAD: case Constants.ISTORE: - return Type.INT; - case Constants.LLOAD: case Constants.LSTORE: - return Type.LONG; - case Constants.DLOAD: case Constants.DSTORE: - return Type.DOUBLE; - case Constants.FLOAD: case Constants.FSTORE: - return Type.FLOAT; - case Constants.ALOAD: case Constants.ASTORE: - return Type.OBJECT; - - default: throw new ClassGenException("Oops: unknown case in switch" + canon_tag); - } - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableTag.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableTag.java index 266f3b868..ffe857079 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableTag.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/LocalVariableTag.java @@ -52,8 +52,6 @@ public final class LocalVariableTag extends Tag { public boolean isRemapped() { return this.remapped; } - // ---- from Object - public String toString() { return "local " + slot + ": " + signature + " " + name; } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/MONITORENTER.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/MONITORENTER.java deleted file mode 100644 index 9a6600aff..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/MONITORENTER.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * MONITORENTER - Enter monitor for object - *
          Stack: ..., objectref -> ...
          - * - * @version $Id: MONITORENTER.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class MONITORENTER extends Instruction - implements ExceptionThrower, StackConsumer { - public MONITORENTER() { - super(org.aspectj.apache.bcel.Constants.MONITORENTER, (short)1); - } - - public Class[] getExceptions() { - return new Class[] { org.aspectj.apache.bcel.ExceptionConstants.NULL_POINTER_EXCEPTION }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitMONITORENTER(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/MONITOREXIT.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/MONITOREXIT.java deleted file mode 100644 index 5641063e1..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/MONITOREXIT.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * MONITOREXIT - Exit monitor for object - *
          Stack: ..., objectref -> ...
          - * - * @version $Id: MONITOREXIT.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class MONITOREXIT extends Instruction - implements ExceptionThrower, StackConsumer { - public MONITOREXIT() { - super(org.aspectj.apache.bcel.Constants.MONITOREXIT, (short)1); - } - - public Class[] getExceptions() { - return new Class[] { org.aspectj.apache.bcel.ExceptionConstants.NULL_POINTER_EXCEPTION }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitMONITOREXIT(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/MULTIANEWARRAY.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/MULTIANEWARRAY.java index 3472fd218..eddc2e995 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/MULTIANEWARRAY.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/MULTIANEWARRAY.java @@ -54,34 +54,23 @@ package org.aspectj.apache.bcel.generic; * . */ import java.io.*; -import org.aspectj.apache.bcel.util.ByteSequence; import org.aspectj.apache.bcel.classfile.ConstantPool; +import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.ExceptionConstants; /** * MULTIANEWARRAY - Create new mutidimensional array of references *
          Stack: ..., count1, [count2, ...] -> ..., arrayref
          * - * @version $Id: MULTIANEWARRAY.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: MULTIANEWARRAY.java,v 1.3 2008/05/28 23:52:59 aclement Exp $ * @author M. Dahm */ -public class MULTIANEWARRAY extends CPInstruction implements LoadClass, AllocationInstruction, ExceptionThrower { +public class MULTIANEWARRAY extends InstructionCP { private short dimensions; - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - MULTIANEWARRAY() {} - public MULTIANEWARRAY(int index, short dimensions) { - super(org.aspectj.apache.bcel.Constants.MULTIANEWARRAY, index); - - if(dimensions < 1) - throw new ClassGenException("Invalid dimensions value: " + dimensions); - + super(Constants.MULTIANEWARRAY, index); this.dimensions = dimensions; - length = 4; } /** @@ -97,13 +86,13 @@ public class MULTIANEWARRAY extends CPInstruction implements LoadClass, Allocati /** * Read needed data (i.e., no. dimension) from file. */ - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException - { - super.initFromFile(bytes, wide); - dimensions = bytes.readByte(); - length = 4; - } +// protected void initFromFile(ByteSequence bytes, boolean wide) +// throws IOException +// { +// super.initFromFile(bytes, wide); +// dimensions = bytes.readByte(); +//// length = 4; +// } /** * @return number of dimensions to be created @@ -129,7 +118,7 @@ public class MULTIANEWARRAY extends CPInstruction implements LoadClass, Allocati * constant pool entry they reference. * @return Number of words consumed from stack by this instruction */ - public int consumeStack(ConstantPoolGen cpg) { return dimensions; } + public int consumeStack(ConstantPool cpg) { return dimensions; } public Class[] getExceptions() { Class[] cs = new Class[2 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; @@ -143,7 +132,7 @@ public class MULTIANEWARRAY extends CPInstruction implements LoadClass, Allocati return cs; } - public ObjectType getLoadClassType(ConstantPoolGen cpg) { + public ObjectType getLoadClassType(ConstantPool cpg) { Type t = getType(cpg); if (t instanceof ArrayType){ @@ -153,20 +142,20 @@ public class MULTIANEWARRAY extends CPInstruction implements LoadClass, Allocati return (t instanceof ObjectType)? (ObjectType) t : null; } - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitLoadClass(this); - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitMULTIANEWARRAY(this); - } +// /** +// * Call corresponding visitor method(s). The order is: +// * Call visitor methods of implemented interfaces first, then +// * call methods according to the class hierarchy in descending order, +// * i.e., the most specific visitXXX() call comes last. +// * +// * @param v Visitor object +// */ +// public void accept(Visitor v) { +// v.visitLoadClass(this); +// v.visitAllocationInstruction(this); +// v.visitExceptionThrower(this); +// v.visitTypedInstruction(this); +// v.visitCPInstruction(this); +// v.visitMULTIANEWARRAY(this); +// } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/MethodGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/MethodGen.java index d88f5091a..6d29f10f8 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/MethodGen.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/MethodGen.java @@ -69,44 +69,47 @@ import org.aspectj.apache.bcel.classfile.LineNumber; import org.aspectj.apache.bcel.classfile.LineNumberTable; import org.aspectj.apache.bcel.classfile.LocalVariable; import org.aspectj.apache.bcel.classfile.LocalVariableTable; +import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.classfile.Method; import org.aspectj.apache.bcel.classfile.Utility; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; import org.aspectj.apache.bcel.classfile.annotation.RuntimeAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeParameterAnnotations; -import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; /** * Template class for building up a method. This is done by defining exception * handlers, adding thrown exceptions, local variables and attributes, whereas - * the `LocalVariableTable' and `LineNumberTable' attributes will be set + * the 'LocalVariableTable' and 'LineNumberTable' attributes will be set * automatically for the code. Use stripAttributes() if you don't like this. * * While generating code it may be necessary to insert NOP operations. You can * use the `removeNOPs' method to get rid off them. * The resulting method object can be obtained via the `getMethod()' method. * - * @version $Id: MethodGen.java,v 1.8 2007/02/28 13:10:32 aclement Exp $ + * @version $Id: MethodGen.java,v 1.9 2008/05/28 23:52:57 aclement Exp $ * @author M. Dahm * @author Patrick C. Beard [setMaxStack()] * @see InstructionList * @see Method */ public class MethodGen extends FieldGenOrMethodGen { - private String class_name; - private Type[] arg_types; - private String[] arg_names; - private int max_locals; - private int max_stack; + private String classname; + private Type[] parameterTypes; + private String[] parameterNames; + private int maxLocals; + private int maxStack; private InstructionList il; - private boolean strip_attributes; + + // Indicates whether to produce code attributes for LineNumberTable and LocalVariableTable, like javac -O + private boolean stripAttributes; + private int highestLineNumber = 0; - private ArrayList variable_vec = new ArrayList(); - private ArrayList line_number_vec = new ArrayList(); - private ArrayList exception_vec = new ArrayList(); + private ArrayList localVariablesList = new ArrayList(); + private ArrayList lineNumbersList = new ArrayList(); + private ArrayList exceptionsList = new ArrayList(); private ArrayList throws_vec = new ArrayList(); - private ArrayList code_attrs_vec = new ArrayList(); + private ArrayList codeAttributesList = new ArrayList(); private List[] param_annotations; // Array of lists containing AnnotationGen objects private boolean hasParameterAnnotations = false; private boolean haveUnpackedParameterAnnotations = false; @@ -135,59 +138,61 @@ public class MethodGen extends FieldGenOrMethodGen { */ public MethodGen(int access_flags, Type return_type, Type[] arg_types, String[] arg_names, String method_name, String class_name, - InstructionList il, ConstantPoolGen cp) { - setAccessFlags(access_flags); - setType(return_type); - setArgumentTypes(arg_types); - setArgumentNames(arg_names); - setName(method_name); - setClassName(class_name); - setInstructionList(il); - setConstantPool(cp); - - boolean abstract_ = isAbstract() || isNative(); - InstructionHandle start = null; - InstructionHandle end = null; - - if(!abstract_) { - start = il.getStart(); - end = il.getEnd(); - - /* Add local variables, namely the implicit `this' and the arguments - */ -// if(!isStatic() && (class_name != null)) { // Instance method -> `this' is local var 0 -// addLocalVariable("this", new ObjectType(class_name), start, end); + InstructionList il, ConstantPool cp) { + + this.modifiers = access_flags; + this.type = return_type; + this.parameterTypes = arg_types; + this.parameterNames = arg_names; + this.name = method_name; + this.classname = class_name; + this.il = il; + this.cp = cp; + + // OPTIMIZE this code messes with the local variables - do we need it? +// boolean abstract_ = isAbstract() || isNative(); +// InstructionHandle start = null; +// InstructionHandle end = null; +// +// if (!abstract_) { +// start = il.getStart(); +// end = il.getEnd(); +// +// /* Add local variables, namely the implicit `this' and the arguments +// */ +//// if(!isStatic() && (class_name != null)) { // Instance method -> `this' is local var 0 +//// addLocalVariable("this", new ObjectType(class_name), start, end); +//// } +// } + +// if(arg_types != null) { +// int size = arg_types.length; +// +// for(int i=0; i < size; i++) { +// if(Type.VOID == arg_types[i]) { +// throw new ClassGenException("'void' is an illegal argument type for a method"); +// } // } - } - - if(arg_types != null) { - int size = arg_types.length; - - for(int i=0; i < size; i++) { - if(Type.VOID == arg_types[i]) { - throw new ClassGenException("'void' is an illegal argument type for a method"); - } - } - - if(arg_names != null) { // Names for variables provided? - if(size != arg_names.length) - throw new ClassGenException("Mismatch in argument array lengths: " + - size + " vs. " + arg_names.length); - } else { // Give them dummy names -// arg_names = new String[size]; -// -// for(int i=0; i < size; i++) -// arg_names[i] = "arg" + i; // -// setArgumentNames(arg_names); - } +// if(arg_names != null) { // Names for variables provided? +// if(size != arg_names.length) +// throw new ClassGenException("Mismatch in argument array lengths: " + +// size + " vs. " + arg_names.length); +// } else { // Give them dummy names +//// arg_names = new String[size]; +//// +//// for(int i=0; i < size; i++) +//// arg_names[i] = "arg" + i; +//// +//// setArgumentNames(arg_names); +// } - if(!abstract_) { - for(int i=0; i < size; i++) { -// addLocalVariable(arg_names[i], arg_types[i], start, end); - } - } - } +// if(!abstract_) { +// for(int i=0; i < size; i++) { +//// addLocalVariable(arg_names[i], arg_types[i], start, end); +// } +// } +// } } public int getHighestlinenumber() { return highestLineNumber; } @@ -200,20 +205,20 @@ public class MethodGen extends FieldGenOrMethodGen { * @param cp constant pool */ - public MethodGen(Method m, String class_name, ConstantPoolGen cp) { + public MethodGen(Method m, String class_name, ConstantPool cp) { this(m,class_name,cp,false); } - public MethodGen(Method m, String class_name, ConstantPoolGen cp,boolean useTags) { - + public MethodGen(Method m, String class_name, ConstantPool cp,boolean useTags) { this( - m.getAccessFlags(), - Type.getReturnType(m.getSignature()), - Type.getArgumentTypes(m.getSignature()), + m.getModifiers(), + // OPTIMIZE implementation of getReturnType() and getArgumentTypes() on Method seems weak + m.getReturnType(), + m.getArgumentTypes(), null /* may be overridden anyway */, m.getName(), class_name, - ((m.getAccessFlags() & (Constants.ACC_ABSTRACT | Constants.ACC_NATIVE)) == 0)? new InstructionList(m.getCode().getCode()) : null, + ((m.getModifiers() & (Constants.ACC_ABSTRACT | Constants.ACC_NATIVE)) == 0)? new InstructionList(m.getCode().getCode()) : null, cp); Attribute[] attributes = m.getAttributes(); @@ -238,7 +243,7 @@ public class MethodGen extends FieldGenOrMethodGen { ObjectType c_type = null; if (type > 0) { - String cen = m.getConstantPool().getConstantString( type, Constants.CONSTANT_Class); + String cen = m.getConstantPool().getConstantString_CONSTANTClass(type); c_type = new ObjectType(cen); } @@ -285,6 +290,7 @@ public class MethodGen extends FieldGenOrMethodGen { } } } else if (a instanceof LocalVariableTable) { + // Lets have a go at creating Tags directly if (useTags) { LocalVariable[] lv = ((LocalVariableTable) a).getLocalVariableTable(); @@ -297,7 +303,7 @@ public class MethodGen extends FieldGenOrMethodGen { byte b = t.getType(); if (b!= Constants.T_ADDRESS) { int increment = t.getSize(); - if (l.getIndex()+increment>max_locals) max_locals = l.getIndex()+increment; + if (l.getIndex()+increment>maxLocals) maxLocals = l.getIndex()+increment; } int end = l.getStartPC()+l.getLength(); do { @@ -334,7 +340,7 @@ public class MethodGen extends FieldGenOrMethodGen { RuntimeAnnotations runtimeAnnotations = (RuntimeAnnotations) a; List l = runtimeAnnotations.getAnnotations(); for (Iterator it = l.iterator(); it.hasNext();) { - Annotation element = (Annotation) it.next(); + AnnotationGen element = (AnnotationGen) it.next(); addAnnotation(new AnnotationGen(element, cp, false)); } } else { @@ -356,22 +362,21 @@ public class MethodGen extends FieldGenOrMethodGen { * @see LocalVariable */ public LocalVariableGen addLocalVariable(String name, Type type, int slot, - InstructionHandle start, - InstructionHandle end) { - byte t = type.getType(); - if (t != Constants.T_ADDRESS) { - int add = type.getSize(); - if (slot + add > max_locals) max_locals = slot + add; + InstructionHandle start, InstructionHandle end) { +// byte t = type.getType(); +// if (t != Constants.T_ADDRESS) { + int size = type.getSize(); + if (slot + size > maxLocals) maxLocals = slot + size; LocalVariableGen l = new LocalVariableGen(slot, name, type, start, end); - int i; - if ((i = variable_vec.indexOf(l)) >= 0) variable_vec.set(i, l); // Overwrite if necessary - else variable_vec.add(l); + int i = localVariablesList.indexOf(l); + if (i >= 0) localVariablesList.set(i, l); // Overwrite if necessary + else localVariablesList.add(l); return l; - } else { - throw new IllegalArgumentException("Can not use " + type + - " as type for local variable"); - - } +// } else { +// throw new IllegalArgumentException("Can not use " + type + +// " as type for local variable"); +// +// } } /** @@ -389,7 +394,7 @@ public class MethodGen extends FieldGenOrMethodGen { public LocalVariableGen addLocalVariable(String name, Type type, InstructionHandle start, InstructionHandle end) { - return addLocalVariable(name, type, max_locals, start, end); + return addLocalVariable(name, type, maxLocals, start, end); } /** @@ -397,14 +402,14 @@ public class MethodGen extends FieldGenOrMethodGen { * with an explicit index argument. */ public void removeLocalVariable(LocalVariableGen l) { - variable_vec.remove(l); + localVariablesList.remove(l); } /** * Remove all local variables. */ public void removeLocalVariables() { - variable_vec.clear(); + localVariablesList.clear(); } /** @@ -436,9 +441,9 @@ public class MethodGen extends FieldGenOrMethodGen { * @return array of declared local variables sorted by index */ public LocalVariableGen[] getLocalVariables() { - int size = variable_vec.size(); + int size = localVariablesList.size(); LocalVariableGen[] lg = new LocalVariableGen[size]; - variable_vec.toArray(lg); + localVariablesList.toArray(lg); for(int i=0; i < size; i++) { if(lg[i].getStart() == null) @@ -457,7 +462,7 @@ public class MethodGen extends FieldGenOrMethodGen { /** * @return `LocalVariableTable' attribute of all the local variables of this method. */ - public LocalVariableTable getLocalVariableTable(ConstantPoolGen cp) { + public LocalVariableTable getLocalVariableTable(ConstantPool cp) { LocalVariableGen[] lg = getLocalVariables(); int size = lg.length; LocalVariable[] lv = new LocalVariable[size]; @@ -466,7 +471,7 @@ public class MethodGen extends FieldGenOrMethodGen { lv[i] = lg[i].getLocalVariable(cp); return new LocalVariableTable(cp.addUtf8("LocalVariableTable"), - 2 + lv.length * 10, lv, cp.getConstantPool()); + 2 + lv.length * 10, lv, cp); } /** @@ -478,7 +483,7 @@ public class MethodGen extends FieldGenOrMethodGen { */ public LineNumberGen addLineNumber(InstructionHandle ih, int src_line) { LineNumberGen l = new LineNumberGen(ih, src_line); - line_number_vec.add(l); + lineNumbersList.add(l); return l; } @@ -486,39 +491,37 @@ public class MethodGen extends FieldGenOrMethodGen { * Remove a line number. */ public void removeLineNumber(LineNumberGen l) { - line_number_vec.remove(l); + lineNumbersList.remove(l); } /** * Remove all line numbers. */ public void removeLineNumbers() { - line_number_vec.clear(); + lineNumbersList.clear(); } /* * @return array of line numbers */ public LineNumberGen[] getLineNumbers() { - LineNumberGen[] lg = new LineNumberGen[line_number_vec.size()]; - line_number_vec.toArray(lg); + LineNumberGen[] lg = new LineNumberGen[lineNumbersList.size()]; + lineNumbersList.toArray(lg); return lg; } /** - * @return `LineNumberTable' attribute of all the local variables of this method. + * @return 'LineNumberTable' attribute for all the local variables of this method. */ - public LineNumberTable getLineNumberTable(ConstantPoolGen cp) { - int size = line_number_vec.size(); - LineNumber[] ln = new LineNumber[size]; + public LineNumberTable getLineNumberTable(ConstantPool cp) { + int size = lineNumbersList.size(); + LineNumber[] ln = new LineNumber[size]; - try { - for(int i=0; i < size; i++) - ln[i] = ((LineNumberGen)line_number_vec.get(i)).getLineNumber(); - } catch(ArrayIndexOutOfBoundsException e) {} // Never occurs + for(int i=0; i < size; i++) { + ln[i] = ((LineNumberGen)lineNumbersList.get(i)).getLineNumber(); + } - return new LineNumberTable(cp.addUtf8("LineNumberTable"), - 2 + ln.length * 4, ln, cp.getConstantPool()); + return new LineNumberTable(cp.addUtf8("LineNumberTable"), 2 + ln.length * 4, ln, cp); } /** @@ -541,7 +544,7 @@ public class MethodGen extends FieldGenOrMethodGen { CodeExceptionGen c = new CodeExceptionGen(start_pc, end_pc, handler_pc, catch_type); - exception_vec.add(c); + exceptionsList.add(c); return c; } @@ -549,22 +552,22 @@ public class MethodGen extends FieldGenOrMethodGen { * Remove an exception handler. */ public void removeExceptionHandler(CodeExceptionGen c) { - exception_vec.remove(c); + exceptionsList.remove(c); } /** * Remove all line numbers. */ public void removeExceptionHandlers() { - exception_vec.clear(); + exceptionsList.clear(); } /* * @return array of declared exception handlers */ public CodeExceptionGen[] getExceptionHandlers() { - CodeExceptionGen[] cg = new CodeExceptionGen[exception_vec.size()]; - exception_vec.toArray(cg); + CodeExceptionGen[] cg = new CodeExceptionGen[exceptionsList.size()]; + exceptionsList.toArray(cg); return cg; } @@ -572,12 +575,12 @@ public class MethodGen extends FieldGenOrMethodGen { * @return code exceptions for `Code' attribute */ private CodeException[] getCodeExceptions() { - int size = exception_vec.size(); + int size = exceptionsList.size(); CodeException[] c_exc = new CodeException[size]; try { for(int i=0; i < size; i++) { - CodeExceptionGen c = (CodeExceptionGen)exception_vec.get(i); + CodeExceptionGen c = (CodeExceptionGen)exceptionsList.get(i); c_exc[i] = c.getCodeException(cp); } } catch(ArrayIndexOutOfBoundsException e) {} @@ -620,7 +623,7 @@ public class MethodGen extends FieldGenOrMethodGen { /** * @return `Exceptions' attribute of all the exceptions thrown by this method. */ - private ExceptionTable getExceptionTable(ConstantPoolGen cp) { + private ExceptionTable getExceptionTable(ConstantPool cp) { int size = throws_vec.size(); int[] ex = new int[size]; @@ -630,7 +633,7 @@ public class MethodGen extends FieldGenOrMethodGen { } catch(ArrayIndexOutOfBoundsException e) {} return new ExceptionTable(cp.addUtf8("Exceptions"), - 2 + 2 * size, ex, cp.getConstantPool()); + 2 + 2 * size, ex, cp); } /** @@ -642,18 +645,10 @@ public class MethodGen extends FieldGenOrMethodGen { * * @param a attribute to be added */ - public void addCodeAttribute(Attribute a) { code_attrs_vec.add(a); } + public void addCodeAttribute(Attribute a) { codeAttributesList.add(a); } - public void addAnnotationsAsAttribute(ConstantPoolGen cp) { - Attribute[] attrs = Utility.getAnnotationAttributes(cp,annotation_vec); - if (attrs!=null) { - for (int i = 0; i < attrs.length; i++) { - addAttribute(attrs[i]); - } - } - } - public void addParameterAnnotationsAsAttribute(ConstantPoolGen cp) { + public void addParameterAnnotationsAsAttribute(ConstantPool cp) { if (!hasParameterAnnotations) return; Attribute[] attrs = Utility.getParameterAnnotationAttributes(cp,param_annotations); if (attrs!=null) { @@ -666,21 +661,21 @@ public class MethodGen extends FieldGenOrMethodGen { /** * Remove a code attribute. */ - public void removeCodeAttribute(Attribute a) { code_attrs_vec.remove(a); } + public void removeCodeAttribute(Attribute a) { codeAttributesList.remove(a); } /** * Remove all code attributes. */ public void removeCodeAttributes() { - code_attrs_vec.clear(); + codeAttributesList.clear(); } /** * @return all attributes of this method. */ public Attribute[] getCodeAttributes() { - Attribute[] attributes = new Attribute[code_attrs_vec.size()]; - code_attrs_vec.toArray(attributes); + Attribute[] attributes = new Attribute[codeAttributesList.size()]; + codeAttributesList.toArray(attributes); return attributes; } @@ -708,10 +703,10 @@ public class MethodGen extends FieldGenOrMethodGen { /* Create LocalVariableTable and LineNumberTable attributes (for debuggers, e.g.) */ - if((variable_vec.size() > 0) && !strip_attributes) + if((localVariablesList.size() > 0) && !stripAttributes) addCodeAttribute(lvt = getLocalVariableTable(cp)); - if((line_number_vec.size() > 0) && !strip_attributes) + if((lineNumbersList.size() > 0) && !stripAttributes) addCodeAttribute(lnt = getLineNumberTable(cp)); Attribute[] code_attrs = getCodeAttributes(); @@ -729,9 +724,9 @@ public class MethodGen extends FieldGenOrMethodGen { if((il != null) && !isAbstract()) { // Remove any stale code attribute - Attribute[] attributes = getAttributes(); - for(int i=0; i < attributes.length; i++) { - Attribute a = attributes[i]; + List attributes = getAttributes(); + for(int i=0; i < attributes.size(); i++) { + Attribute a = (Attribute) attributes.get(i); if(a instanceof Code) removeAttribute(a); } @@ -740,10 +735,10 @@ public class MethodGen extends FieldGenOrMethodGen { 8 + byte_code.length + // prologue byte code 2 + exc_len + // exceptions 2 + attrs_len, // attributes - max_stack, max_locals, + maxStack, maxLocals, byte_code, c_exc, code_attrs, - cp.getConstantPool()); + cp); addAttribute(code); } @@ -757,10 +752,11 @@ public class MethodGen extends FieldGenOrMethodGen { if(throws_vec.size() > 0) addAttribute(et = getExceptionTable(cp)); // Add `Exceptions' if there are "throws" clauses - Method m = new Method(access_flags, name_index, signature_index, - getAttributes(), cp.getConstantPool()); + Method m = new Method(modifiers, name_index, signature_index, + getAttributesImmutable(), cp); // Undo effects of adding attributes + // OPTIMIZE why redo this? is there a better way to clean up? if(lvt != null) removeCodeAttribute(lvt); if(lnt != null) removeCodeAttribute(lnt); if(code != null) removeAttribute(code); @@ -769,75 +765,44 @@ public class MethodGen extends FieldGenOrMethodGen { return m; } - /** - * Remove all NOPs from the instruction list (if possible) and update every - * object refering to them, i.e., branch instructions, local variables and - * exception handlers. - */ - public void removeNOPs() { - if(il != null) { - InstructionHandle next; - /* Check branch instructions. - */ - for(InstructionHandle ih = il.getStart(); ih != null; ih = next) { - next = ih.next; - - if((next != null) && (ih.getInstruction() instanceof NOP)) { - try { - il.delete(ih); - } catch(TargetLostException e) { - InstructionHandle[] targets = e.getTargets(); - - for(int i=0; i < targets.length; i++) { - InstructionTargeter[] targeters = targets[i].getTargeters(); - - for(int j=0; j < targeters.length; j++) - targeters[j].updateTarget(targets[i], next); - } - } - } - } - } - } - /** * Set maximum number of local variables. */ - public void setMaxLocals(int m) { max_locals = m; } - public int getMaxLocals() { return max_locals; } + public void setMaxLocals(int m) { maxLocals = m; } + public int getMaxLocals() { return maxLocals; } /** * Set maximum stack size for this method. */ - public void setMaxStack(int m) { max_stack = m; } - public int getMaxStack() { return max_stack; } + public void setMaxStack(int m) { maxStack = m; } + public int getMaxStack() { return maxStack; } /** @return class that contains this method */ - public String getClassName() { return class_name; } - public void setClassName(String class_name) { this.class_name = class_name; } + public String getClassName() { return classname; } + public void setClassName(String class_name) { this.classname = class_name; } public void setReturnType(Type return_type) { setType(return_type); } public Type getReturnType() { return getType(); } - public void setArgumentTypes(Type[] arg_types) { this.arg_types = arg_types; } - public Type[] getArgumentTypes() { return (Type[])arg_types.clone(); } - public void setArgumentType(int i, Type type) { arg_types[i] = type; } - public Type getArgumentType(int i) { return arg_types[i]; } + public void setArgumentTypes(Type[] arg_types) { this.parameterTypes = arg_types; } + public Type[] getArgumentTypes() { return this.parameterTypes;}// OPTIMIZE dont need clone here? (Type[])arg_types.clone(); } + public void setArgumentType(int i, Type type) { parameterTypes[i] = type; } + public Type getArgumentType(int i) { return parameterTypes[i]; } - public void setArgumentNames(String[] arg_names) { this.arg_names = arg_names; } + public void setArgumentNames(String[] arg_names) { this.parameterNames = arg_names; } public String[] getArgumentNames() { - if (arg_names!=null) return (String[])arg_names.clone(); + if (parameterNames!=null) return (String[])parameterNames.clone(); else return new String[0]; } - public void setArgumentName(int i, String name) { arg_names[i] = name; } - public String getArgumentName(int i) { return arg_names[i]; } + public void setArgumentName(int i, String name) { parameterNames[i] = name; } + public String getArgumentName(int i) { return parameterNames[i]; } public InstructionList getInstructionList() { return il; } public void setInstructionList(InstructionList il) { this.il = il; } public String getSignature() { - return Type.getMethodSignature(type, arg_types); + return Type.getMethodSignature(type, parameterTypes); } /** @@ -845,9 +810,9 @@ public class MethodGen extends FieldGenOrMethodGen { */ public void setMaxStack() { if(il != null) - max_stack = getMaxStack(cp, il, getExceptionHandlers()); + maxStack = getMaxStack(cp, il, getExceptionHandlers()); else - max_stack = 0; + maxStack = 0; } /** @@ -857,33 +822,30 @@ public class MethodGen extends FieldGenOrMethodGen { if(il != null) { int max = isStatic()? 0 : 1; - if(arg_types != null) - for(int i=0; i < arg_types.length; i++) - max += arg_types[i].getSize(); + if(parameterTypes != null) + for(int i=0; i < parameterTypes.length; i++) + max += parameterTypes[i].getSize(); for(InstructionHandle ih = il.getStart(); ih != null; ih = ih.getNext()) { Instruction ins = ih.getInstruction(); - if((ins instanceof LocalVariableInstruction) || - (ins instanceof RET) || (ins instanceof IINC)) + if((ins instanceof InstructionLV) || + (ins instanceof RET)) { - int index = ((IndexedInstruction)ins).getIndex() + - ((TypedInstruction)ins).getType(cp).getSize(); + int index = ins.getIndex() + + ins.getType(cp).getSize(); if(index > max) max = index; } } - max_locals = max; + maxLocals = max; } else - max_locals = 0; + maxLocals = 0; } - /** Do not/Do produce attributes code attributesLineNumberTable and - * LocalVariableTable, like javac -O - */ - public void stripAttributes(boolean flag) { strip_attributes = flag; } + public void stripAttributes(boolean flag) { stripAttributes = flag; } static final class BranchTarget { InstructionHandle target; @@ -932,7 +894,7 @@ public class MethodGen extends FieldGenOrMethodGen { * * @return maximum stack depth used by method */ - public static int getMaxStack(ConstantPoolGen cp, InstructionList il, CodeExceptionGen[] et) { + public static int getMaxStack(ConstantPool cp, InstructionList il, CodeExceptionGen[] et) { BranchStack branchTargets = new BranchStack(); /* Initially, populate the branch stack with the exception @@ -948,28 +910,29 @@ public class MethodGen extends FieldGenOrMethodGen { int stackDepth = 0, maxStackDepth = 0; InstructionHandle ih = il.getStart(); - while(ih != null) { Instruction instruction = ih.getInstruction(); - short opcode = instruction.getOpcode(); - int delta = instruction.produceStack(cp) - instruction.consumeStack(cp); + short opcode = instruction.opcode; + int prod = instruction.produceStack(cp); + int con = instruction.consumeStack(cp); + int delta = prod-con; stackDepth += delta; if(stackDepth > maxStackDepth) maxStackDepth = stackDepth; // choose the next instruction based on whether current is a branch. - if(instruction instanceof BranchInstruction) { - BranchInstruction branch = (BranchInstruction) instruction; - if(instruction instanceof Select) { + if(instruction instanceof InstructionBranch) { + InstructionBranch branch = (InstructionBranch) instruction; + if(instruction instanceof InstructionSelect) { // explore all of the select's targets. the default target is handled below. - Select select = (Select) branch; + InstructionSelect select = (InstructionSelect) branch; InstructionHandle[] targets = select.getTargets(); for (int i = 0; i < targets.length; i++) branchTargets.push(targets[i], stackDepth); // nothing to fall through to. ih = null; - } else if(!(branch instanceof IfInstruction)) { + } else if(!(branch.isIfInstruction())) { // if an instruction that comes back to following PC, // push next instruction, with stack depth reduced by 1. if(opcode == Constants.JSR || opcode == Constants.JSR_W) @@ -1002,33 +965,6 @@ public class MethodGen extends FieldGenOrMethodGen { return maxStackDepth; } - private ArrayList observers; - - /** Add observer for this object. - */ - public void addObserver(MethodObserver o) { - if(observers == null) - observers = new ArrayList(); - - observers.add(o); - } - - /** Remove observer for this object. - */ - public void removeObserver(MethodObserver o) { - if(observers != null) - observers.remove(o); - } - - /** Call notify() method on all observers. This method is not called - * automatically whenever the state has changed, but has to be - * called by the user after he has finished editing the object. - */ - public void update() { - if(observers != null) - for(Iterator e = observers.iterator(); e.hasNext(); ) - ((MethodObserver)e.next()).notify(this); - } /** * Return string representation close to declaration format, @@ -1037,8 +973,8 @@ public class MethodGen extends FieldGenOrMethodGen { * @return String representation of the method. */ public final String toString() { - String access = Utility.accessToString(access_flags); - String signature = Type.getMethodSignature(type, arg_types); + String access = Utility.accessToString(modifiers); + String signature = Type.getMethodSignature(type, parameterTypes); signature = Utility.methodSignatureToString(signature, name, access, true, getLocalVariableTable(cp)); @@ -1055,7 +991,7 @@ public class MethodGen extends FieldGenOrMethodGen { /** @return deep copy of this method */ - public MethodGen copy(String class_name, ConstantPoolGen cp) { + public MethodGen copy(String class_name, ConstantPool cp) { Method m = ((MethodGen)clone()).getMethod(); MethodGen mg = new MethodGen(m, class_name, this.cp); @@ -1074,7 +1010,7 @@ public class MethodGen extends FieldGenOrMethodGen { */ public List getAnnotationsOnParameter(int i) { ensureExistingParameterAnnotationsUnpacked(); - if (!hasParameterAnnotations || i>arg_types.length) return null; + if (!hasParameterAnnotations || i>parameterTypes.length) return null; return param_annotations[i]; } @@ -1088,27 +1024,27 @@ public class MethodGen extends FieldGenOrMethodGen { private void ensureExistingParameterAnnotationsUnpacked() { if (haveUnpackedParameterAnnotations) return; // Find attributes that contain parameter annotation data - Attribute[] attrs = getAttributes(); + List attrs = getAttributes(); RuntimeParameterAnnotations paramAnnVisAttr = null; RuntimeParameterAnnotations paramAnnInvisAttr=null; List accumulatedAnnotations = new ArrayList(); - for (int i = 0; i < attrs.length; i++) { - Attribute attribute = attrs[i]; + for (int i = 0; i < attrs.size(); i++) { + Attribute attribute = (Attribute)attrs.get(i); if (attribute instanceof RuntimeParameterAnnotations) { // Initialize param_annotations if (!hasParameterAnnotations) { - param_annotations = new List[arg_types.length]; - for (int j=0;j. - */ - -/** - * Implement this interface if you're interested in changes to a MethodGen object - * and register yourself with addObserver(). - * - * @version $Id: MethodObserver.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public interface MethodObserver { - public void notify(MethodGen method); -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/NEW.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/NEW.java deleted file mode 100644 index 323569595..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/NEW.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import org.aspectj.apache.bcel.ExceptionConstants; - -/** - * NEW - Create new object - *
          Stack: ... -> ..., objectref
          - * - * @version $Id: NEW.java,v 1.8 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class NEW extends CPInstruction - implements LoadClass, AllocationInstruction, ExceptionThrower, StackProducer { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - NEW() {} - - public NEW(int index) { - super(org.aspectj.apache.bcel.Constants.NEW, index); - } - - public Class[] getExceptions(){ - Class[] cs = new Class[2 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; - - System.arraycopy(ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, - cs, 0, ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); - - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length+1] = ExceptionConstants.INSTANTIATION_ERROR; - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.ILLEGAL_ACCESS_ERROR; - - return cs; - } - - public ObjectType getLoadClassType(ConstantPoolGen cpg) { - return (ObjectType)getType(cpg); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitLoadClass(this); - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitNEW(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/NEWARRAY.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/NEWARRAY.java deleted file mode 100644 index 97d98dfdc..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/NEWARRAY.java +++ /dev/null @@ -1,140 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import java.io.*; -import org.aspectj.apache.bcel.util.ByteSequence; - -/** - * NEWARRAY - Create new array of basic type (int, short, ...) - *
          Stack: ..., count -> ..., arrayref
          - * type must be one of T_INT, T_SHORT, ... - * - * @version $Id: NEWARRAY.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class NEWARRAY extends Instruction - implements AllocationInstruction, ExceptionThrower, StackProducer { - private byte type; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - NEWARRAY() {} - - public NEWARRAY(byte type) { - super(org.aspectj.apache.bcel.Constants.NEWARRAY, (short)2); - this.type = type; - } - - public NEWARRAY(BasicType type) { - this(type.getType()); - } - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); - out.writeByte(type); - } - - /** - * @return numeric code for basic element type - */ - public final byte getTypecode() { return type; } - - /** - * @return type of constructed array - */ - public final Type getType() { - return new ArrayType(BasicType.getType(type), 1); - } - - /** - * @return mnemonic for instruction - */ - public String toString(boolean verbose) { - return super.toString(verbose) + " " + org.aspectj.apache.bcel.Constants.TYPE_NAMES[type]; - } - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException - { - type = bytes.readByte(); - length = 2; - } - - public Class[] getExceptions() { - return new Class[] { org.aspectj.apache.bcel.ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION }; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitNEWARRAY(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/NOP.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/NOP.java deleted file mode 100644 index b71de55c7..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/NOP.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * NOP - Do nothing - * - * @version $Id: NOP.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class NOP extends Instruction { - public NOP() { - super(org.aspectj.apache.bcel.Constants.NOP, (short)1); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitNOP(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ObjectType.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ObjectType.java index 19a59fdf2..cf3bb25e6 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ObjectType.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/ObjectType.java @@ -60,7 +60,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; /** * Denotes reference such as java.lang.String. * - * @version $Id: ObjectType.java,v 1.3 2006/07/19 12:06:16 aclement Exp $ + * @version $Id: ObjectType.java,v 1.4 2008/05/28 23:52:55 aclement Exp $ * @author M. Dahm */ public final class ObjectType extends ReferenceType { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/POP.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/POP.java deleted file mode 100644 index 7c50e7283..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/POP.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * POP - Pop top operand stack word - * - *
          Stack: ..., word -> ...
          - * - * @version $Id: POP.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class POP extends StackInstruction implements PopInstruction { - public POP() { - super(org.aspectj.apache.bcel.Constants.POP); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitStackInstruction(this); - v.visitPOP(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/POP2.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/POP2.java deleted file mode 100644 index 109401b4b..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/POP2.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * POP2 - Pop two top operand stack words - * - *
          Stack: ..., word2, word1 -> ...
          - * - * @version $Id: POP2.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class POP2 extends StackInstruction implements PopInstruction { - public POP2() { - super(org.aspectj.apache.bcel.Constants.POP2); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitStackInstruction(this); - v.visitPOP2(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/PUSH.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/PUSH.java deleted file mode 100644 index ace01863b..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/PUSH.java +++ /dev/null @@ -1,199 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import org.aspectj.apache.bcel.Constants; - -/** - * Wrapper class for push operations, which are implemented either as BIPUSH, - * LDC or xCONST_n instructions. - * - * @version $Id: PUSH.java,v 1.9 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public final class PUSH - implements CompoundInstruction, VariableLengthInstruction, InstructionConstants -{ - private Instruction instruction; - - /** - * This constructor also applies for values of type short, char, byte - * - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, int value) { - if((value >= -1) && (value <= 5)) // Use ICONST_n - instruction = INSTRUCTIONS[Constants.ICONST_0 + value]; - else if((value >= -128) && (value <= 127)) // Use BIPUSH - instruction = new BIPUSH((byte)value); - else if((value >= -32768) && (value <= 32767)) // Use SIPUSH - instruction = new SIPUSH((short)value); - else // If everything fails create a Constant pool entry - instruction = new LDC(cp.addInteger(value)); - } - - public PUSH(ConstantPoolGen cp, ObjectType t) { - instruction = new LDC_W(cp.addClass(t)); - } - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, boolean value) { - instruction = INSTRUCTIONS[Constants.ICONST_0 + (value? 1 : 0)]; - } - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, float value) { - if(value == 0.0) - instruction = FCONST_0; - else if(value == 1.0) - instruction = FCONST_1; - else if(value == 2.0) - instruction = FCONST_2; - else // Create a Constant pool entry - instruction = new LDC(cp.addFloat(value)); - } - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, long value) { - if(value == 0) - instruction = LCONST_0; - else if(value == 1) - instruction = LCONST_1; - else // Create a Constant pool entry - instruction = new LDC2_W(cp.addLong(value)); - } - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, double value) { - if(value == 0.0) - instruction = DCONST_0; - else if(value == 1.0) - instruction = DCONST_1; - else // Create a Constant pool entry - instruction = new LDC2_W(cp.addDouble(value)); - } - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, String value) { - if(value == null) - instruction = ACONST_NULL; - else // Create a Constant pool entry - instruction = new LDC(cp.addString(value)); - } - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, Number value) { - if((value instanceof Integer) || (value instanceof Short) || (value instanceof Byte)) - instruction = new PUSH(cp, value.intValue()).instruction; - else if(value instanceof Double) - instruction = new PUSH(cp, value.doubleValue()).instruction; - else if(value instanceof Float) - instruction = new PUSH(cp, value.floatValue()).instruction; - else if(value instanceof Long) - instruction = new PUSH(cp, value.longValue()).instruction; - else - throw new ClassGenException("What's this: " + value); - } - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, Character value) { - this(cp, (int)value.charValue()); - } - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, Boolean value) { - this(cp, value.booleanValue()); - } - - public final InstructionList getInstructionList() { - return new InstructionList(instruction); - } - - public final Instruction getInstruction() { - return instruction; - } - - /** - * @return mnemonic for instruction - */ - public String toString() { - return instruction.toString() + " (PUSH)"; - } -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/PUTFIELD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/PUTFIELD.java deleted file mode 100644 index 4618d8853..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/PUTFIELD.java +++ /dev/null @@ -1,118 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.ExceptionConstants; - -/** - * PUTFIELD - Put field in object - *
          Stack: ..., objectref, value -> ...
          - * OR - *
          Stack: ..., objectref, value.word1, value.word2 -> ...
          - * - * @version $Id: PUTFIELD.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class PUTFIELD - extends FieldInstruction - implements PopInstruction,ExceptionThrower{ - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - PUTFIELD() {} - - public PUTFIELD(int index) { - super(Constants.PUTFIELD, index); - } - - public int consumeStack(ConstantPoolGen cpg) { return getFieldSize(cpg) + 1; } - - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, - cs, 0, ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length+1] = - ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = - ExceptionConstants.NULL_POINTER_EXCEPTION; - - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitPUTFIELD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/PUTSTATIC.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/PUTSTATIC.java deleted file mode 100644 index d867a6669..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/PUTSTATIC.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.ExceptionConstants; - -/** - * PUTSTATIC - Put static field in class - *
          Stack: ..., value -> ...
          - * OR - *
          Stack: ..., value.word1, value.word2 -> ...
          - * - * @version $Id: PUTSTATIC.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class PUTSTATIC extends FieldInstruction - implements ExceptionThrower, PopInstruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - PUTSTATIC() {} - - public PUTSTATIC(int index) { - super(Constants.PUTSTATIC, index); - } - - public int consumeStack(ConstantPoolGen cpg) { return getFieldSize(cpg); } - - public Class[] getExceptions() { - Class[] cs = new Class[1 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, - cs, 0, ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = - ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitPUTSTATIC(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/PopInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/PopInstruction.java deleted file mode 100644 index 5e334d652..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/PopInstruction.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denotes an unparameterized instruction to pop a value on top from the stack, - * such as ISTORE, POP, PUTSTATIC. - * - * @version $Id: PopInstruction.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - * @see ISTORE - * @see POP - */ -public interface PopInstruction extends StackConsumer { -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/PushInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/PushInstruction.java deleted file mode 100644 index 28462d10c..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/PushInstruction.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denotes an unparameterized instruction to produce a value on top of the stack, - * such as ILOAD, LDC, SIPUSH, DUP, ICONST, etc. - * - * @version $Id: PushInstruction.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - - * @see ILOAD - * @see ICONST - * @see LDC - * @see DUP - * @see SIPUSH - * @see GETSTATIC - */ -public interface PushInstruction extends StackProducer { -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/RET.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/RET.java index 39f374997..1bb6b843f 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/RET.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/RET.java @@ -54,108 +54,53 @@ package org.aspectj.apache.bcel.generic; * . */ import java.io.*; -import org.aspectj.apache.bcel.util.ByteSequence; + +import org.aspectj.apache.bcel.Constants; +import org.aspectj.apache.bcel.classfile.ConstantPool; /** * RET - Return from subroutine * *
          Stack: ..., -> ..., address
          * - * @version $Id: RET.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: RET.java,v 1.3 2008/05/28 23:53:00 aclement Exp $ * @author M. Dahm */ -public class RET extends Instruction implements IndexedInstruction, TypedInstruction { +public class RET extends Instruction { private boolean wide; private int index; // index to local variable containg the return address - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - RET() {} - public RET(int index) { - super(org.aspectj.apache.bcel.Constants.RET, (short)2); - setIndex(index); // May set wide as side effect + public RET(int index,boolean wide) { + super(Constants.RET); + this.index = index; + this.wide = wide; + //this.wide = index > org.aspectj.apache.bcel.Constants.MAX_BYTE; } - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ public void dump(DataOutputStream out) throws IOException { - if(wide) - out.writeByte(org.aspectj.apache.bcel.Constants.WIDE); - + if (wide) out.writeByte(org.aspectj.apache.bcel.Constants.WIDE); out.writeByte(opcode); - - if(wide) - out.writeShort(index); - else - out.writeByte(index); + if(wide) out.writeShort(index); + else out.writeByte(index); } - private final void setWide() { - if(wide = index > org.aspectj.apache.bcel.Constants.MAX_BYTE) - length = 4; // Including the wide byte - else - length = 2; + public int getLength() { + if (wide) return 4; else return 2; } - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException - { - this.wide = wide; - - if(wide) { - index = bytes.readUnsignedShort(); - length = 4; - } else { - index = bytes.readUnsignedByte(); - length = 2; - } - } - - /** - * @return index of local variable containg the return address - */ public final int getIndex() { return index; } - - /** - * Set index of local variable containg the return address - */ - public final void setIndex(int n) { - if(n < 0) - throw new ClassGenException("Negative index value: " + n); - - index = n; - setWide(); + public final void setIndex(int index) { + this.index = index; + this.wide = index > org.aspectj.apache.bcel.Constants.MAX_BYTE; } - /** - * @return mnemonic for instruction - */ public String toString(boolean verbose) { return super.toString(verbose) + " " + index; } - /** @return return address type - */ - public Type getType(ConstantPoolGen cp) { + public Type getType(ConstantPool cp) { return ReturnaddressType.NO_TARGET; } - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitRET(this); - } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/RETURN.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/RETURN.java deleted file mode 100644 index 6fc7b7cae..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/RETURN.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * RETURN - Return from void method - *
          Stack: ... -> <empty>
          - * - * @version $Id: RETURN.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class RETURN extends ReturnInstruction { - public RETURN() { - super(org.aspectj.apache.bcel.Constants.RETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitRETURN(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ReferenceType.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ReferenceType.java index 13a8d6358..743e7b9c5 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ReferenceType.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/ReferenceType.java @@ -61,7 +61,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; /** * Super class for object and array types. * - * @version $Id: ReferenceType.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: ReferenceType.java,v 1.3 2008/05/28 23:52:58 aclement Exp $ * @author M. Dahm */ public abstract class ReferenceType extends Type { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ReturnInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ReturnInstruction.java deleted file mode 100644 index 20f8dcea2..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ReturnInstruction.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.ExceptionConstants; - -/** - * Super class for the xRETURN family of instructions. - * - * @version $Id: ReturnInstruction.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public abstract class ReturnInstruction extends Instruction - implements ExceptionThrower, TypedInstruction, StackConsumer { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ReturnInstruction() {} - - /** - * @param opcode of instruction - */ - protected ReturnInstruction(short opcode) { - super(opcode, (short)1); - } - - public Type getType() { - switch(opcode) { - case Constants.IRETURN: return Type.INT; - case Constants.LRETURN: return Type.LONG; - case Constants.FRETURN: return Type.FLOAT; - case Constants.DRETURN: return Type.DOUBLE; - case Constants.ARETURN: return Type.OBJECT; - case Constants.RETURN: return Type.VOID; - - default: // Never reached - throw new ClassGenException("Unknown type " + opcode); - } - } - - public Class[] getExceptions() { - return new Class[] { ExceptionConstants.ILLEGAL_MONITOR_STATE }; - } - - /** @return type associated with the instruction - */ - public Type getType(ConstantPoolGen cp) { - return getType(); - } -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ReturnaddressType.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ReturnaddressType.java index 0b1c6a418..45ffae9b7 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ReturnaddressType.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/ReturnaddressType.java @@ -60,7 +60,7 @@ import org.aspectj.apache.bcel.generic.InstructionHandle; * Returnaddress, the type JSR or JSR_W instructions push upon the stack. * * see vmspec2 §3.3.3 - * @version $Id: ReturnaddressType.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: ReturnaddressType.java,v 1.3 2008/05/28 23:52:56 aclement Exp $ * @author Enver Haase */ public class ReturnaddressType extends Type { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/SALOAD.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/SALOAD.java deleted file mode 100644 index 8902d3489..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/SALOAD.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * SALOAD - Load short from array - *
          Stack: ..., arrayref, index -> ..., value
          - * - * @version $Id: SALOAD.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class SALOAD extends ArrayInstruction implements StackProducer { - public SALOAD() { - super(org.aspectj.apache.bcel.Constants.SALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitSALOAD(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/SASTORE.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/SASTORE.java deleted file mode 100644 index a98ef3764..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/SASTORE.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * SASTORE - Store into short array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: SASTORE.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public class SASTORE extends ArrayInstruction implements StackConsumer { - public SASTORE() { - super(org.aspectj.apache.bcel.Constants.SASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitSASTORE(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/SIPUSH.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/SIPUSH.java deleted file mode 100644 index 9f5eeb5ab..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/SIPUSH.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import java.io.*; -import org.aspectj.apache.bcel.util.ByteSequence; - -/** - * SIPUSH - Push short - * - *
          Stack: ... -> ..., value
          - * - * @version $Id: SIPUSH.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public class SIPUSH extends Instruction implements ConstantPushInstruction { - private short b; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - SIPUSH() {} - - public SIPUSH(short b) { - super(org.aspectj.apache.bcel.Constants.SIPUSH, (short)3); - this.b = b; - } - - /** - * Dump instruction as short code to stream out. - */ - public void dump(DataOutputStream out) throws IOException { - super.dump(out); - out.writeShort(b); - } - - /** - * @return mnemonic for instruction - */ - public String toString(boolean verbose) { - return super.toString(verbose) + " " + b; - } - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException - { - length = 3; - b = bytes.readShort(); - } - - public Number getValue() { return new Integer(b); } - - /** @return Type.SHORT - */ - public Type getType(ConstantPoolGen cp) { - return Type.SHORT; - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitSIPUSH(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/SWAP.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/SWAP.java deleted file mode 100644 index 831741a22..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/SWAP.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * SWAP - Swa top operand stack word - *
          Stack: ..., word2, word1 -> ..., word1, word2
          - * - * @version $Id: SWAP.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public class SWAP extends StackInstruction implements StackConsumer, StackProducer { - public SWAP() { - super(org.aspectj.apache.bcel.Constants.SWAP); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitStackInstruction(this); - v.visitSWAP(this); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/StackConsumer.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/StackConsumer.java deleted file mode 100644 index f9b00c244..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/StackConsumer.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denote an instruction that may consume a value from the stack. - * - * @version $Id: StackConsumer.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public interface StackConsumer { - /** @return how many words are consumed from stack - */ - public int consumeStack(ConstantPoolGen cpg); -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/StackInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/StackInstruction.java deleted file mode 100644 index 041e22693..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/StackInstruction.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Super class for stack operations like DUP and POP. - * - * @version $Id: StackInstruction.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public abstract class StackInstruction extends Instruction { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - StackInstruction() {} - - /** - * @param opcode instruction opcode - */ - protected StackInstruction(short opcode) { - super(opcode, (short)1); - } - - /** @return Type.UNKNOWN - */ - public Type getType(ConstantPoolGen cp) { - return Type.UNKNOWN; - } -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/StackProducer.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/StackProducer.java deleted file mode 100644 index 22325c804..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/StackProducer.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denote an instruction that may produce a value on top of the stack - * (this excludes DUP_X1, e.g.) - * - * @version $Id: StackProducer.java,v 1.6 2008/04/25 17:58:20 aclement Exp $ - * @author M. Dahm - */ -public interface StackProducer { - /** @return how many words are produced on stack - */ - public int produceStack(ConstantPoolGen cpg); -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/StoreInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/StoreInstruction.java deleted file mode 100644 index f136372d7..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/StoreInstruction.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denotes an unparameterized instruction to store a value into a local variable, - * e.g. ISTORE. - * - * @version $Id: StoreInstruction.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - */ -public abstract class StoreInstruction extends LocalVariableInstruction - implements PopInstruction -{ - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - * tag and length are defined in readInstruction and initFromFile, respectively. - */ - StoreInstruction(short canon_tag, short c_tag) { - super(canon_tag, c_tag); - } - - /** - * @param opcode Instruction opcode - * @param c_tag Instruction number for compact version, ASTORE_0, e.g. - * @param n local variable index (unsigned short) - */ - protected StoreInstruction(short opcode, short c_tag, int n) { - super(opcode, c_tag, n); - } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitTypedInstruction(this); - v.visitLocalVariableInstruction(this); - v.visitStoreInstruction(this); - } -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/SWITCH.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/SwitchBuilder.java similarity index 92% rename from bcel-builder/src/org/aspectj/apache/bcel/generic/SWITCH.java rename to bcel-builder/src/org/aspectj/apache/bcel/generic/SwitchBuilder.java index 089aa5873..eac6bf364 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/SWITCH.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/SwitchBuilder.java @@ -59,13 +59,13 @@ package org.aspectj.apache.bcel.generic; * TABLESWITCH instruction, depending on whether the match values (int[]) can be * sorted with no gaps between the numbers. * - * @version $Id: SWITCH.java,v 1.8 2008/04/25 17:58:21 aclement Exp $ + * @version $Id: SwitchBuilder.java,v 1.2 2008/05/28 23:52:57 aclement Exp $ * @author M. Dahm */ -public final class SWITCH implements CompoundInstruction { +public final class SwitchBuilder { private int[] match; private InstructionHandle[] targets; - private Select instruction; + private InstructionSelect instruction; private int match_length; /** @@ -83,8 +83,7 @@ public final class SWITCH implements CompoundInstruction { * @param target the default target * @param max_gap maximum gap that may between case branches */ - public SWITCH(int[] match, InstructionHandle[] targets, - InstructionHandle target, int max_gap) { + public SwitchBuilder(int[] match, InstructionHandle[] targets,InstructionHandle target, int max_gap) { this.match = (int[])match.clone(); this.targets = (InstructionHandle[])targets.clone(); @@ -107,8 +106,7 @@ public final class SWITCH implements CompoundInstruction { } } - public SWITCH(int[] match, InstructionHandle[] targets, - InstructionHandle target) { + public SwitchBuilder(int[] match, InstructionHandle[] targets, InstructionHandle target) { this(match, targets, target, 1); } @@ -177,11 +175,7 @@ public final class SWITCH implements CompoundInstruction { return true; } - public final InstructionList getInstructionList() { - return new InstructionList(instruction); - } - - public final Instruction getInstruction() { + public final InstructionSelect getInstruction() { return instruction; } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/TABLESWITCH.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/TABLESWITCH.java index e40ef6890..9769db4b0 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/TABLESWITCH.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/TABLESWITCH.java @@ -54,21 +54,19 @@ package org.aspectj.apache.bcel.generic; * . */ import java.io.*; + +import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.util.ByteSequence; /** * TABLESWITCH - Switch within given range of values, i.e., low..high * - * @version $Id: TABLESWITCH.java,v 1.3 2005/08/25 11:35:49 aclement Exp $ + * @version $Id: TABLESWITCH.java,v 1.4 2008/05/28 23:52:54 aclement Exp $ * @author M. Dahm * @see SWITCH */ -public class TABLESWITCH extends Select { - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - TABLESWITCH() {} +public class TABLESWITCH extends InstructionSelect { + /** * @param match sorted array of match values, match[0] must be low value, @@ -84,9 +82,9 @@ public class TABLESWITCH extends Select { // throw new RuntimeException("A tableswitch with no targets should be represented as a LOOKUPSWITCH"); // } - length = (short)(13 + match_length * 4); /* Alignment remainder assumed + length = (short)(13 + matchLength * 4); /* Alignment remainder assumed * 0 here, until dump time */ - fixed_length = length; + fixedLength = length; } /** @@ -96,59 +94,43 @@ public class TABLESWITCH extends Select { public void dump(DataOutputStream out) throws IOException { super.dump(out); - int low = (match_length > 0)? match[0] : 0; + int low = (matchLength > 0)? match[0] : 0; out.writeInt(low); - int high = (match_length > 0)? match[match_length - 1] : 0; + int high = (matchLength > 0)? match[matchLength - 1] : 0; out.writeInt(high); // See aj bug pr104720 // if (match_length==0) out.writeInt(0); // following the switch you need to supply "HIGH-LOW+1" entries - for(int i=0; i < match_length; i++) // jump offsets + for(int i=0; i < matchLength; i++) // jump offsets out.writeInt(indices[i] = getTargetOffset(targets[i])); } /** * Read needed data (e.g. index) from file. */ - protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException + public TABLESWITCH(ByteSequence bytes) throws IOException { - super.initFromFile(bytes, wide); + super(Constants.TABLESWITCH,bytes); int low = bytes.readInt(); int high = bytes.readInt(); - match_length = high - low + 1; - fixed_length = (short)(13 + match_length * 4); - length = (short)(fixed_length + padding); + matchLength = high - low + 1; + fixedLength = (short)(13 + matchLength * 4); + length = (short)(fixedLength + padding); - match = new int[match_length]; - indices = new int[match_length]; - targets = new InstructionHandle[match_length]; + match = new int[matchLength]; + indices = new int[matchLength]; + targets = new InstructionHandle[matchLength]; for(int i=low; i <= high; i++) match[i - low] = i; - for(int i=0; i < match_length; i++) { + for(int i=0; i < matchLength; i++) { indices[i] = bytes.readInt(); } } - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept(Visitor v) { - v.visitVariableLengthInstruction(this); - v.visitStackProducer(this); - v.visitBranchInstruction(this); - v.visitSelect(this); - v.visitTABLESWITCH(this); - } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/Tag.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/Tag.java index 3220dd6d9..15b39473a 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/Tag.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/Tag.java @@ -11,11 +11,11 @@ * Andy Clement pushed down into bcel module * ******************************************************************/ - package org.aspectj.apache.bcel.generic; - -/** A tag is an instruction-targeter that doesn't bother remembering its target(s) */ +/** + * A tag is an instruction-targeter that does not remember its target + */ public abstract class Tag implements InstructionTargeter, Cloneable { public Tag() { @@ -26,10 +26,11 @@ public abstract class Tag implements InstructionTargeter, Cloneable { return false; } - public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { - old_ih.removeTargeter(this); - if (new_ih != null) - new_ih.addTargeter(this); + public void updateTarget(InstructionHandle oldHandle, InstructionHandle newHandle) { + oldHandle.removeTargeter(this); + if (newHandle != null) { + newHandle.addTargeter(this); + } } public Tag copy() { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/TargetLostException.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/TargetLostException.java index e72394da4..3a195705c 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/TargetLostException.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/TargetLostException.java @@ -82,9 +82,10 @@ package org.aspectj.apache.bcel.generic; * @see InstructionHandle * @see InstructionList * @see InstructionTargeter - * @version $Id: TargetLostException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: TargetLostException.java,v 1.3 2008/05/28 23:52:55 aclement Exp $ * @author M. Dahm */ +// OPTIMIZE make unchecked, or get rid of it! public final class TargetLostException extends Exception { private InstructionHandle[] targets; diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/Type.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/Type.java index 7ea02cb45..efb930059 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/Type.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/Type.java @@ -65,7 +65,7 @@ import org.aspectj.apache.bcel.classfile.Utility; * Abstract super class for all possible java types, namely basic types * such as int, object types like String and array types, e.g. int[] * - * @version $Id: Type.java,v 1.7 2006/07/19 12:06:17 aclement Exp $ + * @version $Id: Type.java,v 1.8 2008/05/28 23:52:56 aclement Exp $ * @author M. Dahm * * modified: @@ -113,10 +113,12 @@ public abstract class Type implements java.io.Serializable { */ public int getSize() { switch(type) { - case Constants.T_DOUBLE: - case Constants.T_LONG: return 2; - case Constants.T_VOID: return 0; - default: return 1; + case Constants.T_DOUBLE: case Constants.T_LONG: + return 2; + case Constants.T_VOID: + return 0; + default: + return 1; } } @@ -139,24 +141,19 @@ public abstract class Type implements java.io.Serializable { public static String getMethodSignature(Type return_type, Type[] arg_types) { StringBuffer buf = new StringBuffer("("); int length = (arg_types == null)? 0 : arg_types.length; - - for(int i=0; i < length; i++) + for(int i=0; i < length; i++) { buf.append(arg_types[i].getSignature()); + } buf.append(')'); buf.append(return_type.getSignature()); - return buf.toString(); } - - // private static int consumed_chars=0; // Remember position in string, see getArgumentTypes - public static final Type getType(String signature) { TypeHolder th = getTypeInternal(signature); return th.getType(); } - /** * Convert signature to a Type object. * @param signature signature string such as Ljava/lang/String; @@ -224,6 +221,7 @@ public abstract class Type implements java.io.Serializable { * @param signature signature string such as (Ljava/lang/String;)V * @return array of argument types */ + // OPTIMIZE crap impl public static Type[] getArgumentTypes(String signature) { ArrayList vec = new ArrayList(); int index; diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/TypedInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/TypedInstruction.java deleted file mode 100644 index 7867831c3..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/TypedInstruction.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Get the type associated with an instruction, int for ILOAD, or the type - * of the field of a PUTFIELD instruction, e.g.. - * - * @version $Id: TypedInstruction.java,v 1.6 2008/04/25 17:58:21 aclement Exp $ - * @author M. Dahm - */ -public interface TypedInstruction { - public Type getType(ConstantPoolGen cpg); -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/UnconditionalBranch.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/UnconditionalBranch.java deleted file mode 100644 index e457ac691..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/UnconditionalBranch.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denotes an instruction to perform an unconditional branch, i.e., GOTO, JSR. - * - * @version $Id: UnconditionalBranch.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - - * @see GOTO - * @see JSR - */ -public interface UnconditionalBranch {} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/VariableLengthInstruction.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/VariableLengthInstruction.java deleted file mode 100644 index 34e7b03b1..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/VariableLengthInstruction.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Denotes an instruction to be a variable length instruction, such as - * GOTO, JSR, LOOKUPSWITCH and TABLESWITCH. - * - * @version $Id: VariableLengthInstruction.java,v 1.6 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - - * @see GOTO - * @see JSR - * @see LOOKUPSWITCH - * @see TABLESWITCH - */ -public interface VariableLengthInstruction {} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/Visitor.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/Visitor.java deleted file mode 100644 index 91024133e..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/Visitor.java +++ /dev/null @@ -1,247 +0,0 @@ -package org.aspectj.apache.bcel.generic; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -/** - * Interface implementing the Visitor pattern programming style. - * I.e., a class that implements this interface can handle all types of - * instructions with the properly typed methods just by calling the accept() - * method. - * - * @version $Id: Visitor.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ - * @author M. Dahm - */ -public interface Visitor { - public void visitStackInstruction(StackInstruction obj); - public void visitLocalVariableInstruction(LocalVariableInstruction obj); - public void visitBranchInstruction(BranchInstruction obj); - public void visitLoadClass(LoadClass obj); - public void visitFieldInstruction(FieldInstruction obj); - public void visitIfInstruction(IfInstruction obj); - public void visitConversionInstruction(ConversionInstruction obj); - public void visitPopInstruction(PopInstruction obj); - public void visitStoreInstruction(StoreInstruction obj); - public void visitTypedInstruction(TypedInstruction obj); - public void visitSelect(Select obj); - public void visitJsrInstruction(JsrInstruction obj); - public void visitGotoInstruction(GotoInstruction obj); - public void visitUnconditionalBranch(UnconditionalBranch obj); - public void visitPushInstruction(PushInstruction obj); - public void visitArithmeticInstruction(ArithmeticInstruction obj); - public void visitCPInstruction(CPInstruction obj); - public void visitInvokeInstruction(InvokeInstruction obj); - public void visitArrayInstruction(ArrayInstruction obj); - public void visitAllocationInstruction(AllocationInstruction obj); - public void visitReturnInstruction(ReturnInstruction obj); - public void visitFieldOrMethod(FieldOrMethod obj); - public void visitConstantPushInstruction(ConstantPushInstruction obj); - public void visitExceptionThrower(ExceptionThrower obj); - public void visitLoadInstruction(LoadInstruction obj); - public void visitVariableLengthInstruction(VariableLengthInstruction obj); - public void visitStackProducer(StackProducer obj); - public void visitStackConsumer(StackConsumer obj); - public void visitACONST_NULL(ACONST_NULL obj); - public void visitGETSTATIC(GETSTATIC obj); - public void visitIF_ICMPLT(IF_ICMPLT obj); - public void visitMONITOREXIT(MONITOREXIT obj); - public void visitIFLT(IFLT obj); - public void visitLSTORE(LSTORE obj); - public void visitPOP2(POP2 obj); - public void visitBASTORE(BASTORE obj); - public void visitISTORE(ISTORE obj); - public void visitCHECKCAST(CHECKCAST obj); - public void visitFCMPG(FCMPG obj); - public void visitI2F(I2F obj); - public void visitATHROW(ATHROW obj); - public void visitDCMPL(DCMPL obj); - public void visitARRAYLENGTH(ARRAYLENGTH obj); - public void visitDUP(DUP obj); - public void visitINVOKESTATIC(INVOKESTATIC obj); - public void visitLCONST(LCONST obj); - public void visitDREM(DREM obj); - public void visitIFGE(IFGE obj); - public void visitCALOAD(CALOAD obj); - public void visitLASTORE(LASTORE obj); - public void visitI2D(I2D obj); - public void visitDADD(DADD obj); - public void visitINVOKESPECIAL(INVOKESPECIAL obj); - public void visitIAND(IAND obj); - public void visitPUTFIELD(PUTFIELD obj); - public void visitILOAD(ILOAD obj); - public void visitDLOAD(DLOAD obj); - public void visitDCONST(DCONST obj); - public void visitNEW(NEW obj); - public void visitIFNULL(IFNULL obj); - public void visitLSUB(LSUB obj); - public void visitL2I(L2I obj); - public void visitISHR(ISHR obj); - public void visitTABLESWITCH(TABLESWITCH obj); - public void visitIINC(IINC obj); - public void visitDRETURN(DRETURN obj); - public void visitFSTORE(FSTORE obj); - public void visitDASTORE(DASTORE obj); - public void visitIALOAD(IALOAD obj); - public void visitDDIV(DDIV obj); - public void visitIF_ICMPGE(IF_ICMPGE obj); - public void visitLAND(LAND obj); - public void visitIDIV(IDIV obj); - public void visitLOR(LOR obj); - public void visitCASTORE(CASTORE obj); - public void visitFREM(FREM obj); - public void visitLDC(LDC obj); - public void visitBIPUSH(BIPUSH obj); - public void visitDSTORE(DSTORE obj); - public void visitF2L(F2L obj); - public void visitFMUL(FMUL obj); - public void visitLLOAD(LLOAD obj); - public void visitJSR(JSR obj); - public void visitFSUB(FSUB obj); - public void visitSASTORE(SASTORE obj); - public void visitALOAD(ALOAD obj); - public void visitDUP2_X2(DUP2_X2 obj); - public void visitRETURN(RETURN obj); - public void visitDALOAD(DALOAD obj); - public void visitSIPUSH(SIPUSH obj); - public void visitDSUB(DSUB obj); - public void visitL2F(L2F obj); - public void visitIF_ICMPGT(IF_ICMPGT obj); - public void visitF2D(F2D obj); - public void visitI2L(I2L obj); - public void visitIF_ACMPNE(IF_ACMPNE obj); - public void visitPOP(POP obj); - public void visitI2S(I2S obj); - public void visitIFEQ(IFEQ obj); - public void visitSWAP(SWAP obj); - public void visitIOR(IOR obj); - public void visitIREM(IREM obj); - public void visitIASTORE(IASTORE obj); - public void visitNEWARRAY(NEWARRAY obj); - public void visitINVOKEINTERFACE(INVOKEINTERFACE obj); - public void visitINEG(INEG obj); - public void visitLCMP(LCMP obj); - public void visitJSR_W(JSR_W obj); - public void visitMULTIANEWARRAY(MULTIANEWARRAY obj); - public void visitDUP_X2(DUP_X2 obj); - public void visitSALOAD(SALOAD obj); - public void visitIFNONNULL(IFNONNULL obj); - public void visitDMUL(DMUL obj); - public void visitIFNE(IFNE obj); - public void visitIF_ICMPLE(IF_ICMPLE obj); - public void visitLDC2_W(LDC2_W obj); - public void visitGETFIELD(GETFIELD obj); - public void visitLADD(LADD obj); - public void visitNOP(NOP obj); - public void visitFALOAD(FALOAD obj); - public void visitINSTANCEOF(INSTANCEOF obj); - public void visitIFLE(IFLE obj); - public void visitLXOR(LXOR obj); - public void visitLRETURN(LRETURN obj); - public void visitFCONST(FCONST obj); - public void visitIUSHR(IUSHR obj); - public void visitBALOAD(BALOAD obj); - public void visitDUP2(DUP2 obj); - public void visitIF_ACMPEQ(IF_ACMPEQ obj); - public void visitIMPDEP1(IMPDEP1 obj); - public void visitMONITORENTER(MONITORENTER obj); - public void visitLSHL(LSHL obj); - public void visitDCMPG(DCMPG obj); - public void visitD2L(D2L obj); - public void visitIMPDEP2(IMPDEP2 obj); - public void visitL2D(L2D obj); - public void visitRET(RET obj); - public void visitIFGT(IFGT obj); - public void visitIXOR(IXOR obj); - public void visitINVOKEVIRTUAL(INVOKEVIRTUAL obj); - public void visitFASTORE(FASTORE obj); - public void visitIRETURN(IRETURN obj); - public void visitIF_ICMPNE(IF_ICMPNE obj); - public void visitFLOAD(FLOAD obj); - public void visitLDIV(LDIV obj); - public void visitPUTSTATIC(PUTSTATIC obj); - public void visitAALOAD(AALOAD obj); - public void visitD2I(D2I obj); - public void visitIF_ICMPEQ(IF_ICMPEQ obj); - public void visitAASTORE(AASTORE obj); - public void visitARETURN(ARETURN obj); - public void visitDUP2_X1(DUP2_X1 obj); - public void visitFNEG(FNEG obj); - public void visitGOTO_W(GOTO_W obj); - public void visitD2F(D2F obj); - public void visitGOTO(GOTO obj); - public void visitISUB(ISUB obj); - public void visitF2I(F2I obj); - public void visitDNEG(DNEG obj); - public void visitICONST(ICONST obj); - public void visitFDIV(FDIV obj); - public void visitI2B(I2B obj); - public void visitLNEG(LNEG obj); - public void visitLREM(LREM obj); - public void visitIMUL(IMUL obj); - public void visitIADD(IADD obj); - public void visitLSHR(LSHR obj); - public void visitLOOKUPSWITCH(LOOKUPSWITCH obj); - public void visitDUP_X1(DUP_X1 obj); - public void visitFCMPL(FCMPL obj); - public void visitI2C(I2C obj); - public void visitLMUL(LMUL obj); - public void visitLUSHR(LUSHR obj); - public void visitISHL(ISHL obj); - public void visitLALOAD(LALOAD obj); - public void visitASTORE(ASTORE obj); - public void visitANEWARRAY(ANEWARRAY obj); - public void visitFRETURN(FRETURN obj); - public void visitFADD(FADD obj); - public void visitBREAKPOINT(BREAKPOINT obj); -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ArrayElementValueGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ArrayElementValueGen.java deleted file mode 100644 index e7d216655..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ArrayElementValueGen.java +++ /dev/null @@ -1,100 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2004 IBM - * 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 - initial implementation {date} - * ******************************************************************/ - -package org.aspectj.apache.bcel.generic.annotation; - -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.aspectj.apache.bcel.classfile.annotation.ArrayElementValue; -import org.aspectj.apache.bcel.classfile.annotation.ElementValue; -import org.aspectj.apache.bcel.generic.ConstantPoolGen; - - -public class ArrayElementValueGen extends ElementValueGen { - - // J5TODO: Should we make this an array or a list? A list would be easier to modify ... - private List /*ElementValueGen*/ evalues; - - public ArrayElementValueGen(ConstantPoolGen cp) { - super(ARRAY,cp); - evalues = new ArrayList(); - } - - public ArrayElementValueGen(int type, ElementValueGen[] datums, ConstantPoolGen cpool) { - super(type,cpool); - if (type != ARRAY) - throw new RuntimeException("Only element values of type array can be built with this ctor"); - this.evalues = new ArrayList(); - for (int i = 0; i < datums.length; i++) { - evalues.add(datums[i]); - } - } - - /** - * Return immutable variant of this ArrayElementValueGen - */ - public ElementValue getElementValue() { - ElementValue[] immutableData = new ElementValue[evalues.size()]; - int i =0; - for (Iterator iter = evalues.iterator(); iter.hasNext();) { - ElementValueGen element = (ElementValueGen) iter.next(); - immutableData[i++] = element.getElementValue(); - } - return new ArrayElementValue(type,immutableData,cpGen.getConstantPool()); - } - - /** - * @param value - * @param cpool - */ - public ArrayElementValueGen(ArrayElementValue value, ConstantPoolGen cpool,boolean copyPoolEntries) { - super(ARRAY,cpool); - evalues = new ArrayList(); - ElementValue[] in = value.getElementValuesArray(); - for (int i = 0; i < in.length; i++) { - evalues.add(ElementValueGen.copy(in[i],cpool,copyPoolEntries)); - } - } - - public void dump(DataOutputStream dos) throws IOException { - dos.writeByte(type); // u1 type of value (ARRAY == '[') - dos.writeShort(evalues.size()); - for (Iterator iter = evalues.iterator(); iter.hasNext();) { - ElementValueGen element = (ElementValueGen) iter.next(); - element.dump(dos); - } - } - - public String stringifyValue() { - StringBuffer sb = new StringBuffer(); - sb.append("["); - for (Iterator iter = evalues.iterator(); iter.hasNext();) { - ElementValueGen element = (ElementValueGen) iter.next(); - sb.append(element.stringifyValue()); - if (iter.hasNext()) sb.append(","); - } - sb.append("]"); - return sb.toString(); - } - - public List getElementValues() { return evalues;} - public int getElementValuesSize() { return evalues.size();} - - public void addElement(ElementValueGen gen) { - evalues.add(gen); - } - -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/package.html b/bcel-builder/src/org/aspectj/apache/bcel/generic/package.html deleted file mode 100644 index 961290d83..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/package.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - -

          -This package contains the "generic" part of the -Byte Code Engineering -Library, i.e., classes to dynamically modify class objects and -byte code instructions. -

          - - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/package.html b/bcel-builder/src/org/aspectj/apache/bcel/package.html deleted file mode 100644 index 5af36c65a..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/package.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - -

          -This package contains basic classes for the -Byte Code Engineering Library - and constants defined by the - - JVM specification. -

          - - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/AttributeHTML.java b/bcel-builder/src/org/aspectj/apache/bcel/util/AttributeHTML.java deleted file mode 100644 index e29b89888..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/AttributeHTML.java +++ /dev/null @@ -1,272 +0,0 @@ -package org.aspectj.apache.bcel.util; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; - -import org.aspectj.apache.bcel.classfile.Attribute; -import org.aspectj.apache.bcel.classfile.Code; -import org.aspectj.apache.bcel.classfile.CodeException; -import org.aspectj.apache.bcel.classfile.ConstantPool; -import org.aspectj.apache.bcel.classfile.ConstantUtf8; -import org.aspectj.apache.bcel.classfile.ConstantValue; -import org.aspectj.apache.bcel.classfile.ExceptionTable; -import org.aspectj.apache.bcel.classfile.InnerClass; -import org.aspectj.apache.bcel.classfile.InnerClasses; -import org.aspectj.apache.bcel.classfile.LineNumber; -import org.aspectj.apache.bcel.classfile.LineNumberTable; -import org.aspectj.apache.bcel.classfile.LocalVariable; -import org.aspectj.apache.bcel.classfile.LocalVariableTable; -import org.aspectj.apache.bcel.classfile.SourceFile; -import org.aspectj.apache.bcel.classfile.Utility; - -/** - * Convert found attributes into HTML file. - * - * @version $Id: AttributeHTML.java,v 1.7 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - * - */ -final class AttributeHTML implements org.aspectj.apache.bcel.Constants { - private String class_name; // name of current class - private PrintWriter file; // file to write to - private int attr_count = 0; - private ConstantHTML constant_html; - private ConstantPool constant_pool; - - AttributeHTML(String dir, String class_name, ConstantPool constant_pool, - ConstantHTML constant_html) throws IOException - { - this.class_name = class_name; - this.constant_pool = constant_pool; - this.constant_html = constant_html; - - file = new PrintWriter(new FileOutputStream(dir + class_name + "_attributes.html")); - file.println(""); - } - - private final String codeLink(int link, int method_number) { - return "" + - link + ""; - } - - final void close() { - file.println("
          "); - file.close(); - } - - final void writeAttribute(Attribute attribute, String anchor) throws IOException { - writeAttribute(attribute, anchor, 0); - } - - final void writeAttribute(Attribute attribute, String anchor, int method_number) throws IOException { - byte tag = attribute.getTag(); - int index; - - if(tag == ATTR_UNKNOWN) // Don't know what to do about this one - return; - - attr_count++; // Increment number of attributes found so far - - if(attr_count % 2 == 0) - file.print(""); - else - file.print(""); - - file.println("

          " + attr_count + " " + ATTRIBUTE_NAMES[tag] + "

          "); - - /* Handle different attributes - */ - switch(tag) { - case ATTR_CODE: - Code c = (Code)attribute; - - // Some directly printable values - file.print("
          • Maximum stack size = " + c.getMaxStack() + - "
          • \n
          • Number of local variables = " + - c.getMaxLocals() + "
          • \n
          • Byte code
          \n"); - - // Get handled exceptions and list them - CodeException[] ce = c.getExceptionTable(); - int len = ce.length; - - if(len > 0) { - file.print("

          Exceptions handled

            "); - - for(int i=0; i < len; i++) { - int catch_type = ce[i].getCatchType(); // Index in constant pool - - file.print("
          • "); - - if(catch_type != 0) - file.print(constant_html.referenceConstant(catch_type)); // Create Link to _cp.html - else - file.print("Any Exception"); - - file.print("
            (Ranging from lines " + codeLink(ce[i].getStartPC(), method_number) + - " to " + codeLink(ce[i].getEndPC(), method_number) + ", handled at line " + - codeLink(ce[i].getHandlerPC(), method_number) + ")
          • "); - } - file.print("
          "); - } - break; - - case ATTR_CONSTANT_VALUE: - index = ((ConstantValue)attribute).getConstantValueIndex(); - - // Reference _cp.html - file.print("\n"); - break; - - case ATTR_SOURCE_FILE: - index = ((SourceFile)attribute).getSourceFileIndex(); - - // Reference _cp.html - file.print("\n"); - break; - - case ATTR_EXCEPTIONS: - // List thrown exceptions - int[] indices = ((ExceptionTable)attribute).getExceptionIndexTable(); - - file.print("\n"); - break; - - case ATTR_LINE_NUMBER_TABLE: - LineNumber[] line_numbers =((LineNumberTable)attribute).getLineNumberTable(); - - // List line number pairs - file.print("

          "); - - for(int i=0; i < line_numbers.length; i++) { - file.print("(" + line_numbers[i].getStartPC() + ", " + line_numbers[i].getLineNumber() + ")"); - - if(i < line_numbers.length - 1) - file.print(", "); // breakable - } - break; - - case ATTR_LOCAL_VARIABLE_TABLE: - LocalVariable[] vars = ((LocalVariableTable)attribute).getLocalVariableTable(); - - // List name, range and type - file.print("

            "); - - for(int i=0; i < vars.length; i++) { - index = vars[i].getSignatureIndex(); - String signature = ((ConstantUtf8)constant_pool.getConstant(index, CONSTANT_Utf8)).getBytes(); - signature = Utility.signatureToString(signature, false); - int start = vars[i].getStartPC(); - int end = (start + vars[i].getLength()); - - file.println("
          • " + Class2HTML.referenceType(signature) + - " " + vars[i].getName() + " in slot %" + vars[i].getIndex() + - "
            Valid from lines " + - "" + - start + " to " + - "" + - end + "
          • "); - } - file.print("
          \n"); - - break; - - case ATTR_INNER_CLASSES: - InnerClass[] classes = ((InnerClasses)attribute).getInnerClasses(); - - // List inner classes - file.print("
            "); - - for(int i=0; i < classes.length; i++) { - String name, access; - - index = classes[i].getInnerNameIndex(); - if(index > 0) - name =((ConstantUtf8)constant_pool.getConstant(index, CONSTANT_Utf8)).getBytes(); - else - name = "<anonymous>"; - - access = Utility.accessToString(classes[i].getInnerAccessFlags()); - - file.print("
          • " + access + " "+ - constant_html.referenceConstant(classes[i].getInnerClassIndex()) + - " in class " + - constant_html.referenceConstant(classes[i].getOuterClassIndex()) + - " named " + name + "
          • \n"); - } - - file.print("
          \n"); - break; - - default: // Such as Unknown attribute or Deprecated - file.print("

          " + attribute.toString()); - } - - file.println(""); - file.flush(); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/ByteSequence.java b/bcel-builder/src/org/aspectj/apache/bcel/util/ByteSequence.java index 58b21e82d..072a7ba52 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/ByteSequence.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/util/ByteSequence.java @@ -60,7 +60,7 @@ import java.io.*; * via the `readByte()' method. This is used to implement a wrapper for the * Java byte code stream to gain some more readability. * - * @version $Id: ByteSequence.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: ByteSequence.java,v 1.3 2008/05/28 23:52:53 aclement Exp $ * @author M. Dahm */ public final class ByteSequence extends DataInputStream { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/Class2HTML.java b/bcel-builder/src/org/aspectj/apache/bcel/util/Class2HTML.java deleted file mode 100644 index 16929ef34..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/Class2HTML.java +++ /dev/null @@ -1,270 +0,0 @@ -package org.aspectj.apache.bcel.util; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; - -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.classfile.Attribute; -import org.aspectj.apache.bcel.classfile.ClassParser; -import org.aspectj.apache.bcel.classfile.ConstantPool; -import org.aspectj.apache.bcel.classfile.JavaClass; -import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.classfile.Utility; - -/** - * Read class file(s) and convert them into HTML files. - * - * Given a JavaClass object "class" that is in package "package" five files - * will be created in the specified directory. - * - *

            - *
          1. "package"."class".html as the main file which defines the frames for - * the following subfiles. - *
          2. "package"."class"_attributes.html contains all (known) attributes found in the file - *
          3. "package"."class"_cp.html contains the constant pool - *
          4. "package"."class"_code.html contains the byte code - *
          5. "package"."class"_methods.html contains references to all methods and fields of the class - *
          - * - * All subfiles reference each other appropiately, e.g. clicking on a - * method in the Method's frame will jump to the appropiate method in - * the Code frame. - * - * @version $Id: Class2HTML.java,v 1.8 2008/04/25 17:58:27 aclement Exp $ - * @author M. Dahm -*/ -public class Class2HTML implements Constants -{ - private JavaClass java_class; // current class object - private String dir; - - private static String class_package; // name of package, unclean to make it static, but ... - private static String class_name; // name of current class, dito - private static ConstantPool constant_pool; - - /** - * Write contents of the given JavaClass into HTML files. - * - * @param java_class The class to write - * @param dir The directory to put the files in - */ - public Class2HTML(JavaClass java_class, String dir) throws IOException { - Method[] methods = java_class.getMethods(); - - this.java_class = java_class; - this.dir = dir; - class_name = java_class.getClassName(); // Remember full name - constant_pool = java_class.getConstantPool(); - - // Get package name by tacking off everything after the last `.' - int index = class_name.lastIndexOf('.'); - if(index > -1) - class_package = class_name.substring(0, index); - else - class_package = ""; // default package - - ConstantHTML constant_html = new ConstantHTML(dir, class_name, class_package, methods, - constant_pool); - - /* Attributes can't be written in one step, so we just open a file - * which will be written consequently. - */ - AttributeHTML attribute_html = new AttributeHTML(dir, class_name, constant_pool, constant_html); - - MethodHTML method_html = new MethodHTML(dir, class_name, methods, java_class.getFields(), - constant_html, attribute_html); - // Write main file (with frames, yuk) - writeMainHTML(attribute_html); - new CodeHTML(dir, class_name, methods, constant_pool, constant_html); - attribute_html.close(); - } - - public static void main(String argv[]) - { - String[] file_name = new String[argv.length]; - int files=0; - ClassParser parser=null; - JavaClass java_class=null; - String zip_file = null; - char sep = System.getProperty("file.separator").toCharArray()[0]; - String dir = "." + sep; // Where to store HTML files - - try { - /* Parse command line arguments. - */ - for(int i=0; i < argv.length; i++) { - if(argv[i].charAt(0) == '-') { // command line switch - if(argv[i].equals("-d")) { // Specify target directory, default `.´ - dir = argv[++i]; - - if(!dir.endsWith("" + sep)) - dir = dir + sep; - - new File(dir).mkdirs(); // Create target directory if necessary - } - else if(argv[i].equals("-zip")) - zip_file = argv[++i]; - else - System.out.println("Unknown option " + argv[i]); - } - else // add file name to list */ - file_name[files++] = argv[i]; - } - - if(files == 0) - System.err.println("Class2HTML: No input files specified."); - else { // Loop through files ... - for(int i=0; i < files; i++) { - System.out.print("Processing " + file_name[i] + "..."); - if(zip_file == null) - parser = new ClassParser(file_name[i]); // Create parser object from file - else - parser = new ClassParser(zip_file, file_name[i]); // Create parser object from zip file - - java_class = parser.parse(); - new Class2HTML(java_class, dir); - System.out.println("Done."); - } - } - } catch(Exception e) { - System.out.println(e); - e.printStackTrace(System.out); - } - } - - /** - * Utility method that converts a class reference in the constant pool, - * i.e., an index to a string. - */ - static String referenceClass(int index) { - String str = constant_pool.getConstantString(index, CONSTANT_Class); - str = Utility.compactClassName(str); - str = Utility.compactClassName(str, class_package + ".", true); - - return "" + str + ""; - } - - static final String referenceType(String type) { - String short_type = Utility.compactClassName(type); - short_type = Utility.compactClassName(short_type, class_package + ".", true); - - int index = type.indexOf('['); // Type is an array? - if(index > -1) - type = type.substring(0, index); // Tack of the `[' - - // test for basic type - if(type.equals("int") || type.equals("short") || type.equals("boolean") || type.equals("void") || - type.equals("char") || type.equals("byte") || type.equals("long") || type.equals("double") || - type.equals("float")) - return "" + type + ""; - else - return "" + short_type + ""; - } - - static String toHTML(String str) { - StringBuffer buf = new StringBuffer(); - - try { // Filter any characters HTML doesn't like such as < and > in particular - for(int i=0; i < str.length(); i++) { - char ch; - - switch(ch=str.charAt(i)) { - case '<': buf.append("<"); break; - case '>': buf.append(">"); break; - case '\n': buf.append("\\n"); break; - case '\r': buf.append("\\r"); break; - default: buf.append(ch); - } - } - } catch(StringIndexOutOfBoundsException e) {} // Never occurs - - return buf.toString(); - } - - private void writeMainHTML(AttributeHTML attribute_html) throws IOException { - PrintWriter file = new PrintWriter(new FileOutputStream(dir + class_name + ".html")); - Attribute[] attributes = java_class.getAttributes(); - - file.println("\n" + "Documentation for " + class_name + "" + - "\n" + - "\n" + - "\n" + - - "\n" + - "\n" + - "\n" + - - "\n" + - "\n" + - "\n" + - "" - ); - - file.close(); - - for(int i=0; i < attributes.length; i++) - attribute_html.writeAttribute(attributes[i], "class" + i); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassLoader.java b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassLoader.java deleted file mode 100644 index 5eed50042..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassLoader.java +++ /dev/null @@ -1,227 +0,0 @@ -package org.aspectj.apache.bcel.util; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import java.io.ByteArrayInputStream; -import java.util.Hashtable; - -import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.classfile.ClassParser; -import org.aspectj.apache.bcel.classfile.ConstantClass; -import org.aspectj.apache.bcel.classfile.ConstantPool; -import org.aspectj.apache.bcel.classfile.ConstantUtf8; -import org.aspectj.apache.bcel.classfile.JavaClass; -import org.aspectj.apache.bcel.classfile.Utility; - -/** - *

          Drop in replacement for the standard class loader of the JVM. You can use it - * in conjunction with the JavaWrapper to dynamically modify/create classes - * as they're requested.

          - * - *

          This class loader recognizes special requests in a distinct - * format, i.e., when the name of the requested class contains with - * "$$BCEL$$" it calls the createClass() method with that name - * (everything bevor the $$BCEL$$ is considered to be the package - * name. You can subclass the class loader and override that - * method. "Normal" classes class can be modified by overriding the - * modifyClass() method which is called just before defineClass().

          - * - *

          There may be a number of packages where you have to use the default - * class loader (which may also be faster). You can define the set of packages - * where to use the system class loader in the constructor. The default value contains - * "java.", "sun.", "javax."

          - * - * @version $Id: ClassLoader.java,v 1.7 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - * @see JavaWrapper - * @see ClassPath - */ -public class ClassLoader extends java.lang.ClassLoader { - private Hashtable classes = new Hashtable(); // Hashtable is synchronized thus thread-safe - private String[] ignored_packages = { - "java.", "javax.", "sun." - }; - private Repository repository = SyntheticRepository.getInstance(); - private java.lang.ClassLoader deferTo = ClassLoader.getSystemClassLoader(); - - public ClassLoader() { - } - - public ClassLoader(java.lang.ClassLoader deferTo) { - this.deferTo = deferTo; - this.repository = new ClassLoaderRepository(deferTo); - } - - /** @param ignored_packages classes contained in these packages will be loaded - * with the system class loader - */ - public ClassLoader(String[] ignored_packages) { - addIgnoredPkgs(ignored_packages); - } - - public ClassLoader(java.lang.ClassLoader deferTo, String [] ignored_packages) { - this.deferTo = deferTo; - this.repository = new ClassLoaderRepository(deferTo); - - addIgnoredPkgs(ignored_packages); - } - - private void addIgnoredPkgs(String[] ignored_packages) { - String[] new_p = new String[ignored_packages.length + this.ignored_packages.length]; - - System.arraycopy(this.ignored_packages, 0, new_p, 0, this.ignored_packages.length); - System.arraycopy(ignored_packages, 0, new_p, this.ignored_packages.length, - ignored_packages.length); - - this.ignored_packages = new_p; - } - - protected Class loadClass(String class_name, boolean resolve) - throws ClassNotFoundException - { - Class cl = null; - - /* First try: lookup hash table. - */ - if((cl=(Class)classes.get(class_name)) == null) { - /* Second try: Load system class using system class loader. You better - * don't mess around with them. - */ - for(int i=0; i < ignored_packages.length; i++) { - if(class_name.startsWith(ignored_packages[i])) { - cl = deferTo.loadClass(class_name); - break; - } - } - - if(cl == null) { - JavaClass clazz = null; - - /* Third try: Special request? - */ - if(class_name.indexOf("$$BCEL$$") >= 0) - clazz = createClass(class_name); - else { // Fourth try: Load classes via repository - if ((clazz = repository.loadClass(class_name)) != null) { - clazz = modifyClass(clazz); - } - else - throw new ClassNotFoundException(class_name); - } - - if(clazz != null) { - byte[] bytes = clazz.getBytes(); - cl = defineClass(class_name, bytes, 0, bytes.length); - } else // Fourth try: Use default class loader - cl = Class.forName(class_name); - } - - if(resolve) - resolveClass(cl); - } - - classes.put(class_name, cl); - - return cl; - } - - /** Override this method if you want to alter a class before it gets actually - * loaded. Does nothing by default. - */ - protected JavaClass modifyClass(JavaClass clazz) { - return clazz; - } - - /** - * Override this method to create you own classes on the fly. The - * name contains the special token $$BCEL$$. Everything before that - * token is consddered to be a package name. You can encode you own - * arguments into the subsequent string. You must regard however not - * to use any "illegal" characters, i.e., characters that may not - * appear in a Java class name too
          - * - * The default implementation interprets the string as a encoded compressed - * Java class, unpacks and decodes it with the Utility.decode() method, and - * parses the resulting byte array and returns the resulting JavaClass object. - * - * @param class_name compressed byte code with "$$BCEL$$" in it - */ - protected JavaClass createClass(String class_name) { - int index = class_name.indexOf("$$BCEL$$"); - String real_name = class_name.substring(index + 8); - - JavaClass clazz = null; - try { - byte[] bytes = Utility.decode(real_name, true); - ClassParser parser = new ClassParser(new ByteArrayInputStream(bytes), "foo"); - - clazz = parser.parse(); - } catch(Throwable e) { - e.printStackTrace(); - return null; - } - - // Adapt the class name to the passed value - ConstantPool cp = clazz.getConstantPool(); - - ConstantClass cl = (ConstantClass)cp.getConstant(clazz.getClassNameIndex(), - Constants.CONSTANT_Class); - ConstantUtf8 name = (ConstantUtf8)cp.getConstant(cl.getNameIndex(), - Constants.CONSTANT_Utf8); - name.setBytes(class_name.replace('.', '/')); - - return clazz; - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassLoaderRepository.java b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassLoaderRepository.java index 74f3d47a2..f019bafc6 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassLoaderRepository.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassLoaderRepository.java @@ -80,7 +80,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; * * @see org.aspectj.apache.bcel.Repository * - * @version $Id: ClassLoaderRepository.java,v 1.10 2008/05/27 18:46:34 aclement Exp $ + * @version $Id: ClassLoaderRepository.java,v 1.11 2008/05/28 23:52:53 aclement Exp $ * @author M. Dahm * @author David Dixon-Peugh */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassPath.java b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassPath.java index ef9d1e5c3..447d0c50d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassPath.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassPath.java @@ -62,7 +62,7 @@ import java.io.*; * Responsible for loading (class) files from the CLASSPATH. Inspired by * sun.tools.ClassPath. * - * @version $Id: ClassPath.java,v 1.3 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: ClassPath.java,v 1.4 2008/05/28 23:52:53 aclement Exp $ * @author M. Dahm */ public class ClassPath implements Serializable { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassQueue.java b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassQueue.java index 2793fb450..ae91f305d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassQueue.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassQueue.java @@ -60,7 +60,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; * Utility class implementing a (typesafe) queue of JavaClass * objects. * - * @version $Id: ClassQueue.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: ClassQueue.java,v 1.3 2008/05/28 23:52:53 aclement Exp $ * @author M. Dahm * @see ClassVector */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassSet.java b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassSet.java deleted file mode 100644 index 1b4c0d6e0..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassSet.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.aspectj.apache.bcel.util; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import java.util.HashMap; -import java.util.Collection; -import org.aspectj.apache.bcel.classfile.JavaClass; - -/** - * Utility class implementing a (typesafe) set of JavaClass objects. - * Since JavaClass has no equals() method, the name of the class is - * used for comparison. - * - * @version $Id: ClassSet.java,v 1.6 2008/04/25 17:58:27 aclement Exp $ - * @author M. Dahm - * @see ClassStack -*/ -public class ClassSet implements java.io.Serializable { - private HashMap _map = new HashMap(); - - public boolean add(JavaClass clazz) { - boolean result = false; - - if(!_map.containsKey(clazz.getClassName())) { - result = true; - _map.put(clazz.getClassName(), clazz); - } - - return result; - } - - public void remove(JavaClass clazz) { _map.remove(clazz.getClassName()); } - public boolean empty() { return _map.isEmpty(); } - - public JavaClass[] toArray() { - Collection values = _map.values(); - JavaClass[] classes = new JavaClass[values.size()]; - values.toArray(classes); - return classes; - } - - public String[] getClassNames() { - return (String[])_map.keySet().toArray(new String[_map.keySet().size()]); - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassStack.java b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassStack.java deleted file mode 100644 index c32934eb1..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassStack.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.aspectj.apache.bcel.util; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -import java.util.Stack; -import org.aspectj.apache.bcel.classfile.JavaClass; - -/** - * Utility class implementing a (typesafe) stack of JavaClass objects. - * - * @version $Id: ClassStack.java,v 1.6 2008/04/25 17:58:27 aclement Exp $ - * @author M. Dahm - * @see Stack -*/ -public class ClassStack implements java.io.Serializable { - private Stack stack = new Stack(); - - public void push(JavaClass clazz) { stack.push(clazz); } - public JavaClass pop() { return (JavaClass)stack.pop(); } - public JavaClass top() { return (JavaClass)stack.peek(); } - public boolean empty() { return stack.empty(); } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassVector.java b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassVector.java index 1f73c9334..7667cd2dc 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassVector.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassVector.java @@ -60,7 +60,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; * Utility class implementing a (typesafe) collection of JavaClass * objects. Contains the most important methods of a Vector. * - * @version $Id: ClassVector.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: ClassVector.java,v 1.3 2008/05/28 23:52:53 aclement Exp $ * @author M. Dahm * @see ClassQueue */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/CodeHTML.java b/bcel-builder/src/org/aspectj/apache/bcel/util/CodeHTML.java deleted file mode 100644 index 658fe63cd..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/CodeHTML.java +++ /dev/null @@ -1,632 +0,0 @@ -package org.aspectj.apache.bcel.util; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.BitSet; - -import org.aspectj.apache.bcel.classfile.Attribute; -import org.aspectj.apache.bcel.classfile.Code; -import org.aspectj.apache.bcel.classfile.CodeException; -import org.aspectj.apache.bcel.classfile.ConstantFieldref; -import org.aspectj.apache.bcel.classfile.ConstantInterfaceMethodref; -import org.aspectj.apache.bcel.classfile.ConstantMethodref; -import org.aspectj.apache.bcel.classfile.ConstantNameAndType; -import org.aspectj.apache.bcel.classfile.ConstantPool; -import org.aspectj.apache.bcel.classfile.LocalVariable; -import org.aspectj.apache.bcel.classfile.LocalVariableTable; -import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.classfile.Utility; - -/** - * Convert code into HTML file. - * - * @version $Id: CodeHTML.java,v 1.7 2008/04/25 17:58:22 aclement Exp $ - * @author M. Dahm - * - */ -final class CodeHTML implements org.aspectj.apache.bcel.Constants { - private String class_name; // name of current class - private Method[] methods; // Methods to print - private PrintWriter file; // file to write to - private BitSet goto_set; - private ConstantPool constant_pool; - private ConstantHTML constant_html; - private static boolean wide=false; - - CodeHTML(String dir, String class_name, - Method[] methods, ConstantPool constant_pool, - ConstantHTML constant_html) throws IOException - { - this.class_name = class_name; - this.methods = methods; - this.constant_pool = constant_pool; - this.constant_html = constant_html; - - file = new PrintWriter(new FileOutputStream(dir + class_name + "_code.html")); - file.println(""); - - for(int i=0; i < methods.length; i++) - writeMethod(methods[i], i); - - file.println(""); - file.close(); - } - - /** - * Disassemble a stream of byte codes and return the - * string representation. - * - * @param stream data input stream - * @return String representation of byte code - */ - private final String codeToHTML(ByteSequence bytes, int method_number) - throws IOException - { - short opcode = (short)bytes.readUnsignedByte(); - StringBuffer buf; - String name, signature; - int default_offset=0, low, high; - int index, class_index, vindex, constant; - int[] jump_table; - int no_pad_bytes=0, offset; - - buf = new StringBuffer("" + OPCODE_NAMES[opcode] + ""); - - /* Special case: Skip (0-3) padding bytes, i.e., the - * following bytes are 4-byte-aligned - */ - if((opcode == TABLESWITCH) || (opcode == LOOKUPSWITCH)) { - int remainder = bytes.getIndex() % 4; - no_pad_bytes = (remainder == 0)? 0 : 4 - remainder; - - for(int i=0; i < no_pad_bytes; i++) - bytes.readByte(); - - // Both cases have a field default_offset in common - default_offset = bytes.readInt(); - } - - switch(opcode) { - case TABLESWITCH: - low = bytes.readInt(); - high = bytes.readInt(); - - offset = bytes.getIndex() - 12 - no_pad_bytes - 1; - default_offset += offset; - - buf.append(""); - - // Print switch indices in first row (and default) - jump_table = new int[high - low + 1]; - for(int i=0; i < jump_table.length; i++) { - jump_table[i] = offset + bytes.readInt(); - - buf.append(""); - } - buf.append("\n"); - - // Print target and default indices in second row - for(int i=0; i < jump_table.length; i++) - buf.append(""); - buf.append("\n
          " + (low + i) + "default
          " + jump_table[i] + "" + default_offset + "
          \n"); - - break; - - /* Lookup switch has variable length arguments. - */ - case LOOKUPSWITCH: - int npairs = bytes.readInt(); - offset = bytes.getIndex() - 8 - no_pad_bytes - 1; - jump_table = new int[npairs]; - default_offset += offset; - - buf.append(""); - - // Print switch indices in first row (and default) - for(int i=0; i < npairs; i++) { - int match = bytes.readInt(); - - jump_table[i] = offset + bytes.readInt(); - buf.append(""); - } - buf.append("\n"); - - // Print target and default indices in second row - for(int i=0; i < npairs; i++) - buf.append(""); - buf.append("\n
          " + match + "default
          " + jump_table[i] + "" + default_offset + "
          \n"); - break; - - /* Two address bytes + offset from start of byte stream form the - * jump target. - */ - case GOTO: case IFEQ: case IFGE: case IFGT: - case IFLE: case IFLT: - case IFNE: case IFNONNULL: case IFNULL: case IF_ACMPEQ: - case IF_ACMPNE: case IF_ICMPEQ: case IF_ICMPGE: case IF_ICMPGT: - case IF_ICMPLE: case IF_ICMPLT: case IF_ICMPNE: case JSR: - - index = (int)(bytes.getIndex() + bytes.readShort() - 1); - - buf.append("" + index + ""); - break; - - /* Same for 32-bit wide jumps - */ - case GOTO_W: case JSR_W: - int windex = bytes.getIndex() + bytes.readInt() - 1; - buf.append("" + - windex + ""); - break; - - /* Index byte references local variable (register) - */ - case ALOAD: case ASTORE: case DLOAD: case DSTORE: case FLOAD: - case FSTORE: case ILOAD: case ISTORE: case LLOAD: case LSTORE: - case RET: - if(wide) { - vindex = bytes.readShort(); - wide=false; // Clear flag - } - else - vindex = bytes.readUnsignedByte(); - - buf.append("%" + vindex); - break; - - /* - * Remember wide byte which is used to form a 16-bit address in the - * following instruction. Relies on that the method is called again with - * the following opcode. - */ - case WIDE: - wide = true; - buf.append("(wide)"); - break; - - /* Array of basic type. - */ - case NEWARRAY: - buf.append("" + TYPE_NAMES[bytes.readByte()] + ""); - break; - - /* Access object/class fields. - */ - case GETFIELD: case GETSTATIC: case PUTFIELD: case PUTSTATIC: - index = bytes.readShort(); - ConstantFieldref c1 = (ConstantFieldref)constant_pool.getConstant(index, CONSTANT_Fieldref); - - class_index = c1.getClassIndex(); - name = constant_pool.getConstantString(class_index, CONSTANT_Class); - name = Utility.compactClassName(name, false); - - index = c1.getNameAndTypeIndex(); - String field_name = constant_pool.constantToString(index, CONSTANT_NameAndType); - - if(name.equals(class_name)) { // Local field - buf.append("" + field_name + "\n"); - } - else - buf.append(constant_html.referenceConstant(class_index) + "." + field_name); - - break; - - /* Operands are references to classes in constant pool - */ - case CHECKCAST: case INSTANCEOF: case NEW: - index = bytes.readShort(); - buf.append(constant_html.referenceConstant(index)); - break; - - /* Operands are references to methods in constant pool - */ - case INVOKESPECIAL: case INVOKESTATIC: case INVOKEVIRTUAL: case INVOKEINTERFACE: - int m_index = bytes.readShort(); - String str; - - if(opcode == INVOKEINTERFACE) { // Special treatment needed - int nargs = bytes.readUnsignedByte(); // Redundant - int reserved = bytes.readUnsignedByte(); // Reserved - - ConstantInterfaceMethodref c=(ConstantInterfaceMethodref)constant_pool.getConstant(m_index, CONSTANT_InterfaceMethodref); - - class_index = c.getClassIndex(); - str = constant_pool.constantToString(c); - index = c.getNameAndTypeIndex(); - } - else { - ConstantMethodref c = (ConstantMethodref)constant_pool.getConstant(m_index, CONSTANT_Methodref); - class_index = c.getClassIndex(); - - str = constant_pool.constantToString(c); - index = c.getNameAndTypeIndex(); - } - - name = Class2HTML.referenceClass(class_index); - str = Class2HTML.toHTML(constant_pool.constantToString(constant_pool.getConstant(index, CONSTANT_NameAndType))); - - // Get signature, i.e., types - ConstantNameAndType c2 = (ConstantNameAndType)constant_pool. - getConstant(index, CONSTANT_NameAndType); - signature = constant_pool.constantToString(c2.getSignatureIndex(), - CONSTANT_Utf8); - String[] args = Utility.methodSignatureArgumentTypes(signature, false); - String type = Utility.methodSignatureReturnType(signature, false); - - buf.append(name + "." + str + "" + "("); - - // List arguments - for(int i=0; i < args.length; i++) { - buf.append(Class2HTML.referenceType(args[i])); - - if(i < args.length - 1) - buf.append(", "); - } - // Attach return type - buf.append("):" + Class2HTML.referenceType(type)); - - break; - - /* Operands are references to items in constant pool - */ - case LDC_W: case LDC2_W: - index = bytes.readShort(); - - buf.append("" + - Class2HTML.toHTML(constant_pool.constantToString(index, - constant_pool. - getConstant(index).getTag()))+ - ""); - break; - - case LDC: - index = bytes.readUnsignedByte(); - buf.append("" + - Class2HTML.toHTML(constant_pool.constantToString(index, - constant_pool. - getConstant(index).getTag()))+ - ""); - break; - - /* Array of references. - */ - case ANEWARRAY: - index = bytes.readShort(); - - buf.append(constant_html.referenceConstant(index)); - break; - - /* Multidimensional array of references. - */ - case MULTIANEWARRAY: - index = bytes.readShort(); - int dimensions = bytes.readByte(); - buf.append(constant_html.referenceConstant(index) + ":" + dimensions + "-dimensional"); - break; - - /* Increment local variable. - */ - case IINC: - if(wide) { - vindex = bytes.readShort(); - constant = bytes.readShort(); - wide = false; - } - else { - vindex = bytes.readUnsignedByte(); - constant = bytes.readByte(); - } - buf.append("%" + vindex + " " + constant); - break; - - default: - if(NO_OF_OPERANDS[opcode] > 0) { - for(int i=0; i < TYPE_OF_OPERANDS[opcode].length; i++) { - switch(TYPE_OF_OPERANDS[opcode][i]) { - case T_BYTE: - buf.append(bytes.readUnsignedByte()); - break; - - case T_SHORT: // Either branch or index - buf.append(bytes.readShort()); - break; - - case T_INT: - buf.append(bytes.readInt()); - break; - - default: // Never reached - System.err.println("Unreachable default case reached!"); - System.exit(-1); - } - buf.append(" "); - } - } - } - - buf.append(""); - return buf.toString(); - } - - /** - * Find all target addresses in code, so that they can be marked - * with <A NAME = ...>. Target addresses are kept in an BitSet object. - */ - private final void findGotos(ByteSequence bytes, Method method, Code code) - throws IOException - { - int index; - goto_set = new BitSet(bytes.available()); - int opcode; - - /* First get Code attribute from method and the exceptions handled - * (try .. catch) in this method. We only need the line number here. - */ - - if(code != null) { - CodeException[] ce = code.getExceptionTable(); - int len = ce.length; - - for(int i=0; i < len; i++) { - goto_set.set(ce[i].getStartPC()); - goto_set.set(ce[i].getEndPC()); - goto_set.set(ce[i].getHandlerPC()); - } - - // Look for local variables and their range - Attribute[] attributes = code.getAttributes(); - for(int i=0; i < attributes.length; i++) { - if(attributes[i].getTag() == ATTR_LOCAL_VARIABLE_TABLE) { - LocalVariable[] vars = ((LocalVariableTable)attributes[i]).getLocalVariableTable(); - - for(int j=0; j < vars.length; j++) { - int start = vars[j].getStartPC(); - int end = (int)(start + vars[j].getLength()); - goto_set.set(start); - goto_set.set(end); - } - break; - } - } - } - - // Get target addresses from GOTO, JSR, TABLESWITCH, etc. - for(int i=0; bytes.available() > 0; i++) { - opcode = bytes.readUnsignedByte(); - //System.out.println(OPCODE_NAMES[opcode]); - switch(opcode) { - case TABLESWITCH: case LOOKUPSWITCH: - //bytes.readByte(); // Skip already read byte - - int remainder = bytes.getIndex() % 4; - int no_pad_bytes = (remainder == 0)? 0 : 4 - remainder; - int default_offset, offset; - - for(int j=0; j < no_pad_bytes; j++) - bytes.readByte(); - - // Both cases have a field default_offset in common - default_offset = bytes.readInt(); - - if(opcode == TABLESWITCH) { - int low = bytes.readInt(); - int high = bytes.readInt(); - - offset = bytes.getIndex() - 12 - no_pad_bytes - 1; - default_offset += offset; - goto_set.set(default_offset); - - for(int j=0; j < (high - low + 1); j++) { - index = offset + bytes.readInt(); - goto_set.set(index); - } - } - else { // LOOKUPSWITCH - int npairs = bytes.readInt(); - - offset = bytes.getIndex() - 8 - no_pad_bytes - 1; - default_offset += offset; - goto_set.set(default_offset); - - for(int j=0; j < npairs; j++) { - int match = bytes.readInt(); - - index = offset + bytes.readInt(); - goto_set.set(index); - } - } - break; - - case GOTO: case IFEQ: case IFGE: case IFGT: - case IFLE: case IFLT: - case IFNE: case IFNONNULL: case IFNULL: case IF_ACMPEQ: - case IF_ACMPNE: case IF_ICMPEQ: case IF_ICMPGE: case IF_ICMPGT: - case IF_ICMPLE: case IF_ICMPLT: case IF_ICMPNE: case JSR: - //bytes.readByte(); // Skip already read byte - index = bytes.getIndex() + bytes.readShort() - 1; - - goto_set.set(index); - break; - - case GOTO_W: case JSR_W: - //bytes.readByte(); // Skip already read byte - index = bytes.getIndex() + bytes.readInt() - 1; - goto_set.set(index); - break; - - default: - bytes.unreadByte(); - codeToHTML(bytes, 0); // Ignore output - } - } - } - - /** - * Write a single method with the byte code associated with it. - */ - private void writeMethod(Method method, int method_number) - throws IOException - { - // Get raw signature - String signature = method.getSignature(); - // Get array of strings containing the argument types - String[] args = Utility.methodSignatureArgumentTypes(signature, false); - // Get return type string - String type = Utility.methodSignatureReturnType(signature, false); - // Get method name - String name = method.getName(); - String html_name = Class2HTML.toHTML(name); - // Get method's access flags - String access = Utility.accessToString(method.getAccessFlags()); - access = Utility.replace(access, " ", " "); - // Get the method's attributes, the Code Attribute in particular - Attribute[] attributes= method.getAttributes(); - - file.print("

          " + access + " " + - "" + Class2HTML.referenceType(type) + - " " + html_name + "("); - - for(int i=0; i < args.length; i++) { - file.print(Class2HTML.referenceType(args[i])); - if(i < args.length - 1) - file.print(", "); - } - - file.println(")

          "); - - Code c=null; - byte[] code=null; - - if(attributes.length > 0) { - file.print("

          Attributes

            \n"); - for(int i=0; i < attributes.length; i++) { - byte tag = attributes[i].getTag(); - - if(tag != ATTR_UNKNOWN) - file.print("
          • " + ATTRIBUTE_NAMES[tag] + "
          • \n"); - else - file.print("
          • " + attributes[i] + "
          • "); - - if(tag == ATTR_CODE) { - c = (Code)attributes[i]; - Attribute[] attributes2 = c.getAttributes(); - code = c.getCode(); - - file.print("
              "); - for(int j=0; j < attributes2.length; j++) { - tag = attributes2[j].getTag(); - file.print("
            • " + - ATTRIBUTE_NAMES[tag] + "
            • \n"); - - } - file.print("
            "); - } - } - file.println("
          "); - } - - if(code != null) { // No code, an abstract method, e.g. - //System.out.println(name + "\n" + Utility.codeToString(code, constant_pool, 0, -1)); - - // Print the byte code - ByteSequence stream = new ByteSequence(code); - stream.mark(stream.available()); - findGotos(stream, method, c); - stream.reset(); - - file.println("" + - ""); - - for(int i=0; stream.available() > 0; i++) { - int offset = stream.getIndex(); - String str = codeToHTML(stream, method_number); - String anchor = ""; - - /* Set an anchor mark if this line is targetted by a goto, jsr, etc. - * Defining an anchor for every line is very inefficient! - */ - if(goto_set.get(offset)) - anchor = ""; - - String anchor2; - if(stream.getIndex() == code.length) // last loop - anchor2 = "" + offset + ""; - else - anchor2 = "" + offset; - - file.println(""); - } - - // Mark last line, may be targetted from Attributes window - file.println(""); - file.println("
          Byte
          offset
          InstructionArgument
          " + anchor2 + "" + anchor + str + "
          "); - } - - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/ConstantHTML.java b/bcel-builder/src/org/aspectj/apache/bcel/util/ConstantHTML.java deleted file mode 100644 index 7e6afbaa5..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/ConstantHTML.java +++ /dev/null @@ -1,274 +0,0 @@ - -package org.aspectj.apache.bcel.util; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; - -import org.aspectj.apache.bcel.classfile.Constant; -import org.aspectj.apache.bcel.classfile.ConstantClass; -import org.aspectj.apache.bcel.classfile.ConstantFieldref; -import org.aspectj.apache.bcel.classfile.ConstantInterfaceMethodref; -import org.aspectj.apache.bcel.classfile.ConstantMethodref; -import org.aspectj.apache.bcel.classfile.ConstantNameAndType; -import org.aspectj.apache.bcel.classfile.ConstantPool; -import org.aspectj.apache.bcel.classfile.ConstantString; -import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.classfile.Utility; - -/** - * Convert constant pool into HTML file. - * - * @version $Id: ConstantHTML.java,v 1.7 2008/04/25 17:58:27 aclement Exp $ - * @author M. Dahm - * - */ -final class ConstantHTML implements org.aspectj.apache.bcel.Constants { - private String class_name; // name of current class - private String class_package; // name of package - private ConstantPool constant_pool; // reference to constant pool - private PrintWriter file; // file to write to - private String[] constant_ref; // String to return for cp[i] - private Constant[] constants; // The constants in the cp - private Method[] methods; - - ConstantHTML(String dir, String class_name, String class_package, Method[] methods, - ConstantPool constant_pool) throws IOException - { - this.class_name = class_name; - this.class_package = class_package; - this.constant_pool = constant_pool; - this.methods = methods; - constants = constant_pool.getConstantPool(); - file = new PrintWriter(new FileOutputStream(dir + class_name + "_cp.html")); - constant_ref = new String[constants.length]; - constant_ref[0] = "<unknown>"; - - file.println(""); - - // Loop through constants, constants[0] is reserved - for(int i=1; i < constants.length; i++) { - if(i % 2 == 0) - file.print("\n"); - } - - file.println("
          "); - else - file.print("
          "); - - if(constants[i] != null) - writeConstant(i); - - file.print("
          "); - file.close(); - } - - String referenceConstant(int index) { - return constant_ref[index]; - } - - private void writeConstant(int index) { - byte tag = constants[index].getTag(); - int class_index, name_index; - String ref; - - // The header is always the same - file.println("

          " + index + " " + CONSTANT_NAMES[tag] + "

          "); - - /* For every constant type get the needed parameters and print them appropiately - */ - switch(tag) { - case CONSTANT_InterfaceMethodref: - case CONSTANT_Methodref: - // Get class_index and name_and_type_index, depending on type - if(tag == CONSTANT_Methodref) { - ConstantMethodref c = (ConstantMethodref)constant_pool.getConstant(index, CONSTANT_Methodref); - class_index = c.getClassIndex(); - name_index = c.getNameAndTypeIndex(); - } - else { - ConstantInterfaceMethodref c1 = (ConstantInterfaceMethodref)constant_pool.getConstant(index, CONSTANT_InterfaceMethodref); - class_index = c1.getClassIndex(); - name_index = c1.getNameAndTypeIndex(); - } - - // Get method name and its class - String method_name = constant_pool.constantToString(name_index, CONSTANT_NameAndType); - String html_method_name = Class2HTML.toHTML(method_name); - - // Partially compacted class name, i.e., / -> . - String method_class = constant_pool.constantToString(class_index, CONSTANT_Class); - String short_method_class = Utility.compactClassName(method_class); // I.e., remove java.lang. - short_method_class = Utility.compactClassName(method_class); // I.e., remove java.lang. - short_method_class = Utility.compactClassName(short_method_class, class_package + ".", true); // Remove class package prefix - - // Get method signature - ConstantNameAndType c2 = (ConstantNameAndType)constant_pool.getConstant(name_index, CONSTANT_NameAndType); - String signature = constant_pool.constantToString(c2.getSignatureIndex(), CONSTANT_Utf8); - // Get array of strings containing the argument types - String[] args = Utility.methodSignatureArgumentTypes(signature, false); - - // Get return type string - String type = Utility.methodSignatureReturnType(signature, false); - String ret_type = Class2HTML.referenceType(type); - - StringBuffer buf = new StringBuffer("("); - for(int i=0; i < args.length; i++) { - buf.append(Class2HTML.referenceType(args[i])); - if(i < args.length - 1) - buf.append(", "); - } - buf.append(")"); - - String arg_types = buf.toString(); - - if(method_class.equals(class_name)) // Method is local to class - ref = "" + html_method_name + ""; - else - ref = "" + short_method_class + - "." + html_method_name; - - constant_ref[index] = ret_type + " " + - short_method_class + "." + html_method_name + " " + arg_types; - - file.println("

          " + ret_type + " " + ref + arg_types + " \n

          "); - break; - - case CONSTANT_Fieldref: - // Get class_index and name_and_type_index - ConstantFieldref c3 = (ConstantFieldref)constant_pool.getConstant(index, CONSTANT_Fieldref); - class_index = c3.getClassIndex(); - name_index = c3.getNameAndTypeIndex(); - - // Get method name and its class (compacted) - String field_class = constant_pool.constantToString(class_index, CONSTANT_Class); - String short_field_class = Utility.compactClassName(field_class); // I.e., remove java.lang. - short_field_class = Utility.compactClassName(short_field_class, class_package + ".", true); // Remove class package prefix - - String field_name = constant_pool.constantToString(name_index, CONSTANT_NameAndType); - - if(field_class.equals(class_name)) // Field is local to class - ref = "" + field_name + ""; - else - ref = "" + - short_field_class + "." + field_name + "\n"; - - constant_ref[index] = "" + - short_field_class + "." + field_name + ""; - - file.println("

          " + ref + "
          \n" + "

          "); - break; - - case CONSTANT_Class: - ConstantClass c4 = (ConstantClass)constant_pool.getConstant(index, CONSTANT_Class); - name_index = c4.getNameIndex(); - String class_name2 = constant_pool.constantToString(index, tag); // / -> . - String short_class_name = Utility.compactClassName(class_name2); // I.e., remove java.lang. - short_class_name = Utility.compactClassName(short_class_name, class_package + ".", true); // Remove class package prefix - - ref = "" + short_class_name + ""; - constant_ref[index] = "" + short_class_name + ""; - - file.println("

          " + ref + "

          \n"); - break; - - case CONSTANT_String: - ConstantString c5 = (ConstantString)constant_pool.getConstant(index, CONSTANT_String); - name_index = c5.getStringIndex(); - - String str = Class2HTML.toHTML(constant_pool.constantToString(index, tag)); - - file.println("

          " + str + "

          \n"); - break; - - case CONSTANT_NameAndType: - ConstantNameAndType c6 = (ConstantNameAndType)constant_pool.getConstant(index, CONSTANT_NameAndType); - name_index = c6.getNameIndex(); - int signature_index = c6.getSignatureIndex(); - - file.println("

          " + Class2HTML.toHTML(constant_pool.constantToString(index, tag)) + "

          \n"); - break; - - default: - file.println("

          " + Class2HTML.toHTML(constant_pool.constantToString(index, tag)) + "\n"); - } // switch - } - - private final int getMethodNumber(String str) { - for(int i=0; i < methods.length; i++) { - String cmp = methods[i].getName() + methods[i].getSignature(); - if(cmp.equals(str)) - return i; - } - return -1; - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/JavaWrapper.java b/bcel-builder/src/org/aspectj/apache/bcel/util/JavaWrapper.java deleted file mode 100644 index 0c7d70e47..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/JavaWrapper.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.aspectj.apache.bcel.util; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import java.lang.reflect.*; - -/** - * Java interpreter replacement, i.e., wrapper that uses its own ClassLoader - * to modify/generate classes as they're requested. You can take this as a template - * for your own applications.
          - * Call this wrapper with - *

          java org.aspectj.apache.bcel.util.JavaWrapper <real.class.name> [arguments]
          - *

          - * To use your own class loader you can set the "bcel.classloader" system property - * which defaults to "org.aspectj.apache.bcel.util.ClassLoader", e.g., with - *

          java org.aspectj.apache.bcel.util.JavaWrapper -Dbcel.classloader=foo.MyLoader <real.class.name> [arguments]
          - *

          - * - * @version $Id: JavaWrapper.java,v 1.6 2008/04/25 17:58:27 aclement Exp $ - * @author M. Dahm - * @see ClassLoader - */ -public class JavaWrapper { - private java.lang.ClassLoader loader; - - private static java.lang.ClassLoader getClassLoader() { - String s = System.getProperty("bcel.classloader"); - - if((s == null) || "".equals(s)) - s = "org.aspectj.apache.bcel.util.ClassLoader"; - - try { - return (java.lang.ClassLoader)Class.forName(s).newInstance(); - } catch(Exception e) { - throw new RuntimeException(e.toString()); - } - } - - public JavaWrapper(java.lang.ClassLoader loader) { - this.loader = loader; - } - - public JavaWrapper() { - this(getClassLoader()); - } - - /** Runs the main method of the given class with the arguments passed in argv - * - * @param class_name the fully qualified class name - * @param argv the arguments just as you would pass them directly - */ - public void runMain(String class_name, String[] argv) throws ClassNotFoundException - { - Class cl = loader.loadClass(class_name); - Method method = null; - - try { - method = cl.getMethod("main", new Class[] { argv.getClass() }); - - /* Method main is sane ? - */ - int m = method.getModifiers(); - Class r = method.getReturnType(); - - if(!(Modifier.isPublic(m) && Modifier.isStatic(m)) || - Modifier.isAbstract(m) || (r != Void.TYPE)) - throw new NoSuchMethodException(); - } catch(NoSuchMethodException no) { - System.out.println("In class " + class_name + - ": public static void main(String[] argv) is not defined"); - return; - } - - try { - method.invoke(null, new Object[] { argv }); - } catch(Exception ex) { - ex.printStackTrace(); - } - } - - /** Default main method used as wrapper, expects the fully qualified class name - * of the real class as the first argument. - */ - public static void main(String[] argv) throws Exception { - /* Expects class name as first argument, other arguments are by-passed. - */ - if(argv.length == 0) { - System.out.println("Missing class name."); - return; - } - - String class_name = argv[0]; - String[] new_argv = new String[argv.length - 1]; - System.arraycopy(argv, 1, new_argv, 0, new_argv.length); - - JavaWrapper wrapper = new JavaWrapper(); - wrapper.runMain(class_name, new_argv); - } -} - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/MethodHTML.java b/bcel-builder/src/org/aspectj/apache/bcel/util/MethodHTML.java deleted file mode 100644 index 0730d4cd7..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/MethodHTML.java +++ /dev/null @@ -1,208 +0,0 @@ -package org.aspectj.apache.bcel.util; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; - -import org.aspectj.apache.bcel.classfile.Attribute; -import org.aspectj.apache.bcel.classfile.Code; -import org.aspectj.apache.bcel.classfile.ConstantValue; -import org.aspectj.apache.bcel.classfile.ExceptionTable; -import org.aspectj.apache.bcel.classfile.Field; -import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.classfile.Utility; - -/** - * Convert methods and fields into HTML file. - * - * @version $Id: MethodHTML.java,v 1.7 2008/04/25 17:58:27 aclement Exp $ - * @author M. Dahm - * - */ -final class MethodHTML implements org.aspectj.apache.bcel.Constants { - private String class_name; // name of current class - private PrintWriter file; // file to write to - private ConstantHTML constant_html; - private AttributeHTML attribute_html; - - MethodHTML(String dir, String class_name, - Method[] methods, Field[] fields, - ConstantHTML constant_html, AttributeHTML attribute_html) throws IOException - { - this.class_name = class_name; - this.attribute_html = attribute_html; - this.constant_html = constant_html; - - file = new PrintWriter(new FileOutputStream(dir + class_name + "_methods.html")); - - file.println(""); - file.println("" + - ""); - for(int i=0; i < fields.length; i++) - writeField(fields[i]); - file.println("
          Access flagsTypeField name
          "); - - file.println("" + - "" + - ""); - for(int i=0; i < methods.length; i++) - writeMethod(methods[i], i); - - file.println("
          Access flagsReturn typeMethod nameArguments
          "); - file.close(); - } - - /** - * Print field of class. - * - * @param field field to print - * @exception java.io.IOException - */ - private void writeField(Field field) throws IOException { - String type = Utility.signatureToString(field.getSignature()); - String name = field.getName(); - String access = Utility.accessToString(field.getAccessFlags()); - Attribute[] attributes; - - access = Utility.replace(access, " ", " "); - - file.print("" + access + "\n" + - Class2HTML.referenceType(type) + "" + - name + ""); - - attributes = field.getAttributes(); - - // Write them to the Attributes.html file with anchor "[]" - for(int i=0; i < attributes.length; i++) - attribute_html.writeAttribute(attributes[i], name + "@" + i); - - for(int i=0; i < attributes.length; i++) { - if(attributes[i].getTag() == ATTR_CONSTANT_VALUE) { // Default value - String str = ((ConstantValue)attributes[i]).toString(); - - // Reference attribute in _attributes.html - file.print("= " + str + "\n"); - break; - } - } - - file.println(""); - } - - private final void writeMethod(Method method, int method_number) throws IOException { - // Get raw signature - String signature = method.getSignature(); - // Get array of strings containing the argument types - String[] args = Utility.methodSignatureArgumentTypes(signature, false); - // Get return type string - String type = Utility.methodSignatureReturnType(signature, false); - // Get method name - String name = method.getName(), html_name; - // Get method's access flags - String access = Utility.accessToString(method.getAccessFlags()); - // Get the method's attributes, the Code Attribute in particular - Attribute[] attributes = method.getAttributes(); - - /* HTML doesn't like names like and spaces are places to break - * lines. Both we don't want... - */ - access = Utility.replace(access, " ", " "); - html_name = Class2HTML.toHTML(name); - - file.print("" + - access + ""); - - file.print("" + Class2HTML.referenceType(type) + "" + - "" + html_name + "\n("); - - for(int i=0; i < args.length; i++) { - file.print(Class2HTML.referenceType(args[i])); - if(i < args.length - 1) - file.print(", "); - } - - file.print(")"); - - // Check for thrown exceptions - for(int i=0; i < attributes.length; i++) { - attribute_html.writeAttribute(attributes[i], "method" + method_number + "@" + i, - method_number); - - byte tag = attributes[i].getTag(); - if(tag == ATTR_EXCEPTIONS) { - file.print("throws"); - int[] exceptions = ((ExceptionTable)attributes[i]).getExceptionIndexTable(); - - for(int j=0; j < exceptions.length; j++) { - file.print(constant_html.referenceConstant(exceptions[j])); - - if(j < exceptions.length - 1) - file.print(", "); - } - file.println(""); - } else if(tag == ATTR_CODE) { - Attribute[] c_a = ((Code)attributes[i]).getAttributes(); - - for(int j=0; j < c_a.length; j++) - attribute_html.writeAttribute(c_a[j], "method" + method_number + "@" + i + "@" + j, - method_number); - } - } - } -} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/NonCachingClassLoaderRepository.java b/bcel-builder/src/org/aspectj/apache/bcel/util/NonCachingClassLoaderRepository.java index d41188cf1..bbd0ab55e 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/NonCachingClassLoaderRepository.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/util/NonCachingClassLoaderRepository.java @@ -56,9 +56,15 @@ package org.aspectj.apache.bcel.util; import java.io.IOException; import java.io.InputStream; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.SoftReference; import java.net.URL; import java.net.URLClassLoader; -import java.util.WeakHashMap; +import java.util.AbstractMap; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; import org.aspectj.apache.bcel.classfile.ClassParser; import org.aspectj.apache.bcel.classfile.JavaClass; @@ -72,7 +78,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; * * @see org.aspectj.apache.bcel.Repository * - * @version $Id: NonCachingClassLoaderRepository.java,v 1.2 2008/05/27 18:46:34 aclement Exp $ + * @version $Id: NonCachingClassLoaderRepository.java,v 1.3 2008/05/28 23:52:53 aclement Exp $ * @author M. Dahm * @author David Dixon-Peugh * @@ -83,8 +89,77 @@ public class NonCachingClassLoaderRepository private static java.lang.ClassLoader bootClassLoader = null; private ClassLoaderReference loaderRef; - private WeakHashMap loadedClasses = - new WeakHashMap(); // CLASSNAME X JAVACLASS + private Map loadedClasses = + new SoftHashMap(); // CLASSNAME X JAVACLASS + + public static class SoftHashMap extends AbstractMap { + private Map map; + private ReferenceQueue rq = new ReferenceQueue(); + + public SoftHashMap(Map map) { this.map = map; } + public SoftHashMap() { this(new HashMap()); } + public SoftHashMap(Map map, boolean b) { this(map); } + + class SpecialValue extends SoftReference { + private final Object key; + SpecialValue(Object k,Object v) { + super(v,rq); + this.key = k; + } + } + + private void processQueue() { + SpecialValue sv = null; + while ((sv = (SpecialValue)rq.poll())!=null) { + map.remove(sv.key); + } + } + + public Object get(Object key) { + SpecialValue value = (SpecialValue)map.get(key); + if (value==null) return null; + if (value.get()==null) { + // it got GC'd + map.remove(value.key); + return null; + } else { + return value.get(); + } + } + + public Object put(Object k, Object v) { + processQueue(); + return map.put(k, new SpecialValue(k,v)); + } + + public Set entrySet() { + return map.entrySet(); + } + + public void clear() { + processQueue(); + Set keys = map.keySet(); + for (Iterator iterator = keys.iterator(); iterator.hasNext();) { + Object name = (Object) iterator.next(); + map.remove(name); + } + } + + public int size() { + processQueue(); + return map.size(); + } + + public Object remove(Object k) { + processQueue(); + SpecialValue value = (SpecialValue)map.remove(k); + if (value==null) return null; + if (value.get()!=null) { + return value.get(); + } + return null; + } + } public NonCachingClassLoaderRepository(java.lang.ClassLoader loader) { this.loaderRef = new DefaultClassLoaderReference((loader != null) ? loader : getBootClassLoader()); diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/Repository.java b/bcel-builder/src/org/aspectj/apache/bcel/util/Repository.java index 8b8bec2e8..f35f1a005 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/Repository.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/util/Repository.java @@ -62,7 +62,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; * Repository.setRepository method. * * @see org.aspectj.apache.bcel.Repository - * @version $Id: Repository.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: Repository.java,v 1.3 2008/05/28 23:52:53 aclement Exp $ * @author M. Dahm * @author David Dixon-Peugh */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/SyntheticRepository.java b/bcel-builder/src/org/aspectj/apache/bcel/util/SyntheticRepository.java index 17ed633b9..0f609b2f2 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/SyntheticRepository.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/util/SyntheticRepository.java @@ -79,7 +79,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; * * @see org.aspectj.apache.bcel.Repository * - * @version $Id: SyntheticRepository.java,v 1.6 2006/07/19 12:06:16 aclement Exp $ + * @version $Id: SyntheticRepository.java,v 1.7 2008/05/28 23:52:53 aclement Exp $ * @author M. Dahm * @author David Dixon-Peugh */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/package.html b/bcel-builder/src/org/aspectj/apache/bcel/util/package.html deleted file mode 100644 index 81df81708..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/package.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - -

          -This package contains utility classes for the -Byte Code Engineering -Library, namely: -

          -

          -

            -
          • Collection classes for JavaClass objects
          • -
          • A converter for class files to HTML
          • -
          • A tool to find instructions patterns via regular expressions
          • -
          • A class to find classes as defined in the CLASSPATH
          • -
          • A class loader that allows to create clases at run time
          • -
          - -

          - - diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/package.html b/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/package.html deleted file mode 100644 index 599d9c7dc..000000000 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/package.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - -Exception classes used by JustIce, mostly used internally. You don't need to bother with them. - -

          Package Specification

          - -Contained in this package are Exception classes for use with the JustIce verifier. - -

          Related Documentation

          - -For a simple demonstration of JustIce working, please see: - - - - diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java index da406e725..cf270b5b0 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java @@ -31,8 +31,9 @@ import org.aspectj.apache.bcel.classfile.tests.VarargsTest; public class AllTests { public static Test suite() { - TestSuite suite = new TestSuite("Tests for BCEL Java5 support"); + TestSuite suite = new TestSuite("Tests for BCEL"); //$JUnit-BEGIN$ + suite.addTestSuite(Fundamentals.class); suite.addTestSuite(RuntimeVisibleParameterAnnotationAttributeTest.class); suite.addTestSuite(AnnotationDefaultAttributeTest.class); suite.addTestSuite(EnclosingMethodAttributeTest.class); diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationDefaultAttributeTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationDefaultAttributeTest.java index ced29d489..2a57bbaac 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationDefaultAttributeTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationDefaultAttributeTest.java @@ -15,8 +15,8 @@ package org.aspectj.apache.bcel.classfile.tests; import org.aspectj.apache.bcel.classfile.AnnotationDefault; import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.classfile.annotation.ElementValue; -import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValue; +import org.aspectj.apache.bcel.classfile.annotation.ElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValueGen; public class AnnotationDefaultAttributeTest extends BcelTestCase { @@ -35,9 +35,9 @@ public class AnnotationDefaultAttributeTest extends BcelTestCase { Method m = getMethod(clazz,"fruit"); AnnotationDefault a = (AnnotationDefault) findAttribute("AnnotationDefault",m.getAttributes()); - SimpleElementValue val = (SimpleElementValue) a.getElementValue(); + SimpleElementValueGen val = (SimpleElementValueGen) a.getElementValue(); assertTrue("Should be STRING but is "+val.getElementValueType(), - val.getElementValueType()==ElementValue.STRING); + val.getElementValueType()==ElementValueGen.STRING); assertTrue("Should have default of bananas but default is "+val.getValueString(), val.getValueString().equals("bananas")); } diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationGenTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationGenTest.java index c863fda83..306a1a387 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationGenTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationGenTest.java @@ -21,16 +21,16 @@ import java.util.Vector; import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.classfile.Utility; import org.aspectj.apache.bcel.classfile.Attribute; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePairGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementValueGen; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeAnnotations; +import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValueGen; import org.aspectj.apache.bcel.generic.ClassGen; -import org.aspectj.apache.bcel.generic.ConstantPoolGen; +import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.generic.ObjectType; -import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; -import org.aspectj.apache.bcel.generic.annotation.ElementNameValuePairGen; -import org.aspectj.apache.bcel.generic.annotation.ElementValueGen; -import org.aspectj.apache.bcel.generic.annotation.SimpleElementValueGen; public class AnnotationGenTest extends BcelTestCase { @@ -50,7 +50,7 @@ public class AnnotationGenTest extends BcelTestCase { // Create the containing class ClassGen cg = createClassGen("HelloWorld"); - ConstantPoolGen cp = cg.getConstantPool(); + ConstantPool cp = cg.getConstantPool(); // Create the simple primitive value '4' of type 'int' SimpleElementValueGen evg = @@ -81,7 +81,7 @@ public class AnnotationGenTest extends BcelTestCase { // Create the containing class ClassGen cg = createClassGen("HelloWorld"); - ConstantPoolGen cp = cg.getConstantPool(); + ConstantPool cp = cg.getConstantPool(); // Create the simple primitive value '4' of type 'int' SimpleElementValueGen evg = @@ -138,7 +138,7 @@ public class AnnotationGenTest extends BcelTestCase { //// // Helper methods - private void checkSerialize(AnnotationGen a,ConstantPoolGen cpg) { + private void checkSerialize(AnnotationGen a,ConstantPool cpg) { try { String beforeName = a.getTypeName(); List beforeValues = a.getValues(); diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/BcelTestCase.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/BcelTestCase.java index db2d1c78c..b8a0b503f 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/BcelTestCase.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/BcelTestCase.java @@ -19,13 +19,12 @@ import java.util.List; import org.aspectj.apache.bcel.classfile.Attribute; import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; -import org.aspectj.apache.bcel.generic.ConstantPoolGen; +import org.aspectj.apache.bcel.classfile.ConstantPool; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePairGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValueGen; import org.aspectj.apache.bcel.generic.ObjectType; -import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; -import org.aspectj.apache.bcel.generic.annotation.ElementNameValuePairGen; -import org.aspectj.apache.bcel.generic.annotation.ElementValueGen; -import org.aspectj.apache.bcel.generic.annotation.SimpleElementValueGen; import org.aspectj.apache.bcel.util.ClassPath; import org.aspectj.apache.bcel.util.SyntheticRepository; @@ -100,17 +99,6 @@ public class BcelTestCase extends TestCase { return (Attribute)chosenAttrsList.get(0); } - protected String dumpAnnotations(Annotation[] as) { - StringBuffer result = new StringBuffer(); - result.append("["); - for (int i = 0; i < as.length; i++) { - Annotation annotation = as[i]; - result.append(annotation.toShortString()); - if (i+10) { +// if ((Constants.instFlags[opcode]&Constants.STACK_CONSUMER)==0) +// fail(header+" expected it to be a STACK_CONSUMER but it is not"); +// } else { +// if ((Constants.instFlags[opcode]&Constants.STACK_CONSUMER)!=0) +// fail(header+" expected it not to be a STACK_CONSUMER but it is"); +// } + if (stackConsumed==VARIES) { + if (Constants.CONSUME_STACK[opcode]!=Constants.UNPREDICTABLE) + fail("Instruction '"+i+"' should be consuming some unpredictable number of stack entries but it says it will consume "+Constants.CONSUME_STACK[opcode]); + + } else { + if (Constants.CONSUME_STACK[opcode]!=stackConsumed) + fail("Instruction '"+i+"' should be consuming "+stackConsumed+" stack entries but it says it will consume "+Constants.CONSUME_STACK[opcode]); + } +// if (stackProduced>0) { +// if ((Constants.instFlags[opcode]&Constants.STACK_PRODUCER)==0) +// fail(header+" expected it to be a STACK_PRODUCER but it is not"); +// } else { +// if ((Constants.instFlags[opcode]&Constants.STACK_PRODUCER)!=0) +// fail(header+" expected it not to be a STACK_PRODUCER but it is"); +// } + if (stackProduced==VARIES) { + if (Constants.stackEntriesProduced[opcode]!=Constants.UNPREDICTABLE) + fail(header+" should be producing some unpredictable number of stack entries but it says it will produce "+Constants.stackEntriesProduced[opcode]); + + } else { + if (Constants.stackEntriesProduced[opcode]!=stackProduced) + fail(header+" should be producing "+stackProduced+" stack entries but it says it will produce "+Constants.stackEntriesProduced[opcode]); + } + } + + private final static byte b0 = 0; + private final static short s0 = 0; + private final static short s20 = 20; + private final static int VARIES = -1; +} diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GeneratingAnnotatedClassesTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GeneratingAnnotatedClassesTest.java index 6c0258beb..6306c3edc 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GeneratingAnnotatedClassesTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GeneratingAnnotatedClassesTest.java @@ -17,15 +17,16 @@ import java.util.List; import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; -import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePair; -import org.aspectj.apache.bcel.classfile.annotation.ElementValue; -import org.aspectj.apache.bcel.generic.ALOAD; -import org.aspectj.apache.bcel.generic.ASTORE; import org.aspectj.apache.bcel.generic.ArrayType; import org.aspectj.apache.bcel.generic.ClassGen; -import org.aspectj.apache.bcel.generic.ConstantPoolGen; -import org.aspectj.apache.bcel.generic.GOTO; +import org.aspectj.apache.bcel.classfile.ConstantPool; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; +import org.aspectj.apache.bcel.classfile.annotation.ArrayElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePairGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValueGen; +import org.aspectj.apache.bcel.generic.InstructionBranch; import org.aspectj.apache.bcel.generic.InstructionConstants; import org.aspectj.apache.bcel.generic.InstructionFactory; import org.aspectj.apache.bcel.generic.InstructionHandle; @@ -33,14 +34,7 @@ import org.aspectj.apache.bcel.generic.InstructionList; import org.aspectj.apache.bcel.generic.LocalVariableGen; import org.aspectj.apache.bcel.generic.MethodGen; import org.aspectj.apache.bcel.generic.ObjectType; -import org.aspectj.apache.bcel.generic.PUSH; import org.aspectj.apache.bcel.generic.Type; -import org.aspectj.apache.bcel.generic.annotation.AnnotationElementValueGen; -import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; -import org.aspectj.apache.bcel.generic.annotation.ArrayElementValueGen; -import org.aspectj.apache.bcel.generic.annotation.ElementNameValuePairGen; -import org.aspectj.apache.bcel.generic.annotation.ElementValueGen; -import org.aspectj.apache.bcel.generic.annotation.SimpleElementValueGen; import org.aspectj.apache.bcel.util.SyntheticRepository; /** @@ -76,7 +70,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { // Create HelloWorld ClassGen cg = createClassGen("HelloWorld"); - ConstantPoolGen cp = cg.getConstantPool(); + ConstantPool cp = cg.getConstantPool(); InstructionList il = new InstructionList(); cg.addAnnotation(createSimpleVisibleAnnotation(cp)); @@ -88,21 +82,21 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { JavaClass jc = getClassFrom(".","HelloWorld"); - Annotation[] as = jc.getAnnotations(); + AnnotationGen[] as = jc.getAnnotations(); assertTrue("Should be two annotations but found "+as.length,as.length==2); - Annotation one = as[0]; - Annotation two = as[1]; + AnnotationGen one = as[0]; + AnnotationGen two = as[1]; assertTrue("Name of annotation 1 should be SimpleAnnotation but it is "+as[0].getTypeName(), as[0].getTypeName().equals("SimpleAnnotation")); assertTrue("Name of annotation 2 should be SimpleAnnotation but it is "+as[1].getTypeName(), as[1].getTypeName().equals("SimpleAnnotation")); List vals = as[0].getValues(); - ElementNameValuePair nvp = (ElementNameValuePair) vals.get(0); + ElementNameValuePairGen nvp = (ElementNameValuePairGen) vals.get(0); assertTrue("Name of element in SimpleAnnotation should be 'id' but it is "+ nvp.getNameString(),nvp.getNameString().equals("id")); - ElementValue ev = nvp.getValue(); + ElementValueGen ev = nvp.getValue(); assertTrue("Type of element value should be int but it is "+ev.getElementValueType(), - ev.getElementValueType()==ElementValue.PRIMITIVE_INT); + ev.getElementValueType()==ElementValueGen.PRIMITIVE_INT); assertTrue("Value of element should be 4 but it is "+ev.stringifyValue(), ev.stringifyValue().equals("4")); assertTrue(createTestdataFile("HelloWorld.class").delete()); @@ -117,7 +111,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { public void testGenerateMethodLevelAnnotations1() throws ClassNotFoundException { // Create HelloWorld ClassGen cg = createClassGen("HelloWorld"); - ConstantPoolGen cp = cg.getConstantPool(); + ConstantPool cp = cg.getConstantPool(); InstructionList il = new InstructionList(); buildClassContentsWithAnnotatedMethods(cg, cp, il); @@ -158,7 +152,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { public void testGenerateMethodLevelAnnotations2() throws ClassNotFoundException { // Create HelloWorld ClassGen cg = createClassGen("HelloWorld"); - ConstantPoolGen cp = cg.getConstantPool(); + ConstantPool cp = cg.getConstantPool(); InstructionList il = new InstructionList(); buildClassContentsWithAnnotatedMethods(cg, cp, il); @@ -247,9 +241,9 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { ElementValueGen value = (ElementValueGen)nvp.getValue(); assertTrue("Value should be ArrayElementValueGen but is "+value,value instanceof ArrayElementValueGen); ArrayElementValueGen arrayValue = (ArrayElementValueGen)value; - assertTrue("Array value should be size one but is "+arrayValue.getElementValuesSize(), - arrayValue.getElementValuesSize()==1); - ElementValueGen innerValue = (ElementValueGen)arrayValue.getElementValues().get(0); + assertTrue("Array value should be size one but is "+arrayValue.getElementValuesArraySize(), + arrayValue.getElementValuesArraySize()==1); + ElementValueGen innerValue = (ElementValueGen)arrayValue.getElementValuesArray()[0]; assertTrue("Value in the array should be AnnotationElementValueGen but is "+innerValue, innerValue instanceof AnnotationElementValueGen); AnnotationElementValueGen innerAnnotationValue = (AnnotationElementValueGen)innerValue; @@ -287,7 +281,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { public void testModifyingClasses1() throws ClassNotFoundException { JavaClass jc = getClassFrom("testcode.jar","SimpleAnnotatedClass"); ClassGen cgen = new ClassGen(jc); - ConstantPoolGen cp = cgen.getConstantPool(); + ConstantPool cp = cgen.getConstantPool(); cgen.addAnnotation(createFruitAnnotation(cp,"Pineapple")); assertTrue("Should now have two annotations but has "+cgen.getAnnotations().length, cgen.getAnnotations().length==2); @@ -301,7 +295,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { public void testModifyingClasses2() throws ClassNotFoundException { JavaClass jc = getClassFrom("testcode.jar","SimpleAnnotatedClass"); ClassGen cgen = new ClassGen(jc); - ConstantPoolGen cp = cgen.getConstantPool(); + ConstantPool cp = cgen.getConstantPool(); cgen.addAnnotation(createCombinedAnnotation(cp)); assertTrue("Should now have two annotations but has "+cgen.getAnnotations().length, cgen.getAnnotations().length==2); @@ -327,7 +321,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { dumpClass(cg,dir+File.separator+fname); } - private void buildClassContentsWithAnnotatedMethods(ClassGen cg, ConstantPoolGen cp, InstructionList il) { + private void buildClassContentsWithAnnotatedMethods(ClassGen cg, ConstantPool cp, InstructionList il) { // Create method 'public static void main(String[]argv)' MethodGen mg = createMethodGen("main",il,cp); InstructionFactory factory = new InstructionFactory(cg); @@ -356,14 +350,14 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { LocalVariableGen lg = mg.addLocalVariable("in", new ObjectType( "java.io.BufferedReader"), null, null); int in = lg.getIndex(); - lg.setStart(il.append(new ASTORE(in))); // "in" valid from here + lg.setStart(il.append(InstructionFactory.createASTORE(in))); // "in" valid from here // Create local variable name and initialize it to null lg = mg.addLocalVariable("name", Type.STRING, null, null); int name = lg.getIndex(); il.append(InstructionConstants.ACONST_NULL); - lg.setStart(il.append(new ASTORE(name))); // "name" valid from here + lg.setStart(il.append(InstructionFactory.createASTORE(name))); // "name" valid from here // Create try-catch block: We remember the start of the block, read a // line from the standard input and store it into the variable name . @@ -378,13 +372,13 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { // il.append(new ALOAD(in)); // il.append(factory.createInvoke("java.io.BufferedReader", "readLine", // Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL)); - InstructionHandle try_start = il.append(new PUSH(cp,"Andy")); - il.append(new ASTORE(name)); + InstructionHandle try_start = il.append(InstructionFactory.PUSH(cp,"Andy")); + il.append(InstructionFactory.createASTORE(name)); // Upon normal execution we jump behind exception handler, the target // address is not known yet. - GOTO g = new GOTO(null); + InstructionBranch g = new InstructionBranch(Constants.GOTO); InstructionHandle try_end = il.append(g); // We add the exception handler which simply returns from the method. @@ -392,7 +386,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { LocalVariableGen var_ex = mg.addLocalVariable("ex",Type.getType("Ljava.io.IOException;"),null,null); int var_ex_slot = var_ex.getIndex(); - InstructionHandle handler = il.append(new ASTORE(var_ex_slot)); + InstructionHandle handler = il.append(InstructionFactory.createASTORE(var_ex_slot)); var_ex.setStart(handler); var_ex.setEnd(il.append(InstructionConstants.RETURN)); @@ -411,12 +405,12 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { il.append(factory.createNew(Type.STRINGBUFFER)); il.append(InstructionConstants.DUP); - il.append(new PUSH(cp, "Hello, ")); + il.append(InstructionFactory.PUSH(cp, "Hello, ")); il .append(factory.createInvoke("java.lang.StringBuffer", "", Type.VOID, new Type[] { Type.STRING }, Constants.INVOKESPECIAL)); - il.append(new ALOAD(name)); + il.append(InstructionFactory.createALOAD(name)); il.append(factory.createInvoke("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { Type.STRING }, Constants.INVOKEVIRTUAL)); @@ -439,7 +433,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { cg.addEmptyConstructor(Constants.ACC_PUBLIC); } - private void buildClassContents(ClassGen cg, ConstantPoolGen cp, InstructionList il) { + private void buildClassContents(ClassGen cg, ConstantPool cp, InstructionList il) { // Create method 'public static void main(String[]argv)' MethodGen mg = createMethodGen("main",il,cp); InstructionFactory factory = new InstructionFactory(cg); @@ -467,14 +461,14 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { LocalVariableGen lg = mg.addLocalVariable("in", new ObjectType( "java.io.BufferedReader"), null, null); int in = lg.getIndex(); - lg.setStart(il.append(new ASTORE(in))); // "in" valid from here + lg.setStart(il.append(InstructionFactory.createASTORE(in))); // "in" valid from here // Create local variable name and initialize it to null lg = mg.addLocalVariable("name", Type.STRING, null, null); int name = lg.getIndex(); il.append(InstructionConstants.ACONST_NULL); - lg.setStart(il.append(new ASTORE(name))); // "name" valid from here + lg.setStart(il.append(InstructionFactory.createASTORE(name))); // "name" valid from here // Create try-catch block: We remember the start of the block, read a // line from the standard input and store it into the variable name . @@ -489,13 +483,13 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { // il.append(new ALOAD(in)); // il.append(factory.createInvoke("java.io.BufferedReader", "readLine", // Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL)); - InstructionHandle try_start = il.append(new PUSH(cp,"Andy")); - il.append(new ASTORE(name)); + InstructionHandle try_start = il.append(InstructionFactory.PUSH(cp,"Andy")); + il.append(InstructionFactory.createASTORE(name)); // Upon normal execution we jump behind exception handler, the target // address is not known yet. - GOTO g = new GOTO(null); + InstructionBranch g = new InstructionBranch(Constants.GOTO); InstructionHandle try_end = il.append(g); // We add the exception handler which simply returns from the method. @@ -503,7 +497,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { LocalVariableGen var_ex = mg.addLocalVariable("ex",Type.getType("Ljava.io.IOException;"),null,null); int var_ex_slot = var_ex.getIndex(); - InstructionHandle handler = il.append(new ASTORE(var_ex_slot)); + InstructionHandle handler = il.append(InstructionFactory.createASTORE(var_ex_slot)); var_ex.setStart(handler); var_ex.setEnd(il.append(InstructionConstants.RETURN)); @@ -522,12 +516,12 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { il.append(factory.createNew(Type.STRINGBUFFER)); il.append(InstructionConstants.DUP); - il.append(new PUSH(cp, "Hello, ")); + il.append(InstructionFactory.PUSH(cp, "Hello, ")); il .append(factory.createInvoke("java.lang.StringBuffer", "", Type.VOID, new Type[] { Type.STRING }, Constants.INVOKESPECIAL)); - il.append(new ALOAD(name)); + il.append(InstructionFactory.createALOAD(name)); il.append(factory.createInvoke("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { Type.STRING }, Constants.INVOKEVIRTUAL)); @@ -566,7 +560,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { "", Constants.ACC_PUBLIC | Constants.ACC_SUPER, null); } - private MethodGen createMethodGen(String methodname,InstructionList il,ConstantPoolGen cp) { + private MethodGen createMethodGen(String methodname,InstructionList il,ConstantPool cp) { return new MethodGen( Constants.ACC_STATIC | Constants.ACC_PUBLIC, // access flags Type.VOID, // return type @@ -577,7 +571,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { } - public AnnotationGen createSimpleVisibleAnnotation(ConstantPoolGen cp) { + public AnnotationGen createSimpleVisibleAnnotation(ConstantPool cp) { SimpleElementValueGen evg = new SimpleElementValueGen( ElementValueGen.PRIMITIVE_INT, cp, 4); @@ -592,7 +586,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { return a; } - public AnnotationGen createFruitAnnotation(ConstantPoolGen cp,String aFruit) { + public AnnotationGen createFruitAnnotation(ConstantPool cp,String aFruit) { SimpleElementValueGen evg = new SimpleElementValueGen(ElementValueGen.STRING,cp,aFruit); ElementNameValuePairGen nvGen = new ElementNameValuePairGen("fruit",evg,cp); ObjectType t = new ObjectType("SimpleStringAnnotation"); @@ -601,7 +595,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { return new AnnotationGen(t,elements,true,cp); } - public AnnotationGen createCombinedAnnotation(ConstantPoolGen cp) { + public AnnotationGen createCombinedAnnotation(ConstantPool cp) { // Create an annotation instance AnnotationGen a = createSimpleVisibleAnnotation(cp); ArrayElementValueGen array = new ArrayElementValueGen(cp); @@ -612,7 +606,7 @@ public class GeneratingAnnotatedClassesTest extends BcelTestCase { return new AnnotationGen(new ObjectType("CombinedAnnotation"),elements,true,cp); } - public AnnotationGen createSimpleInvisibleAnnotation(ConstantPoolGen cp) { + public AnnotationGen createSimpleInvisibleAnnotation(ConstantPool cp) { SimpleElementValueGen evg = new SimpleElementValueGen( ElementValueGen.PRIMITIVE_INT, cp, 4); diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParsingTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParsingTest.java index b4b8dbce3..dbc3ae154 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParsingTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParsingTest.java @@ -11,11 +11,16 @@ * ******************************************************************/ package org.aspectj.apache.bcel.classfile.tests; +import java.util.ArrayList; + +import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.classfile.Attribute; +import org.aspectj.apache.bcel.classfile.ClassFormatException; import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; import org.aspectj.apache.bcel.classfile.Signature; import org.aspectj.apache.bcel.classfile.Utility; +import org.aspectj.apache.bcel.classfile.Utility.ResultHolder; /** * Generics introduces more complex signature possibilities, they are no longer just @@ -149,27 +154,27 @@ public class GenericSignatureParsingTest extends BcelTestCase { // These routines call BCEL to determine if it can correctly translate from one form to the other. private void checkClassTypeSignature(String sig, String expected) { StringBuffer result = new StringBuffer(); - int p = Utility.readClassTypeSignatureFrom(sig,0,result,false); + int p = GenericSignatureParsingTest.readClassTypeSignatureFrom(sig,0,result,false); assertTrue("Only swallowed "+p+" chars of this sig "+sig+" (len="+sig.length()+")",p==sig.length()); assertTrue("Expected '"+expected+"' but got '"+result.toString()+"'",result.toString().equals(expected)); } private void checkMethodTypeToSignature(String ret,String[] args,String expected) { - String res = Utility.methodTypeToSignature(ret,args); + String res = GenericSignatureParsingTest.methodTypeToSignature(ret,args); if (!res.equals(expected)) { fail("Should match. Got: "+res+" Expected:"+expected); } } private void checkMethodSignatureReturnType(String sig,String expected) { - String result = Utility.methodSignatureReturnType(sig,false); + String result = GenericSignatureParsingTest.methodSignatureReturnType(sig,false); if (!result.equals(expected)) { fail("Should match. Got: "+result+" Expected:"+expected); } } private void checkMethodSignatureArgumentTypes(String in,String[] expected) { - String[] result = Utility.methodSignatureArgumentTypes(in,false); + String[] result = GenericSignatureParsingTest.methodSignatureArgumentTypes(in,false); if (result.length!=expected.length) { fail("Expected "+expected.length+" entries to be returned but only got "+result.length); } @@ -191,5 +196,278 @@ public class GenericSignatureParsingTest extends BcelTestCase { } return null; } + + + /** + * Takes a string and consumes a single complete signature from it, returning + * how many chars it consumed. The chopit flag indicates whether to shorten + * type references ( java/lang/String => String ) + * + * FIXME asc this should also create some kind of object you can query for information about whether its parameterized, what the bounds are, etc... + */ + public static final int readClassTypeSignatureFrom(String signature, int posn, StringBuffer result, boolean chopit) { + int idx = posn; + try { + switch (signature.charAt(idx)) { + case 'B' : result.append("byte"); return 1; + case 'C' : result.append("char"); return 1; + case 'D' : result.append("double"); return 1; + case 'F' : result.append("float"); return 1; + case 'I' : result.append("int"); return 1; + case 'J' : result.append("long"); return 1; + case 'S' : result.append("short"); return 1; + case 'Z' : result.append("boolean");return 1; + case 'V' : result.append("void"); return 1; + + + //FIXME ASC Need a state machine to check we are parsing the right stuff here ! + case 'T' : + idx++; + int nextSemiIdx = signature.indexOf(';',idx); + result.append(signature.substring(idx,nextSemiIdx)); + return nextSemiIdx+1-posn; + + case '+' : + result.append("? extends "); + return readClassTypeSignatureFrom(signature,idx+1,result,chopit)+1; + + case '-' : + result.append("? super "); + return readClassTypeSignatureFrom(signature,idx+1,result,chopit)+1; + + case '*' : + result.append("?"); + return 1; + + case 'L' : // Full class name + boolean parameterized = false; + int idxSemicolon = signature.indexOf(';',idx); // Look for closing ';' or '<' + int idxAngly = signature.indexOf('<',idx); + int endOfSig = idxSemicolon; + if ((idxAngly!=-1) && idxAngly");idx++; + } + if (signature.charAt(idx)!=';') throw new RuntimeException("Did not find ';' at end of signature, found "+signature.charAt(idx)); + idx++; + return idx-posn; + + + case '[' : // Array declaration + int dim = 0; + while (signature.charAt(idx)=='[') {dim++;idx++;} + idx+=readClassTypeSignatureFrom(signature,idx,result,chopit); + while (dim>0) {result.append("[]");dim--;} + return idx-posn; + + default : throw new ClassFormatException("Invalid signature: `" + + signature + "'"); + } + } catch(StringIndexOutOfBoundsException e) { // Should never occur + throw new ClassFormatException("Invalid signature: " + e + ":" + signature); + } + } + + + public static final String readClassTypeSignatureFrom(String signature) { + StringBuffer sb = new StringBuffer(); + GenericSignatureParsingTest.readClassTypeSignatureFrom(signature,0,sb,false); + return sb.toString(); + } + + + public static int countBrackets(String brackets) { + char[] chars = brackets.toCharArray(); + int count = 0; + boolean open = false; + + for(int i=0; i 0) brackets = GenericSignatureParsingTest.countBrackets(type.substring(index)); + + type = buf.toString(); + buf.setLength(0); + + for (int i=0; i < brackets; i++) buf.append('['); + + boolean found = false; + + for(int i=Constants.T_BOOLEAN; (i <= Constants.T_VOID) && !found; i++) { + if (Constants.TYPE_NAMES[i].equals(type)) { + found = true; + buf.append(Constants.SHORT_TYPE_NAMES[i]); + } + } + + // Class name + if (!found) buf.append('L' + type.replace('.', '/') + ';'); + + return buf.toString(); + } + + + /** + * For some method signature (class file format) like '([Ljava/lang/String;)Z' this returns + * the string representing the return type its 'normal' form, e.g. 'boolean' + * + * @param signature Method signature + * @param chopit Shorten class names + * @return return type of method + */ + public static final String methodSignatureReturnType(String signature,boolean chopit) throws ClassFormatException { + int index; + String type; + try { + // Read return type after `)' + index = signature.lastIndexOf(')') + 1; + type = Utility.signatureToString(signature.substring(index), chopit); + } catch (StringIndexOutOfBoundsException e) { + throw new ClassFormatException("Invalid method signature: " + signature); + } + return type; + } + + + /** + * For some method signature (class file format) like '([Ljava/lang/String;)Z' this returns + * the string representing the return type its 'normal' form, e.g. 'boolean' + * + * @param signature Method signature + * @return return type of method + * @throws ClassFormatException + */ + public static final String methodSignatureReturnType(String signature) throws ClassFormatException { + return GenericSignatureParsingTest.methodSignatureReturnType(signature, true); + } + + + /** + * For some method signature (class file format) like '([Ljava/lang/String;Z)V' this returns an array + * of strings representing the arguments in their 'normal' form, e.g. '{java.lang.String[],boolean}' + * + * @param signature Method signature + * @param chopit Shorten class names + * @return Array of argument types + */ + public static final String[] methodSignatureArgumentTypes(String signature,boolean chopit) throws ClassFormatException { + ArrayList vec = new ArrayList(); + int index; + String[] types; + + try { // Read all declarations between for `(' and `)' + if (signature.charAt(0) != '(') + throw new ClassFormatException("Invalid method signature: " + signature); + + index = 1; // current string position + + while(signature.charAt(index) != ')') { + Utility.ResultHolder rh = Utility.signatureToStringInternal(signature.substring(index),chopit); + vec.add(rh.getResult()); + index += rh.getConsumedChars(); + } + } catch(StringIndexOutOfBoundsException e) { + throw new ClassFormatException("Invalid method signature: " + signature); + } + + types = new String[vec.size()]; + vec.toArray(types); + return types; + } + + + /** + * Converts string containing the method return and argument types + * to a byte code method signature. + * + * @param returnType Return type of method (e.g. "char" or "java.lang.String[]") + * @param methodArgs Types of method arguments + * @return Byte code representation of method signature + */ + public final static String methodTypeToSignature(String returnType, String[] methodArgs) throws ClassFormatException { + + StringBuffer buf = new StringBuffer("("); + + if (methodArgs != null) { + for (int i=0; i < methodArgs.length; i++) { + String str = GenericSignatureParsingTest.getSignature(methodArgs[i]); + + if (str.equals("V")) // void can't be a method argument + throw new ClassFormatException("Invalid type: " + methodArgs[i]); + + buf.append(str); + } + } + + buf.append(")" + GenericSignatureParsingTest.getSignature(returnType)); + + return buf.toString(); + } } diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/MethodAnnotationsTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/MethodAnnotationsTest.java index 5b4bbbaa9..005eb3f69 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/MethodAnnotationsTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/MethodAnnotationsTest.java @@ -18,8 +18,8 @@ import java.util.Iterator; import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; -import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePair; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePairGen; import org.aspectj.apache.bcel.util.SyntheticRepository; @@ -65,7 +65,7 @@ public class MethodAnnotationsTest extends BcelTestCase { for (int i = 0; i < methods.length; i++) { Method m = methods[i]; - Annotation[] methodAnnotations = m.getAnnotations(); + AnnotationGen[] methodAnnotations = m.getAnnotations(); if (m.getName().equals(methodname)) { checkAnnotation(methodAnnotations[0],annotationName,annotationElementName,annotationElementValue); @@ -73,11 +73,11 @@ public class MethodAnnotationsTest extends BcelTestCase { } } - private void checkAnnotation(Annotation a,String name,String elementname,String elementvalue) { + private void checkAnnotation(AnnotationGen a,String name,String elementname,String elementvalue) { assertTrue("Expected annotation to have name "+name+" but it had name "+a.getTypeName(), a.getTypeName().equals(name)); assertTrue("Expected annotation to have one element but it had "+a.getValues().size(),a.getValues().size()==1); - ElementNameValuePair envp = (ElementNameValuePair)a.getValues().get(0); + ElementNameValuePairGen envp = (ElementNameValuePairGen)a.getValues().get(0); assertTrue("Expected element name "+elementname+" but was "+envp.getNameString(), elementname.equals(envp.getNameString())); assertTrue("Expected element value "+elementvalue+" but was "+envp.getValue().stringifyValue(), @@ -87,9 +87,9 @@ public class MethodAnnotationsTest extends BcelTestCase { // helper methods - public void checkValue(Annotation a,String name,String tostring) { + public void checkValue(AnnotationGen a,String name,String tostring) { for (Iterator i = a.getValues().iterator(); i.hasNext();) { - ElementNameValuePair element = (ElementNameValuePair) i.next(); + ElementNameValuePairGen element = (ElementNameValuePairGen) i.next(); if (element.getNameString().equals(name)) { if (!element.getValue().stringifyValue().equals(tostring)) { fail("Expected element "+name+" to have value "+tostring+" but it had value "+element.getValue().stringifyValue()); diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/ParameterAnnotationsTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/ParameterAnnotationsTest.java index d0afaef41..1ba040ea0 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/ParameterAnnotationsTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/ParameterAnnotationsTest.java @@ -17,28 +17,25 @@ import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.classfile.Attribute; import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; -import org.aspectj.apache.bcel.generic.ALOAD; -import org.aspectj.apache.bcel.generic.ASTORE; import org.aspectj.apache.bcel.generic.ArrayType; import org.aspectj.apache.bcel.generic.ClassGen; -import org.aspectj.apache.bcel.generic.ConstantPoolGen; -import org.aspectj.apache.bcel.generic.GOTO; +import org.aspectj.apache.bcel.classfile.ConstantPool; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; +import org.aspectj.apache.bcel.classfile.annotation.ArrayElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePairGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValueGen; +import org.aspectj.apache.bcel.generic.InstructionBranch; import org.aspectj.apache.bcel.generic.InstructionConstants; import org.aspectj.apache.bcel.generic.InstructionFactory; import org.aspectj.apache.bcel.generic.InstructionHandle; +import org.aspectj.apache.bcel.generic.InstructionLV; import org.aspectj.apache.bcel.generic.InstructionList; import org.aspectj.apache.bcel.generic.LocalVariableGen; import org.aspectj.apache.bcel.generic.MethodGen; import org.aspectj.apache.bcel.generic.ObjectType; -import org.aspectj.apache.bcel.generic.PUSH; import org.aspectj.apache.bcel.generic.Type; -import org.aspectj.apache.bcel.generic.annotation.AnnotationElementValueGen; -import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; -import org.aspectj.apache.bcel.generic.annotation.ArrayElementValueGen; -import org.aspectj.apache.bcel.generic.annotation.ElementNameValuePairGen; -import org.aspectj.apache.bcel.generic.annotation.ElementValueGen; -import org.aspectj.apache.bcel.generic.annotation.SimpleElementValueGen; import org.aspectj.apache.bcel.util.SyntheticRepository; /** @@ -66,7 +63,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { */ public void testParameterAnnotations_builtOK() { ClassGen clg = createClassGen("HelloWorld"); - ConstantPoolGen cpg = clg.getConstantPool(); + ConstantPool cpg = clg.getConstantPool(); InstructionList il = new InstructionList(); buildClassContentsWithAnnotatedMethods(clg,cpg,il,true); @@ -75,7 +72,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { assertTrue("Class should have 2 methods but has "+i,i==2); Method mainMethod = clg.getMethods()[0]; - Annotation[] annos = mainMethod.getAnnotationsOnParameter(0); + AnnotationGen[] annos = mainMethod.getAnnotationsOnParameter(0); assertTrue("Should be two annotation on the 'argv' parameter to main() but there are "+annos.length,annos.length==2); assertTrue("This annotation should contain the string 'fruit=Apples' but it is "+annos[0].toString(), annos[0].toString().indexOf("fruit=Apples")!=-1); @@ -90,7 +87,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { */ public void testParameterAnnotations_savedAndLoadedOK() throws ClassNotFoundException { ClassGen clg = createClassGen("HelloWorld"); - ConstantPoolGen cpg = clg.getConstantPool(); + ConstantPool cpg = clg.getConstantPool(); InstructionList il = new InstructionList(); buildClassContentsWithAnnotatedMethods(clg,cpg,il,true); @@ -105,7 +102,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { assertTrue("Class should have 2 methods but has "+i,i==2); Method mainMethod = clg.getMethods()[0]; - Annotation[] annos = mainMethod.getAnnotationsOnParameter(0); + AnnotationGen[] annos = mainMethod.getAnnotationsOnParameter(0); assertTrue("Should be two annotation on the 'argv' parameter to main() but there are "+annos.length,annos.length==2); assertTrue("This annotation should contain the string 'fruit=Apples' but it is "+annos[0].toString(), annos[0].toString().indexOf("fruit=Apples")!=-1); @@ -124,7 +121,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { JavaClass jc = getClassFrom("testcode.jar","AnnotatedParameters"); ClassGen clg = new ClassGen(jc); - ConstantPoolGen cpg = clg.getConstantPool(); + ConstantPool cpg = clg.getConstantPool(); // // Foo method looks like this: @@ -171,15 +168,15 @@ public class ParameterAnnotationsTest extends BcelTestCase { JavaClass jc2 = getClassFrom("temp2","AnnotatedParameters"); m = jc2.getMethods()[2]; - Annotation[] p1annotations = m.getAnnotationsOnParameter(0); - Annotation[] p2annotations = m.getAnnotationsOnParameter(1); + AnnotationGen[] p1annotations = m.getAnnotationsOnParameter(0); + AnnotationGen[] p2annotations = m.getAnnotationsOnParameter(1); assertTrue("Expected two annotations on the first parameter but found "+p1annotations.length,p1annotations.length==2); assertTrue("Expected two annotations on the second parameter but found "+p2annotations.length,p2annotations.length==2); String expectedString = "[@SimpleAnnotation(id=2),@SimpleStringAnnotation(fruit=Banana)]"; assertTrue("Expected formatted short string of '"+expectedString+"' but it was '"+dumpAnnotations(p1annotations)+"'", dumpAnnotations(p1annotations).equals(expectedString)); - expectedString = "[@SimpleAnnotation(id=3),@AnnotationEnumElement(enumval=Red)]"; + expectedString = "[@SimpleAnnotation(id=3),@AnnotationEnumElement(enumval=LSimpleEnum;Red)]"; assertTrue("Expected formatted short string of '"+expectedString+"' but it was '"+dumpAnnotations(p2annotations)+"'", dumpAnnotations(p2annotations).equals(expectedString)); @@ -193,7 +190,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { public void testParameterAnnotations_loadedThenModifiedWithInvisibleAnnotationThenSavedAndLoadedOK() throws ClassNotFoundException { JavaClass jc = getClassFrom("testcode.jar","AnnotatedParameters"); ClassGen clg = new ClassGen(jc); - ConstantPoolGen cpg = clg.getConstantPool(); + ConstantPool cpg = clg.getConstantPool(); // // Foo method looks like this: @@ -242,15 +239,15 @@ public class ParameterAnnotationsTest extends BcelTestCase { JavaClass jc2 = getClassFrom("temp3","AnnotatedParameters"); m = jc2.getMethods()[2]; - Annotation[] p1annotations = m.getAnnotationsOnParameter(0); - Annotation[] p2annotations = m.getAnnotationsOnParameter(1); + AnnotationGen[] p1annotations = m.getAnnotationsOnParameter(0); + AnnotationGen[] p2annotations = m.getAnnotationsOnParameter(1); assertTrue("Expected two annotations on the first parameter but found "+p1annotations.length,p1annotations.length==2); assertTrue("Expected two annotations on the second parameter but found "+p2annotations.length,p2annotations.length==2); String expectedString = "[@SimpleAnnotation(id=2),@SimpleStringAnnotation(fruit=Banana)]"; assertTrue("Expected formatted short string of '"+expectedString+"' but it was '"+dumpAnnotations(p1annotations)+"'", dumpAnnotations(p1annotations).equals(expectedString)); - expectedString = "[@SimpleAnnotation(id=3),@AnnotationEnumElement(enumval=Red)]"; + expectedString = "[@SimpleAnnotation(id=3),@AnnotationEnumElement(enumval=LSimpleEnum;Red)]"; assertTrue("Expected formatted short string of '"+expectedString+"' but it was '"+dumpAnnotations(p2annotations)+"'", dumpAnnotations(p2annotations).equals(expectedString)); @@ -263,12 +260,12 @@ public class ParameterAnnotationsTest extends BcelTestCase { // attributes vanish ! clg = new ClassGen(jc2); mg = new MethodGen(m,clg.getClassName(),clg.getConstantPool()); - Attribute[] as = mg.getAttributes(); - assertTrue("Should be 2 (RIPA and RVPA) but there are "+mg.getAttributes().length,mg.getAttributes().length==2); + List as = mg.getAttributes(); + assertTrue("Should be 2 (RIPA and RVPA) but there are "+mg.getAttributes().size(),mg.getAttributes().size()==2); List l = mg.getAnnotationsOnParameter(0); assertTrue("Should be 2 annotations on first parameter but there is only "+l.size()+":"+l.toString(), l.size()==2); - assertTrue("Should be 0 but there are "+mg.getAttributes().length,mg.getAttributes().length==0); + assertTrue("Should be 0 but there are "+mg.getAttributes().size(),mg.getAttributes().size()==0); } @@ -294,7 +291,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { dumpClass(cg,dir+File.separator+fname); } - private void buildClassContentsWithAnnotatedMethods(ClassGen cg, ConstantPoolGen cp, InstructionList il,boolean addParameterAnnotations) { + private void buildClassContentsWithAnnotatedMethods(ClassGen cg, ConstantPool cp, InstructionList il,boolean addParameterAnnotations) { // Create method 'public static void main(String[]argv)' MethodGen mg = createMethodGen("main",il,cp); InstructionFactory factory = new InstructionFactory(cg); @@ -323,14 +320,14 @@ public class ParameterAnnotationsTest extends BcelTestCase { LocalVariableGen lg = mg.addLocalVariable("in", new ObjectType( "java.io.BufferedReader"), null, null); int in = lg.getIndex(); - lg.setStart(il.append(new ASTORE(in))); // "in" valid from here + lg.setStart(il.append(InstructionFactory.createASTORE(in))); // "in" valid from here // Create local variable name and initialize it to null lg = mg.addLocalVariable("name", Type.STRING, null, null); int name = lg.getIndex(); il.append(InstructionConstants.ACONST_NULL); - lg.setStart(il.append(new ASTORE(name))); // "name" valid from here + lg.setStart(il.append(InstructionFactory.createASTORE(name))); // "name" valid from here // Create try-catch block: We remember the start of the block, read a // line from the standard input and store it into the variable name . @@ -345,13 +342,13 @@ public class ParameterAnnotationsTest extends BcelTestCase { // il.append(new ALOAD(in)); // il.append(factory.createInvoke("java.io.BufferedReader", "readLine", // Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL)); - InstructionHandle try_start = il.append(new PUSH(cp,"Andy")); - il.append(new ASTORE(name)); + InstructionHandle try_start = il.append(InstructionFactory.PUSH(cp,"Andy")); + il.append(InstructionFactory.createASTORE(name)); // Upon normal execution we jump behind exception handler, the target // address is not known yet. - GOTO g = new GOTO(null); + InstructionBranch g = new InstructionBranch(Constants.GOTO); InstructionHandle try_end = il.append(g); // We add the exception handler which simply returns from the method. @@ -359,7 +356,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { LocalVariableGen var_ex = mg.addLocalVariable("ex",Type.getType("Ljava.io.IOException;"),null,null); int var_ex_slot = var_ex.getIndex(); - InstructionHandle handler = il.append(new ASTORE(var_ex_slot)); + InstructionHandle handler = il.append(InstructionFactory.createASTORE(var_ex_slot)); var_ex.setStart(handler); var_ex.setEnd(il.append(InstructionConstants.RETURN)); @@ -378,12 +375,12 @@ public class ParameterAnnotationsTest extends BcelTestCase { il.append(factory.createNew(Type.STRINGBUFFER)); il.append(InstructionConstants.DUP); - il.append(new PUSH(cp, "Hello, ")); + il.append(InstructionFactory.PUSH(cp, "Hello, ")); il .append(factory.createInvoke("java.lang.StringBuffer", "", Type.VOID, new Type[] { Type.STRING }, Constants.INVOKESPECIAL)); - il.append(new ALOAD(name)); + il.append(new InstructionLV(Constants.ALOAD,name)); il.append(factory.createInvoke("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { Type.STRING }, Constants.INVOKEVIRTUAL)); @@ -408,7 +405,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { cg.addEmptyConstructor(Constants.ACC_PUBLIC); } - private void buildClassContents(ClassGen cg, ConstantPoolGen cp, InstructionList il) { + private void buildClassContents(ClassGen cg, ConstantPool cp, InstructionList il) { // Create method 'public static void main(String[]argv)' MethodGen mg = createMethodGen("main",il,cp); InstructionFactory factory = new InstructionFactory(cg); @@ -436,14 +433,14 @@ public class ParameterAnnotationsTest extends BcelTestCase { LocalVariableGen lg = mg.addLocalVariable("in", new ObjectType( "java.io.BufferedReader"), null, null); int in = lg.getIndex(); - lg.setStart(il.append(new ASTORE(in))); // "in" valid from here + lg.setStart(il.append(InstructionFactory.createASTORE(in))); // "in" valid from here // Create local variable name and initialize it to null lg = mg.addLocalVariable("name", Type.STRING, null, null); int name = lg.getIndex(); il.append(InstructionConstants.ACONST_NULL); - lg.setStart(il.append(new ASTORE(name))); // "name" valid from here + lg.setStart(il.append(InstructionFactory.createASTORE(name))); // "name" valid from here // Create try-catch block: We remember the start of the block, read a // line from the standard input and store it into the variable name . @@ -458,13 +455,13 @@ public class ParameterAnnotationsTest extends BcelTestCase { // il.append(new ALOAD(in)); // il.append(factory.createInvoke("java.io.BufferedReader", "readLine", // Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL)); - InstructionHandle try_start = il.append(new PUSH(cp,"Andy")); - il.append(new ASTORE(name)); + InstructionHandle try_start = il.append(InstructionFactory.PUSH(cp,"Andy")); + il.append(InstructionFactory.createASTORE(name)); // Upon normal execution we jump behind exception handler, the target // address is not known yet. - GOTO g = new GOTO(null); + InstructionBranch g = new InstructionBranch(Constants.GOTO); InstructionHandle try_end = il.append(g); // We add the exception handler which simply returns from the method. @@ -472,7 +469,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { LocalVariableGen var_ex = mg.addLocalVariable("ex",Type.getType("Ljava.io.IOException;"),null,null); int var_ex_slot = var_ex.getIndex(); - InstructionHandle handler = il.append(new ASTORE(var_ex_slot)); + InstructionHandle handler = il.append(InstructionFactory.createASTORE(var_ex_slot)); var_ex.setStart(handler); var_ex.setEnd(il.append(InstructionConstants.RETURN)); @@ -491,12 +488,12 @@ public class ParameterAnnotationsTest extends BcelTestCase { il.append(factory.createNew(Type.STRINGBUFFER)); il.append(InstructionConstants.DUP); - il.append(new PUSH(cp, "Hello, ")); + il.append(InstructionFactory.PUSH(cp, "Hello, ")); il .append(factory.createInvoke("java.lang.StringBuffer", "", Type.VOID, new Type[] { Type.STRING }, Constants.INVOKESPECIAL)); - il.append(new ALOAD(name)); + il.append(InstructionFactory.createALOAD(name)); il.append(factory.createInvoke("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { Type.STRING }, Constants.INVOKEVIRTUAL)); @@ -535,7 +532,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { "", Constants.ACC_PUBLIC | Constants.ACC_SUPER, null); } - private MethodGen createMethodGen(String methodname,InstructionList il,ConstantPoolGen cp) { + private MethodGen createMethodGen(String methodname,InstructionList il,ConstantPool cp) { return new MethodGen( Constants.ACC_STATIC | Constants.ACC_PUBLIC, // access flags Type.VOID, // return type @@ -546,7 +543,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { } - public AnnotationGen createSimpleVisibleAnnotation(ConstantPoolGen cp) { + public AnnotationGen createSimpleVisibleAnnotation(ConstantPool cp) { SimpleElementValueGen evg = new SimpleElementValueGen( ElementValueGen.PRIMITIVE_INT, cp, 4); @@ -561,7 +558,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { return a; } - public AnnotationGen createCombinedAnnotation(ConstantPoolGen cp) { + public AnnotationGen createCombinedAnnotation(ConstantPool cp) { // Create an annotation instance AnnotationGen a = createSimpleVisibleAnnotation(cp); ArrayElementValueGen array = new ArrayElementValueGen(cp); @@ -572,7 +569,7 @@ public class ParameterAnnotationsTest extends BcelTestCase { return new AnnotationGen(new ObjectType("CombinedAnnotation"),elements,true,cp); } - public AnnotationGen createSimpleInvisibleAnnotation(ConstantPoolGen cp) { + public AnnotationGen createSimpleInvisibleAnnotation(ConstantPool cp) { SimpleElementValueGen evg = new SimpleElementValueGen( ElementValueGen.PRIMITIVE_INT, cp, 4); diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java index 4c8c463cb..ac9023f22 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java @@ -14,6 +14,7 @@ package org.aspectj.apache.bcel.classfile.tests; import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -21,17 +22,16 @@ import org.aspectj.apache.bcel.classfile.Attribute; import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Utility; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; -import org.aspectj.apache.bcel.classfile.annotation.AnnotationElementValue; -import org.aspectj.apache.bcel.classfile.annotation.ArrayElementValue; -import org.aspectj.apache.bcel.classfile.annotation.ClassElementValue; -import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePair; -import org.aspectj.apache.bcel.classfile.annotation.ElementValue; -import org.aspectj.apache.bcel.classfile.annotation.EnumElementValue; -import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValue; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; +import org.aspectj.apache.bcel.classfile.annotation.ArrayElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.ClassElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePairGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementValueGen; +import org.aspectj.apache.bcel.classfile.annotation.EnumElementValueGen; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations; +import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValueGen; import org.aspectj.apache.bcel.generic.ClassGen; -import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; import org.aspectj.apache.bcel.util.SyntheticRepository; @@ -60,17 +60,17 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { List anns = rva.getAnnotations(); assertTrue("Should be one annotation but found "+anns.size(), anns.size()==1); - Annotation ann = (Annotation) anns.get(0); + AnnotationGen ann = (AnnotationGen) anns.get(0); assertTrue("Should be called 'SimpleAnnotation' but was called "+ann.getTypeName(), ann.getTypeName().equals("SimpleAnnotation")); List l = ann.getValues(); assertTrue("Should be one value for annotation 'SimpleAnnotation' but found "+l.size(), l.size()==1); - ElementNameValuePair envp = (ElementNameValuePair)l.get(0); + ElementNameValuePairGen envp = (ElementNameValuePairGen)l.get(0); assertTrue("Name of element in SimpleAnnotation should be 'id' but it is "+envp.getNameString(), envp.getNameString().equals("id")); - SimpleElementValue evalue = (SimpleElementValue)envp.getValue(); - assertTrue("'id' should be of type int, but it is "+evalue.getElementValueType(),evalue.getElementValueType()==SimpleElementValue.PRIMITIVE_INT); + SimpleElementValueGen evalue = (SimpleElementValueGen)envp.getValue(); + assertTrue("'id' should be of type int, but it is "+evalue.getElementValueType(),evalue.getElementValueType()==SimpleElementValueGen.PRIMITIVE_INT); assertTrue("'id' should have value 4 but it is "+evalue.getValueInt(), evalue.getValueInt()==4); } @@ -79,7 +79,7 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { SyntheticRepository repos = createRepos("testcode.jar"); JavaClass clazz = repos.loadClass("SimpleAnnotatedClass"); ConstantPool pool = clazz.getConstantPool(); - Annotation[] anns = clazz.getAnnotations(); + AnnotationGen[] anns = clazz.getAnnotations(); assertTrue("Expected one annotation on SimpleAnnotatedClass class but got "+anns.length, anns.length==1); } @@ -88,7 +88,7 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { SyntheticRepository repos = createRepos("testcode.jar"); JavaClass clazz = repos.loadClass("SimpleAnnotatedClass"); ConstantPool pool = clazz.getConstantPool(); - Annotation[] anns = clazz.getAnnotations(); + AnnotationGen[] anns = clazz.getAnnotations(); assertTrue("Expected one annotation on SimpleAnnotatedClass class but got "+anns.length, anns.length==1); @@ -99,7 +99,7 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { SyntheticRepository repos2 = createRepos("."); JavaClass clazz2 = repos.loadClass("SimpleAnnotatedClass"); ConstantPool pool2 = clazz2.getConstantPool(); - Annotation[] anns2 = clazz2.getAnnotations(); + AnnotationGen[] anns2 = clazz2.getAnnotations(); assertTrue("Expected one annotation on SimpleAnnotatedClass class but got "+anns2.length, anns2.length==1); @@ -135,17 +135,17 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { } private void verifyAnnotationStringElement(JavaClass clazz) { - Annotation[] anns = clazz.getAnnotations(); + AnnotationGen[] anns = clazz.getAnnotations(); assertTrue("should be one annotation but found "+anns.length,anns.length==1); - Annotation ann = anns[0]; + AnnotationGen ann = anns[0]; assertTrue("should be called 'AnnotationStringElement' but was called "+ann.getTypeName(), ann.getTypeName().equals("AnnotationStringElement")); List l = ann.getValues(); assertTrue("Should be one value but there were "+l.size(),l.size()==1); - ElementNameValuePair nvp = (ElementNameValuePair)l.get(0); + ElementNameValuePairGen nvp = (ElementNameValuePairGen)l.get(0); assertTrue("Name of element should be 'stringval' but was "+nvp.getNameString(), nvp.getNameString().equals("stringval")); - SimpleElementValue ev = (SimpleElementValue)nvp.getValue(); + SimpleElementValueGen ev = (SimpleElementValueGen)nvp.getValue(); assertTrue("String value should be 'hello' but was '"+ev.getValueString()+"'", ev.getValueString().equals("hello")); } @@ -178,15 +178,15 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { } private void verifyComplexAnnotation(JavaClass clazz) { - Annotation[] anns = clazz.getAnnotations(); + AnnotationGen[] anns = clazz.getAnnotations(); assertTrue("Should be one annotation but found "+anns.length,anns.length==1); - Annotation ann = anns[0]; + AnnotationGen ann = anns[0]; assertTrue("Should be called 'ComplexAnnotation' but was called "+ann.getTypeName(), ann.getTypeName().equals("ComplexAnnotation")); List l = ann.getValues(); assertTrue("Should be eight values for annotation 'ComplexAnnotation' but found "+l.size(), l.size()==8); - List names = Utility.getListOfAnnotationNames(ann); + List names = RuntimeVisibleAnnotationAttributeTest.getListOfAnnotationNames(ann); assertTrue("Cant find expected element ",names.contains("ival")); assertTrue("Cant find expected element ",names.contains("dval")); assertTrue("Cant find expected element ",names.contains("zval")); @@ -207,9 +207,9 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { } - private void checkValue(Annotation a,String name,String tostring) { + private void checkValue(AnnotationGen a,String name,String tostring) { for (Iterator i = a.getValues().iterator(); i.hasNext();) { - ElementNameValuePair element = (ElementNameValuePair) i.next(); + ElementNameValuePairGen element = (ElementNameValuePairGen) i.next(); if (element.getNameString().equals(name)) { if (!element.getValue().stringifyValue().equals(tostring)) { fail("Expected element "+name+" to have value "+tostring+" but it had value "+element.getValue().stringifyValue()); @@ -232,7 +232,7 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { public void testAnnotationClassElementCopying() throws ClassNotFoundException { SyntheticRepository repos = createRepos("testcode.jar"); JavaClass clazz = repos.loadClass("AnnotatedWithClassClass"); - Annotation[] anns = clazz.getAnnotations(); + AnnotationGen[] anns = clazz.getAnnotations(); ClassGen cg = new ClassGen(clazz); // Checks we can copy class values in an annotation new AnnotationGen(anns[0],cg.getConstantPool(),true); @@ -256,17 +256,17 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { } private void verifyClassAnnotation(JavaClass clazz) { - Annotation[] anns = clazz.getAnnotations(); + AnnotationGen[] anns = clazz.getAnnotations(); assertTrue("should be one annotation but found "+anns.length,anns.length==1); - Annotation ann = anns[0]; + AnnotationGen ann = anns[0]; assertTrue("should be called 'AnnotationClassElement' but was called "+ann.getTypeName(), ann.getTypeName().equals("AnnotationClassElement")); List l = ann.getValues(); assertTrue("Should be one value but there were "+l.size(),l.size()==1); - ElementNameValuePair nvp = (ElementNameValuePair)l.get(0); + ElementNameValuePairGen nvp = (ElementNameValuePairGen)l.get(0); assertTrue("Name of element should be 'clz' but was "+nvp.getNameString(), nvp.getNameString().equals("clz")); - ClassElementValue ev = (ClassElementValue)nvp.getValue(); + ClassElementValueGen ev = (ClassElementValueGen)nvp.getValue(); assertTrue("String value should be 'Ljava/lang/Integer;' but was '"+ev.getClassString()+"'", ev.getClassString().equals("Ljava/lang/Integer;")); @@ -298,20 +298,20 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { } public void verifyAnnotationEnumElement(JavaClass clazz) { - Annotation[] anns = clazz.getAnnotations(); + AnnotationGen[] anns = clazz.getAnnotations(); assertTrue("should be one annotation but found "+anns.length,anns.length==1); - Annotation ann = anns[0]; + AnnotationGen ann = anns[0]; assertTrue("should be called 'AnnotationEnumElement' but was called "+ann.getTypeName(), ann.getTypeName().equals("AnnotationEnumElement")); List l = ann.getValues(); assertTrue("Should be one value but there were "+l.size(),l.size()==1); - ElementNameValuePair nvp = (ElementNameValuePair)l.get(0); + ElementNameValuePairGen nvp = (ElementNameValuePairGen)l.get(0); assertTrue("Name of element should be 'enumval' but was "+nvp.getNameString(), nvp.getNameString().equals("enumval")); - ElementValue ev = nvp.getValue(); - assertTrue("Should be of type EnumElementValue but is "+ev,ev instanceof EnumElementValue); - EnumElementValue eev = (EnumElementValue)ev; - assertTrue("Should be an enum type value but is "+eev.getElementValueType(),eev.getElementValueType()==SimpleElementValue.ENUM_CONSTANT); + ElementValueGen ev = nvp.getValue(); + assertTrue("Should be of type EnumElementValue but is "+ev,ev instanceof EnumElementValueGen); + EnumElementValueGen eev = (EnumElementValueGen)ev; + assertTrue("Should be an enum type value but is "+eev.getElementValueType(),eev.getElementValueType()==SimpleElementValueGen.ENUM_CONSTANT); assertTrue("Enum type for annotation should be 'SimpleEnum' but is "+Utility.signatureToString(eev.getEnumTypeString()),Utility.signatureToString(eev.getEnumTypeString()).equals("SimpleEnum")); assertTrue("String value should be 'Red' but was '"+eev.getEnumValueString()+"'", eev.getEnumValueString().equals("Red")); @@ -323,7 +323,7 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { public void testAnnotationArraysOfAnnotations() throws ClassNotFoundException { SyntheticRepository repos = createRepos("testcode.jar"); JavaClass clazz = repos.loadClass("AnnotatedWithCombinedAnnotation"); - Annotation[] anns = clazz.getAnnotations(); + AnnotationGen[] anns = clazz.getAnnotations(); assertTrue("should be one annotation but found "+anns.length,anns.length==1); checkCombinedAnnotation(anns[0]); } @@ -331,7 +331,7 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { public void testAnnotationArraysOfAnnotationsReadWrite() throws ClassNotFoundException, IOException { SyntheticRepository repos = createRepos("testcode.jar"); JavaClass clazz = repos.loadClass("AnnotatedWithCombinedAnnotation"); - Annotation[] anns = clazz.getAnnotations(); + AnnotationGen[] anns = clazz.getAnnotations(); assertTrue("should be one annotation but found "+anns.length,anns.length==1); checkCombinedAnnotation(anns[0]); @@ -341,7 +341,7 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { SyntheticRepository repos2 = createRepos("."); JavaClass clazz2 = repos2.loadClass("AnnotatedWithCombinedAnnotation"); - Annotation[] anns2 = clazz2.getAnnotations(); + AnnotationGen[] anns2 = clazz2.getAnnotations(); assertTrue("should be one annotation but found "+anns2.length,anns2.length==1); checkCombinedAnnotation(anns2[0]); @@ -349,29 +349,29 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { } - private void checkCombinedAnnotation(Annotation ann) { + private void checkCombinedAnnotation(AnnotationGen ann) { assertTrue("should be called 'CombinedAnnotation' but was called "+ann.getTypeName(), ann.getTypeName().equals("CombinedAnnotation")); List l = ann.getValues(); assertTrue("Should be one value but there were "+l.size(),l.size()==1); - ElementNameValuePair nvp = (ElementNameValuePair)l.get(0); + ElementNameValuePairGen nvp = (ElementNameValuePairGen)l.get(0); assertTrue("Name of element should be 'value' but was "+nvp.getNameString(), nvp.getNameString().equals("value")); - ElementValue ev = nvp.getValue(); - assertTrue("Should be of type ArrayElementValue but is "+ev,ev instanceof ArrayElementValue); - ArrayElementValue aev = (ArrayElementValue)ev; + ElementValueGen ev = nvp.getValue(); + assertTrue("Should be of type ArrayElementValue but is "+ev,ev instanceof ArrayElementValueGen); + ArrayElementValueGen aev = (ArrayElementValueGen)ev; assertTrue("Array element value should be of size 1 but is "+aev.getElementValuesArraySize(), aev.getElementValuesArraySize()==1); - ElementValue[] evs = aev.getElementValuesArray(); + ElementValueGen[] evs = aev.getElementValuesArray(); assertTrue("Entry in the array should be AnnotationElementValue but is "+evs[0], - evs[0] instanceof AnnotationElementValue); - AnnotationElementValue inner_ev = (AnnotationElementValue)evs[0]; - Annotation a = inner_ev.getAnnotation(); + evs[0] instanceof AnnotationElementValueGen); + AnnotationElementValueGen inner_ev = (AnnotationElementValueGen)evs[0]; + AnnotationGen a = inner_ev.getAnnotation(); assertTrue("Should be SimpleAnnotation but is "+a.getTypeName(),a.getTypeName().equals("SimpleAnnotation")); List envps = a.getValues(); assertTrue("Should be one name value pair but found "+envps.size(),envps.size()==1); - ElementNameValuePair envp = (ElementNameValuePair) envps.get(0); + ElementNameValuePairGen envp = (ElementNameValuePairGen) envps.get(0); assertTrue("Name should be 'id' but it is "+envp.getNameString(),envp.getNameString().equals("id")); assertTrue("Value of 'id' should be 4 but it is "+envp.getValue().stringifyValue(), envp.getValue().stringifyValue().equals("4")); @@ -381,5 +381,15 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase { protected void tearDown() throws Exception { super.tearDown(); } + + public static List getListOfAnnotationNames(AnnotationGen a) { + List l = a.getValues(); + List names = new ArrayList(); + for (Iterator i = l.iterator(); i.hasNext();) { + ElementNameValuePairGen element = (ElementNameValuePairGen) i.next(); + names.add(element.getNameString()); + } + return names; + } } diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleParameterAnnotationAttributeTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleParameterAnnotationAttributeTest.java index fad1dad2c..424d5352f 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleParameterAnnotationAttributeTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleParameterAnnotationAttributeTest.java @@ -19,8 +19,8 @@ import java.util.Iterator; import org.aspectj.apache.bcel.classfile.Attribute; import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; -import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePair; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePairGen; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleParameterAnnotations; import org.aspectj.apache.bcel.util.SyntheticRepository; @@ -46,12 +46,12 @@ public class RuntimeVisibleParameterAnnotationAttributeTest extends BcelTestCase assertTrue("foo takes two parameters, not "+paramAnns.getParameterAnnotations().size(), paramAnns.getParameterAnnotations().size()==2); - Annotation[] firstParamAnnotations = paramAnns.getAnnotationsOnParameter(0); + AnnotationGen[] firstParamAnnotations = paramAnns.getAnnotationsOnParameter(0); checkAnnotation(firstParamAnnotations[0],"SimpleAnnotation","id","2"); - Annotation[] secondParamAnnotations = paramAnns.getAnnotationsOnParameter(1); + AnnotationGen[] secondParamAnnotations = paramAnns.getAnnotationsOnParameter(1); checkAnnotation(secondParamAnnotations[0],"SimpleAnnotation","id","3"); - checkAnnotation(secondParamAnnotations[1],"AnnotationEnumElement","enumval","Red"); + checkAnnotation(secondParamAnnotations[1],"AnnotationEnumElement","enumval","LSimpleEnum;Red"); } if (m.getName().equals("main")) { @@ -60,7 +60,7 @@ public class RuntimeVisibleParameterAnnotationAttributeTest extends BcelTestCase assertTrue("main takes one parameter, not "+paramAnns.getParameterAnnotations().size(), paramAnns.getParameterAnnotations().size()==1); - Annotation[] firstParamAnnotations = paramAnns.getAnnotationsOnParameter(0); + AnnotationGen[] firstParamAnnotations = paramAnns.getAnnotationsOnParameter(0); checkAnnotation(firstParamAnnotations[0],"SimpleAnnotation","id","1"); } } @@ -98,22 +98,22 @@ public class RuntimeVisibleParameterAnnotationAttributeTest extends BcelTestCase Method m = methods[i]; if (m.getName().equals("foo")) { - Annotation[] firstParamAnnotations = m.getAnnotationsOnParameter(0); + AnnotationGen[] firstParamAnnotations = m.getAnnotationsOnParameter(0); checkAnnotation(firstParamAnnotations[0],"SimpleAnnotation","id","2"); - Annotation[] secondParamAnnotations = m.getAnnotationsOnParameter(1); + AnnotationGen[] secondParamAnnotations = m.getAnnotationsOnParameter(1); checkAnnotation(secondParamAnnotations[0],"SimpleAnnotation","id","3"); - checkAnnotation(secondParamAnnotations[1],"AnnotationEnumElement","enumval","Red"); + checkAnnotation(secondParamAnnotations[1],"AnnotationEnumElement","enumval","LSimpleEnum;Red"); } } } - private void checkAnnotation(Annotation a,String name,String elementname,String elementvalue) { + private void checkAnnotation(AnnotationGen a,String name,String elementname,String elementvalue) { assertTrue("Expected annotation to have name "+name+" but it had name "+a.getTypeName(), a.getTypeName().equals(name)); assertTrue("Expected annotation to have one element but it had "+a.getValues().size(),a.getValues().size()==1); - ElementNameValuePair envp = (ElementNameValuePair)a.getValues().get(0); + ElementNameValuePairGen envp = (ElementNameValuePairGen)a.getValues().get(0); assertTrue("Expected element name "+elementname+" but was "+envp.getNameString(), elementname.equals(envp.getNameString())); assertTrue("Expected element value "+elementvalue+" but was "+envp.getValue().stringifyValue(), @@ -123,9 +123,9 @@ public class RuntimeVisibleParameterAnnotationAttributeTest extends BcelTestCase // helper methods - public void checkValue(Annotation a,String name,String tostring) { + public void checkValue(AnnotationGen a,String name,String tostring) { for (Iterator i = a.getValues().iterator(); i.hasNext();) { - ElementNameValuePair element = (ElementNameValuePair) i.next(); + ElementNameValuePairGen element = (ElementNameValuePairGen) i.next(); if (element.getNameString().equals(name)) { if (!element.getValue().stringifyValue().equals(tostring)) { fail("Expected element "+name+" to have value "+tostring+" but it had value "+element.getValue().stringifyValue()); diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/TypeAnnotationsTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/TypeAnnotationsTest.java index 5b2e17af8..dcb36432f 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/TypeAnnotationsTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/TypeAnnotationsTest.java @@ -13,8 +13,8 @@ package org.aspectj.apache.bcel.classfile.tests; import org.aspectj.apache.bcel.classfile.JavaClass; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; import org.aspectj.apache.bcel.generic.ClassGen; -import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; public class TypeAnnotationsTest extends BcelTestCase { diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/UtilTests.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/UtilTests.java index 1ed7e8381..8c9fb5024 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/UtilTests.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/UtilTests.java @@ -12,6 +12,7 @@ package org.aspectj.apache.bcel.classfile.tests; +import org.aspectj.apache.bcel.classfile.ClassFormatException; import org.aspectj.apache.bcel.classfile.Utility; import org.aspectj.apache.bcel.generic.Type; @@ -24,7 +25,7 @@ public class UtilTests extends TestCase { } public void testUtilityClassSignatureManipulation1() { - String[] ss = Utility.methodSignatureArgumentTypes("(Ljava/lang/String;I[Ljava/lang/Integer;)"); + String[] ss = UtilTests.methodSignatureArgumentTypes("(Ljava/lang/String;I[Ljava/lang/Integer;)"); assertTrue("should be 3 not "+ss.length,ss.length==3); assertTrue("first should be 'String', not "+ss[0],ss[0].equals("String")); @@ -53,6 +54,15 @@ public class UtilTests extends TestCase { protected void tearDown() throws Exception { super.tearDown(); } + + /** + * @param signature Method signature + * @return Array of argument types + * @throws ClassFormatException + */ + public static final String[] methodSignatureArgumentTypes(String signature) throws ClassFormatException { + return GenericSignatureParsingTest.methodSignatureArgumentTypes(signature, true); + } } diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/VarargsTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/VarargsTest.java index 52590bf71..a6f8e8021 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/VarargsTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/VarargsTest.java @@ -18,8 +18,8 @@ import java.util.Iterator; import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.classfile.annotation.Annotation; -import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePair; +import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; +import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePairGen; import org.aspectj.apache.bcel.util.SyntheticRepository; @@ -77,9 +77,9 @@ public class VarargsTest extends BcelTestCase { // helper methods - public void checkValue(Annotation a,String name,String tostring) { + public void checkValue(AnnotationGen a,String name,String tostring) { for (Iterator i = a.getValues().iterator(); i.hasNext();) { - ElementNameValuePair element = (ElementNameValuePair) i.next(); + ElementNameValuePairGen element = (ElementNameValuePairGen) i.next(); if (element.getNameString().equals(name)) { if (!element.getValue().stringifyValue().equals(tostring)) { fail("Expected element "+name+" to have value "+tostring+" but it had value "+element.getValue().stringifyValue()); diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/DescendingVisitor.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/DescendingVisitor.java similarity index 80% rename from bcel-builder/src/org/aspectj/apache/bcel/classfile/DescendingVisitor.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/DescendingVisitor.java index 7d61dc2d1..2e77bd2a4 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/DescendingVisitor.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/DescendingVisitor.java @@ -1,4 +1,4 @@ -package org.aspectj.apache.bcel.classfile; +package org.aspectj.apache.bcel.verifier; /* ==================================================================== * The Apache Software License, Version 1.1 @@ -55,6 +55,45 @@ package org.aspectj.apache.bcel.classfile; */ import java.util.Stack; +import org.aspectj.apache.bcel.classfile.AnnotationDefault; +import org.aspectj.apache.bcel.classfile.Attribute; +import org.aspectj.apache.bcel.classfile.AttributeUtils; +import org.aspectj.apache.bcel.classfile.Code; +import org.aspectj.apache.bcel.classfile.CodeException; +import org.aspectj.apache.bcel.classfile.Constant; +import org.aspectj.apache.bcel.classfile.ConstantClass; +import org.aspectj.apache.bcel.classfile.ConstantDouble; +import org.aspectj.apache.bcel.classfile.ConstantFieldref; +import org.aspectj.apache.bcel.classfile.ConstantFloat; +import org.aspectj.apache.bcel.classfile.ConstantInteger; +import org.aspectj.apache.bcel.classfile.ConstantInterfaceMethodref; +import org.aspectj.apache.bcel.classfile.ConstantLong; +import org.aspectj.apache.bcel.classfile.ConstantMethodref; +import org.aspectj.apache.bcel.classfile.ConstantNameAndType; +import org.aspectj.apache.bcel.classfile.ConstantPool; +import org.aspectj.apache.bcel.classfile.ConstantString; +import org.aspectj.apache.bcel.classfile.ConstantUtf8; +import org.aspectj.apache.bcel.classfile.ConstantValue; +import org.aspectj.apache.bcel.classfile.Deprecated; +import org.aspectj.apache.bcel.classfile.EnclosingMethod; +import org.aspectj.apache.bcel.classfile.ExceptionTable; +import org.aspectj.apache.bcel.classfile.Field; +import org.aspectj.apache.bcel.classfile.InnerClass; +import org.aspectj.apache.bcel.classfile.InnerClasses; +import org.aspectj.apache.bcel.classfile.JavaClass; +import org.aspectj.apache.bcel.classfile.LineNumber; +import org.aspectj.apache.bcel.classfile.LineNumberTable; +import org.aspectj.apache.bcel.classfile.LocalVariable; +import org.aspectj.apache.bcel.classfile.LocalVariableTable; +import org.aspectj.apache.bcel.classfile.LocalVariableTypeTable; +import org.aspectj.apache.bcel.classfile.Method; +import org.aspectj.apache.bcel.classfile.Signature; +import org.aspectj.apache.bcel.classfile.SourceFile; +import org.aspectj.apache.bcel.classfile.StackMap; +import org.aspectj.apache.bcel.classfile.StackMapEntry; +import org.aspectj.apache.bcel.classfile.Synthetic; +import org.aspectj.apache.bcel.classfile.Unknown; +import org.aspectj.apache.bcel.classfile.ClassVisitor; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleParameterAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations; @@ -66,12 +105,12 @@ import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleParameterAnnot * class supplies the traversal strategy, other classes can make use * of it. * - * @version $Id: DescendingVisitor.java,v 1.2 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: DescendingVisitor.java,v 1.2 2008/05/28 23:53:00 aclement Exp $ * @author M. Dahm */ -public class DescendingVisitor implements Visitor { +public class DescendingVisitor implements ClassVisitor { private JavaClass clazz; - private Visitor visitor; + private ClassVisitor visitor; private Stack stack = new Stack(); /** @return container of current entitity, i.e., predecessor during traversal @@ -103,7 +142,7 @@ public class DescendingVisitor implements Visitor { * @param clazz Class to traverse * @param visitor visitor object to apply to all components */ - public DescendingVisitor(JavaClass clazz, Visitor visitor) { + public DescendingVisitor(JavaClass clazz, ClassVisitor visitor) { this.clazz = clazz; this.visitor = visitor; } @@ -125,10 +164,8 @@ public class DescendingVisitor implements Visitor { for(int i=0; i < methods.length; i++) methods[i].accept(this); - Attribute[] attributes = clazz.getAttributes(); - for(int i=0; i < attributes.length; i++) - attributes[i].accept(this); - + AttributeUtils.accept(clazz.getAttributes(),visitor); +// clazz.getAttributes().accept(this); clazz.getConstantPool().accept(this); stack.pop(); } @@ -136,10 +173,8 @@ public class DescendingVisitor implements Visitor { public void visitField(Field field) { stack.push(field); field.accept(visitor); - - Attribute[] attributes = field.getAttributes(); - for(int i=0; i < attributes.length; i++) - attributes[i].accept(this); + AttributeUtils.accept(field.getAttributes(),visitor); +// field.getAttributes().accept(this); stack.pop(); } @@ -152,11 +187,7 @@ public class DescendingVisitor implements Visitor { public void visitMethod(Method method) { stack.push(method); method.accept(visitor); - - Attribute[] attributes = method.getAttributes(); - for(int i=0; i < attributes.length; i++) - attributes[i].accept(this); - + AttributeUtils.accept(method.getAttributes(),visitor); stack.pop(); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/EmptyVisitor.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyClassVisitor.java similarity index 71% rename from bcel-builder/src/org/aspectj/apache/bcel/classfile/EmptyVisitor.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyClassVisitor.java index 1113f0af5..9d9f968bd 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/EmptyVisitor.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyClassVisitor.java @@ -1,4 +1,4 @@ -package org.aspectj.apache.bcel.classfile; +package org.aspectj.apache.bcel.verifier; /* ==================================================================== * The Apache Software License, Version 1.1 @@ -54,6 +54,42 @@ package org.aspectj.apache.bcel.classfile; * . */ +import org.aspectj.apache.bcel.classfile.AnnotationDefault; +import org.aspectj.apache.bcel.classfile.Code; +import org.aspectj.apache.bcel.classfile.CodeException; +import org.aspectj.apache.bcel.classfile.ConstantClass; +import org.aspectj.apache.bcel.classfile.ConstantDouble; +import org.aspectj.apache.bcel.classfile.ConstantFieldref; +import org.aspectj.apache.bcel.classfile.ConstantFloat; +import org.aspectj.apache.bcel.classfile.ConstantInteger; +import org.aspectj.apache.bcel.classfile.ConstantInterfaceMethodref; +import org.aspectj.apache.bcel.classfile.ConstantLong; +import org.aspectj.apache.bcel.classfile.ConstantMethodref; +import org.aspectj.apache.bcel.classfile.ConstantNameAndType; +import org.aspectj.apache.bcel.classfile.ConstantPool; +import org.aspectj.apache.bcel.classfile.ConstantString; +import org.aspectj.apache.bcel.classfile.ConstantUtf8; +import org.aspectj.apache.bcel.classfile.ConstantValue; +import org.aspectj.apache.bcel.classfile.Deprecated; +import org.aspectj.apache.bcel.classfile.EnclosingMethod; +import org.aspectj.apache.bcel.classfile.ExceptionTable; +import org.aspectj.apache.bcel.classfile.Field; +import org.aspectj.apache.bcel.classfile.InnerClass; +import org.aspectj.apache.bcel.classfile.InnerClasses; +import org.aspectj.apache.bcel.classfile.JavaClass; +import org.aspectj.apache.bcel.classfile.LineNumber; +import org.aspectj.apache.bcel.classfile.LineNumberTable; +import org.aspectj.apache.bcel.classfile.LocalVariable; +import org.aspectj.apache.bcel.classfile.LocalVariableTable; +import org.aspectj.apache.bcel.classfile.LocalVariableTypeTable; +import org.aspectj.apache.bcel.classfile.Method; +import org.aspectj.apache.bcel.classfile.Signature; +import org.aspectj.apache.bcel.classfile.SourceFile; +import org.aspectj.apache.bcel.classfile.StackMap; +import org.aspectj.apache.bcel.classfile.StackMapEntry; +import org.aspectj.apache.bcel.classfile.Synthetic; +import org.aspectj.apache.bcel.classfile.Unknown; +import org.aspectj.apache.bcel.classfile.ClassVisitor; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleParameterAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations; @@ -66,11 +102,11 @@ import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleParameterAnnot * By courtesy of David Spencer. * * @see DescendingVisitor - * @version $Id: EmptyVisitor.java,v 1.3 2004/11/19 16:45:18 aclement Exp $ + * @version $Id: EmptyClassVisitor.java,v 1.2 2008/05/28 23:53:00 aclement Exp $ * */ -public class EmptyVisitor implements Visitor { - protected EmptyVisitor() { } +public class EmptyClassVisitor implements ClassVisitor { + protected EmptyClassVisitor() { } public void visitCode(Code obj) {} public void visitCodeException(CodeException obj) {} diff --git a/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyInstVisitor.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyInstVisitor.java new file mode 100644 index 000000000..d498ecdc0 --- /dev/null +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/EmptyInstVisitor.java @@ -0,0 +1,259 @@ +package org.aspectj.apache.bcel.verifier; + +import org.aspectj.apache.bcel.generic.FieldInstruction; +import org.aspectj.apache.bcel.generic.IINC; +import org.aspectj.apache.bcel.generic.INVOKEINTERFACE; +import org.aspectj.apache.bcel.generic.InstVisitor; +import org.aspectj.apache.bcel.generic.Instruction; +import org.aspectj.apache.bcel.generic.InstructionBranch; +import org.aspectj.apache.bcel.generic.InstructionLV; +import org.aspectj.apache.bcel.generic.InstructionSelect; +import org.aspectj.apache.bcel.generic.InvokeInstruction; +import org.aspectj.apache.bcel.generic.LOOKUPSWITCH; +import org.aspectj.apache.bcel.generic.MULTIANEWARRAY; +import org.aspectj.apache.bcel.generic.RET; +import org.aspectj.apache.bcel.generic.TABLESWITCH; + + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache BCEL" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache BCEL", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +/** + * Supplies empty method bodies to be overridden by subclasses. + * + * @version $Id: EmptyInstVisitor.java,v 1.2 2008/05/28 23:53:01 aclement Exp $ + * @author M. Dahm + */ +public abstract class EmptyInstVisitor implements InstVisitor { + public void visitStackInstruction(Instruction obj) { } + public void visitLocalVariableInstruction(InstructionLV obj) { } + public void visitBranchInstruction(InstructionBranch obj) { } + public void visitLoadClass(Instruction obj) { } + public void visitFieldInstruction(Instruction obj) { } + public void visitIfInstruction(Instruction obj) { } + public void visitConversionInstruction(Instruction obj) { } + public void visitPopInstruction(Instruction obj) { } + public void visitJsrInstruction(InstructionBranch obj) { } + public void visitGotoInstruction(Instruction obj) { } + public void visitStoreInstruction(Instruction obj) { } + public void visitTypedInstruction(Instruction obj) { } + public void visitSelect(InstructionSelect obj) { } + public void visitUnconditionalBranch(Instruction obj) { } + public void visitPushInstruction(Instruction obj) { } + public void visitArithmeticInstruction(Instruction obj) { } + public void visitCPInstruction(Instruction obj) { } + public void visitInvokeInstruction(InvokeInstruction obj) { } + public void visitArrayInstruction(Instruction obj) { } + public void visitAllocationInstruction(Instruction obj) { } + public void visitReturnInstruction(Instruction obj) { } + public void visitFieldOrMethod(Instruction obj) { } + public void visitConstantPushInstruction(Instruction obj) { } + public void visitExceptionThrower(Instruction obj) { } + public void visitLoadInstruction(Instruction obj) { } + public void visitVariableLengthInstruction(Instruction obj) { } + public void visitStackProducer(Instruction obj) { } + public void visitStackConsumer(Instruction obj) { } + public void visitACONST_NULL(Instruction obj) { } + public void visitGETSTATIC(FieldInstruction obj) { } + public void visitIF_ICMPLT(Instruction obj) { } + public void visitMONITOREXIT(Instruction obj) { } + public void visitIFLT(Instruction obj) { } + public void visitLSTORE(Instruction obj) { } + public void visitPOP2(Instruction obj) { } + public void visitBASTORE(Instruction obj) { } + public void visitISTORE(Instruction obj) { } + public void visitCHECKCAST(Instruction obj) { } + public void visitFCMPG(Instruction obj) { } + public void visitI2F(Instruction obj) { } + public void visitATHROW(Instruction obj) { } + public void visitDCMPL(Instruction obj) { } + public void visitARRAYLENGTH(Instruction obj) { } + public void visitDUP(Instruction obj) { } + public void visitINVOKESTATIC(InvokeInstruction obj) { } + public void visitLCONST(Instruction obj) { } + public void visitDREM(Instruction obj) { } + public void visitIFGE(Instruction obj) { } + public void visitCALOAD(Instruction obj) { } + public void visitLASTORE(Instruction obj) { } + public void visitI2D(Instruction obj) { } + public void visitDADD(Instruction obj) { } + public void visitINVOKESPECIAL(InvokeInstruction obj) { } + public void visitIAND(Instruction obj) { } + public void visitPUTFIELD(FieldInstruction obj) { } + public void visitILOAD(Instruction obj) { } + public void visitDLOAD(Instruction obj) { } + public void visitDCONST(Instruction obj) { } + public void visitNEW(Instruction obj) { } + public void visitIFNULL(Instruction obj) { } + public void visitLSUB(Instruction obj) { } + public void visitL2I(Instruction obj) { } + public void visitISHR(Instruction obj) { } + public void visitTABLESWITCH(TABLESWITCH obj) { } + public void visitIINC(IINC obj) { } + public void visitDRETURN(Instruction obj) { } + public void visitFSTORE(Instruction obj) { } + public void visitDASTORE(Instruction obj) { } + public void visitIALOAD(Instruction obj) { } + public void visitDDIV(Instruction obj) { } + public void visitIF_ICMPGE(Instruction obj) { } + public void visitLAND(Instruction obj) { } + public void visitIDIV(Instruction obj) { } + public void visitLOR(Instruction obj) { } + public void visitCASTORE(Instruction obj) { } + public void visitFREM(Instruction obj) { } + public void visitLDC(Instruction obj) { } + public void visitBIPUSH(Instruction obj) { } + public void visitDSTORE(Instruction obj) { } + public void visitF2L(Instruction obj) { } + public void visitFMUL(Instruction obj) { } + public void visitLLOAD(Instruction obj) { } + public void visitJSR(InstructionBranch obj) { } + public void visitFSUB(Instruction obj) { } + public void visitSASTORE(Instruction obj) { } + public void visitALOAD(Instruction obj) { } + public void visitDUP2_X2(Instruction obj) { } + public void visitRETURN(Instruction obj) { } + public void visitDALOAD(Instruction obj) { } + public void visitSIPUSH(Instruction obj) { } + public void visitDSUB(Instruction obj) { } + public void visitL2F(Instruction obj) { } + public void visitIF_ICMPGT(Instruction obj) { } + public void visitF2D(Instruction obj) { } + public void visitI2L(Instruction obj) { } + public void visitIF_ACMPNE(Instruction obj) { } + public void visitPOP(Instruction obj) { } + public void visitI2S(Instruction obj) { } + public void visitIFEQ(Instruction obj) { } + public void visitSWAP(Instruction obj) { } + public void visitIOR(Instruction obj) { } + public void visitIREM(Instruction obj) { } + public void visitIASTORE(Instruction obj) { } + public void visitNEWARRAY(Instruction obj) { } + public void visitINVOKEINTERFACE(INVOKEINTERFACE obj) { } + public void visitINEG(Instruction obj) { } + public void visitLCMP(Instruction obj) { } + public void visitJSR_W(InstructionBranch obj) { } + public void visitMULTIANEWARRAY(MULTIANEWARRAY obj) { } + public void visitDUP_X2(Instruction obj) { } + public void visitSALOAD(Instruction obj) { } + public void visitIFNONNULL(Instruction obj) { } + public void visitDMUL(Instruction obj) { } + public void visitIFNE(Instruction obj) { } + public void visitIF_ICMPLE(Instruction obj) { } + public void visitLDC2_W(Instruction obj) { } + public void visitGETFIELD(FieldInstruction obj) { } + public void visitLADD(Instruction obj) { } + public void visitNOP(Instruction obj) { } + public void visitFALOAD(Instruction obj) { } + public void visitINSTANCEOF(Instruction obj) { } + public void visitIFLE(Instruction obj) { } + public void visitLXOR(Instruction obj) { } + public void visitLRETURN(Instruction obj) { } + public void visitFCONST(Instruction obj) { } + public void visitIUSHR(Instruction obj) { } + public void visitBALOAD(Instruction obj) { } + public void visitDUP2(Instruction obj) { } + public void visitIF_ACMPEQ(Instruction obj) { } + public void visitIMPDEP1(Instruction obj) { } + public void visitMONITORENTER(Instruction obj) { } + public void visitLSHL(Instruction obj) { } + public void visitDCMPG(Instruction obj) { } + public void visitD2L(Instruction obj) { } + public void visitIMPDEP2(Instruction obj) { } + public void visitL2D(Instruction obj) { } + public void visitRET(RET obj) { } + public void visitIFGT(Instruction obj) { } + public void visitIXOR(Instruction obj) { } + public void visitINVOKEVIRTUAL(InvokeInstruction obj) { } + public void visitFASTORE(Instruction obj) { } + public void visitIRETURN(Instruction obj) { } + public void visitIF_ICMPNE(Instruction obj) { } + public void visitFLOAD(Instruction obj) { } + public void visitLDIV(Instruction obj) { } + public void visitPUTSTATIC(FieldInstruction obj) { } + public void visitAALOAD(Instruction obj) { } + public void visitD2I(Instruction obj) { } + public void visitIF_ICMPEQ(Instruction obj) { } + public void visitAASTORE(Instruction obj) { } + public void visitARETURN(Instruction obj) { } + public void visitDUP2_X1(Instruction obj) { } + public void visitFNEG(Instruction obj) { } + public void visitGOTO_W(Instruction obj) { } + public void visitD2F(Instruction obj) { } + public void visitGOTO(Instruction obj) { } + public void visitISUB(Instruction obj) { } + public void visitF2I(Instruction obj) { } + public void visitDNEG(Instruction obj) { } + public void visitICONST(Instruction obj) { } + public void visitFDIV(Instruction obj) { } + public void visitI2B(Instruction obj) { } + public void visitLNEG(Instruction obj) { } + public void visitLREM(Instruction obj) { } + public void visitIMUL(Instruction obj) { } + public void visitIADD(Instruction obj) { } + public void visitLSHR(Instruction obj) { } + public void visitLOOKUPSWITCH(LOOKUPSWITCH obj) { } + public void visitDUP_X1(Instruction obj) { } + public void visitFCMPL(Instruction obj) { } + public void visitI2C(Instruction obj) { } + public void visitLMUL(Instruction obj) { } + public void visitLUSHR(Instruction obj) { } + public void visitISHL(Instruction obj) { } + public void visitLALOAD(Instruction obj) { } + public void visitASTORE(Instruction obj) { } + public void visitANEWARRAY(Instruction obj) { } + public void visitFRETURN(Instruction obj) { } + public void visitFADD(Instruction obj) { } + public void visitBREAKPOINT(Instruction obj) { } +} diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/GraphicalVerifier.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/GraphicalVerifier.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/GraphicalVerifier.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/GraphicalVerifier.java index 876357ed4..834e58f22 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/GraphicalVerifier.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/GraphicalVerifier.java @@ -65,7 +65,7 @@ import org.aspectj.apache.bcel.generic.Type; /** * A graphical user interface application demonstrating JustIce. * - * @version $Id: GraphicalVerifier.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: GraphicalVerifier.java,v 1.2 2008/05/28 23:53:01 aclement Exp $ * @author Enver Haase */ public class GraphicalVerifier { diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/NativeVerifier.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/NativeVerifier.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/NativeVerifier.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/NativeVerifier.java index ff31f8957..70a58abe1 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/NativeVerifier.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/NativeVerifier.java @@ -61,7 +61,7 @@ package org.aspectj.apache.bcel.verifier; * This can be used for comparison runs between the JVM-internal verifier * and JustIce. * - * @version $Id: NativeVerifier.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: NativeVerifier.java,v 1.2 2008/05/28 23:53:01 aclement Exp $ * @author Enver Haase */ public abstract class NativeVerifier{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/PassVerifier.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/PassVerifier.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/PassVerifier.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/PassVerifier.java index d059d8885..236b618e2 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/PassVerifier.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/PassVerifier.java @@ -77,7 +77,7 @@ import java.util.ArrayList; * That means, if you really want a new verification run of a certain * pass you must use a new instance of a given PassVerifier. * - * @version $Id: PassVerifier.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: PassVerifier.java,v 1.2 2008/05/28 23:53:00 aclement Exp $ * @author Enver Haase * @see org.aspectj.apache.bcel.verifier.Verifier * @see #verify() diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/TransitiveHull.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/TransitiveHull.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/TransitiveHull.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/TransitiveHull.java index 142e7fa9f..00be6fa3d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/TransitiveHull.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/TransitiveHull.java @@ -63,7 +63,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; * all class files encountered; this may take up a lot of time and, * more notably, memory. * - * @version $Id: TransitiveHull.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: TransitiveHull.java,v 1.2 2008/05/28 23:53:00 aclement Exp $ * @author Enver Haase */ public class TransitiveHull implements VerifierFactoryObserver{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerificationResult.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerificationResult.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/VerificationResult.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerificationResult.java index f87dda6d9..b3e3cce80 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerificationResult.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerificationResult.java @@ -58,7 +58,7 @@ package org.aspectj.apache.bcel.verifier; * A VerificationResult is what a PassVerifier returns * after verifying. * - * @version $Id: VerificationResult.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: VerificationResult.java,v 1.2 2008/05/28 23:53:00 aclement Exp $ * @author Enver Haase * */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/Verifier.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/Verifier.java similarity index 99% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/Verifier.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/Verifier.java index aa7bb1b3d..25ce76c0b 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/Verifier.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/Verifier.java @@ -75,7 +75,7 @@ import org.aspectj.apache.bcel.verifier.structurals.Pass3bVerifier; * A Verifier creates PassVerifier instances to perform the actual verification. * Verifier instances are usually generated by the VerifierFactory. * - * @version $Id: Verifier.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: Verifier.java,v 1.2 2008/05/28 23:53:01 aclement Exp $ * @author Enver Haase * @see org.aspectj.apache.bcel.verifier.VerifierFactory * @see org.aspectj.apache.bcel.verifier.PassVerifier diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierAppFrame.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierAppFrame.java similarity index 99% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierAppFrame.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierAppFrame.java index b59b455dc..b6a483bf8 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierAppFrame.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierAppFrame.java @@ -83,7 +83,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; * This class implements a machine-generated frame for use with * the GraphicalVerfifier. * - * @version $Id: VerifierAppFrame.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: VerifierAppFrame.java,v 1.2 2008/05/28 23:53:01 aclement Exp $ * @author Enver Haase * @see GraphicalVerifier */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierFactory.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierFactory.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierFactory.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierFactory.java index be5dc5eed..9f45c39f8 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierFactory.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierFactory.java @@ -64,7 +64,7 @@ import java.util.Vector; * operate on. That means, for every class (represented by a unique fully qualified * class name) there is exactly one Verifier. * - * @version $Id: VerifierFactory.java,v 1.4 2005/02/02 09:11:39 aclement Exp $ + * @version $Id: VerifierFactory.java,v 1.2 2008/05/28 23:53:00 aclement Exp $ * @author Enver Haase * @see org.aspectj.apache.bcel.verifier.Verifier */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierFactoryListModel.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierFactoryListModel.java similarity index 97% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierFactoryListModel.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierFactoryListModel.java index 656f5ffe2..1808a6fca 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierFactoryListModel.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierFactoryListModel.java @@ -58,7 +58,7 @@ import javax.swing.event.ListDataEvent; * This class implements an adapter; it implements both a Swing ListModel and * a VerifierFactoryObserver. * - * @version $Id: VerifierFactoryListModel.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: VerifierFactoryListModel.java,v 1.2 2008/05/28 23:53:01 aclement Exp $ * @author Enver Haase */ public class VerifierFactoryListModel implements org.aspectj.apache.bcel.verifier.VerifierFactoryObserver, javax.swing.ListModel{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierFactoryObserver.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierFactoryObserver.java similarity index 97% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierFactoryObserver.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierFactoryObserver.java index 16750b9b3..b00f4adc2 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifierFactoryObserver.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifierFactoryObserver.java @@ -58,7 +58,7 @@ package org.aspectj.apache.bcel.verifier; * VerifierFactoryObserver instances are notified when new Verifier * instances are created. * - * @version $Id: VerifierFactoryObserver.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: VerifierFactoryObserver.java,v 1.2 2008/05/28 23:53:00 aclement Exp $ * @author Enver Haase * * @see VerifierFactory#getVerifier(String) diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifyDialog.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifyDialog.java similarity index 99% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifyDialog.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifyDialog.java index cb3dbc9ce..9eb2d37c0 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/VerifyDialog.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/VerifyDialog.java @@ -68,7 +68,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; * class in your application. * [This class was created using VisualAge for Java, * but it does not work under VAJ itself (Version 3.02 JDK 1.2)] - * @version $Id: VerifyDialog.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: VerifyDialog.java,v 1.2 2008/05/28 23:53:01 aclement Exp $ * @author Enver Haase * @see #main(String[]) * @see #VerifyDialog(String) diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/AssertionViolatedException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/AssertionViolatedException.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/AssertionViolatedException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/AssertionViolatedException.java index 7fff671a8..dc1a93be5 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/AssertionViolatedException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/AssertionViolatedException.java @@ -58,7 +58,7 @@ package org.aspectj.apache.bcel.verifier.exc; * Instances of this class should never be thrown. When such an instance is thrown, * this is due to an INTERNAL ERROR of BCEL's class file verifier "JustIce". * - * @version $Id: AssertionViolatedException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: AssertionViolatedException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public final class AssertionViolatedException extends RuntimeException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/ClassConstraintException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/ClassConstraintException.java similarity index 97% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/ClassConstraintException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/ClassConstraintException.java index c156a9d6b..3378c2ea5 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/ClassConstraintException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/ClassConstraintException.java @@ -59,7 +59,7 @@ package org.aspectj.apache.bcel.verifier.exc; * when a class file to verify does not pass the verification pass 2 as described * in the Java Virtual Machine specification, 2nd edition. * - * @version $Id: ClassConstraintException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: ClassConstraintException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class ClassConstraintException extends VerificationException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/CodeConstraintException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/CodeConstraintException.java similarity index 97% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/CodeConstraintException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/CodeConstraintException.java index 9ef154fd5..e33e4f9ac 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/CodeConstraintException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/CodeConstraintException.java @@ -58,7 +58,7 @@ package org.aspectj.apache.bcel.verifier.exc; * a class file does not pass the verification pass 3. Note that the pass 3 used by * "JustIce" involves verification that is usually delayed to pass 4. * - * @version $Id: CodeConstraintException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: CodeConstraintException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public abstract class CodeConstraintException extends VerificationException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/InvalidMethodException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/InvalidMethodException.java similarity index 97% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/InvalidMethodException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/InvalidMethodException.java index 04084567e..eb6099cd4 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/InvalidMethodException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/InvalidMethodException.java @@ -57,7 +57,7 @@ package org.aspectj.apache.bcel.verifier.exc; * Instances of this class are thrown by BCEL's class file verifier "JustIce" * when the verification of a method is requested that does not exist. * - * @version $Id: InvalidMethodException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: InvalidMethodException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class InvalidMethodException extends RuntimeException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/LinkingConstraintException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/LinkingConstraintException.java similarity index 97% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/LinkingConstraintException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/LinkingConstraintException.java index 41d7187cc..3e63fea83 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/LinkingConstraintException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/LinkingConstraintException.java @@ -67,7 +67,7 @@ package org.aspectj.apache.bcel.verifier.exc; * and Resolution") of the above mentioned book. * TODO: At this time, this class is not used in JustIce. * - * @version $Id: LinkingConstraintException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: LinkingConstraintException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class LinkingConstraintException extends StructuralCodeConstraintException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/LoadingException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/LoadingException.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/LoadingException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/LoadingException.java index ab4661639..177ac4c7b 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/LoadingException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/LoadingException.java @@ -58,7 +58,7 @@ package org.aspectj.apache.bcel.verifier.exc; * When loading a class file, BCEL will throw an instance of LoadingException if * the class file is malformed; so it is not conforming to the "Pass 1" verification * process as described in the Java Virtual Machine specification, 2nd. edition. - * @version $Id: LoadingException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: LoadingException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class LoadingException extends VerifierConstraintViolatedException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/LocalVariableInfoInconsistentException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/LocalVariableInfoInconsistentException.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/LocalVariableInfoInconsistentException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/LocalVariableInfoInconsistentException.java index ee52a9b92..b4a44a480 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/LocalVariableInfoInconsistentException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/LocalVariableInfoInconsistentException.java @@ -61,7 +61,7 @@ package org.aspectj.apache.bcel.verifier.exc; * LocalVariableTable entries in the Code attribute of a certain * Method object. * - * @version $Id: LocalVariableInfoInconsistentException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: LocalVariableInfoInconsistentException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class LocalVariableInfoInconsistentException extends ClassConstraintException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StaticCodeConstraintException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StaticCodeConstraintException.java similarity index 97% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StaticCodeConstraintException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StaticCodeConstraintException.java index e5ed87a0f..5738a48d4 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StaticCodeConstraintException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StaticCodeConstraintException.java @@ -61,7 +61,7 @@ package org.aspectj.apache.bcel.verifier.exc; * 2nd edition, 4.8.1, pages 133-137. The static constraints checking part of pass 3 * is called pass 3a in JustIce. * - * @version $Id: StaticCodeConstraintException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: StaticCodeConstraintException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public abstract class StaticCodeConstraintException extends CodeConstraintException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionConstraintException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionConstraintException.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionConstraintException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionConstraintException.java index 629ff6dfe..35c1f1ae2 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionConstraintException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionConstraintException.java @@ -64,7 +64,7 @@ package org.aspectj.apache.bcel.verifier.exc; * pass 3a and are described on page 134 in the Java Virtual Machine Specification, * Second Edition. * - * @version $Id: StaticCodeInstructionConstraintException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: StaticCodeInstructionConstraintException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class StaticCodeInstructionConstraintException extends StaticCodeConstraintException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionOperandConstraintException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionOperandConstraintException.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionOperandConstraintException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionOperandConstraintException.java index 7a5fbabd5..2ddc9e9de 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionOperandConstraintException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StaticCodeInstructionOperandConstraintException.java @@ -64,7 +64,7 @@ package org.aspectj.apache.bcel.verifier.exc; * pass 3a and are described on page 134-137 in the Java Virtual Machine Specification, * Second Edition. * - * @version $Id: StaticCodeInstructionOperandConstraintException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: StaticCodeInstructionOperandConstraintException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class StaticCodeInstructionOperandConstraintException extends StaticCodeConstraintException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StructuralCodeConstraintException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StructuralCodeConstraintException.java similarity index 99% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StructuralCodeConstraintException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StructuralCodeConstraintException.java index 8f09a91a0..3cbee2e86 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/StructuralCodeConstraintException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/StructuralCodeConstraintException.java @@ -63,7 +63,7 @@ package org.aspectj.apache.bcel.verifier.exc; * These are the constraints where data-flow analysis is needed to verify if they hold. * The data flow analysis of pass 3 is called pass 3b in JustIce. * - * @version $Id: StructuralCodeConstraintException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: StructuralCodeConstraintException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class StructuralCodeConstraintException extends CodeConstraintException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/Utility.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/Utility.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/Utility.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/Utility.java index 095ec3344..8c5bc966d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/Utility.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/Utility.java @@ -58,7 +58,7 @@ import java.io.*; /** * A utility class providing convenience methods concerning Throwable instances. - * @version $Id: Utility.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: Utility.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase * @see java.lang.Throwable */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/VerificationException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/VerificationException.java similarity index 97% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/VerificationException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/VerificationException.java index 70bca7091..0df4b3d60 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/VerificationException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/VerificationException.java @@ -63,7 +63,7 @@ package org.aspectj.apache.bcel.verifier.exc; * edition, page 164, 5.4.1 where verification as a part of the linking process is * defined to be the verification happening in passes 2 and 3. * - * @version $Id: VerificationException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: VerificationException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public abstract class VerificationException extends VerifierConstraintViolatedException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/VerifierConstraintViolatedException.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/VerifierConstraintViolatedException.java similarity index 99% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/VerifierConstraintViolatedException.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/VerifierConstraintViolatedException.java index 15ce45239..3cb718e2f 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/exc/VerifierConstraintViolatedException.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/exc/VerifierConstraintViolatedException.java @@ -62,7 +62,7 @@ package org.aspectj.apache.bcel.verifier.exc; * This is roughly equivalent to the VerifyError the JVM-internal verifiers * throw. * - * @version $Id: VerifierConstraintViolatedException.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: VerifierConstraintViolatedException.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public abstract class VerifierConstraintViolatedException extends RuntimeException{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/package.html b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/package.html similarity index 91% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/package.html rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/package.html index b9213e330..7a117a8b7 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/package.html +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/package.html @@ -2,7 +2,7 @@ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/DOUBLE_Upper.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/DOUBLE_Upper.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/DOUBLE_Upper.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/DOUBLE_Upper.java index ed68a24a8..062d6bbbc 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/DOUBLE_Upper.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/DOUBLE_Upper.java @@ -59,7 +59,7 @@ import org.aspectj.apache.bcel.generic.Type; /** * This class represents the upper half of a DOUBLE variable. - * @version $Id: DOUBLE_Upper.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: DOUBLE_Upper.java,v 1.2 2008/05/28 23:52:54 aclement Exp $ * @author Enver Haase */ public final class DOUBLE_Upper extends Type{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/IntList.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/IntList.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/IntList.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/IntList.java index dce612d48..1b6d4567e 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/IntList.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/IntList.java @@ -59,7 +59,7 @@ import java.util.ArrayList; /** * A small utility class representing a set of basic int values. * - * @version $Id: IntList.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: IntList.java,v 1.2 2008/05/28 23:52:53 aclement Exp $ * @author Enver Haase */ public class IntList{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/LONG_Upper.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/LONG_Upper.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/LONG_Upper.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/LONG_Upper.java index 9b1bbeae4..55e9052e3 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/LONG_Upper.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/LONG_Upper.java @@ -59,7 +59,7 @@ import org.aspectj.apache.bcel.generic.Type; /** * This class represents the upper half of a LONG variable. - * @version $Id: LONG_Upper.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: LONG_Upper.java,v 1.2 2008/05/28 23:52:54 aclement Exp $ * @author Enver Haase */ public final class LONG_Upper extends Type{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/LocalVariableInfo.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/LocalVariableInfo.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/LocalVariableInfo.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/LocalVariableInfo.java index 443444e2e..2d4e8ec98 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/LocalVariableInfo.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/LocalVariableInfo.java @@ -64,7 +64,7 @@ import java.util.Hashtable; * a given slot (== index). This information * often changes in course of byte code offsets. * - * @version $Id: LocalVariableInfo.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: LocalVariableInfo.java,v 1.2 2008/05/28 23:52:54 aclement Exp $ * @author Enver Haase */ public class LocalVariableInfo{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/LocalVariablesInfo.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/LocalVariablesInfo.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/LocalVariablesInfo.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/LocalVariablesInfo.java index 6f7a656b8..b094b5867 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/LocalVariablesInfo.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/LocalVariablesInfo.java @@ -62,7 +62,7 @@ import org.aspectj.apache.bcel.verifier.exc.*; * the names and the types of the local variables in * a given method. * - * @version $Id: LocalVariablesInfo.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: LocalVariablesInfo.java,v 1.2 2008/05/28 23:52:54 aclement Exp $ * @author Enver Haase */ public class LocalVariablesInfo{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/Pass1Verifier.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/Pass1Verifier.java similarity index 99% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/Pass1Verifier.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/Pass1Verifier.java index 4583afc8c..fcbddb624 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/Pass1Verifier.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/Pass1Verifier.java @@ -68,7 +68,7 @@ import org.aspectj.apache.bcel.verifier.exc.Utility; * More detailed information is to be found at the do_verify() method's * documentation. * - * @version $Id: Pass1Verifier.java,v 1.3 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: Pass1Verifier.java,v 1.2 2008/05/28 23:52:54 aclement Exp $ * @author Enver Haase * @see #do_verify() */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/Pass2Verifier.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/Pass2Verifier.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/Pass2Verifier.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/Pass2Verifier.java index 1d2995f73..47b8090e6 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/Pass2Verifier.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/Pass2Verifier.java @@ -77,8 +77,6 @@ import org.aspectj.apache.bcel.classfile.ConstantString; import org.aspectj.apache.bcel.classfile.ConstantUtf8; import org.aspectj.apache.bcel.classfile.ConstantValue; import org.aspectj.apache.bcel.classfile.Deprecated; -import org.aspectj.apache.bcel.classfile.DescendingVisitor; -import org.aspectj.apache.bcel.classfile.EmptyVisitor; import org.aspectj.apache.bcel.classfile.ExceptionTable; import org.aspectj.apache.bcel.classfile.Field; import org.aspectj.apache.bcel.classfile.InnerClass; @@ -93,10 +91,12 @@ import org.aspectj.apache.bcel.classfile.Node; import org.aspectj.apache.bcel.classfile.SourceFile; import org.aspectj.apache.bcel.classfile.Synthetic; import org.aspectj.apache.bcel.classfile.Unknown; -import org.aspectj.apache.bcel.classfile.Visitor; +import org.aspectj.apache.bcel.classfile.ClassVisitor; import org.aspectj.apache.bcel.generic.ArrayType; import org.aspectj.apache.bcel.generic.ObjectType; import org.aspectj.apache.bcel.generic.Type; +import org.aspectj.apache.bcel.verifier.DescendingVisitor; +import org.aspectj.apache.bcel.verifier.EmptyClassVisitor; import org.aspectj.apache.bcel.verifier.PassVerifier; import org.aspectj.apache.bcel.verifier.VerificationResult; import org.aspectj.apache.bcel.verifier.Verifier; @@ -112,7 +112,7 @@ import org.aspectj.apache.bcel.verifier.exc.LocalVariableInfoInconsistentExcepti * More detailed information is to be found at the do_verify() * method's documentation. * - * @version $Id: Pass2Verifier.java,v 1.3 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: Pass2Verifier.java,v 1.2 2008/05/28 23:52:54 aclement Exp $ * @author Enver Haase * @see #do_verify() */ @@ -313,7 +313,7 @@ public final class Pass2Verifier extends PassVerifier implements Constants{ * * @see #constant_pool_entries_satisfy_static_constraints() */ - private class CPESSC_Visitor extends org.aspectj.apache.bcel.classfile.EmptyVisitor implements Visitor{ + private class CPESSC_Visitor extends org.aspectj.apache.bcel.verifier.EmptyClassVisitor implements ClassVisitor{ private Class CONST_Class; /* private Class CONST_Fieldref; @@ -521,7 +521,7 @@ public final class Pass2Verifier extends PassVerifier implements Constants{ } } - if ((obj.getAccessFlags() & ~(ACC_PUBLIC|ACC_PRIVATE|ACC_PROTECTED|ACC_STATIC|ACC_FINAL|ACC_VOLATILE|ACC_TRANSIENT)) > 0){ + if ((obj.getModifiers() & ~(ACC_PUBLIC|ACC_PRIVATE|ACC_PROTECTED|ACC_STATIC|ACC_FINAL|ACC_VOLATILE|ACC_TRANSIENT)) > 0){ addMessage("Field '"+tostring(obj)+"' has access flag(s) other than ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, ACC_VOLATILE, ACC_TRANSIENT set (ignored)."); } @@ -675,7 +675,7 @@ public final class Pass2Verifier extends PassVerifier implements Constants{ // Class and interface initialization methods... if (name.equals(STATIC_INITIALIZER_NAME)){ - if ((obj.getAccessFlags() & (~ACC_STRICT)) > 0){ + if ((obj.getModifiers() & (~ACC_STRICT)) > 0){ addMessage("Class or interface initialization method '"+tostring(obj)+"' has superfluous access modifier(s) set: everything but ACC_STRICT is ignored."); } if (obj.isAbstract()){ @@ -683,7 +683,7 @@ public final class Pass2Verifier extends PassVerifier implements Constants{ } } - if ((obj.getAccessFlags() & ~(ACC_PUBLIC|ACC_PRIVATE|ACC_PROTECTED|ACC_STATIC|ACC_FINAL|ACC_SYNCHRONIZED|ACC_NATIVE|ACC_ABSTRACT|ACC_STRICT)) > 0){ + if ((obj.getModifiers() & ~(ACC_PUBLIC|ACC_PRIVATE|ACC_PROTECTED|ACC_STATIC|ACC_FINAL|ACC_SYNCHRONIZED|ACC_NATIVE|ACC_ABSTRACT|ACC_STRICT)) > 0){ addMessage("Method '"+tostring(obj)+"' has access flag(s) other than ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, ACC_SYNCHRONIZED, ACC_NATIVE, ACC_ABSTRACT, ACC_STRICT set (ignored)."); } @@ -1126,7 +1126,7 @@ public final class Pass2Verifier extends PassVerifier implements Constants{ * @see #constant_pool_entries_satisfy_static_constraints() * @see org.aspectj.apache.bcel.classfile.ConstantCP */ - private class FAMRAV_Visitor extends EmptyVisitor implements Visitor{ + private class FAMRAV_Visitor extends EmptyClassVisitor implements ClassVisitor{ private final ConstantPool cp; // ==jc.getConstantPool() -- only here to save typing work. private FAMRAV_Visitor(JavaClass _jc){ cp = _jc.getConstantPool(); @@ -1335,7 +1335,7 @@ public final class Pass2Verifier extends PassVerifier implements Constants{ * JustIce cannot repair this; please note that existing verifiers at this * time even fail to detect missing InnerClasses attributes in pass 2. */ - private class InnerClassDetector extends EmptyVisitor{ + private class InnerClassDetector extends EmptyClassVisitor{ private boolean hasInnerClass = false; private JavaClass jc; private ConstantPool cp; diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/Pass3aVerifier.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/Pass3aVerifier.java similarity index 93% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/Pass3aVerifier.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/Pass3aVerifier.java index 37c50031b..32355e3f7 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/Pass3aVerifier.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/Pass3aVerifier.java @@ -78,51 +78,24 @@ import org.aspectj.apache.bcel.classfile.LineNumberTable; import org.aspectj.apache.bcel.classfile.LocalVariable; import org.aspectj.apache.bcel.classfile.LocalVariableTable; import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.generic.ALOAD; -import org.aspectj.apache.bcel.generic.ANEWARRAY; -import org.aspectj.apache.bcel.generic.ASTORE; -import org.aspectj.apache.bcel.generic.ATHROW; import org.aspectj.apache.bcel.generic.ArrayType; -import org.aspectj.apache.bcel.generic.BREAKPOINT; -import org.aspectj.apache.bcel.generic.CHECKCAST; -import org.aspectj.apache.bcel.generic.ConstantPoolGen; -import org.aspectj.apache.bcel.generic.DLOAD; -import org.aspectj.apache.bcel.generic.DSTORE; -import org.aspectj.apache.bcel.generic.FLOAD; -import org.aspectj.apache.bcel.generic.FSTORE; +import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.generic.FieldInstruction; -import org.aspectj.apache.bcel.generic.GETSTATIC; -import org.aspectj.apache.bcel.generic.GotoInstruction; import org.aspectj.apache.bcel.generic.IINC; -import org.aspectj.apache.bcel.generic.ILOAD; -import org.aspectj.apache.bcel.generic.IMPDEP1; -import org.aspectj.apache.bcel.generic.IMPDEP2; -import org.aspectj.apache.bcel.generic.INSTANCEOF; import org.aspectj.apache.bcel.generic.INVOKEINTERFACE; -import org.aspectj.apache.bcel.generic.INVOKESPECIAL; -import org.aspectj.apache.bcel.generic.INVOKESTATIC; -import org.aspectj.apache.bcel.generic.INVOKEVIRTUAL; -import org.aspectj.apache.bcel.generic.ISTORE; import org.aspectj.apache.bcel.generic.Instruction; +import org.aspectj.apache.bcel.generic.InstructionBranch; +import org.aspectj.apache.bcel.generic.InstructionByte; import org.aspectj.apache.bcel.generic.InstructionHandle; import org.aspectj.apache.bcel.generic.InstructionList; import org.aspectj.apache.bcel.generic.InvokeInstruction; -import org.aspectj.apache.bcel.generic.JsrInstruction; -import org.aspectj.apache.bcel.generic.LDC; -import org.aspectj.apache.bcel.generic.LDC2_W; -import org.aspectj.apache.bcel.generic.LLOAD; import org.aspectj.apache.bcel.generic.LOOKUPSWITCH; -import org.aspectj.apache.bcel.generic.LSTORE; -import org.aspectj.apache.bcel.generic.LoadClass; import org.aspectj.apache.bcel.generic.MULTIANEWARRAY; -import org.aspectj.apache.bcel.generic.NEW; -import org.aspectj.apache.bcel.generic.NEWARRAY; import org.aspectj.apache.bcel.generic.ObjectType; -import org.aspectj.apache.bcel.generic.PUTSTATIC; import org.aspectj.apache.bcel.generic.RET; -import org.aspectj.apache.bcel.generic.ReturnInstruction; import org.aspectj.apache.bcel.generic.TABLESWITCH; import org.aspectj.apache.bcel.generic.Type; +import org.aspectj.apache.bcel.verifier.EmptyClassVisitor; import org.aspectj.apache.bcel.verifier.PassVerifier; import org.aspectj.apache.bcel.verifier.VerificationResult; import org.aspectj.apache.bcel.verifier.Verifier; @@ -141,7 +114,7 @@ import org.aspectj.apache.bcel.verifier.exc.StaticCodeInstructionOperandConstrai * More detailed information is to be found at the do_verify() * method's documentation. * - * @version $Id: Pass3aVerifier.java,v 1.3 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: Pass3aVerifier.java,v 1.2 2008/05/28 23:52:54 aclement Exp $ * @author Enver Haase * @see #do_verify() */ @@ -370,13 +343,13 @@ public final class Pass3aVerifier extends PassVerifier{ InstructionHandle ih = instructionList.getStart(); while (ih != null){ Instruction i = ih.getInstruction(); - if (i instanceof IMPDEP1){ + if (i.getOpcode()==Constants.IMPDEP1){ throw new StaticCodeInstructionConstraintException("IMPDEP1 must not be in the code, it is an illegal instruction for _internal_ JVM use!"); } - if (i instanceof IMPDEP2){ + if (i.getOpcode()==Constants.IMPDEP2){ throw new StaticCodeInstructionConstraintException("IMPDEP2 must not be in the code, it is an illegal instruction for _internal_ JVM use!"); } - if (i instanceof BREAKPOINT){ + if (i.getOpcode()==Constants.BREAKPOINT){ throw new StaticCodeInstructionConstraintException("BREAKPOINT must not be in the code, it is an illegal instruction for _internal_ JVM use!"); } ih = ih.getNext(); @@ -387,10 +360,10 @@ public final class Pass3aVerifier extends PassVerifier{ // end of the code, which is stupid -- but with the original // verifier's subroutine semantics one cannot predict reachability. Instruction last = instructionList.getEnd().getInstruction(); - if (! ((last instanceof ReturnInstruction) || + if (! ((last.isReturnInstruction()) || (last instanceof RET) || - (last instanceof GotoInstruction) || - (last instanceof ATHROW) )) // JSR / JSR_W would possibly RETurn and then fall off the code! + (last.getOpcode()==Constants.GOTO || last.getOpcode()==Constants.GOTO_W) || + (last.getOpcode()==Constants.ATHROW))) // JSR / JSR_W would possibly RETurn and then fall off the code! throw new StaticCodeInstructionConstraintException("Execution must not fall off the bottom of the code array. This constraint is enforced statically as some existing verifiers do - so it may be a false alarm if the last instruction is not reachable."); } @@ -415,7 +388,7 @@ public final class Pass3aVerifier extends PassVerifier{ // TODO: Implement as much as possible here. BCEL does _not_ check everything. - ConstantPoolGen cpg = new ConstantPoolGen(Repository.lookupClass(myOwner.getClassName()).getConstantPool()); + ConstantPool cpg = new ConstantPool(Repository.lookupClass(myOwner.getClassName()).getConstantPool().getConstantPool()); InstOperandConstraintVisitor v = new InstOperandConstraintVisitor(cpg); // Checks for the things BCEL does _not_ handle itself. @@ -424,12 +397,12 @@ public final class Pass3aVerifier extends PassVerifier{ Instruction i = ih.getInstruction(); // An "own" constraint, due to JustIce's new definition of what "subroutine" means. - if (i instanceof JsrInstruction){ - InstructionHandle target = ((JsrInstruction) i).getTarget(); + if (i.isJsrInstruction()){ + InstructionHandle target = ((InstructionBranch) i).getTarget(); if (target == instructionList.getStart()){ throw new StaticCodeInstructionOperandConstraintException("Due to JustIce's clear definition of subroutines, no JSR or JSR_W may have a top-level instruction (such as the very first instruction, which is targeted by instruction '"+ih+"' as its target."); } - if (!(target.getInstruction() instanceof ASTORE)){ + if (!(target.getInstruction().isASTORE())){ throw new StaticCodeInstructionOperandConstraintException("Due to JustIce's clear definition of subroutines, no JSR or JSR_W may target anything else than an ASTORE instruction. Instruction '"+ih+"' targets '"+target+"'."); } } @@ -459,12 +432,12 @@ public final class Pass3aVerifier extends PassVerifier{ * This visitor class does the actual checking for the instruction * operand's constraints. */ - private class InstOperandConstraintVisitor extends org.aspectj.apache.bcel.generic.EmptyVisitor{ + private class InstOperandConstraintVisitor extends org.aspectj.apache.bcel.verifier.EmptyInstVisitor{ /** The ConstantPoolGen instance this Visitor operates on. */ - private ConstantPoolGen cpg; + private ConstantPool cpg; /** The only Constructor. */ - InstOperandConstraintVisitor(ConstantPoolGen cpg){ + InstOperandConstraintVisitor(ConstantPool cpg){ this.cpg = cpg; } @@ -500,7 +473,7 @@ public final class Pass3aVerifier extends PassVerifier{ * Assures the generic preconditions of a LoadClass instance. * The referenced class is loaded and pass2-verified. */ - public void visitLoadClass(LoadClass o){ + public void visitLoadClass(Instruction o){ ObjectType t = o.getLoadClassType(cpg); if (t != null){// null means "no class is loaded" Verifier v = VerifierFactory.getVerifier(t.getClassName()); @@ -520,7 +493,7 @@ public final class Pass3aVerifier extends PassVerifier{ /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ // LDC and LDC_W (LDC_W is a subclass of LDC in BCEL's model) - public void visitLDC(LDC o){ + public void visitLDC(Instruction o){ indexValid(o, o.getIndex()); Constant c = cpg.getConstant(o.getIndex()); if (! ( (c instanceof ConstantInteger) || @@ -532,7 +505,7 @@ public final class Pass3aVerifier extends PassVerifier{ /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ // LDC2_W - public void visitLDC2_W(LDC2_W o){ + public void visitLDC2_W(Instruction o){ indexValid(o, o.getIndex()); Constant c = cpg.getConstant(o.getIndex()); if (! ( (c instanceof ConstantLong) || @@ -590,9 +563,9 @@ public final class Pass3aVerifier extends PassVerifier{ /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ public void visitInvokeInstruction(InvokeInstruction o){ indexValid(o, o.getIndex()); - if ( (o instanceof INVOKEVIRTUAL) || - (o instanceof INVOKESPECIAL) || - (o instanceof INVOKESTATIC) ){ + if ( (o.getOpcode()==Constants.INVOKEVIRTUAL) || + (o.getOpcode()==Constants.INVOKESPECIAL) || + (o.getOpcode()==Constants.INVOKESTATIC) ){ Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantMethodref)){ constraintViolated(o, "Indexing a constant that's not a CONSTANT_Methodref but a '"+c+"'."); @@ -601,7 +574,7 @@ public final class Pass3aVerifier extends PassVerifier{ // Constants are okay due to pass2. ConstantNameAndType cnat = (ConstantNameAndType) (cpg.getConstant(((ConstantMethodref) c).getNameAndTypeIndex())); ConstantUtf8 cutf8 = (ConstantUtf8) (cpg.getConstant(cnat.getNameIndex())); - if (cutf8.getBytes().equals(Constants.CONSTRUCTOR_NAME) && (!(o instanceof INVOKESPECIAL)) ){ + if (cutf8.getBytes().equals(Constants.CONSTRUCTOR_NAME) && (!(o.getOpcode()==Constants.INVOKESPECIAL)) ){ constraintViolated(o, "Only INVOKESPECIAL is allowed to invoke instance initialization methods."); } if ( (! (cutf8.getBytes().equals(Constants.CONSTRUCTOR_NAME)) ) && (cutf8.getBytes().startsWith("<")) ){ @@ -662,7 +635,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitINSTANCEOF(INSTANCEOF o){ + public void visitINSTANCEOF(Instruction o){ indexValid(o, o.getIndex()); Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantClass)){ @@ -671,7 +644,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitCHECKCAST(CHECKCAST o){ + public void visitCHECKCAST(Instruction o){ indexValid(o, o.getIndex()); Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantClass)){ @@ -680,7 +653,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitNEW(NEW o){ + public void visitNEW(Instruction o){ indexValid(o, o.getIndex()); Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantClass)){ @@ -720,7 +693,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitANEWARRAY(ANEWARRAY o){ + public void visitANEWARRAY(Instruction o){ indexValid(o, o.getIndex()); Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantClass)){ @@ -736,8 +709,8 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitNEWARRAY(NEWARRAY o){ - byte t = o.getTypecode(); + public void visitNEWARRAY(Instruction o){ + byte t = ((InstructionByte)o).getTypecode(); if (! ( (t == Constants.T_BOOLEAN) || (t == Constants.T_CHAR) || (t == Constants.T_FLOAT) || @@ -751,7 +724,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitILOAD(ILOAD o){ + public void visitILOAD(Instruction o){ int idx = o.getIndex(); if (idx < 0){ constraintViolated(o, "Index '"+idx+"' must be non-negative."); @@ -765,7 +738,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitFLOAD(FLOAD o){ + public void visitFLOAD(Instruction o){ int idx = o.getIndex(); if (idx < 0){ constraintViolated(o, "Index '"+idx+"' must be non-negative."); @@ -779,7 +752,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitALOAD(ALOAD o){ + public void visitALOAD(Instruction o){ int idx = o.getIndex(); if (idx < 0){ constraintViolated(o, "Index '"+idx+"' must be non-negative."); @@ -793,7 +766,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitISTORE(ISTORE o){ + public void visitISTORE(Instruction o){ int idx = o.getIndex(); if (idx < 0){ constraintViolated(o, "Index '"+idx+"' must be non-negative."); @@ -807,7 +780,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitFSTORE(FSTORE o){ + public void visitFSTORE(Instruction o){ int idx = o.getIndex(); if (idx < 0){ constraintViolated(o, "Index '"+idx+"' must be non-negative."); @@ -821,7 +794,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitASTORE(ASTORE o){ + public void visitASTORE(Instruction o){ int idx = o.getIndex(); if (idx < 0){ constraintViolated(o, "Index '"+idx+"' must be non-negative."); @@ -863,7 +836,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitLLOAD(LLOAD o){ + public void visitLLOAD(Instruction o){ int idx = o.getIndex(); if (idx < 0){ constraintViolated(o, "Index '"+idx+"' must be non-negative. [Constraint by JustIce as an analogon to the single-slot xLOAD/xSTORE instructions; may not happen anyway.]"); @@ -877,7 +850,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitDLOAD(DLOAD o){ + public void visitDLOAD(Instruction o){ int idx = o.getIndex(); if (idx < 0){ constraintViolated(o, "Index '"+idx+"' must be non-negative. [Constraint by JustIce as an analogon to the single-slot xLOAD/xSTORE instructions; may not happen anyway.]"); @@ -891,7 +864,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitLSTORE(LSTORE o){ + public void visitLSTORE(Instruction o){ int idx = o.getIndex(); if (idx < 0){ constraintViolated(o, "Index '"+idx+"' must be non-negative. [Constraint by JustIce as an analogon to the single-slot xLOAD/xSTORE instructions; may not happen anyway.]"); @@ -905,7 +878,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitDSTORE(DSTORE o){ + public void visitDSTORE(Instruction o){ int idx = o.getIndex(); if (idx < 0){ constraintViolated(o, "Index '"+idx+"' must be non-negative. [Constraint by JustIce as an analogon to the single-slot xLOAD/xSTORE instructions; may not happen anyway.]"); @@ -942,7 +915,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitPUTSTATIC(PUTSTATIC o){ + public void visitPUTSTATIC(FieldInstruction o){ String field_name = o.getFieldName(cpg); JavaClass jc = Repository.lookupClass(o.getClassType(cpg).getClassName()); Field[] fields = jc.getFields(); @@ -976,7 +949,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitGETSTATIC(GETSTATIC o){ + public void visitGETSTATIC(FieldInstruction o){ String field_name = o.getFieldName(cpg); JavaClass jc = Repository.lookupClass(o.getClassType(cpg).getClassName()); Field[] fields = jc.getFields(); @@ -1033,7 +1006,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitINVOKESPECIAL(INVOKESPECIAL o){ + public void visitINVOKESPECIAL(InvokeInstruction o){ // INVOKESPECIAL is a LoadClass; the Class where the referenced method is declared in, // is therefore resolved/verified. // INVOKESPECIAL is an InvokeInstruction, the argument and return types are resolved/verified, @@ -1091,7 +1064,7 @@ public final class Pass3aVerifier extends PassVerifier{ } /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitINVOKESTATIC(INVOKESTATIC o){ + public void visitINVOKESTATIC(InvokeInstruction o){ // INVOKESTATIC is a LoadClass; the Class where the referenced method is declared in, // is therefore resolved/verified. // INVOKESTATIC is an InvokeInstruction, the argument and return types are resolved/verified, @@ -1120,7 +1093,7 @@ public final class Pass3aVerifier extends PassVerifier{ /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ - public void visitINVOKEVIRTUAL(INVOKEVIRTUAL o){ + public void visitINVOKEVIRTUAL(InvokeInstruction o){ // INVOKEVIRTUAL is a LoadClass; the Class where the referenced method is declared in, // is therefore resolved/verified. // INVOKEVIRTUAL is an InvokeInstruction, the argument and return types are resolved/verified, diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/StringRepresentation.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/StringRepresentation.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/StringRepresentation.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/StringRepresentation.java index 24337f155..3a6df16c2 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/StringRepresentation.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/StringRepresentation.java @@ -88,7 +88,7 @@ import org.aspectj.apache.bcel.classfile.SourceFile; import org.aspectj.apache.bcel.classfile.StackMap; import org.aspectj.apache.bcel.classfile.Synthetic; import org.aspectj.apache.bcel.classfile.Unknown; -import org.aspectj.apache.bcel.classfile.Visitor; +import org.aspectj.apache.bcel.classfile.ClassVisitor; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleParameterAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations; @@ -107,10 +107,10 @@ import org.aspectj.apache.bcel.verifier.exc.AssertionViolatedException; * Note that this class also serves as a placeholder for more sophisticated message * handling in future versions of JustIce. * - * @version $Id: StringRepresentation.java,v 1.4 2006/07/04 16:57:42 aclement Exp $ + * @version $Id: StringRepresentation.java,v 1.2 2008/05/28 23:52:54 aclement Exp $ * @author Enver Haase */ -public class StringRepresentation extends org.aspectj.apache.bcel.classfile.EmptyVisitor implements Visitor{ +public class StringRepresentation extends org.aspectj.apache.bcel.verifier.EmptyClassVisitor implements ClassVisitor{ /** The string representation, created by a visitXXX() method, output by toString(). */ private String tostring; /** The node we ask for its string representation. Not really needed; only for debug output. */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/package.html b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/package.html similarity index 91% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/package.html rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/package.html index 403d492f8..a354da1b7 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/statics/package.html +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/statics/package.html @@ -2,7 +2,7 @@ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ControlFlowGraph.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ControlFlowGraph.java similarity index 94% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ControlFlowGraph.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ControlFlowGraph.java index d64e6eb38..203080c3f 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ControlFlowGraph.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ControlFlowGraph.java @@ -58,23 +58,20 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; -import org.aspectj.apache.bcel.generic.ATHROW; -import org.aspectj.apache.bcel.generic.BranchInstruction; -import org.aspectj.apache.bcel.generic.GotoInstruction; +import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.generic.Instruction; +import org.aspectj.apache.bcel.generic.InstructionBranch; import org.aspectj.apache.bcel.generic.InstructionHandle; -import org.aspectj.apache.bcel.generic.JsrInstruction; +import org.aspectj.apache.bcel.generic.InstructionSelect; import org.aspectj.apache.bcel.generic.MethodGen; import org.aspectj.apache.bcel.generic.RET; -import org.aspectj.apache.bcel.generic.ReturnInstruction; -import org.aspectj.apache.bcel.generic.Select; import org.aspectj.apache.bcel.verifier.exc.AssertionViolatedException; import org.aspectj.apache.bcel.verifier.exc.StructuralCodeConstraintException; /** * This class represents a control flow graph of a method. * - * @version $Id: ControlFlowGraph.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: ControlFlowGraph.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class ControlFlowGraph{ @@ -318,7 +315,7 @@ public class ControlFlowGraph{ InstructionContextImpl current = (InstructionContextImpl) (executionPredecessors.get(i)); Instruction currentlast = current.getInstruction().getInstruction(); if (currentlast instanceof RET) retcount++; - if (currentlast instanceof JsrInstruction){ + if (currentlast.isJsrInstruction()){ retcount--; if (retcount == -1) return current; } @@ -363,40 +360,40 @@ throw new AssertionViolatedException("DID YOU REALLY WANT TO ASK FOR RET'S SUCCS } // Terminates method normally. - if (inst instanceof ReturnInstruction){ + if (inst.isReturnInstruction()) { return empty; } // Terminates method abnormally, because JustIce mandates // subroutines not to be protected by exception handlers. - if (inst instanceof ATHROW){ + if (inst.getOpcode()==Constants.ATHROW){ return empty; } // See method comment. - if (inst instanceof JsrInstruction){ - single[0] = ((JsrInstruction) inst).getTarget(); + if (inst.isJsrInstruction()){ + single[0] = ((InstructionBranch) inst).getTarget(); return single; } - if (inst instanceof GotoInstruction){ - single[0] = ((GotoInstruction) inst).getTarget(); + if (inst.getOpcode()==Constants.GOTO || inst.getOpcode()==Constants.GOTO_W){ + single[0] = ((InstructionBranch) inst).getTarget(); return single; } - if (inst instanceof BranchInstruction){ - if (inst instanceof Select){ + if (inst instanceof InstructionBranch){ + if (inst instanceof InstructionSelect){ // BCEL's getTargets() returns only the non-default targets, // thanks to Eli Tilevich for reporting. - InstructionHandle[] matchTargets = ((Select) inst).getTargets(); + InstructionHandle[] matchTargets = ((InstructionSelect) inst).getTargets(); InstructionHandle[] ret = new InstructionHandle[matchTargets.length+1]; - ret[0] = ((Select) inst).getTarget(); + ret[0] = ((InstructionSelect) inst).getTarget(); System.arraycopy(matchTargets, 0, ret, 1, matchTargets.length); return ret; } else{ pair[0] = getInstruction().getNext(); - pair[1] = ((BranchInstruction) inst).getTarget(); + pair[1] = ((InstructionBranch) inst).getTarget(); return pair; } } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandler.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandler.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandler.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandler.java index e715aa605..3853a84dd 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandler.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandler.java @@ -61,7 +61,7 @@ import org.aspectj.apache.bcel.generic.*; * representing a subclass of java.lang.Throwable and the instruction * the handler starts off (represented by an InstructionContext). * - * @version $Id: ExceptionHandler.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: ExceptionHandler.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class ExceptionHandler{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandlers.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandlers.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandlers.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandlers.java index a0754501d..69e904af0 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandlers.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ExceptionHandlers.java @@ -61,7 +61,7 @@ import java.util.Hashtable; /** * This class allows easy access to ExceptionHandler objects. * - * @version $Id: ExceptionHandlers.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: ExceptionHandlers.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class ExceptionHandlers{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ExecutionVisitor.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ExecutionVisitor.java similarity index 81% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ExecutionVisitor.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ExecutionVisitor.java index c4951520c..f6eed74cc 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/ExecutionVisitor.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/ExecutionVisitor.java @@ -61,7 +61,24 @@ import org.aspectj.apache.bcel.classfile.ConstantFloat; import org.aspectj.apache.bcel.classfile.ConstantInteger; import org.aspectj.apache.bcel.classfile.ConstantLong; import org.aspectj.apache.bcel.classfile.ConstantString; -import org.aspectj.apache.bcel.generic.*; +import org.aspectj.apache.bcel.classfile.ConstantPool; +import org.aspectj.apache.bcel.generic.ArrayType; +import org.aspectj.apache.bcel.generic.FieldInstruction; +import org.aspectj.apache.bcel.generic.IINC; +import org.aspectj.apache.bcel.generic.INVOKEINTERFACE; +import org.aspectj.apache.bcel.generic.Instruction; +import org.aspectj.apache.bcel.generic.InstructionBranch; +import org.aspectj.apache.bcel.generic.InstructionByte; +import org.aspectj.apache.bcel.generic.InvokeInstruction; +import org.aspectj.apache.bcel.generic.LOOKUPSWITCH; +import org.aspectj.apache.bcel.generic.MULTIANEWARRAY; +import org.aspectj.apache.bcel.generic.ObjectType; +import org.aspectj.apache.bcel.generic.RET; +import org.aspectj.apache.bcel.generic.ReturnaddressType; +import org.aspectj.apache.bcel.generic.TABLESWITCH; +import org.aspectj.apache.bcel.generic.Type; +import org.aspectj.apache.bcel.generic.InstVisitor; +import org.aspectj.apache.bcel.verifier.EmptyInstVisitor; /** * This Visitor class may be used for a type-based Java Virtual Machine @@ -86,13 +103,13 @@ import org.aspectj.apache.bcel.generic.*; * If a two-slot type is stored into a local variable, the next variable * is given the type Type.UNKNOWN. * - * @version $Id: ExecutionVisitor.java,v 1.5 2005/02/02 09:11:39 aclement Exp $ + * @version $Id: ExecutionVisitor.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase * @see #visitDSTORE(DSTORE o) * @see InstConstraintVisitor */ -public class ExecutionVisitor extends EmptyVisitor implements Visitor{ - +public class ExecutionVisitor extends EmptyInstVisitor implements InstVisitor { + /** * The executionframe we're operating on. */ @@ -102,7 +119,7 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ * The ConstantPoolGen we're working with. * @see #setConstantPoolGen(ConstantPoolGen) */ - private ConstantPoolGen cpg = null; + private ConstantPool cpg = null; /** * Constructor. Constructs a new instance of this class. @@ -128,7 +145,7 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ /** * Sets the ConstantPoolGen needed for symbolic execution. */ - public void setConstantPoolGen(ConstantPoolGen cpg){ + public void setConstantPoolGen(ConstantPool cpg){ this.cpg = cpg; } @@ -153,7 +170,7 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ //} /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitAALOAD(AALOAD o){ + public void visitAALOAD(Instruction o){ stack().pop(); // pop the index int //System.out.print(stack().peek()); Type t = stack().pop(); // Pop Array type @@ -166,42 +183,42 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ } } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitAASTORE(AASTORE o){ + public void visitAASTORE(Instruction o){ stack().pop(); stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitACONST_NULL(ACONST_NULL o){ + public void visitACONST_NULL(Instruction o){ stack().push(Type.NULL); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitALOAD(ALOAD o){ + public void visitALOAD(Instruction o){ stack().push(locals().get(o.getIndex())); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitANEWARRAY(ANEWARRAY o){ + public void visitANEWARRAY(Instruction o){ stack().pop(); //count stack().push( new ArrayType(o.getType(cpg), 1) ); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitARETURN(ARETURN o){ + public void visitARETURN(Instruction o){ stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitARRAYLENGTH(ARRAYLENGTH o){ + public void visitARRAYLENGTH(Instruction o){ stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitASTORE(ASTORE o){ + public void visitASTORE(Instruction o){ locals().set(o.getIndex(), stack().pop()); //System.err.println("TODO-DEBUG: set LV '"+o.getIndex()+"' to '"+locals().get(o.getIndex())+"'."); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitATHROW(ATHROW o){ + public void visitATHROW(Instruction o){ Type t = stack().pop(); stack().clear(); if (t.equals(Type.NULL)) @@ -211,38 +228,38 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitBALOAD(BALOAD o){ + public void visitBALOAD(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitBASTORE(BASTORE o){ + public void visitBASTORE(Instruction o){ stack().pop(); stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitBIPUSH(BIPUSH o){ + public void visitBIPUSH(Instruction o){ stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitCALOAD(CALOAD o){ + public void visitCALOAD(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitCASTORE(CASTORE o){ + public void visitCASTORE(Instruction o){ stack().pop(); stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitCHECKCAST(CHECKCAST o){ + public void visitCHECKCAST(Instruction o){ // It's possibly wrong to do so, but SUN's // ByteCode verifier seems to do (only) this, too. // TODO: One could use a sophisticated analysis here to check @@ -253,104 +270,104 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitD2F(D2F o){ + public void visitD2F(Instruction o){ stack().pop(); stack().push(Type.FLOAT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitD2I(D2I o){ + public void visitD2I(Instruction o){ stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitD2L(D2L o){ + public void visitD2L(Instruction o){ stack().pop(); stack().push(Type.LONG); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDADD(DADD o){ + public void visitDADD(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.DOUBLE); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDALOAD(DALOAD o){ + public void visitDALOAD(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.DOUBLE); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDASTORE(DASTORE o){ + public void visitDASTORE(Instruction o){ stack().pop(); stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDCMPG(DCMPG o){ + public void visitDCMPG(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDCMPL(DCMPL o){ + public void visitDCMPL(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDCONST(DCONST o){ + public void visitDCONST(Instruction o){ stack().push(Type.DOUBLE); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDDIV(DDIV o){ + public void visitDDIV(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.DOUBLE); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDLOAD(DLOAD o){ + public void visitDLOAD(Instruction o){ stack().push(Type.DOUBLE); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDMUL(DMUL o){ + public void visitDMUL(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.DOUBLE); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDNEG(DNEG o){ + public void visitDNEG(Instruction o){ stack().pop(); stack().push(Type.DOUBLE); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDREM(DREM o){ + public void visitDREM(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.DOUBLE); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDRETURN(DRETURN o){ + public void visitDRETURN(Instruction o){ stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDSTORE(DSTORE o){ + public void visitDSTORE(Instruction o){ locals().set(o.getIndex(), stack().pop()); locals().set(o.getIndex()+1, Type.UNKNOWN); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDSUB(DSUB o){ + public void visitDSUB(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.DOUBLE); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDUP(DUP o){ + public void visitDUP(Instruction o){ Type t = stack().pop(); stack().push(t); stack().push(t); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDUP_X1(DUP_X1 o){ + public void visitDUP_X1(Instruction o){ Type w1 = stack().pop(); Type w2 = stack().pop(); stack().push(w1); @@ -358,7 +375,7 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ stack().push(w1); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDUP_X2(DUP_X2 o){ + public void visitDUP_X2(Instruction o){ Type w1 = stack().pop(); Type w2 = stack().pop(); if (w2.getSize() == 2){ @@ -375,7 +392,7 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ } } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDUP2(DUP2 o){ + public void visitDUP2(Instruction o){ Type t = stack().pop(); if (t.getSize() == 2){ stack().push(t); @@ -390,7 +407,7 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ } } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDUP2_X1(DUP2_X1 o){ + public void visitDUP2_X1(Instruction o){ Type t = stack().pop(); if (t.getSize() == 2){ Type u = stack().pop(); @@ -409,7 +426,7 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ } } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitDUP2_X2(DUP2_X2 o){ + public void visitDUP2_X2(Instruction o){ Type t = stack().pop(); if (t.getSize() == 2){ Type u = stack().pop(); @@ -446,97 +463,97 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ } } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitF2D(F2D o){ + public void visitF2D(Instruction o){ stack().pop(); stack().push(Type.DOUBLE); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitF2I(F2I o){ + public void visitF2I(Instruction o){ stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitF2L(F2L o){ + public void visitF2L(Instruction o){ stack().pop(); stack().push(Type.LONG); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFADD(FADD o){ + public void visitFADD(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.FLOAT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFALOAD(FALOAD o){ + public void visitFALOAD(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.FLOAT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFASTORE(FASTORE o){ + public void visitFASTORE(Instruction o){ stack().pop(); stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFCMPG(FCMPG o){ + public void visitFCMPG(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFCMPL(FCMPL o){ + public void visitFCMPL(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFCONST(FCONST o){ + public void visitFCONST(Instruction o){ stack().push(Type.FLOAT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFDIV(FDIV o){ + public void visitFDIV(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.FLOAT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFLOAD(FLOAD o){ + public void visitFLOAD(Instruction o){ stack().push(Type.FLOAT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFMUL(FMUL o){ + public void visitFMUL(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.FLOAT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFNEG(FNEG o){ + public void visitFNEG(Instruction o){ stack().pop(); stack().push(Type.FLOAT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFREM(FREM o){ + public void visitFREM(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.FLOAT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFRETURN(FRETURN o){ + public void visitFRETURN(Instruction o){ stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFSTORE(FSTORE o){ + public void visitFSTORE(Instruction o){ locals().set(o.getIndex(), stack().pop()); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitFSUB(FSUB o){ + public void visitFSUB(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.FLOAT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitGETFIELD(GETFIELD o){ + public void visitGETFIELD(FieldInstruction o){ stack().pop(); Type t = o.getFieldType(cpg); if ( t.equals(Type.BOOLEAN) || @@ -547,7 +564,7 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ stack().push(t); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitGETSTATIC(GETSTATIC o){ + public void visitGETSTATIC(FieldInstruction o){ Type t = o.getFieldType(cpg); if ( t.equals(Type.BOOLEAN) || t.equals(Type.CHAR) || @@ -557,147 +574,147 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ stack().push(t); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitGOTO(GOTO o){ + public void visitGOTO(Instruction o){ // no stack changes. } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitGOTO_W(GOTO_W o){ + public void visitGOTO_W(Instruction o){ // no stack changes. } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitI2B(I2B o){ + public void visitI2B(Instruction o){ stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitI2C(I2C o){ + public void visitI2C(Instruction o){ stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitI2D(I2D o){ + public void visitI2D(Instruction o){ stack().pop(); stack().push(Type.DOUBLE); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitI2F(I2F o){ + public void visitI2F(Instruction o){ stack().pop(); stack().push(Type.FLOAT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitI2L(I2L o){ + public void visitI2L(Instruction o){ stack().pop(); stack().push(Type.LONG); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitI2S(I2S o){ + public void visitI2S(Instruction o){ stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIADD(IADD o){ + public void visitIADD(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIALOAD(IALOAD o){ + public void visitIALOAD(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIAND(IAND o){ + public void visitIAND(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIASTORE(IASTORE o){ + public void visitIASTORE(Instruction o){ stack().pop(); stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitICONST(ICONST o){ + public void visitICONST(Instruction o){ stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIDIV(IDIV o){ + public void visitIDIV(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIF_ACMPEQ(IF_ACMPEQ o){ + public void visitIF_ACMPEQ(Instruction o){ stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIF_ACMPNE(IF_ACMPNE o){ + public void visitIF_ACMPNE(Instruction o){ stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIF_ICMPEQ(IF_ICMPEQ o){ + public void visitIF_ICMPEQ(Instruction o){ stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIF_ICMPGE(IF_ICMPGE o){ + public void visitIF_ICMPGE(Instruction o){ stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIF_ICMPGT(IF_ICMPGT o){ + public void visitIF_ICMPGT(Instruction o){ stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIF_ICMPLE(IF_ICMPLE o){ + public void visitIF_ICMPLE(Instruction o){ stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIF_ICMPLT(IF_ICMPLT o){ + public void visitIF_ICMPLT(Instruction o){ stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIF_ICMPNE(IF_ICMPNE o){ + public void visitIF_ICMPNE(Instruction o){ stack().pop(); stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIFEQ(IFEQ o){ + public void visitIFEQ(Instruction o){ stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIFGE(IFGE o){ + public void visitIFGE(Instruction o){ stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIFGT(IFGT o){ + public void visitIFGT(Instruction o){ stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIFLE(IFLE o){ + public void visitIFLE(Instruction o){ stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIFLT(IFLT o){ + public void visitIFLT(Instruction o){ stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIFNE(IFNE o){ + public void visitIFNE(Instruction o){ stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIFNONNULL(IFNONNULL o){ + public void visitIFNONNULL(Instruction o){ stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIFNULL(IFNULL o){ + public void visitIFNULL(Instruction o){ stack().pop(); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ @@ -705,22 +722,22 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ // stack is not changed. } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitILOAD(ILOAD o){ + public void visitILOAD(Instruction o){ stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitIMUL(IMUL o){ + public void visitIMUL(Instruction o){ stack().pop(); stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitINEG(INEG o){ + public void visitINEG(Instruction o){ stack().pop(); stack().push(Type.INT); } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitINSTANCEOF(INSTANCEOF o){ + public void visitINSTANCEOF(Instruction o){ stack().pop(); stack().push(Type.INT); } @@ -745,7 +762,7 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ } } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitINVOKESPECIAL(INVOKESPECIAL o){ + public void visitINVOKESPECIAL(InvokeInstruction o){ if (o.getMethodName(cpg).equals(Constants.CONSTRUCTOR_NAME)){ UninitializedObjectType t = (UninitializedObjectType) stack().peek(o.getArgumentTypes(cpg).length); if (t == Frame._this){ @@ -773,7 +790,7 @@ public class ExecutionVisitor extends EmptyVisitor implements Visitor{ } } /** Symbolically executes the corresponding Java Virtual Machine instruction. */ - public void visitINVOKESTATIC(INVOKESTATIC o){ + public void visitINVOKESTATIC(InvokeInstruction o){ for (int i=0; iEnver Haase */ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/GenericArray.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/GenericArray.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/GenericArray.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/GenericArray.java index bee196904..6b9a6ec25 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/GenericArray.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/GenericArray.java @@ -59,7 +59,7 @@ package org.aspectj.apache.bcel.verifier.structurals; * has some of the properties arrays have. They implement java.lang.Cloneable * and java.io.Serializable and they extend java.lang.Object. * - * @version $Id: GenericArray.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: GenericArray.java,v 1.2 2008/05/28 23:53:03 aclement Exp $ * @author Enver Haase */ public class GenericArray extends java.lang.Object implements java.lang.Cloneable, java.io.Serializable{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/InstConstraintVisitor.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/InstConstraintVisitor.java similarity index 83% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/InstConstraintVisitor.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/InstConstraintVisitor.java index 2e39d10fa..f6977d177 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/InstConstraintVisitor.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/InstConstraintVisitor.java @@ -64,11 +64,32 @@ import org.aspectj.apache.bcel.classfile.ConstantFieldref; import org.aspectj.apache.bcel.classfile.ConstantFloat; import org.aspectj.apache.bcel.classfile.ConstantLong; import org.aspectj.apache.bcel.classfile.ConstantString; +import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.classfile.Field; import org.aspectj.apache.bcel.classfile.JavaClass; -import org.aspectj.apache.bcel.generic.*; -import org.aspectj.apache.bcel.verifier.*; -import org.aspectj.apache.bcel.verifier.exc.*; +import org.aspectj.apache.bcel.verifier.EmptyInstVisitor; +import org.aspectj.apache.bcel.verifier.VerificationResult; +import org.aspectj.apache.bcel.verifier.Verifier; +import org.aspectj.apache.bcel.verifier.VerifierFactory; +import org.aspectj.apache.bcel.verifier.exc.*; +import org.aspectj.apache.bcel.generic.ArrayType; +import org.aspectj.apache.bcel.generic.FieldInstruction; +import org.aspectj.apache.bcel.generic.IINC; +import org.aspectj.apache.bcel.generic.INVOKEINTERFACE; +import org.aspectj.apache.bcel.generic.Instruction; +import org.aspectj.apache.bcel.generic.InstructionBranch; +import org.aspectj.apache.bcel.generic.InstructionLV; +import org.aspectj.apache.bcel.generic.InvokeInstruction; +import org.aspectj.apache.bcel.generic.LOOKUPSWITCH; +import org.aspectj.apache.bcel.generic.MULTIANEWARRAY; +import org.aspectj.apache.bcel.generic.MethodGen; +import org.aspectj.apache.bcel.generic.ObjectType; +import org.aspectj.apache.bcel.generic.RET; +import org.aspectj.apache.bcel.generic.ReferenceType; +import org.aspectj.apache.bcel.generic.ReturnaddressType; +import org.aspectj.apache.bcel.generic.TABLESWITCH; +import org.aspectj.apache.bcel.generic.Type; +import org.aspectj.apache.bcel.generic.InstVisitor; /** @@ -79,12 +100,12 @@ import org.aspectj.apache.bcel.verifier.exc.*; * TODO: Currently, the JVM's behaviour concerning monitors (MONITORENTER, * MONITOREXIT) is not modeled in JustIce. * - * @version $Id: InstConstraintVisitor.java,v 1.4 2005/02/02 09:11:39 aclement Exp $ + * @version $Id: InstConstraintVisitor.java,v 1.2 2008/05/28 23:53:03 aclement Exp $ * @author Enver Haase * @see org.aspectj.apache.bcel.verifier.exc.StructuralCodeConstraintException * @see org.aspectj.apache.bcel.verifier.exc.LinkingConstraintException */ -public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.apache.bcel.generic.Visitor{ +public class InstConstraintVisitor extends EmptyInstVisitor implements InstVisitor { private static ObjectType GENERIC_ARRAY = new ObjectType("org.aspectj.apache.bcel.verifier.structurals.GenericArray"); @@ -102,12 +123,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a */ private Frame frame = null; - /** - * The ConstantPoolGen we're working on. - * - * @see #setConstantPoolGen(ConstantPoolGen cpg) - */ - private ConstantPoolGen cpg = null; + private ConstantPool cpg = null; /** * The MethodGen we're working on. @@ -163,7 +179,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a * Sets the ConstantPoolGen instance needed for constraint * checking prior to execution. */ - public void setConstantPoolGen(ConstantPoolGen cpg){ + public void setConstantPoolGen(ConstantPool cpg){ this.cpg = cpg; } @@ -253,7 +269,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a * Assures the generic preconditions of a LoadClass instance. * The referenced class is loaded and pass2-verified. */ - public void visitLoadClass(LoadClass o){ + public void visitLoadClass(Instruction o){ ObjectType t = o.getLoadClassType(cpg); if (t != null){// null means "no class is loaded" Verifier v = VerifierFactory.getVerifier(t.getClassName()); @@ -267,15 +283,15 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the general preconditions of a StackConsumer instance. */ - public void visitStackConsumer(StackConsumer o){ - _visitStackAccessor((Instruction) o); + public void visitStackConsumer(Instruction o){ + _visitStackAccessor(o); } /** * Ensures the general preconditions of a StackProducer instance. */ - public void visitStackProducer(StackProducer o){ - _visitStackAccessor((Instruction) o); + public void visitStackProducer(Instruction o){ + _visitStackAccessor(o); } @@ -284,20 +300,14 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /* therefore, we know the order of visiting; we know */ /* these methods are called after the visitXXXX methods above. */ /***************************************************************/ - /** - * Ensures the general preconditions of a CPInstruction instance. - */ - public void visitCPInstruction(CPInstruction o){ + public void visitCPInstruction(Instruction o){ int idx = o.getIndex(); if ((idx < 0) || (idx >= cpg.getSize())){ throw new AssertionViolatedException("Huh?! Constant pool index of instruction '"+o+"' illegal? Pass 3a should have checked this!"); } } - /** - * Ensures the general preconditions of a FieldInstruction instance. - */ - public void visitFieldInstruction(FieldInstruction o){ + public void visitFieldInstruction(Instruction o){ // visitLoadClass(o) has been called before: Every FieldOrMethod // implements LoadClass. // visitCPInstruction(o) has been called before. @@ -318,9 +328,6 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a } } - /** - * Ensures the general preconditions of an InvokeInstruction instance. - */ public void visitInvokeInstruction(InvokeInstruction o){ // visitLoadClass(o) has been called before: Every FieldOrMethod // implements LoadClass. @@ -328,10 +335,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a //TODO } - /** - * Ensures the general preconditions of a StackInstruction instance. - */ - public void visitStackInstruction(StackInstruction o){ + public void visitStackInstruction(Instruction o){ _visitStackAccessor(o); } @@ -339,16 +343,13 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a * Assures the generic preconditions of a LocalVariableInstruction instance. * That is, the index of the local variable must be valid. */ - public void visitLocalVariableInstruction(LocalVariableInstruction o){ + public void visitLocalVariableInstruction(InstructionLV o){ if (locals().maxLocals() <= (o.getType(cpg).getSize()==1? o.getIndex() : o.getIndex()+1) ){ constraintViolated(o, "The 'index' is not a valid index into the local variable array."); } } - /** - * Assures the generic preconditions of a LoadInstruction instance. - */ - public void visitLoadInstruction(LoadInstruction o){ + public void visitLoadInstruction(Instruction o){ //visitLocalVariableInstruction(o) is called before, because it is more generic. // LOAD instructions must not read Type.UNKNOWN @@ -366,7 +367,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a } // LOAD instructions must read the correct type. - if (!(o instanceof ALOAD)){ + if (!o.isALOAD()){ if (locals().get(o.getIndex()) != o.getType(cpg) ){ constraintViolated(o, "Local Variable type and LOADing Instruction type mismatch: Local Variable: '"+locals().get(o.getIndex())+"'; Instruction type: '"+o.getType(cpg)+"'."); } @@ -385,17 +386,14 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a } } - /** - * Assures the generic preconditions of a StoreInstruction instance. - */ - public void visitStoreInstruction(StoreInstruction o){ + public void visitStoreInstruction(Instruction o){ //visitLocalVariableInstruction(o) is called before, because it is more generic. if (stack().isEmpty()){ // Don't bother about 1 or 2 stack slots used. This check is implicitely done below while type checking. constraintViolated(o, "Cannot STORE: Stack to read from is empty."); } - if ( (!(o instanceof ASTORE)) ){ + if (!o.isASTORE() ){ if (! (stack().peek() == o.getType(cpg)) ){// the other xSTORE types are singletons in BCEL. constraintViolated(o, "Stack top type and STOREing Instruction type mismatch: Stack top: '"+stack().peek()+"'; Instruction type: '"+o.getType(cpg)+"'."); } @@ -411,14 +409,11 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a } } - /** - * Assures the generic preconditions of a ReturnInstruction instance. - */ - public void visitReturnInstruction(ReturnInstruction o){ - if (o instanceof RETURN){ + public void visitReturnInstruction(Instruction o){ + if (o.getOpcode()==Constants.RETURN){ return; } - if (o instanceof ARETURN){ + if (o.getOpcode()==Constants.ARETURN){ if (stack().peek() == Type.NULL){ return; } @@ -453,10 +448,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /* "special"visitXXXX methods for one type of instruction each */ /***************************************************************/ - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitAALOAD(AALOAD o){ + public void visitAALOAD(Instruction o){ Type arrayref = stack().peek(1); Type index = stack().peek(0); @@ -472,7 +464,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitAASTORE(AASTORE o){ + public void visitAASTORE(Instruction o){ Type arrayref = stack().peek(2); Type index = stack().peek(1); Type value = stack().peek(0); @@ -495,26 +487,16 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitACONST_NULL(ACONST_NULL o){ + public void visitACONST_NULL(Instruction o){ // Nothing needs to be done here. } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitALOAD(ALOAD o){ + public void visitALOAD(Instruction o){ //visitLoadInstruction(LoadInstruction) is called before. - // Nothing else needs to be done here. } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitANEWARRAY(ANEWARRAY o){ + public void visitANEWARRAY(Instruction o){ if (!stack().peek().equals(Type.INT)) constraintViolated(o, "The 'count' at the stack top is not of type '"+Type.INT+"' but of type '"+stack().peek()+"'."); // The runtime constant pool item at that index must be a symbolic reference to a class, @@ -524,7 +506,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitARETURN(ARETURN o){ + public void visitARETURN(Instruction o){ if (! (stack().peek() instanceof ReferenceType) ){ constraintViolated(o, "The 'objectref' at the stack top is not of a ReferenceType but of type '"+stack().peek()+"'."); } @@ -542,7 +524,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitARRAYLENGTH(ARRAYLENGTH o){ + public void visitARRAYLENGTH(Instruction o){ Type arrayref = stack().peek(0); arrayrefOfArrayType(o, arrayref); } @@ -550,7 +532,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitASTORE(ASTORE o){ + public void visitASTORE(Instruction o){ if (! ( (stack().peek() instanceof ReferenceType) || (stack().peek() instanceof ReturnaddressType) ) ){ constraintViolated(o, "The 'objectref' is not of a ReferenceType or of ReturnaddressType but of "+stack().peek()+"."); } @@ -562,7 +544,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitATHROW(ATHROW o){ + public void visitATHROW(Instruction o){ // It's stated that 'objectref' must be of a ReferenceType --- but since Throwable is // not derived from an ArrayType, it follows that 'objectref' must be of an ObjectType or Type.NULL. if (! ((stack().peek() instanceof ObjectType) || (stack().peek().equals(Type.NULL))) ){ @@ -582,7 +564,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitBALOAD(BALOAD o){ + public void visitBALOAD(Instruction o){ Type arrayref = stack().peek(1); Type index = stack().peek(0); indexOfInt(o, index); @@ -597,7 +579,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitBASTORE(BASTORE o){ + public void visitBASTORE(Instruction o){ Type arrayref = stack().peek(2); Type index = stack().peek(1); Type value = stack().peek(0); @@ -614,21 +596,21 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitBIPUSH(BIPUSH o){ + public void visitBIPUSH(Instruction o){ // Nothing to do... } /** * Ensures the specific preconditions of the said instruction. */ - public void visitBREAKPOINT(BREAKPOINT o){ + public void visitBREAKPOINT(Instruction o){ throw new AssertionViolatedException("In this JustIce verification pass there should not occur an illegal instruction such as BREAKPOINT."); } /** * Ensures the specific preconditions of the said instruction. */ - public void visitCALOAD(CALOAD o){ + public void visitCALOAD(Instruction o){ Type arrayref = stack().peek(1); Type index = stack().peek(0); @@ -639,7 +621,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitCASTORE(CASTORE o){ + public void visitCASTORE(Instruction o){ Type arrayref = stack().peek(2); Type index = stack().peek(1); Type value = stack().peek(0); @@ -656,7 +638,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitCHECKCAST(CHECKCAST o){ + public void visitCHECKCAST(Instruction o){ // The objectref must be of type reference. Type objectref = stack().peek(0); if (!(objectref instanceof ReferenceType)){ @@ -674,49 +656,18 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitD2F(D2F o){ - if (stack().peek() != Type.DOUBLE){ - constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); - } - } - - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitD2I(D2I o){ - if (stack().peek() != Type.DOUBLE){ - constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); - } - } - - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitD2L(D2L o){ - if (stack().peek() != Type.DOUBLE){ - constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); - } - } + public void visitD2F(Instruction o) { checkTop(o,Type.DOUBLE); } + public void visitD2I(Instruction o) { checkTop(o,Type.DOUBLE); } + public void visitD2L(Instruction o) { checkTop(o,Type.DOUBLE); } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitDADD(DADD o){ - if (stack().peek() != Type.DOUBLE){ - constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); - } + public void visitDADD(Instruction o){ + checkTop(o,Type.DOUBLE); if (stack().peek(1) != Type.DOUBLE){ constraintViolated(o, "The value at the stack next-to-top is not of type 'double', but of type '"+stack().peek(1)+"'."); } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitDALOAD(DALOAD o){ + public void visitDALOAD(Instruction o){ indexOfInt(o, stack().peek()); if (stack().peek(1) == Type.NULL){ return; @@ -730,10 +681,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitDASTORE(DASTORE o){ + public void visitDASTORE(Instruction o){ if (stack().peek() != Type.DOUBLE){ constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); } @@ -750,104 +698,71 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitDCMPG(DCMPG o){ - if (stack().peek() != Type.DOUBLE){ - constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); - } + public void visitDCMPG(Instruction o){ + checkTop(o,Type.DOUBLE); if (stack().peek(1) != Type.DOUBLE){ constraintViolated(o, "The value at the stack next-to-top is not of type 'double', but of type '"+stack().peek(1)+"'."); } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitDCMPL(DCMPL o){ - if (stack().peek() != Type.DOUBLE){ - constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); - } + public void visitDCMPL(Instruction o){ + checkTop(o,Type.DOUBLE); if (stack().peek(1) != Type.DOUBLE){ constraintViolated(o, "The value at the stack next-to-top is not of type 'double', but of type '"+stack().peek(1)+"'."); } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitDCONST(DCONST o){ + public void visitDCONST(Instruction o){ // There's nothing to be done here. } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitDDIV(DDIV o){ - if (stack().peek() != Type.DOUBLE){ - constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); - } + public void visitDDIV(Instruction o){ + checkTop(o,Type.DOUBLE); if (stack().peek(1) != Type.DOUBLE){ constraintViolated(o, "The value at the stack next-to-top is not of type 'double', but of type '"+stack().peek(1)+"'."); } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitDLOAD(DLOAD o){ + public void visitDLOAD(Instruction o){ //visitLoadInstruction(LoadInstruction) is called before. // Nothing else needs to be done here. } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitDMUL(DMUL o){ - if (stack().peek() != Type.DOUBLE){ - constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); - } + public void visitDMUL(Instruction o){ + checkTop(o,Type.DOUBLE); if (stack().peek(1) != Type.DOUBLE){ constraintViolated(o, "The value at the stack next-to-top is not of type 'double', but of type '"+stack().peek(1)+"'."); } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitDNEG(DNEG o){ - if (stack().peek() != Type.DOUBLE){ - constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); - } + public void visitDNEG(Instruction o){ + checkTop(o,Type.DOUBLE); } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitDREM(DREM o){ - if (stack().peek() != Type.DOUBLE){ - constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); - } + public void visitDREM(Instruction o){ + checkTop(o,Type.DOUBLE); if (stack().peek(1) != Type.DOUBLE){ constraintViolated(o, "The value at the stack next-to-top is not of type 'double', but of type '"+stack().peek(1)+"'."); } } + + private void checkTop(Instruction o,Type t) { + if (stack().peek()!=t) + constraintViolated(o, "The value at the stack top is not of type '"+t+"', but of type '"+stack().peek()+"'."); + } /** * Ensures the specific preconditions of the said instruction. */ - public void visitDRETURN(DRETURN o){ - if (stack().peek() != Type.DOUBLE){ - constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); - } + public void visitDRETURN(Instruction o){ + checkTop(o,Type.DOUBLE); } /** * Ensures the specific preconditions of the said instruction. */ - public void visitDSTORE(DSTORE o){ + public void visitDSTORE(Instruction o){ //visitStoreInstruction(StoreInstruction) is called before. // Nothing else needs to be done here. @@ -856,7 +771,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitDSUB(DSUB o){ + public void visitDSUB(Instruction o){ if (stack().peek() != Type.DOUBLE){ constraintViolated(o, "The value at the stack top is not of type 'double', but of type '"+stack().peek()+"'."); } @@ -868,7 +783,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitDUP(DUP o){ + public void visitDUP(Instruction o){ if (stack().peek().getSize() != 1){ constraintViolated(o, "Won't DUP type on stack top '"+stack().peek()+"' because it must occupy exactly one slot, not '"+stack().peek().getSize()+"'."); } @@ -877,7 +792,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitDUP_X1(DUP_X1 o){ + public void visitDUP_X1(Instruction o){ if (stack().peek().getSize() != 1){ constraintViolated(o, "Type on stack top '"+stack().peek()+"' should occupy exactly one slot, not '"+stack().peek().getSize()+"'."); } @@ -889,7 +804,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitDUP_X2(DUP_X2 o){ + public void visitDUP_X2(Instruction o){ if (stack().peek().getSize() != 1){ constraintViolated(o, "Stack top type must be of size 1, but is '"+stack().peek()+"' of size '"+stack().peek().getSize()+"'."); } @@ -906,7 +821,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitDUP2(DUP2 o){ + public void visitDUP2(Instruction o){ if (stack().peek().getSize() == 2){ return; // Form 2, okay. } @@ -920,7 +835,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitDUP2_X1(DUP2_X1 o){ + public void visitDUP2_X1(Instruction o){ if (stack().peek().getSize() == 2){ if (stack().peek(1).getSize() != 1){ constraintViolated(o, "If stack top's size is 2, then stack next-to-top's size must be 1. But it is '"+stack().peek(1)+"' of size '"+stack().peek(1).getSize()+"'."); @@ -942,7 +857,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitDUP2_X2(DUP2_X2 o){ + public void visitDUP2_X2(Instruction o){ if (stack().peek(0).getSize() == 2){ if (stack().peek(1).getSize() == 2){ @@ -975,37 +890,25 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitF2D(F2D o){ + public void visitF2D(Instruction o){ if (stack().peek() != Type.FLOAT){ constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitF2I(F2I o){ - if (stack().peek() != Type.FLOAT){ - constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); - } + public void visitF2I(Instruction o){ + checkTop(o,Type.FLOAT); } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitF2L(F2L o){ - if (stack().peek() != Type.FLOAT){ - constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); - } + public void visitF2L(Instruction o){ + checkTop(o,Type.FLOAT); } /** * Ensures the specific preconditions of the said instruction. */ - public void visitFADD(FADD o){ - if (stack().peek() != Type.FLOAT){ - constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); - } + public void visitFADD(Instruction o){ + checkTop(o,Type.FLOAT); if (stack().peek(1) != Type.FLOAT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'float', but of type '"+stack().peek(1)+"'."); } @@ -1014,7 +917,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitFALOAD(FALOAD o){ + public void visitFALOAD(Instruction o){ indexOfInt(o, stack().peek()); if (stack().peek(1) == Type.NULL){ return; @@ -1031,10 +934,8 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitFASTORE(FASTORE o){ - if (stack().peek() != Type.FLOAT){ - constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); - } + public void visitFASTORE(Instruction o){ + checkTop(o,Type.FLOAT); indexOfInt(o, stack().peek(1)); if (stack().peek(2) == Type.NULL){ return; @@ -1051,10 +952,8 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitFCMPG(FCMPG o){ - if (stack().peek() != Type.FLOAT){ - constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); - } + public void visitFCMPG(Instruction o){ + checkTop(o,Type.FLOAT); if (stack().peek(1) != Type.FLOAT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'float', but of type '"+stack().peek(1)+"'."); } @@ -1063,10 +962,8 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitFCMPL(FCMPL o){ - if (stack().peek() != Type.FLOAT){ - constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); - } + public void visitFCMPL(Instruction o){ + checkTop(o,Type.FLOAT); if (stack().peek(1) != Type.FLOAT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'float', but of type '"+stack().peek(1)+"'."); } @@ -1075,17 +972,15 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitFCONST(FCONST o){ + public void visitFCONST(Instruction o){ // nothing to do here. } /** * Ensures the specific preconditions of the said instruction. */ - public void visitFDIV(FDIV o){ - if (stack().peek() != Type.FLOAT){ - constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); - } + public void visitFDIV(Instruction o){ + checkTop(o,Type.FLOAT); if (stack().peek(1) != Type.FLOAT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'float', but of type '"+stack().peek(1)+"'."); } @@ -1094,7 +989,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitFLOAD(FLOAD o){ + public void visitFLOAD(Instruction o){ //visitLoadInstruction(LoadInstruction) is called before. // Nothing else needs to be done here. @@ -1103,10 +998,8 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitFMUL(FMUL o){ - if (stack().peek() != Type.FLOAT){ - constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); - } + public void visitFMUL(Instruction o){ + checkTop(o,Type.FLOAT); if (stack().peek(1) != Type.FLOAT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'float', but of type '"+stack().peek(1)+"'."); } @@ -1115,19 +1008,15 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitFNEG(FNEG o){ - if (stack().peek() != Type.FLOAT){ - constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); - } + public void visitFNEG(Instruction o){ + checkTop(o,Type.FLOAT); } /** * Ensures the specific preconditions of the said instruction. */ - public void visitFREM(FREM o){ - if (stack().peek() != Type.FLOAT){ - constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); - } + public void visitFREM(Instruction o){ + checkTop(o,Type.FLOAT); if (stack().peek(1) != Type.FLOAT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'float', but of type '"+stack().peek(1)+"'."); } @@ -1136,16 +1025,14 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitFRETURN(FRETURN o){ - if (stack().peek() != Type.FLOAT){ - constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); - } + public void visitFRETURN(Instruction o){ + checkTop(o,Type.FLOAT); } /** * Ensures the specific preconditions of the said instruction. */ - public void visitFSTORE(FSTORE o){ + public void visitFSTORE(Instruction o){ //visitStoreInstruction(StoreInstruction) is called before. // Nothing else needs to be done here. @@ -1154,7 +1041,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitFSUB(FSUB o){ + public void visitFSUB(Instruction o){ if (stack().peek() != Type.FLOAT){ constraintViolated(o, "The value at the stack top is not of type 'float', but of type '"+stack().peek()+"'."); } @@ -1166,7 +1053,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitGETFIELD(GETFIELD o){ + public void visitGETFIELD(FieldInstruction o){ Type objectref = stack().peek(); if (! ( (objectref instanceof ObjectType) || (objectref == Type.NULL) ) ){ constraintViolated(o, "Stack top should be an object reference that's not an array reference, but is '"+objectref+"'."); @@ -1220,28 +1107,28 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitGETSTATIC(GETSTATIC o){ + public void visitGETSTATIC(FieldInstruction o){ // Field must be static: see Pass 3a. } /** * Ensures the specific preconditions of the said instruction. */ - public void visitGOTO(GOTO o){ + public void visitGOTO(Instruction o){ // nothing to do here. } /** * Ensures the specific preconditions of the said instruction. */ - public void visitGOTO_W(GOTO_W o){ + public void visitGOTO_W(Instruction o){ // nothing to do here. } /** * Ensures the specific preconditions of the said instruction. */ - public void visitI2B(I2B o){ + public void visitI2B(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1250,7 +1137,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitI2C(I2C o){ + public void visitI2C(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1259,46 +1146,18 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitI2D(I2D o){ + public void visitI2D(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitI2F(I2F o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } - } + public void visitI2F(Instruction o) { checkTop(o,Type.INT); } + public void visitI2L(Instruction o) { checkTop(o,Type.INT); } + public void visitI2S(Instruction o) { checkTop(o,Type.INT); } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitI2L(I2L o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } - } - - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitI2S(I2S o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } - } - - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitIADD(IADD o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } + public void visitIADD(Instruction o){ + checkTop(o,Type.INT); if (stack().peek(1) != Type.INT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'int', but of type '"+stack().peek(1)+"'."); } @@ -1307,7 +1166,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIALOAD(IALOAD o){ + public void visitIALOAD(Instruction o){ indexOfInt(o, stack().peek()); if (stack().peek(1) == Type.NULL){ return; @@ -1324,7 +1183,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIAND(IAND o){ + public void visitIAND(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1336,7 +1195,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIASTORE(IASTORE o){ + public void visitIASTORE(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1356,17 +1215,15 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitICONST(ICONST o){ + public void visitICONST(Instruction o){ //nothing to do here. } /** * Ensures the specific preconditions of the said instruction. */ - public void visitIDIV(IDIV o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } + public void visitIDIV(Instruction o){ + checkTop(o,Type.INT); if (stack().peek(1) != Type.INT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'int', but of type '"+stack().peek(1)+"'."); } @@ -1375,7 +1232,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIF_ACMPEQ(IF_ACMPEQ o){ + public void visitIF_ACMPEQ(Instruction o){ if (!(stack().peek() instanceof ReferenceType)){ constraintViolated(o, "The value at the stack top is not of a ReferenceType, but of type '"+stack().peek()+"'."); } @@ -1391,7 +1248,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIF_ACMPNE(IF_ACMPNE o){ + public void visitIF_ACMPNE(Instruction o){ if (!(stack().peek() instanceof ReferenceType)){ constraintViolated(o, "The value at the stack top is not of a ReferenceType, but of type '"+stack().peek()+"'."); referenceTypeIsInitialized(o, (ReferenceType) (stack().peek()) ); @@ -1405,7 +1262,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIF_ICMPEQ(IF_ICMPEQ o){ + public void visitIF_ICMPEQ(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1417,7 +1274,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIF_ICMPGE(IF_ICMPGE o){ + public void visitIF_ICMPGE(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1429,7 +1286,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIF_ICMPGT(IF_ICMPGT o){ + public void visitIF_ICMPGT(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1441,7 +1298,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIF_ICMPLE(IF_ICMPLE o){ + public void visitIF_ICMPLE(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1453,7 +1310,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIF_ICMPLT(IF_ICMPLT o){ + public void visitIF_ICMPLT(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1465,7 +1322,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIF_ICMPNE(IF_ICMPNE o){ + public void visitIF_ICMPNE(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1477,7 +1334,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIFEQ(IFEQ o){ + public void visitIFEQ(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1486,7 +1343,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIFGE(IFGE o){ + public void visitIFGE(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1495,7 +1352,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIFGT(IFGT o){ + public void visitIFGT(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1504,7 +1361,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIFLE(IFLE o){ + public void visitIFLE(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1513,7 +1370,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIFLT(IFLT o){ + public void visitIFLT(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1522,7 +1379,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIFNE(IFNE o){ + public void visitIFNE(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1531,7 +1388,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIFNONNULL(IFNONNULL o){ + public void visitIFNONNULL(Instruction o){ if (!(stack().peek() instanceof ReferenceType)){ constraintViolated(o, "The value at the stack top is not of a ReferenceType, but of type '"+stack().peek()+"'."); } @@ -1541,7 +1398,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIFNULL(IFNULL o){ + public void visitIFNULL(Instruction o){ if (!(stack().peek() instanceof ReferenceType)){ constraintViolated(o, "The value at the stack top is not of a ReferenceType, but of type '"+stack().peek()+"'."); } @@ -1563,28 +1420,28 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitILOAD(ILOAD o){ + public void visitILOAD(Instruction o){ // All done by visitLocalVariableInstruction(), visitLoadInstruction() } /** * Ensures the specific preconditions of the said instruction. */ - public void visitIMPDEP1(IMPDEP1 o){ + public void visitIMPDEP1(Instruction o){ throw new AssertionViolatedException("In this JustIce verification pass there should not occur an illegal instruction such as IMPDEP1."); } /** * Ensures the specific preconditions of the said instruction. */ - public void visitIMPDEP2(IMPDEP2 o){ + public void visitIMPDEP2(Instruction o){ throw new AssertionViolatedException("In this JustIce verification pass there should not occur an illegal instruction such as IMPDEP2."); } /** * Ensures the specific preconditions of the said instruction. */ - public void visitIMUL(IMUL o){ + public void visitIMUL(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1596,7 +1453,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitINEG(INEG o){ + public void visitINEG(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1605,7 +1462,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitINSTANCEOF(INSTANCEOF o){ + public void visitINSTANCEOF(Instruction o){ // The objectref must be of type reference. Type objectref = stack().peek(0); if (!(objectref instanceof ReferenceType)){ @@ -1715,7 +1572,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitINVOKESPECIAL(INVOKESPECIAL o){ + public void visitINVOKESPECIAL(InvokeInstruction o){ // Don't init an object twice. if ( (o.getMethodName(cpg).equals(Constants.CONSTRUCTOR_NAME)) && (!(stack().peek(o.getArgumentTypes(cpg).length) instanceof UninitializedObjectType)) ){ constraintViolated(o, "Possibly initializing object twice. A valid instruction sequence must not have an uninitialized object on the operand stack or in a local variable during a backwards branch, or in a local variable in code protected by an exception handler. Please see The Java Virtual Machine Specification, Second Edition, 4.9.4 (pages 147 and 148) for details."); @@ -1801,7 +1658,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitINVOKESTATIC(INVOKESTATIC o){ + public void visitINVOKESTATIC(InvokeInstruction o){ // Method is not native, otherwise pass 3 would not happen. Type t = o.getType(cpg); @@ -1846,7 +1703,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitINVOKEVIRTUAL(INVOKEVIRTUAL o){ + public void visitINVOKEVIRTUAL(InvokeInstruction o){ // the o.getClassType(cpg) type has passed pass 2; see visitLoadClass(o). Type t = o.getType(cpg); @@ -1917,7 +1774,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIOR(IOR o){ + public void visitIOR(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1929,7 +1786,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIREM(IREM o){ + public void visitIREM(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1941,7 +1798,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIRETURN(IRETURN o){ + public void visitIRETURN(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -1950,10 +1807,8 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitISHL(ISHL o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } + public void visitISHL(Instruction o){ + checkTop(o,Type.INT); if (stack().peek(1) != Type.INT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'int', but of type '"+stack().peek(1)+"'."); } @@ -1962,10 +1817,8 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitISHR(ISHR o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } + public void visitISHR(Instruction o){ + checkTop(o,Type.INT); if (stack().peek(1) != Type.INT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'int', but of type '"+stack().peek(1)+"'."); } @@ -1974,7 +1827,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitISTORE(ISTORE o){ + public void visitISTORE(Instruction o){ //visitStoreInstruction(StoreInstruction) is called before. // Nothing else needs to be done here. @@ -1983,10 +1836,8 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitISUB(ISUB o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } + public void visitISUB(Instruction o){ + checkTop(o,Type.INT); if (stack().peek(1) != Type.INT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'int', but of type '"+stack().peek(1)+"'."); } @@ -1995,10 +1846,8 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIUSHR(IUSHR o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } + public void visitIUSHR(Instruction o){ + checkTop(o,Type.INT); if (stack().peek(1) != Type.INT){ constraintViolated(o, "The value at the stack next-to-top is not of type 'int', but of type '"+stack().peek(1)+"'."); } @@ -2007,7 +1856,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitIXOR(IXOR o){ + public void visitIXOR(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -2019,21 +1868,21 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitJSR(JSR o){ + public void visitJSR(InstructionBranch o){ // nothing to do here. } /** * Ensures the specific preconditions of the said instruction. */ - public void visitJSR_W(JSR_W o){ + public void visitJSR_W(InstructionBranch o){ // nothing to do here. } /** * Ensures the specific preconditions of the said instruction. */ - public void visitL2D(L2D o){ + public void visitL2D(Instruction o){ if (stack().peek() != Type.LONG){ constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); } @@ -2042,7 +1891,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitL2F(L2F o){ + public void visitL2F(Instruction o){ if (stack().peek() != Type.LONG){ constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); } @@ -2051,7 +1900,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitL2I(L2I o){ + public void visitL2I(Instruction o){ if (stack().peek() != Type.LONG){ constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); } @@ -2060,7 +1909,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLADD(LADD o){ + public void visitLADD(Instruction o){ if (stack().peek() != Type.LONG){ constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); } @@ -2072,7 +1921,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLALOAD(LALOAD o){ + public void visitLALOAD(Instruction o){ indexOfInt(o, stack().peek()); if (stack().peek(1) == Type.NULL){ return; @@ -2089,7 +1938,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLAND(LAND o){ + public void visitLAND(Instruction o){ if (stack().peek() != Type.LONG){ constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); } @@ -2101,7 +1950,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLASTORE(LASTORE o){ + public void visitLASTORE(Instruction o){ if (stack().peek() != Type.LONG){ constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); } @@ -2121,7 +1970,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLCMP(LCMP o){ + public void visitLCMP(Instruction o){ if (stack().peek() != Type.LONG){ constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); } @@ -2133,14 +1982,14 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLCONST(LCONST o){ + public void visitLCONST(Instruction o){ // Nothing to do here. } /** * Ensures the specific preconditions of the said instruction. */ - public void visitLDC(LDC o){ + public void visitLDC(Instruction o){ // visitCPInstruction is called first. Constant c = cpg.getConstant(o.getIndex()); @@ -2154,7 +2003,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLDC_W(LDC_W o){ + public void visitLDC_W(Instruction o){ // visitCPInstruction is called first. Constant c = cpg.getConstant(o.getIndex()); @@ -2168,7 +2017,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLDC2_W(LDC2_W o){ + public void visitLDC2_W(Instruction o){ // visitCPInstruction is called first. Constant c = cpg.getConstant(o.getIndex()); @@ -2181,7 +2030,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLDIV(LDIV o){ + public void visitLDIV(Instruction o){ if (stack().peek() != Type.LONG){ constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); } @@ -2193,7 +2042,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLLOAD(LLOAD o){ + public void visitLLOAD(Instruction o){ //visitLoadInstruction(LoadInstruction) is called before. // Nothing else needs to be done here. @@ -2202,7 +2051,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLMUL(LMUL o){ + public void visitLMUL(Instruction o){ if (stack().peek() != Type.LONG){ constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); } @@ -2211,29 +2060,16 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitLNEG(LNEG o){ - if (stack().peek() != Type.LONG){ - constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); - } + public void visitLNEG(Instruction o){ + checkTop(o,Type.LONG); } - /** - * Ensures the specific preconditions of the said instruction. - */ public void visitLOOKUPSWITCH(LOOKUPSWITCH o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } + checkTop(o,Type.INT); // See also pass 3a. } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitLOR(LOR o){ + public void visitLOR(Instruction o){ if (stack().peek() != Type.LONG){ constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); } @@ -2242,34 +2078,16 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitLREM(LREM o){ - if (stack().peek() != Type.LONG){ - constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); - } + public void visitLREM(Instruction o){ + checkTop(o,Type.LONG); if (stack().peek(1) != Type.LONG){ constraintViolated(o, "The value at the stack next-to-top is not of type 'long', but of type '"+stack().peek(1)+"'."); } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitLRETURN(LRETURN o){ - if (stack().peek() != Type.LONG){ - constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); - } - } - - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitLSHL(LSHL o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } + public void visitLRETURN(Instruction o) { checkTop(o,Type.LONG); } + public void visitLSHL(Instruction o){ + checkTop(o,Type.INT); if (stack().peek(1) != Type.LONG){ constraintViolated(o, "The value at the stack next-to-top is not of type 'long', but of type '"+stack().peek(1)+"'."); } @@ -2278,7 +2096,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLSHR(LSHR o){ + public void visitLSHR(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -2286,11 +2104,11 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a constraintViolated(o, "The value at the stack next-to-top is not of type 'long', but of type '"+stack().peek(1)+"'."); } } - + /** * Ensures the specific preconditions of the said instruction. */ - public void visitLSTORE(LSTORE o){ + public void visitLSTORE(Instruction o){ //visitStoreInstruction(StoreInstruction) is called before. // Nothing else needs to be done here. @@ -2299,10 +2117,8 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLSUB(LSUB o){ - if (stack().peek() != Type.LONG){ - constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); - } + public void visitLSUB(Instruction o){ + checkTop(o,Type.LONG); if (stack().peek(1) != Type.LONG){ constraintViolated(o, "The value at the stack next-to-top is not of type 'long', but of type '"+stack().peek(1)+"'."); } @@ -2311,10 +2127,8 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLUSHR(LUSHR o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } + public void visitLUSHR(Instruction o){ + checkTop(o,Type.INT); if (stack().peek(1) != Type.LONG){ constraintViolated(o, "The value at the stack next-to-top is not of type 'long', but of type '"+stack().peek(1)+"'."); } @@ -2323,10 +2137,8 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitLXOR(LXOR o){ - if (stack().peek() != Type.LONG){ - constraintViolated(o, "The value at the stack top is not of type 'long', but of type '"+stack().peek()+"'."); - } + public void visitLXOR(Instruction o){ + checkTop(o,Type.LONG); if (stack().peek(1) != Type.LONG){ constraintViolated(o, "The value at the stack next-to-top is not of type 'long', but of type '"+stack().peek(1)+"'."); } @@ -2335,7 +2147,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitMONITORENTER(MONITORENTER o){ + public void visitMONITORENTER(Instruction o){ if (! ((stack().peek()) instanceof ReferenceType)){ constraintViolated(o, "The stack top should be of a ReferenceType, but is '"+stack().peek()+"'."); } @@ -2345,7 +2157,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitMONITOREXIT(MONITOREXIT o){ + public void visitMONITOREXIT(Instruction o){ if (! ((stack().peek()) instanceof ReferenceType)){ constraintViolated(o, "The stack top should be of a ReferenceType, but is '"+stack().peek()+"'."); } @@ -2370,7 +2182,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitNEW(NEW o){ + public void visitNEW(Instruction o){ //visitCPInstruction(CPInstruction) has been called before. //visitLoadClass(LoadClass) has been called before. @@ -2389,26 +2201,10 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a } } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitNEWARRAY(NEWARRAY o){ - if (stack().peek() != Type.INT){ - constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); - } - } - - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitNOP(NOP o){ - // nothing is to be done here. - } + public void visitNEWARRAY(Instruction o) { checkTop(o,Type.INT); } + public void visitNOP(Instruction o){ /* nothing is to be done here */ } - /** - * Ensures the specific preconditions of the said instruction. - */ - public void visitPOP(POP o){ + public void visitPOP(Instruction o){ if (stack().peek().getSize() != 1){ constraintViolated(o, "Stack top size should be 1 but stack top is '"+stack().peek()+"' of size '"+stack().peek().getSize()+"'."); } @@ -2417,7 +2213,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitPOP2(POP2 o){ + public void visitPOP2(Instruction o){ if (stack().peek().getSize() != 2){ constraintViolated(o, "Stack top size should be 2 but stack top is '"+stack().peek()+"' of size '"+stack().peek().getSize()+"'."); } @@ -2426,7 +2222,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitPUTFIELD(PUTFIELD o){ + public void visitPUTFIELD(FieldInstruction o){ Type objectref = stack().peek(1); if (! ( (objectref instanceof ObjectType) || (objectref == Type.NULL) ) ){ @@ -2509,7 +2305,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitPUTSTATIC(PUTSTATIC o){ + public void visitPUTSTATIC(FieldInstruction o){ String field_name = o.getFieldName(cpg); JavaClass jc = Repository.lookupClass(o.getClassType(cpg).getClassName()); Field[] fields = jc.getFields(); @@ -2574,7 +2370,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitRETURN(RETURN o){ + public void visitRETURN(Instruction o){ if (mg.getName().equals(Constants.CONSTRUCTOR_NAME)){// If we leave an method if ((Frame._this != null) && (!(mg.getClassName().equals(Type.OBJECT.getClassName()))) ) { constraintViolated(o, "Leaving a constructor that itself did not call a constructor."); @@ -2585,7 +2381,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitSALOAD(SALOAD o){ + public void visitSALOAD(Instruction o){ indexOfInt(o, stack().peek()); if (stack().peek(1) == Type.NULL){ return; @@ -2602,7 +2398,7 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitSASTORE(SASTORE o){ + public void visitSASTORE(Instruction o){ if (stack().peek() != Type.INT){ constraintViolated(o, "The value at the stack top is not of type 'int', but of type '"+stack().peek()+"'."); } @@ -2622,14 +2418,14 @@ public class InstConstraintVisitor extends EmptyVisitor implements org.aspectj.a /** * Ensures the specific preconditions of the said instruction. */ - public void visitSIPUSH(SIPUSH o){ + public void visitSIPUSH(Instruction o){ // nothing to do here. Generic visitXXX() methods did the trick before. } /** * Ensures the specific preconditions of the said instruction. */ - public void visitSWAP(SWAP o){ + public void visitSWAP(Instruction o){ if (stack().peek().getSize() != 1){ constraintViolated(o, "The value at the stack top is not of size '1', but of size '"+stack().peek().getSize()+"'."); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/InstructionContext.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/InstructionContext.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/InstructionContext.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/InstructionContext.java index c1aee86c9..eb366d7ea 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/InstructionContext.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/InstructionContext.java @@ -63,7 +63,7 @@ import org.aspectj.apache.bcel.generic.InstructionHandle; * to information like control flow successors and * such. * - * @version $Id: InstructionContext.java,v 1.4 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: InstructionContext.java,v 1.2 2008/05/28 23:53:03 aclement Exp $ * @author Enver Haase */ public interface InstructionContext{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/LocalVariables.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/LocalVariables.java similarity index 99% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/LocalVariables.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/LocalVariables.java index 44a690886..e665575c6 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/LocalVariables.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/LocalVariables.java @@ -62,7 +62,7 @@ import org.aspectj.apache.bcel.verifier.exc.*; * This class implements an array of local variables used for symbolic JVM * simulation. * - * @version $Id: LocalVariables.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: LocalVariables.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class LocalVariables{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/OperandStack.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/OperandStack.java similarity index 99% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/OperandStack.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/OperandStack.java index 5d41008b2..6b7b7b0df 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/OperandStack.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/OperandStack.java @@ -63,7 +63,7 @@ import java.util.*; * [It's used an an operand stack substitute.] * Elements of this stack are org.aspectj.apache.bcel.generic.Type objects. * - * @version $Id: OperandStack.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: OperandStack.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public class OperandStack{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/Pass3bVerifier.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/Pass3bVerifier.java similarity index 96% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/Pass3bVerifier.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/Pass3bVerifier.java index b2375a9c6..224de27c9 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/Pass3bVerifier.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/Pass3bVerifier.java @@ -64,13 +64,12 @@ import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.Repository; import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; -import org.aspectj.apache.bcel.generic.ConstantPoolGen; +import org.aspectj.apache.bcel.classfile.ConstantPool; +import org.aspectj.apache.bcel.generic.InstructionBranch; import org.aspectj.apache.bcel.generic.InstructionHandle; -import org.aspectj.apache.bcel.generic.JsrInstruction; import org.aspectj.apache.bcel.generic.MethodGen; import org.aspectj.apache.bcel.generic.ObjectType; import org.aspectj.apache.bcel.generic.RET; -import org.aspectj.apache.bcel.generic.ReturnInstruction; import org.aspectj.apache.bcel.generic.ReturnaddressType; import org.aspectj.apache.bcel.generic.Type; import org.aspectj.apache.bcel.verifier.PassVerifier; @@ -86,7 +85,7 @@ import org.aspectj.apache.bcel.verifier.exc.VerifierConstraintViolatedException; * More detailed information is to be found at the do_verify() method's * documentation. * - * @version $Id: Pass3bVerifier.java,v 1.5 2005/02/02 09:11:39 aclement Exp $ + * @version $Id: Pass3bVerifier.java,v 1.2 2008/05/28 23:53:03 aclement Exp $ * @author Enver Haase * @see #do_verify() */ @@ -207,7 +206,7 @@ public final class Pass3bVerifier extends PassVerifier{ throw new AssertionViolatedException("More RET than JSR in execution chain?!"); } //System.err.println("+"+oldchain.get(ss)); - if (((InstructionContext) oldchain.get(ss)).getInstruction().getInstruction() instanceof JsrInstruction){ + if (((InstructionContext) oldchain.get(ss)).getInstruction().getInstruction().isJsrInstruction()) { if (skip_jsr == 0){ lastJSR = (InstructionContext) oldchain.get(ss); break; @@ -223,7 +222,7 @@ public final class Pass3bVerifier extends PassVerifier{ if (lastJSR == null){ throw new AssertionViolatedException("RET without a JSR before in ExecutionChain?! EC: '"+oldchain+"'."); } - JsrInstruction jsr = (JsrInstruction) (lastJSR.getInstruction().getInstruction()); + InstructionBranch jsr = (InstructionBranch) (lastJSR.getInstruction().getInstruction()); if ( theSuccessor != (cfg.contextOf(jsr.physicalSuccessor())) ){ throw new AssertionViolatedException("RET '"+u.getInstruction()+"' info inconsistent: jump back to '"+theSuccessor+"' or '"+cfg.contextOf(jsr.physicalSuccessor())+"'?"); } @@ -268,7 +267,7 @@ public final class Pass3bVerifier extends PassVerifier{ InstructionHandle ih = start.getInstruction(); do{ - if ((ih.getInstruction() instanceof ReturnInstruction) && (!(cfg.isDead(ih)))) { + if ((ih.getInstruction().isReturnInstruction()) && (!(cfg.isDead(ih)))) { InstructionContext ic = cfg.contextOf(ih); Frame f = ic.getOutFrame(new ArrayList()); // TODO: This is buggy, we check only the top-level return instructions this way. Maybe some maniac returns from a method when in a subroutine? LocalVariables lvs = f.getLocals(); @@ -307,7 +306,7 @@ public final class Pass3bVerifier extends PassVerifier{ // in the BCEL repository. JavaClass jc = Repository.lookupClass(myOwner.getClassName()); - ConstantPoolGen constantPoolGen = new ConstantPoolGen(jc.getConstantPool()); + ConstantPool constantPoolGen = new ConstantPool(jc.getConstantPool().getConstantPool()); // Init Visitors InstConstraintVisitor icv = new InstConstraintVisitor(); icv.setConstantPoolGen(constantPoolGen); diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/Subroutine.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/Subroutine.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/Subroutine.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/Subroutine.java index 36a381ae6..be35a451e 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/Subroutine.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/Subroutine.java @@ -61,7 +61,7 @@ import org.aspectj.apache.bcel.generic.*; * Note that it is 'abused' to maintain the top-level code in a * consistent fashion, too. * - * @version $Id: Subroutine.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: Subroutine.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase */ public interface Subroutine{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/Subroutines.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/Subroutines.java similarity index 93% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/Subroutines.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/Subroutines.java index 6afbee473..267d1394d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/Subroutines.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/Subroutines.java @@ -54,6 +54,7 @@ package org.aspectj.apache.bcel.verifier.structurals; * . */ +import org.aspectj.apache.bcel.Constants; import org.aspectj.apache.bcel.generic.*; import org.aspectj.apache.bcel.verifier.exc.*; import java.awt.Color; @@ -83,7 +84,7 @@ import java.util.Iterator; * * TODO: refer to the paper. * - * @version $Id: Subroutines.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: Subroutines.java,v 1.2 2008/05/28 23:53:02 aclement Exp $ * @author Enver Haase * @see #getTopLevel() */ @@ -200,7 +201,7 @@ public class Subroutines{ * Adds a new JSR or JSR_W that has this subroutine as its target. */ public void addEnteringJsrInstruction(InstructionHandle jsrInst){ - if ( (jsrInst == null) || (! (jsrInst.getInstruction() instanceof JsrInstruction))){ + if ( (jsrInst == null) || (! (jsrInst.getInstruction().isJsrInstruction()))){ throw new AssertionViolatedException("Expecting JsrInstruction InstructionHandle."); } if (localVariable == UNSET){ @@ -210,7 +211,7 @@ public class Subroutines{ // Something is wrong when an ASTORE is targeted that does not operate on the same local variable than the rest of the // JsrInstruction-targets and the RET. // (We don't know out leader here so we cannot check if we're really targeted!) - if (localVariable != ((ASTORE) (((JsrInstruction) jsrInst.getInstruction()).getTarget().getInstruction())).getIndex()){ + if (localVariable != ( (((InstructionBranch) jsrInst.getInstruction()).getTarget().getInstruction())).getIndex()){ throw new AssertionViolatedException("Setting a wrong JsrInstruction."); } } @@ -294,15 +295,15 @@ public class Subroutines{ while (i.hasNext()){ InstructionHandle ih = (InstructionHandle) i.next(); // RET is not a LocalVariableInstruction in the current version of BCEL. - if (ih.getInstruction() instanceof LocalVariableInstruction || ih.getInstruction() instanceof RET){ - int idx = ((IndexedInstruction) (ih.getInstruction())).getIndex(); + if (ih.getInstruction() instanceof InstructionLV || ih.getInstruction() instanceof RET){ + int idx = ((ih.getInstruction())).getIndex(); acc.add(new Integer(idx)); // LONG? DOUBLE?. try{ // LocalVariableInstruction instances are typed without the need to look into // the constant pool. - if (ih.getInstruction() instanceof LocalVariableInstruction){ - int s = ((LocalVariableInstruction) ih.getInstruction()).getType(null).getSize(); + if (ih.getInstruction() instanceof InstructionLV){ + int s = ((InstructionLV) ih.getInstruction()).getType(null).getSize(); if (s==2) acc.add(new Integer(idx+1)); } } @@ -331,8 +332,8 @@ public class Subroutines{ Iterator i = instructions.iterator(); while (i.hasNext()){ Instruction inst = ((InstructionHandle) i.next()).getInstruction(); - if (inst instanceof JsrInstruction){ - InstructionHandle targ = ((JsrInstruction) inst).getTarget(); + if (inst.isJsrInstruction()){ + InstructionHandle targ = ((InstructionBranch) inst).getTarget(); h.add(getSubroutine(targ)); } } @@ -396,8 +397,8 @@ public class Subroutines{ InstructionHandle ih = all[0]; for (int i=0; iEnver Haase */ public class UninitializedObjectType extends ReferenceType implements Constants{ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/package.html b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/package.html similarity index 92% rename from bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/package.html rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/package.html index 3376b9613..84af3bb93 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/verifier/structurals/package.html +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/structurals/package.html @@ -2,7 +2,7 @@ diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/BCELFactory.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/util/BCELFactory.java similarity index 81% rename from bcel-builder/src/org/aspectj/apache/bcel/util/BCELFactory.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/util/BCELFactory.java index 9402f0a96..846628733 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/BCELFactory.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/util/BCELFactory.java @@ -1,8 +1,27 @@ -package org.aspectj.apache.bcel.util; +package org.aspectj.apache.bcel.verifier.util; -import org.aspectj.apache.bcel.generic.*; +import org.aspectj.apache.bcel.verifier.EmptyClassVisitor; import org.aspectj.apache.bcel.classfile.Utility; import org.aspectj.apache.bcel.Constants; +import org.aspectj.apache.bcel.classfile.ConstantPool; +import org.aspectj.apache.bcel.generic.BranchHandle; +import org.aspectj.apache.bcel.generic.CodeExceptionGen; +import org.aspectj.apache.bcel.generic.FieldInstruction; +import org.aspectj.apache.bcel.generic.IINC; +import org.aspectj.apache.bcel.generic.Instruction; +import org.aspectj.apache.bcel.generic.InstructionBranch; +import org.aspectj.apache.bcel.generic.InstructionByte; +import org.aspectj.apache.bcel.generic.InstructionCP; +import org.aspectj.apache.bcel.generic.InstructionConstants; +import org.aspectj.apache.bcel.generic.InstructionHandle; +import org.aspectj.apache.bcel.generic.InstructionSelect; +import org.aspectj.apache.bcel.generic.InvokeInstruction; +import org.aspectj.apache.bcel.generic.MULTIANEWARRAY; +import org.aspectj.apache.bcel.generic.MethodGen; +import org.aspectj.apache.bcel.generic.ObjectType; +import org.aspectj.apache.bcel.generic.RET; +import org.aspectj.apache.bcel.generic.Type; + import java.io.PrintWriter; import java.util.*; @@ -65,13 +84,13 @@ import java.util.*; * A helper class for BCELifier. * * @see BCELifier - * @version $Id: BCELFactory.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: BCELFactory.java,v 1.2 2008/05/28 23:53:04 aclement Exp $ * @author M. Dahm */ -class BCELFactory extends EmptyVisitor { +class BCELFactory extends org.aspectj.apache.bcel.verifier.EmptyInstVisitor { private MethodGen _mg; private PrintWriter _out; - private ConstantPoolGen _cp; + private ConstantPool _cp; BCELFactory(MethodGen mg, PrintWriter out) { _mg = mg; @@ -87,12 +106,12 @@ class BCELFactory extends EmptyVisitor { ih != null; ih = ih.getNext()) { Instruction i = ih.getInstruction(); - if(i instanceof BranchInstruction) { + if(i instanceof InstructionBranch) { branch_map.put(i, ih); // memorize container } if(ih.hasTargeters()) { - if(i instanceof BranchInstruction) { + if(i instanceof InstructionBranch) { _out.println(" InstructionHandle ih_" + ih.getPosition() + ";"); } else { _out.print(" InstructionHandle ih_" + ih.getPosition() + " = "); @@ -114,8 +133,8 @@ class BCELFactory extends EmptyVisitor { short opcode = i.getOpcode(); if((InstructionConstants.INSTRUCTIONS[opcode] != null) && - !(i instanceof ConstantPushInstruction) && - !(i instanceof ReturnInstruction)) { // Handled below + !(i.isConstantInstruction()) && + !(i.isReturnInstruction())) { // Handled below _out.println("il.append(InstructionConstants." + i.getName().toUpperCase() + ");"); return true; @@ -124,7 +143,7 @@ class BCELFactory extends EmptyVisitor { return false; } - public void visitLocalVariableInstruction(LocalVariableInstruction i) { + public void visitLocalVariableInstruction(Instruction i) { short opcode = i.getOpcode(); Type type = i.getType(_cp); @@ -139,7 +158,7 @@ class BCELFactory extends EmptyVisitor { } } - public void visitArrayInstruction(ArrayInstruction i) { + public void visitArrayInstruction(Instruction i) { short opcode = i.getOpcode(); Type type = i.getType(_cp); String kind = (opcode < Constants.IASTORE)? "Load" : "Store"; @@ -177,13 +196,13 @@ class BCELFactory extends EmptyVisitor { "));"); } - public void visitAllocationInstruction(AllocationInstruction i) { + public void visitAllocationInstruction(Instruction i) { Type type; - if(i instanceof CPInstruction) { - type = ((CPInstruction)i).getType(_cp); + if(i.isConstantPoolInstruction()) { + type = ((InstructionCP)i).getType(_cp); } else { - type = ((NEWARRAY)i).getType(); + type = ((InstructionByte)i).getType(); } short opcode = ((Instruction)i).getOpcode(); @@ -220,33 +239,33 @@ class BCELFactory extends EmptyVisitor { _out.println("il.append(new PUSH(_cp, " + embed + "));"); } - public void visitLDC(LDC i) { + public void visitLDC(Instruction i) { createConstant(i.getValue(_cp)); } - public void visitLDC2_W(LDC2_W i) { + public void visitLDC2_W(Instruction i) { createConstant(i.getValue(_cp)); } - public void visitConstantPushInstruction(ConstantPushInstruction i) { + public void visitConstantPushInstruction(Instruction i) { createConstant(i.getValue()); } - public void visitINSTANCEOF(INSTANCEOF i) { + public void visitINSTANCEOF(Instruction i) { Type type = i.getType(_cp); _out.println("il.append(new INSTANCEOF(_cp.addClass(" + BCELifier.printType(type) + ")));"); } - public void visitCHECKCAST(CHECKCAST i) { + public void visitCHECKCAST(Instruction i) { Type type = i.getType(_cp); _out.println("il.append(_factory.createCheckCast(" + BCELifier.printType(type) + "));"); } - public void visitReturnInstruction(ReturnInstruction i) { + public void visitReturnInstruction(Instruction i) { Type type = i.getType(_cp); _out.println("il.append(_factory.createReturn(" + @@ -256,13 +275,13 @@ class BCELFactory extends EmptyVisitor { // Memorize BranchInstructions that need an update private ArrayList branches = new ArrayList(); - public void visitBranchInstruction(BranchInstruction bi) { + public void visitBranchInstruction(InstructionBranch bi) { BranchHandle bh = (BranchHandle)branch_map.get(bi); int pos = bh.getPosition(); String name = bi.getName() + "_" + pos; - if(bi instanceof Select) { - Select s = (Select)bi; + if(bi instanceof InstructionSelect) { + InstructionSelect s = (InstructionSelect)bi; branches.add(bi); StringBuffer args = new StringBuffer("new int[] { "); @@ -318,7 +337,7 @@ class BCELFactory extends EmptyVisitor { private void updateBranchTargets() { for(Iterator i = branches.iterator(); i.hasNext(); ) { - BranchInstruction bi = (BranchInstruction)i.next(); + InstructionBranch bi = (InstructionBranch)i.next(); BranchHandle bh = (BranchHandle)branch_map.get(bi); int pos = bh.getPosition(); String name = bi.getName() + "_" + pos; @@ -326,8 +345,8 @@ class BCELFactory extends EmptyVisitor { _out.println(" " + name + ".setTarget(ih_" + t_pos + ");"); - if(bi instanceof Select) { - InstructionHandle[] ihs = ((Select)bi).getTargets(); + if(bi instanceof InstructionSelect) { + InstructionHandle[] ihs = ((InstructionSelect)bi).getTargets(); for(int j = 0; j < ihs.length; j++) { t_pos = ihs[j].getPosition(); diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/BCELifier.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/util/BCELifier.java similarity index 89% rename from bcel-builder/src/org/aspectj/apache/bcel/util/BCELifier.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/util/BCELifier.java index 0c2c37013..2b0fb010b 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/BCELifier.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/util/BCELifier.java @@ -1,4 +1,4 @@ -package org.aspectj.apache.bcel.util; +package org.aspectj.apache.bcel.verifier.util; /* ==================================================================== * The Apache Software License, Version 1.1 @@ -65,7 +65,7 @@ import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; import org.aspectj.apache.bcel.classfile.Utility; import org.aspectj.apache.bcel.generic.ArrayType; -import org.aspectj.apache.bcel.generic.ConstantPoolGen; +import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.generic.MethodGen; import org.aspectj.apache.bcel.generic.Type; @@ -76,13 +76,13 @@ import org.aspectj.apache.bcel.generic.Type; * are done with BCEL. It does not cover all features of BCEL, * but tries to mimic hand-written code as close as possible. * - * @version $Id: BCELifier.java,v 1.3 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: BCELifier.java,v 1.2 2008/05/28 23:53:04 aclement Exp $ * @author M. Dahm */ -public class BCELifier extends org.aspectj.apache.bcel.classfile.EmptyVisitor { +public class BCELifier extends org.aspectj.apache.bcel.verifier.EmptyClassVisitor { private JavaClass _clazz; private PrintWriter _out; - private ConstantPoolGen _cp; + private ConstantPool _cp; /** @param clazz Java class to "decompile" * @param out where to output Java program @@ -90,7 +90,7 @@ public class BCELifier extends org.aspectj.apache.bcel.classfile.EmptyVisitor { public BCELifier(JavaClass clazz, OutputStream out) { _clazz = clazz; _out = new PrintWriter(out); - _cp = new ConstantPoolGen(_clazz.getConstantPool()); + _cp = new ConstantPool(_clazz.getConstantPool().getConstantPool()); } /** Start Java code generation @@ -104,7 +104,7 @@ public class BCELifier extends org.aspectj.apache.bcel.classfile.EmptyVisitor { String class_name = clazz.getClassName(); String super_name = clazz.getSuperclassName(); String package_name = clazz.getPackageName(); - String inter = Utility.printArray(clazz.getInterfaceNames(), + String inter = BCELifier.printArray(clazz.getInterfaceNames(), false, true); if(!"".equals(package_name)) { class_name = class_name.substring(package_name.length() + 1); @@ -127,7 +127,7 @@ public class BCELifier extends org.aspectj.apache.bcel.classfile.EmptyVisitor { package_name + "." + class_name) + "\", \"" + super_name + "\", " + "\"" + clazz.getSourceFileName() + "\", " + - printFlags(clazz.getAccessFlags(), true) + ", " + + printFlags(clazz.getModifiers(), true) + ", " + "new String[] { " + inter + " });\n"); _out.println(" _cp = _cg.getConstantPool();"); @@ -193,7 +193,7 @@ public class BCELifier extends org.aspectj.apache.bcel.classfile.EmptyVisitor { public void visitField(Field field) { _out.println("\n field = new FieldGen(" + - printFlags(field.getAccessFlags()) + + printFlags(field.getModifiers()) + ", " + printType(field.getSignature()) + ", \"" + field.getName() + "\", _cp);"); @@ -215,11 +215,11 @@ public class BCELifier extends org.aspectj.apache.bcel.classfile.EmptyVisitor { _out.println(" InstructionList il = new InstructionList();"); _out.println(" MethodGen method = new MethodGen(" + - printFlags(method.getAccessFlags()) + + printFlags(method.getModifiers()) + ", " + printType(result_type) + ", " + printArgumentTypes(arg_types) + ", " + "new String[] { " + - Utility.printArray(mg.getArgumentNames(), false, true) + + BCELifier.printArray(mg.getArgumentNames(), false, true) + " }, \"" + method.getName() + "\", \"" + _clazz.getClassName() + "\", il, _cp);\n"); @@ -232,7 +232,34 @@ public class BCELifier extends org.aspectj.apache.bcel.classfile.EmptyVisitor { _out.println(" il.dispose();"); } - static String printFlags(int flags) { + public static final String printArray(Object[] obj, boolean braces, + boolean quote) { + if(obj == null) + return null; + + StringBuffer buf = new StringBuffer(); + if(braces) + buf.append('{'); + + for(int i=0; i < obj.length; i++) { + if(obj[i] != null) { + buf.append((quote? "\"" : "") + obj[i].toString() + (quote? "\"" : "")); + } else { + buf.append("null"); + } + + if(i < obj.length - 1) { + buf.append(", "); + } + } + + if(braces) + buf.append('}'); + + return buf.toString(); + } + +static String printFlags(int flags) { return printFlags(flags, false); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/InstructionFinder.java b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/util/InstructionFinder.java similarity index 98% rename from bcel-builder/src/org/aspectj/apache/bcel/util/InstructionFinder.java rename to bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/util/InstructionFinder.java index c0eb6e9db..6fad9bcb7 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/InstructionFinder.java +++ b/bcel-builder/verifier-src/org/aspectj/apache/bcel/verifier/util/InstructionFinder.java @@ -1,4 +1,4 @@ -package org.aspectj.apache.bcel.util; +package org.aspectj.apache.bcel.verifier.util; /* ==================================================================== * The Apache Software License, Version 1.1 @@ -81,7 +81,7 @@ import org.apache.regexp.*; ... } - * @version $Id: InstructionFinder.java,v 1.2 2004/11/19 16:45:19 aclement Exp $ + * @version $Id: InstructionFinder.java,v 1.2 2008/05/28 23:53:04 aclement Exp $ * @author M. Dahm * @see Instruction * @see InstructionList @@ -388,7 +388,7 @@ public class InstructionFinder { StringBuffer buf = new StringBuffer("("); for(short i=0; i < NO_OPCODES; i++) { - if(Constants.NO_OF_OPERANDS[i] != Constants.UNDEFINED) { // Not an invalid opcode + if(Constants.iLen[i] != Constants.UNDEFINED_LENGTH) { // Not an invalid opcode buf.append(makeChar(i)); if(i < NO_OPCODES - 1) -- 2.39.5