CPInterfaceMethodRef.java

  1. /*
  2.  * Licensed to the Apache Software Foundation (ASF) under one or more
  3.  * contributor license agreements. See the NOTICE file distributed with this
  4.  * work for additional information regarding copyright ownership. The ASF
  5.  * licenses this file to You under the Apache License, Version 2.0 (the
  6.  * "License"); you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
  9.  * or agreed to in writing, software distributed under the License is
  10.  * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  11.  * KIND, either express or implied. See the License for the specific language
  12.  * governing permissions and limitations under the License.
  13.  */
  14. package org.apache.commons.compress.harmony.unpack200.bytecode;

  15. /**
  16.  * Interface method reference constant pool entry.
  17.  */
  18. public class CPInterfaceMethodRef extends CPRef {

  19.     private boolean hashCodeComputed;

  20.     private int cachedHashCode;

  21.     public CPInterfaceMethodRef(final CPClass className, final CPNameAndType descriptor, final int globalIndex) {
  22.         super(CP_InterfaceMethodref, className, descriptor, globalIndex);
  23.     }

  24.     private void generateHashCode() {
  25.         hashCodeComputed = true;
  26.         final int PRIME = 31;
  27.         int result = 1;
  28.         result = PRIME * result + className.hashCode();
  29.         result = PRIME * result + nameAndType.hashCode();
  30.         cachedHashCode = result;
  31.     }

  32.     @Override
  33.     public int hashCode() {
  34.         if (!hashCodeComputed) {
  35.             generateHashCode();
  36.         }
  37.         return cachedHashCode;
  38.     }

  39.     /**
  40.      * This method answers the value this method will use for an invokeinterface call. This is equal to 1 + the count of all the args, where longs and doubles
  41.      * count for 2 and all others count for 1.
  42.      *
  43.      * @return integer count
  44.      */
  45.     public int invokeInterfaceCount() {
  46.         return nameAndType.invokeInterfaceCount();
  47.     }

  48. }