| // Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| package com.android.tools.r8.references; | |
| import com.android.tools.r8.keepanno.annotations.KeepForApi; | |
| import com.android.tools.r8.utils.internal.exceptions.Unreachable; | |
| @KeepForApi | |
| public abstract class PrimitiveReference implements TypeReference { | |
| static final PrimitiveReference BOOL = | |
| new PrimitiveReference() { | |
| @Override | |
| public String getDescriptor() { | |
| return "Z"; | |
| } | |
| }; | |
| static final PrimitiveReference BYTE = | |
| new PrimitiveReference() { | |
| @Override | |
| public String getDescriptor() { | |
| return "B"; | |
| } | |
| }; | |
| static final PrimitiveReference CHAR = | |
| new PrimitiveReference() { | |
| @Override | |
| public String getDescriptor() { | |
| return "C"; | |
| } | |
| }; | |
| static final PrimitiveReference SHORT = | |
| new PrimitiveReference() { | |
| @Override | |
| public String getDescriptor() { | |
| return "S"; | |
| } | |
| }; | |
| static final PrimitiveReference INT = | |
| new PrimitiveReference() { | |
| @Override | |
| public String getDescriptor() { | |
| return "I"; | |
| } | |
| }; | |
| static final PrimitiveReference FLOAT = | |
| new PrimitiveReference() { | |
| @Override | |
| public String getDescriptor() { | |
| return "F"; | |
| } | |
| }; | |
| static final PrimitiveReference LONG = | |
| new PrimitiveReference() { | |
| @Override | |
| public String getDescriptor() { | |
| return "J"; | |
| } | |
| }; | |
| static final PrimitiveReference DOUBLE = | |
| new PrimitiveReference() { | |
| @Override | |
| public String getDescriptor() { | |
| return "D"; | |
| } | |
| }; | |
| private PrimitiveReference() {} | |
| static PrimitiveReference fromDescriptor(String descriptor) { | |
| assert descriptor.length() == 1; | |
| switch (descriptor.charAt(0)) { | |
| case 'Z': | |
| return BOOL; | |
| case 'B': | |
| return BYTE; | |
| case 'C': | |
| return CHAR; | |
| case 'S': | |
| return SHORT; | |
| case 'I': | |
| return INT; | |
| case 'F': | |
| return FLOAT; | |
| case 'J': | |
| return LONG; | |
| case 'D': | |
| return DOUBLE; | |
| default: | |
| throw new Unreachable("Invalid primitive descriptor: " + descriptor); | |
| } | |
| } | |
| @Override | |
| public boolean isPrimitive() { | |
| return true; | |
| } | |
| @Override | |
| public PrimitiveReference asPrimitive() { | |
| return this; | |
| } | |
| @Override | |
| public abstract String getDescriptor(); | |
| @Override | |
| public boolean equals(Object o) { | |
| return this == o; | |
| } | |
| @Override | |
| public int hashCode() { | |
| return System.identityHashCode(this); | |
| } | |
| } |