Fixed: Invalid java.lang.* imports when creating Java files

This commit is contained in:
Akash Yadav
2022-10-28 11:16:23 +05:30
parent 10ac7cb9a5
commit eb412e32ae
3 changed files with 70 additions and 62 deletions
@@ -1,62 +0,0 @@
package com.itsaky.androidide.utils;
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;
import javax.lang.model.element.Modifier;
public class ClassBuilder {
public static String createClass(String packageName, String className) {
return toJavaFile(packageName, newClassSpec(className)).toString();
}
// TODO: Allow user to choose number of spaces to indent
// Most probably, get this from preferences
public static JavaFile toJavaFile(String packageName, TypeSpec type) {
return JavaFile.builder(packageName, type)
.indent(" ") // Indent 4 spaces
.build();
}
public static TypeSpec newClassSpec(String className) {
return TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC).build();
}
public static String createInterface(String packageName, String className) {
return toJavaFile(packageName, newInterfaceSpec(className)).toString();
}
public static TypeSpec newInterfaceSpec(String className) {
return TypeSpec.interfaceBuilder(className).addModifiers(Modifier.PUBLIC).build();
}
public static String createEnum(String packageName, String className) {
return toJavaFile(packageName, newEnumSpec(className)).toString();
}
public static TypeSpec newEnumSpec(String className) {
return TypeSpec.enumBuilder(className)
.addModifiers(Modifier.PUBLIC)
.addEnumConstant("ENUM_DECLARED")
.build();
}
public static String createActivity(String packageName, String className) {
MethodSpec onCreate =
MethodSpec.methodBuilder("onCreate")
.addAnnotation(Override.class)
.addModifiers(Modifier.PROTECTED)
.addParameter(android.os.Bundle.class, "savedInstanceState")
.addStatement("super.onCreate(savedInstanceState)")
.build();
TypeSpec.Builder activity =
newClassSpec(className).toBuilder()
.superclass(androidx.appcompat.app.AppCompatActivity.class)
.addMethod(onCreate);
return JavaFile.builder(packageName, activity.build()).build().toString();
}
}
@@ -0,0 +1,70 @@
package com.itsaky.androidide.utils
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.itsaky.androidide.preferences.internal.tabSize
import com.squareup.javapoet.JavaFile
import com.squareup.javapoet.MethodSpec
import com.squareup.javapoet.TypeSpec
import javax.lang.model.element.Modifier.PROTECTED
import javax.lang.model.element.Modifier.PUBLIC
object ClassBuilder {
@JvmStatic
fun createClass(packageName: String, className: String): String {
return toJavaFile(packageName, newClassSpec(className)).toString()
}
private fun toJavaFile(
packageName: String,
type: TypeSpec,
block: JavaFile.Builder.() -> Unit = {}
): JavaFile {
return JavaFile.builder(packageName, type)
.indent(" ".repeat(tabSize))
.apply { block(this) }
.build()
}
private fun newClassSpec(className: String): TypeSpec {
return TypeSpec.classBuilder(className).addModifiers(PUBLIC).build()
}
@JvmStatic
fun createInterface(packageName: String, className: String): String {
return toJavaFile(packageName, newInterfaceSpec(className)).toString()
}
private fun newInterfaceSpec(className: String): TypeSpec {
return TypeSpec.interfaceBuilder(className).addModifiers(PUBLIC).build()
}
@JvmStatic
fun createEnum(packageName: String, className: String): String {
return toJavaFile(packageName, newEnumSpec(className)).toString()
}
private fun newEnumSpec(className: String): TypeSpec {
return TypeSpec.enumBuilder(className)
.addModifiers(PUBLIC)
.addEnumConstant("ENUM_DECLARED")
.build()
}
@JvmStatic
fun createActivity(packageName: String, className: String): String {
val onCreate =
MethodSpec.methodBuilder("onCreate")
.addAnnotation(Override::class.java)
.addModifiers(PROTECTED)
.addParameter(Bundle::class.java, "savedInstanceState")
.addStatement("super.onCreate(savedInstanceState)")
.build()
val activity =
newClassSpec(className)
.toBuilder()
.superclass(AppCompatActivity::class.java)
.addMethod(onCreate)
return toJavaFile(packageName, activity.build()) { skipJavaLangImports(true) }.toString()
}
}
Binary file not shown.