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 referencedClasses()28 public Set<ClassName> referencedClasses() { 29 return ImmutableSet.of(); 30 } 31 32 @Override toString()33 public String toString() { 34 return Ascii.toLowerCase(name()); 35 } 36 37 @Override write(Appendable appendable, Context context)38 public Appendable write(Appendable appendable, Context context) throws IOException { 39 return appendable.append(toString()); 40 } 41 forTypeMirror(PrimitiveType mirror)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 forClass(Class<?> primitiveClass)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