    001/*
    002 * Licensed to the Apache Software Foundation (ASF) under one
    003 * or more contributor license agreements.  See the NOTICE file
    004 * distributed with this work for additional information
    005 * regarding copyright ownership.  The ASF licenses this file
    006 * to you under the Apache License, Version 2.0 (the
    007 * "License"); you may not use this file except in compliance
    008 * with the License.  You may obtain a copy of the License at
    009 *
    010 *   https://www.apache.org/licenses/LICENSE-2.0
    011 *
    012 * Unless required by applicable law or agreed to in writing,
    013 * software distributed under the License is distributed on an
    014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    015 * KIND, either express or implied.  See the License for the
    016 * specific language governing permissions and limitations
    017 * under the License.
    018 */
    019package org.apache.bcel.generic;
    020
    021import org.apache.bcel.Const;
    022
    023/**
    024 * Denotes basic type such as int.
    025 */
    026public final class BasicType extends Type {
    027
    028    /**
    029     * Gets the BasicType for the given type constant.
    030     *
    031     * @param type the type constant.
    032     * @return the BasicType.
    033     * @since 6.0
    034     */
    035    // @since 6.0 no longer final
    036    public static BasicType getType(final byte type) {
    037        switch (type) {
    038        case Const.T_VOID:
    039            return VOID;
    040        case Const.T_BOOLEAN:
    041            return BOOLEAN;
    042        case Const.T_BYTE:
    043            return BYTE;
    044        case Const.T_SHORT:
    045            return SHORT;
    046        case Const.T_CHAR:
    047            return CHAR;
    048        case Const.T_INT:
    049            return INT;
    050        case Const.T_LONG:
    051            return LONG;
    052        case Const.T_DOUBLE:
    053            return DOUBLE;
    054        case Const.T_FLOAT:
    055            return FLOAT;
    056        default:
    057            throw new ClassGenException("Invalid type: " + type);
    058        }
    059    }
    060
    061    /**
    062     * Constructor for basic types such as int, long, 'void'
    063     *
    064     * @param type one of T_INT, T_BOOLEAN, ..., T_VOID.
    065     * @see Const
    066     */
    067    BasicType(final byte type) {
    068        super(type, Const.getShortTypeName(type));
    069        if (type < Const.T_BOOLEAN || type > Const.T_VOID) {
    070            throw new ClassGenException("Invalid type: " + type);
    071        }
    072    }
    073
    074    /**
    075     * @return true if both type objects refer to the same type.
    076     */
    077    @Override
    078    public boolean equals(final Object type) {
    079        return type instanceof BasicType && ((BasicType) type).getType() == this.getType();
    080    }
    081
    082    /**
    083     * @return a hash code value for the object.
    084     */
    085    @Override
    086    public int hashCode() {
    087        return super.getType();
    088    }
    089}