KModifier for TypeSpec and ParameterSpec.
diff --git a/src/main/java/com/squareup/kotlinpoet/CodeWriter.kt b/src/main/java/com/squareup/kotlinpoet/CodeWriter.kt
index b45fca8..66a2937 100644
--- a/src/main/java/com/squareup/kotlinpoet/CodeWriter.kt
+++ b/src/main/java/com/squareup/kotlinpoet/CodeWriter.kt
@@ -147,8 +147,8 @@
    */
   @Throws(IOException::class)
   @JvmOverloads fun emitJavaModifiers(
-      modifiers: Set<Modifier>,
-      implicitModifiers: Set<Modifier> = emptySet<Modifier>()) {
+      modifiers: Set<KModifier>,
+      implicitModifiers: Set<KModifier> = emptySet<KModifier>()) {
     if (modifiers.isEmpty()) return
     for (modifier in EnumSet.copyOf(modifiers)) {
       if (implicitModifiers.contains(modifier)) continue
@@ -313,7 +313,7 @@
   @Throws(IOException::class)
   private fun emitLiteral(o: Any?) {
     if (o is TypeSpec) {
-      o.emit(this, null, emptySet<Modifier>())
+      o.emit(this, null, emptySet<KModifier>())
     } else if (o is AnnotationSpec) {
       o.emit(this, true)
     } else if (o is CodeBlock) {
diff --git a/src/main/java/com/squareup/kotlinpoet/FunSpec.kt b/src/main/java/com/squareup/kotlinpoet/FunSpec.kt
index ee091d8..5e91ef6 100644
--- a/src/main/java/com/squareup/kotlinpoet/FunSpec.kt
+++ b/src/main/java/com/squareup/kotlinpoet/FunSpec.kt
@@ -245,10 +245,9 @@
           Modifier.NATIVE -> this.modifiers += KModifier.EXTERNAL
           Modifier.DEFAULT -> {}
           Modifier.STATIC -> addAnnotation(JvmStatic::class)
-          Modifier.TRANSIENT -> addAnnotation(Transient::class)
-          Modifier.VOLATILE -> addAnnotation(Volatile::class)
           Modifier.SYNCHRONIZED -> addAnnotation(Synchronized::class)
           Modifier.STRICTFP -> addAnnotation(Strictfp::class)
+          else -> throw IllegalArgumentException("unexpected fun modifier $modifier")
         }
       }
       this.modifiers += visibility
@@ -284,13 +283,13 @@
       return this
     }
 
-    fun addParameter(type: TypeName, name: String, vararg modifiers: Modifier)
+    fun addParameter(type: TypeName, name: String, vararg modifiers: KModifier)
         = addParameter(ParameterSpec.builder(type, name, *modifiers).build())
 
-    fun addParameter(type: Type, name: String, vararg modifiers: Modifier)
+    fun addParameter(type: Type, name: String, vararg modifiers: KModifier)
         = addParameter(TypeName.get(type), name, *modifiers)
 
-    fun addParameter(type: KClass<*>, name: String, vararg modifiers: Modifier)
+    fun addParameter(type: KClass<*>, name: String, vararg modifiers: KModifier)
         = addParameter(TypeName.get(type), name, *modifiers)
 
     @JvmOverloads fun varargs(varargs: Boolean = true): Builder {
diff --git a/src/main/java/com/squareup/kotlinpoet/KModifier.kt b/src/main/java/com/squareup/kotlinpoet/KModifier.kt
index 9d164dc..e12d606 100644
--- a/src/main/java/com/squareup/kotlinpoet/KModifier.kt
+++ b/src/main/java/com/squareup/kotlinpoet/KModifier.kt
@@ -26,6 +26,7 @@
   CONST(Target.PROPERTY),
   CROSSINLINE(Target.PARAMETER),
   DATA(Target.CLASS),
+  INNER(Target.CLASS),
   ENUM(Target.CLASS),
   EXTERNAL(Target.FUNCTION),
   FINAL(Target.CLASS, Target.FUNCTION, Target.PROPERTY),
diff --git a/src/main/java/com/squareup/kotlinpoet/KotlinFile.kt b/src/main/java/com/squareup/kotlinpoet/KotlinFile.kt
index 8258f09..c6ee592 100644
--- a/src/main/java/com/squareup/kotlinpoet/KotlinFile.kt
+++ b/src/main/java/com/squareup/kotlinpoet/KotlinFile.kt
@@ -147,7 +147,7 @@
     for ((i, member) in members.withIndex()) {
       if (i > 0) codeWriter.emit("\n")
       when (member) {
-        is TypeSpec -> member.emit(codeWriter, null, emptySet<Modifier>())
+        is TypeSpec -> member.emit(codeWriter, null, emptySet<KModifier>())
         else -> throw AssertionError()
       }
     }
diff --git a/src/main/java/com/squareup/kotlinpoet/ParameterSpec.kt b/src/main/java/com/squareup/kotlinpoet/ParameterSpec.kt
index 7d6f20a..72bb523 100644
--- a/src/main/java/com/squareup/kotlinpoet/ParameterSpec.kt
+++ b/src/main/java/com/squareup/kotlinpoet/ParameterSpec.kt
@@ -28,13 +28,9 @@
 class ParameterSpec private constructor(builder: ParameterSpec.Builder) {
   val name: String = builder.name
   val annotations: List<AnnotationSpec> = Util.immutableList(builder.annotations)
-  val modifiers: Set<Modifier> = Util.immutableSet(builder.modifiers)
+  val modifiers: Set<KModifier> = Util.immutableSet(builder.modifiers)
   val type: TypeName = builder.type
 
-  fun hasModifier(modifier: Modifier): Boolean {
-    return modifiers.contains(modifier)
-  }
-
   @Throws(IOException::class)
   internal fun emit(codeWriter: CodeWriter, varargs: Boolean) {
     codeWriter.emitAnnotations(annotations, true)
@@ -78,7 +74,7 @@
       internal val type: TypeName,
       internal val name: String) {
     internal val annotations = mutableListOf<AnnotationSpec>()
-    internal val modifiers = mutableListOf<Modifier>()
+    internal val modifiers = mutableListOf<KModifier>()
 
     fun addAnnotations(annotationSpecs: Iterable<AnnotationSpec>): Builder {
       annotations += annotationSpecs
@@ -97,16 +93,26 @@
 
     fun addAnnotation(annotation: Class<*>) = addAnnotation(ClassName.get(annotation))
 
-    fun addModifiers(vararg modifiers: Modifier): Builder {
+    fun addModifiers(vararg modifiers: KModifier): Builder {
       this.modifiers += modifiers
       return this
     }
 
-    fun addModifiers(modifiers: Iterable<Modifier>): Builder {
+    fun addModifiers(modifiers: Iterable<KModifier>): Builder {
       this.modifiers += modifiers
       return this
     }
 
+    fun jvmModifiers(modifiers: Iterable<Modifier>): Builder {
+      for (modifier in modifiers) {
+        when (modifier) {
+          Modifier.FINAL -> this.modifiers += KModifier.FINAL
+          else -> throw IllegalArgumentException("unexpected parameter modifier $modifier")
+        }
+      }
+      return this
+    }
+
     fun build() = ParameterSpec(this)
   }
 
@@ -115,22 +121,22 @@
       val type = TypeName.get(element.asType())
       val name = element.simpleName.toString()
       return ParameterSpec.builder(type, name)
-          .addModifiers(element.modifiers)
+          .jvmModifiers(element.modifiers)
           .build()
     }
 
     @JvmStatic fun parametersOf(method: ExecutableElement)
         = method.parameters.map { ParameterSpec.get(it) }
 
-    @JvmStatic fun builder(type: TypeName, name: String, vararg modifiers: Modifier): Builder {
+    @JvmStatic fun builder(type: TypeName, name: String, vararg modifiers: KModifier): Builder {
       require(SourceVersion.isName(name)) { "not a valid name: $name" }
       return Builder(type, name).addModifiers(*modifiers)
     }
 
-    @JvmStatic fun builder(type: Type, name: String, vararg modifiers: Modifier)
+    @JvmStatic fun builder(type: Type, name: String, vararg modifiers: KModifier)
         = builder(TypeName.get(type), name, *modifiers)
 
-    @JvmStatic fun builder(type: KClass<*>, name: String, vararg modifiers: Modifier)
+    @JvmStatic fun builder(type: KClass<*>, name: String, vararg modifiers: KModifier)
         = builder(TypeName.get(type), name, *modifiers)
   }
 }
diff --git a/src/main/java/com/squareup/kotlinpoet/TypeSpec.kt b/src/main/java/com/squareup/kotlinpoet/TypeSpec.kt
index 681b43b..b465f47 100644
--- a/src/main/java/com/squareup/kotlinpoet/TypeSpec.kt
+++ b/src/main/java/com/squareup/kotlinpoet/TypeSpec.kt
@@ -22,7 +22,6 @@
 import java.util.Locale
 import javax.lang.model.SourceVersion
 import javax.lang.model.element.Element
-import javax.lang.model.element.Modifier
 import kotlin.reflect.KClass
 
 /** A generated class, interface, or enum declaration.  */
@@ -32,7 +31,7 @@
   val anonymousTypeArguments = builder.anonymousTypeArguments
   val kdoc = builder.kdoc.build()
   val annotations: List<AnnotationSpec> = Util.immutableList(builder.annotations)
-  val modifiers: Set<Modifier> = Util.immutableSet(builder.modifiers)
+  val modifiers: Set<KModifier> = Util.immutableSet(builder.modifiers)
   val typeVariables: List<TypeVariableName> = Util.immutableList(builder.typeVariables)
   val primaryConstructor = builder.primaryConstructor
   val superclass = builder.superclass
@@ -53,8 +52,6 @@
     this.originatingElements = Util.immutableList(originatingElementsMutable)
   }
 
-  fun hasModifier(modifier: Modifier) = modifiers.contains(modifier)
-
   fun toBuilder(): Builder {
     val builder = Builder(kind, name, anonymousTypeArguments)
     builder.kdoc.add(kdoc)
@@ -72,7 +69,7 @@
   }
 
   @Throws(IOException::class)
-  internal fun emit(codeWriter: CodeWriter, enumName: String?, implicitModifiers: Set<Modifier>) {
+  internal fun emit(codeWriter: CodeWriter, enumName: String?, implicitModifiers: Set<KModifier>) {
     // Nested classes interrupt wrapped line indentation. Stash the current wrapping state and put
     // it back afterwards when this type is complete.
     val previousStatementLine = codeWriter.statementLine
@@ -100,7 +97,7 @@
       } else {
         codeWriter.emitKdoc(kdoc)
         codeWriter.emitAnnotations(annotations, false)
-        codeWriter.emitJavaModifiers(modifiers, implicitModifiers + kind.asMemberModifiers)
+        codeWriter.emitJavaModifiers(modifiers, implicitModifiers)
         if (kind == Kind.ANNOTATION) {
           codeWriter.emit("%L %L", "@interface", name)
         } else {
@@ -151,7 +148,7 @@
         val enumConstant = i.next()
         if (!firstMember) codeWriter.emit("\n")
         enumConstant.value
-            .emit(codeWriter, enumConstant.key, emptySet<Modifier>())
+            .emit(codeWriter, enumConstant.key, emptySet<KModifier>())
         firstMember = false
         if (i.hasNext()) {
           codeWriter.emit(",\n")
@@ -203,7 +200,7 @@
       // Types.
       for (typeSpec in typeSpecs) {
         if (!firstMember) codeWriter.emit("\n")
-        typeSpec.emit(codeWriter, null, kind.implicitTypeModifiers)
+        typeSpec.emit(codeWriter, null, setOf())
         firstMember = false
       }
 
@@ -234,7 +231,7 @@
     val out = StringWriter()
     try {
       val codeWriter = CodeWriter(out)
-      emit(codeWriter, null, emptySet<Modifier>())
+      emit(codeWriter, null, emptySet<KModifier>())
       return out.toString()
     } catch (e: IOException) {
       throw AssertionError()
@@ -243,32 +240,22 @@
 
   enum class Kind(
       internal val implicitPropertyModifiers: Set<KModifier>,
-      internal val implicitFunctionModifiers: Set<KModifier>,
-      internal val implicitTypeModifiers: Set<Modifier>,
-      internal val asMemberModifiers: Set<Modifier>) {
+      internal val implicitFunctionModifiers: Set<KModifier>) {
     CLASS(
         setOf(KModifier.PUBLIC),
-        setOf(KModifier.PUBLIC),
-        emptySet<Modifier>(),
-        emptySet<Modifier>()),
+        setOf(KModifier.PUBLIC)),
 
     INTERFACE(
         setOf(KModifier.PUBLIC),
-        setOf(KModifier.PUBLIC, KModifier.ABSTRACT),
-        setOf(Modifier.PUBLIC, Modifier.STATIC),
-        setOf(Modifier.STATIC)),
+        setOf(KModifier.PUBLIC, KModifier.ABSTRACT)),
 
     ENUM(
         setOf(KModifier.PUBLIC),
-        setOf(KModifier.PUBLIC),
-        emptySet<Modifier>(),
-        setOf(Modifier.STATIC)),
+        setOf(KModifier.PUBLIC)),
 
     ANNOTATION(
         emptySet(),
-        setOf(KModifier.PUBLIC, KModifier.ABSTRACT),
-        setOf(Modifier.PUBLIC, Modifier.STATIC),
-        setOf(Modifier.STATIC))
+        setOf(KModifier.PUBLIC, KModifier.ABSTRACT))
   }
 
   class Builder internal constructor(
@@ -277,7 +264,7 @@
       internal val anonymousTypeArguments: CodeBlock?) {
     internal val kdoc = CodeBlock.builder()
     internal val annotations = mutableListOf<AnnotationSpec>()
-    internal val modifiers = mutableListOf<Modifier>()
+    internal val modifiers = mutableListOf<KModifier>()
     internal val typeVariables = mutableListOf<TypeVariableName>()
     internal var primaryConstructor : FunSpec? = null
     internal var superclass: TypeName = ANY
@@ -320,7 +307,7 @@
 
     fun addAnnotation(annotation: KClass<*>) = addAnnotation(ClassName.get(annotation))
 
-    fun addModifiers(vararg modifiers: Modifier): Builder {
+    fun addModifiers(vararg modifiers: KModifier): Builder {
       check(anonymousTypeArguments == null) { "forbidden on anonymous types." }
       this.modifiers += modifiers
       return this
@@ -446,8 +433,6 @@
     }
 
     fun addType(typeSpec: TypeSpec): Builder {
-      require(typeSpec.modifiers.containsAll(kind.implicitTypeModifiers)) {
-          "$kind $name.${typeSpec.name} requires modifiers ${kind.implicitTypeModifiers}" }
       typeSpecs += typeSpec
       return this
     }
@@ -461,7 +446,7 @@
       require(kind != Kind.ENUM || !enumConstants.isEmpty()) {
           "at least one enum constant is required for $name" }
 
-      val isAbstract = modifiers.contains(Modifier.ABSTRACT) || kind != Kind.CLASS
+      val isAbstract = modifiers.contains(KModifier.ABSTRACT) || kind != Kind.CLASS
       for (funSpec in funSpecs) {
         require(isAbstract || !funSpec.modifiers.contains(KModifier.ABSTRACT)) {
             "non-abstract type $name cannot declare abstract function ${funSpec.name}" }
diff --git a/src/test/java/com/squareup/kotlinpoet/ParameterSpecTest.kt b/src/test/java/com/squareup/kotlinpoet/ParameterSpecTest.kt
index 301ffef..e6d582d 100644
--- a/src/test/java/com/squareup/kotlinpoet/ParameterSpecTest.kt
+++ b/src/test/java/com/squareup/kotlinpoet/ParameterSpecTest.kt
@@ -15,24 +15,22 @@
  */
 package com.squareup.kotlinpoet
 
-import javax.lang.model.element.Modifier
-import org.junit.Test
-
 import com.google.common.truth.Truth.assertThat
+import org.junit.Test
 
 class ParameterSpecTest {
   @Test fun equalsAndHashCode() {
-    var a = ParameterSpec.builder(Int::class.javaPrimitiveType!!, "foo")
+    var a = ParameterSpec.builder(Int::class, "foo")
         .build()
-    var b = ParameterSpec.builder(Int::class.javaPrimitiveType!!, "foo")
+    var b = ParameterSpec.builder(Int::class, "foo")
         .build()
     assertThat(a == b).isTrue()
     assertThat(a.hashCode()).isEqualTo(b.hashCode())
-    a = ParameterSpec.builder(Int::class.javaPrimitiveType!!, "i")
-        .addModifiers(Modifier.STATIC)
+    a = ParameterSpec.builder(Int::class, "i")
+        .addModifiers(KModifier.FINAL)
         .build()
-    b = ParameterSpec.builder(Int::class.javaPrimitiveType!!, "i")
-        .addModifiers(Modifier.STATIC)
+    b = ParameterSpec.builder(Int::class, "i")
+        .addModifiers(KModifier.FINAL)
         .build()
     assertThat(a == b).isTrue()
     assertThat(a.hashCode()).isEqualTo(b.hashCode())
diff --git a/src/test/java/com/squareup/kotlinpoet/TypeSpecTest.kt b/src/test/java/com/squareup/kotlinpoet/TypeSpecTest.kt
index a3eee74..3a0dcea 100644
--- a/src/test/java/com/squareup/kotlinpoet/TypeSpecTest.kt
+++ b/src/test/java/com/squareup/kotlinpoet/TypeSpecTest.kt
@@ -35,7 +35,6 @@
 import java.util.Random
 import java.util.concurrent.Callable
 import javax.lang.model.element.Element
-import javax.lang.model.element.Modifier
 import javax.lang.model.element.TypeElement
 import kotlin.reflect.KClass
 
@@ -118,7 +117,7 @@
     val simpleThungOfBar = ParameterizedTypeName.get(simpleThung, bar)
 
     val thungParameter = ParameterSpec.builder(thungOfSuperFoo, "thung")
-        .addModifiers(Modifier.FINAL)
+        .addModifiers(KModifier.FINAL)
         .build()
     val aSimpleThung = TypeSpec.anonymousClassBuilder("%N", thungParameter)
         .superclass(simpleThungOfBar)
@@ -170,7 +169,7 @@
     val service = TypeSpec.classBuilder("Foo")
         .addFun(FunSpec.constructorBuilder()
             .addModifiers(KModifier.PUBLIC)
-            .addParameter(Long::class.javaPrimitiveType!!, "id")
+            .addParameter(Long::class, "id")
             .addParameter(ParameterSpec.builder(String::class, "one")
                 .addAnnotation(ClassName.get(tacosPackage, "Ping"))
                 .build())
@@ -314,7 +313,7 @@
             .addMember("hey", "%L", 12)
             .addMember("hello", "%S", "goodbye")
             .build())
-        .addModifiers(Modifier.PUBLIC)
+        .addModifiers(KModifier.PUBLIC)
         .build()
     assertThat(toString(taco)).isEqualTo("""
         |package com.squareup.tacos
@@ -331,7 +330,7 @@
 
   @Test fun enumWithSubclassing() {
     val roshambo = TypeSpec.enumBuilder("Roshambo")
-        .addModifiers(Modifier.PUBLIC)
+        .addModifiers(KModifier.PUBLIC)
         .addEnumConstant("ROCK", TypeSpec.anonymousClassBuilder("")
             .addKdoc("Avalanche!\n")
             .build())
@@ -391,7 +390,7 @@
   /** https://github.com/square/javapoet/issues/193  */
   @Test fun enumsMayDefineAbstractFunctions() {
     val roshambo = TypeSpec.enumBuilder("Tortilla")
-        .addModifiers(Modifier.PUBLIC)
+        .addModifiers(KModifier.PUBLIC)
         .addEnumConstant("CORN", TypeSpec.anonymousClassBuilder("")
             .addFun(FunSpec.builder("fold")
                 .addAnnotation(Override::class)
@@ -471,7 +470,7 @@
   /** https://github.com/square/javapoet/issues/253  */
   @Test fun enumWithAnnotatedValues() {
     val roshambo = TypeSpec.enumBuilder("Roshambo")
-        .addModifiers(Modifier.PUBLIC)
+        .addModifiers(KModifier.PUBLIC)
         .addEnumConstant("ROCK", TypeSpec.anonymousClassBuilder("")
             .addAnnotation(java.lang.Deprecated::class)
             .build())
@@ -496,7 +495,7 @@
 
   @Test fun funThrows() {
     val taco = TypeSpec.classBuilder("Taco")
-        .addModifiers(Modifier.ABSTRACT)
+        .addModifiers(KModifier.ABSTRACT)
         .addFun(FunSpec.builder("throwOne")
             .addException(IOException::class)
             .build())
@@ -546,7 +545,7 @@
         .addFun(FunSpec.builder("compareTo")
             .addAnnotation(Override::class)
             .addModifiers(KModifier.PUBLIC)
-            .returns(Int::class.javaPrimitiveType!!)
+            .returns(Int::class)
             .addParameter(p, "p")
             .addStatement("return 0")
             .build())
@@ -617,7 +616,7 @@
     val taco = ClassName.get(tacosPackage, "Taco")
     val food = ClassName.get("com.squareup.tacos", "Food")
     val typeSpec = TypeSpec.classBuilder("Taco")
-        .addModifiers(Modifier.ABSTRACT)
+        .addModifiers(KModifier.ABSTRACT)
         .superclass(ParameterizedTypeName.get(ClassName.get(AbstractSet::class), food))
         .addSuperinterface(Serializable::class)
         .addSuperinterface(ParameterizedTypeName.get(ClassName.get(Comparable::class), taco))
@@ -653,7 +652,7 @@
         |""".trimMargin())
   }
 
-  @Test fun classImplementsNestedClass() {
+  @Test fun classImplementsInnerClass() {
     val outer = ClassName.get(tacosPackage, "Outer")
     val inner = outer.nestedClass("Inner")
     val callable = ClassName.get(Callable::class)
@@ -661,7 +660,7 @@
         .superclass(ParameterizedTypeName.get(callable,
             inner))
         .addType(TypeSpec.classBuilder("Inner")
-            .addModifiers(Modifier.STATIC)
+            .addModifiers(KModifier.INNER)
             .build())
         .build()
 
@@ -671,7 +670,7 @@
         |import java.util.concurrent.Callable
         |
         |class Outer extends Callable<Outer.Inner> {
-        |  static class Inner {
+        |  inner class Inner {
         |  }
         |}
         |""".trimMargin())
@@ -724,7 +723,6 @@
         .addProperty(taco, "taco")
         .addProperty(chips, "chips")
         .addType(TypeSpec.classBuilder(taco.simpleName())
-            .addModifiers(Modifier.STATIC)
             .addProperty(ParameterizedTypeName.get(ClassName.get(List::class), topping), "toppings")
             .addProperty(sauce, "sauce")
             .addType(TypeSpec.enumBuilder(topping.simpleName())
@@ -733,7 +731,6 @@
                 .build())
             .build())
         .addType(TypeSpec.classBuilder(chips.simpleName())
-            .addModifiers(Modifier.STATIC)
             .addProperty(topping, "topping")
             .addProperty(sauce, "dippingSauce")
             .build())
@@ -756,7 +753,7 @@
         |
         |  val chips: Chips
         |
-        |  static class Taco {
+        |  class Taco {
         |    val toppings: List<Topping>
         |
         |    val sauce: Sauce
@@ -768,7 +765,7 @@
         |    }
         |  }
         |
-        |  static class Chips {
+        |  class Chips {
         |    val topping: Taco.Topping
         |
         |    val dippingSauce: Sauce
@@ -791,11 +788,11 @@
 
   @Test fun annotation() {
     val annotation = TypeSpec.annotationBuilder("MyAnnotation")
-        .addModifiers(Modifier.PUBLIC)
+        .addModifiers(KModifier.PUBLIC)
         .addFun(FunSpec.builder("test")
             .addModifiers(KModifier.PUBLIC, KModifier.ABSTRACT)
             .defaultValue("%L", 0)
-            .returns(Int::class.javaPrimitiveType!!)
+            .returns(Int::class)
             .build())
         .build()
 
@@ -1003,7 +1000,7 @@
         .addKdoc("A hard or soft tortilla, loosely folded and filled with whatever\n")
         .addKdoc("[random][%T] tex-mex stuff we could find in the pantry\n", Random::class)
         .addKdoc(CodeBlock.of("and some [%T] cheese.\n", String::class))
-        .addProperty(PropertySpec.builder(Boolean::class.javaPrimitiveType!!, "soft")
+        .addProperty(PropertySpec.builder(Boolean::class, "soft")
             .addKdoc("True for a soft flour tortilla; false for a crunchy corn tortilla.\n")
             .build())
         .addFun(FunSpec.builder("refold")
@@ -1079,7 +1076,7 @@
   @Test fun varargs() {
     val taqueria = TypeSpec.classBuilder("Taqueria")
         .addFun(FunSpec.builder("prepare")
-            .addParameter(Int::class.javaPrimitiveType!!, "workers")
+            .addParameter(Int::class, "workers")
             .addParameter(Array<Runnable>::class, "jobs")
             .varargs()
             .build())
@@ -1130,7 +1127,7 @@
     val util = TypeSpec.classBuilder("Util")
         .addProperty(escapeHtml)
         .addFun(FunSpec.builder("commonPrefixLength")
-            .returns(Int::class.javaPrimitiveType!!)
+            .returns(Int::class)
             .addParameter(ParameterizedTypeName.get(List::class, String::class), "listA")
             .addParameter(ParameterizedTypeName.get(List::class, String::class), "listB")
             .addCode(funBody)
@@ -1247,13 +1244,10 @@
   @Test fun defaultModifiersForMemberInterfacesAndEnums() {
     val taco = TypeSpec.classBuilder("Taco")
         .addType(TypeSpec.classBuilder("Meat")
-            .addModifiers(Modifier.STATIC)
             .build())
         .addType(TypeSpec.interfaceBuilder("Tortilla")
-            .addModifiers(Modifier.STATIC)
             .build())
         .addType(TypeSpec.enumBuilder("Topping")
-            .addModifiers(Modifier.STATIC)
             .addEnumConstant("SALSA")
             .build())
         .build()
@@ -1261,7 +1255,7 @@
         |package com.squareup.tacos
         |
         |class Taco {
-        |  static class Meat {
+        |  class Meat {
         |  }
         |
         |  interface Tortilla {
@@ -1286,10 +1280,10 @@
         .addFun(FunSpec.builder("R").build())
         .addFun(FunSpec.builder("Q").build())
         .addFun(FunSpec.constructorBuilder()
-            .addParameter(Int::class.javaPrimitiveType!!, "p")
+            .addParameter(Int::class, "p")
             .build())
         .addFun(FunSpec.constructorBuilder()
-            .addParameter(Long::class.javaPrimitiveType!!, "o")
+            .addParameter(Long::class, "o")
             .build())
         .build()
     // Static properties, instance properties, constructors, functions, classes.
@@ -1417,7 +1411,7 @@
 
   @Test fun parameterToString() {
     val parameter = ParameterSpec.builder(ClassName.get(tacosPackage, "Taco"), "taco")
-        .addModifiers(Modifier.FINAL)
+        .addModifiers(KModifier.FINAL)
         .addAnnotation(ClassName.get("javax.annotation", "Nullable"))
         .build()
     assertThat(parameter.toString())
@@ -1507,7 +1501,7 @@
         .addFun(FunSpec.builder("compare")
             .addAnnotation(Override::class)
             .addModifiers(KModifier.PUBLIC)
-            .returns(Int::class.javaPrimitiveType!!)
+            .returns(Int::class)
             .addParameter(String::class, "a")
             .addParameter(String::class, "b")
             .addStatement("return a.substring(0, length)\n" + ".compareTo(b.substring(0, length))")
@@ -1516,12 +1510,12 @@
     val taco = TypeSpec.classBuilder("Taco")
         .addFun(FunSpec.builder("comparePrefix")
             .returns(stringComparator)
-            .addParameter(Int::class.javaPrimitiveType!!, "length", Modifier.FINAL)
+            .addParameter(Int::class, "length", KModifier.FINAL)
             .addStatement("return %L", prefixComparator)
             .build())
         .addFun(FunSpec.builder("sortPrefix")
             .addParameter(listOfString, "list")
-            .addParameter(Int::class.javaPrimitiveType!!, "length", Modifier.FINAL)
+            .addParameter(Int::class, "length", KModifier.FINAL)
             .addStatement("%T.sort(\nlist,\n%L)", Collections::class, prefixComparator)
             .build())
         .build()
@@ -1648,12 +1642,12 @@
         .addFunctions(Arrays.asList(
             FunSpec.builder("getAnswer")
                 .addModifiers(KModifier.PUBLIC)
-                .returns(Int::class.javaPrimitiveType!!)
+                .returns(Int::class)
                 .addStatement("return %L", 42)
                 .build(),
             FunSpec.builder("getRandomQuantity")
                 .addModifiers(KModifier.PUBLIC)
-                .returns(Int::class.javaPrimitiveType!!)
+                .returns(Int::class)
                 .addKdoc("chosen by fair dice roll ;)\n")
                 .addStatement("return %L", 4)
                 .build()))