Home | History | Annotate | Download | only in writer
      1 /*
      2  * Copyright (C) 2014 Google, Inc.
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package dagger.internal.codegen.writer;
     17 
     18 import com.google.common.base.Ascii;
     19 import com.google.common.collect.ImmutableSet;
     20 import java.io.IOException;
     21 import java.util.Set;
     22 import javax.lang.model.type.PrimitiveType;
     23 
     24 public enum PrimitiveName implements TypeName {
     25   BOOLEAN, BYTE, SHORT, INT, LONG, CHAR, FLOAT, DOUBLE;
     26 
     27   @Override
     28   public Set<ClassName> referencedClasses() {
     29     return ImmutableSet.of();
     30   }
     31 
     32   @Override
     33   public String toString() {
     34     return Ascii.toLowerCase(name());
     35   }
     36 
     37   @Override
     38   public Appendable write(Appendable appendable, Context context) throws IOException {
     39     return appendable.append(toString());
     40   }
     41 
     42   static PrimitiveName forTypeMirror(PrimitiveType mirror) {
     43     switch (mirror.getKind()) {
     44       case BOOLEAN:
     45         return BOOLEAN;
     46       case BYTE:
     47         return BYTE;
     48       case SHORT:
     49         return SHORT;
     50       case INT:
     51         return INT;
     52       case LONG:
     53         return LONG;
     54       case CHAR:
     55         return CHAR;
     56       case FLOAT:
     57         return FLOAT;
     58       case DOUBLE:
     59         return DOUBLE;
     60       default:
     61         throw new AssertionError();
     62     }
     63   }
     64 
     65   static PrimitiveName forClass(Class<?> primitiveClass) {
     66     if (boolean.class.equals(primitiveClass)) {
     67       return BOOLEAN;
     68     }
     69     if (byte.class.equals(primitiveClass)) {
     70       return BYTE;
     71     }
     72     if (short.class.equals(primitiveClass)) {
     73       return SHORT;
     74     }
     75     if (int.class.equals(primitiveClass)) {
     76       return INT;
     77     }
     78     if (long.class.equals(primitiveClass)) {
     79       return LONG;
     80     }
     81     if (char.class.equals(primitiveClass)) {
     82       return CHAR;
     83     }
     84     if (float.class.equals(primitiveClass)) {
     85       return FLOAT;
     86     }
     87     if (double.class.equals(primitiveClass)) {
     88       return DOUBLE;
     89     }
     90     throw new IllegalArgumentException(primitiveClass + " is not a primitive type");
     91   }
     92 }
     93