001    /*
002     *  This file is part of the Jikes RVM project (http://jikesrvm.org).
003     *
004     *  This file is licensed to You under the Eclipse Public License (EPL);
005     *  You may not use this file except in compliance with the License. You
006     *  may obtain a copy of the License at
007     *
008     *      http://www.opensource.org/licenses/eclipse-1.0.php
009     *
010     *  See the COPYRIGHT.txt file distributed with this work for information
011     *  regarding copyright ownership.
012     */
013    package org.jikesrvm.classloader;
014    
015    import org.jikesrvm.compilers.common.CompiledMethod;
016    import org.jikesrvm.runtime.Entrypoints;
017    
018    /**
019     * An abstract method of a java class.
020     */
021    public final class AbstractMethod extends RVMMethod {
022    
023      /**
024       * Construct abstract method information
025       *
026       * @param declaringClass the TypeReference object of the class that declared this method
027       * @param memRef the canonical memberReference for this member.
028       * @param modifiers modifiers associated with this member.
029       * @param exceptionTypes exceptions thrown by this method.
030       * @param signature generic type of this method.
031       * @param annotations array of runtime visible annotations
032       * @param parameterAnnotations array of runtime visible parameter annotations
033       * @param annotationDefault value for this annotation that appears
034       */
035      AbstractMethod(TypeReference declaringClass, MemberReference memRef, short modifiers,
036                        TypeReference[] exceptionTypes, Atom signature, RVMAnnotation[] annotations,
037                        RVMAnnotation[][] parameterAnnotations, Object annotationDefault) {
038        super(declaringClass,
039              memRef,
040              modifiers,
041              exceptionTypes,
042              signature,
043              annotations,
044              parameterAnnotations,
045              annotationDefault);
046      }
047    
048      /**
049       * By definition, abstract methods do not have associated code. Therefore,
050       * this method will return an error handling method from
051       * RuntimeEntrypoints that will raise an {@link AbstractMethodError}
052       * when it is invoked.
053       *
054       * @see org.jikesrvm.runtime.RuntimeEntrypoints
055       */
056      @Override
057      protected CompiledMethod genCode() {
058        Entrypoints.unexpectedAbstractMethodCallMethod.compile();
059        return Entrypoints.unexpectedAbstractMethodCallMethod.getCurrentCompiledMethod();
060      }
061    }