@@ -14,6 +14,8 @@ import org.jetbrains.android.dom.manifest.Manifest
1414import org.jetbrains.android.facet.AndroidFacet
1515import org.jetbrains.android.facet.AndroidRootUtil
1616import org.jetbrains.android.util.AndroidResourceUtil
17+ import org.jetbrains.android.util.AndroidUtils
18+ import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass
1719
1820/* *
1921 * @describe
@@ -25,7 +27,9 @@ fun doCreateLayoutFile(ic: ItemConfigBean,element: PsiClass?, project: Project,
2527 return if (element == null ) {
2628 null
2729 } else {
28- val manifest = Manifest .getMainManifest(facet)
30+ val manifestFile = AndroidRootUtil .getManifestFile(facet) ? : return null
31+ val manifest = AndroidUtils .loadDomElement(facet.module, manifestFile,Manifest ::class .java)
32+ // val manifest = Manifest.getMainManifest(facet)
2933 val appPackage = manifest?.getPackage()?.value
3034 if (appPackage != null && appPackage.isNotEmpty()) {
3135 ApplicationManager .getApplication().invokeLater {
@@ -54,19 +58,24 @@ fun createLayoutFileForActivityOrFragment(ic: ItemConfigBean,facet: AndroidFacet
5458 " android.support.constraint.ConstraintLayout" ,
5559 ResourceFolderType .LAYOUT .getName(), false )
5660 val layoutFileName = layoutFile?.name
57- if (layoutFileName != null ) {
58- val onCreateMethods = activityClass.findMethodsByName(" getLayoutId" , false )// todo 生成viewBinding
59- if (onCreateMethods.size != 1 ) {
60- return
61- }
62- val onCreateMethod = onCreateMethods[0 ]
63- val body = onCreateMethod.body
64- if (body != null ) {
61+ val onCreateMethods = activityClass.findMethodsByName(" getLayoutId" , false )// todo 生成viewBinding
62+ if (onCreateMethods.size != 1 ) {
63+ return
64+ }
65+ if (activityClass is KtUltraLightClass ){
66+ // activityClass.kotlinOrigin.findFunctionByName("getLayoutId")
67+ activityClass.ownMethods.find {
68+ it.name== " getLayoutId"
69+ }?.let {
6570 val fieldName = AndroidResourceUtil .getRJavaFieldName(FileUtil .getNameWithoutExtension(layoutFileName))
6671 val layoutFieldRef = " $appPackage .R.layout.$fieldName "
67- addInflateStatement(body , layoutFieldRef, isJava )
72+ getKtStatement(it , layoutFieldRef, false )
6873 }
6974 }
75+ // val onCreateMethod = onCreateMethods[0]
76+ // val fieldName = AndroidResourceUtil.getRJavaFieldName(FileUtil.getNameWithoutExtension(layoutFileName))
77+ // val layoutFieldRef = "$appPackage.R.layout.$fieldName"
78+ // getKtStatement(onCreateMethod, layoutFieldRef, isJava)
7079 }
7180 }
7281}
@@ -86,4 +95,14 @@ fun addInflateStatement(body: PsiCodeBlock, layoutFieldRef: String, isJava: Bool
8695 }
8796 }
8897}
98+ fun getKtStatement (method : PsiMethod , layoutFieldRef : String , isJava : Boolean ) {
99+ val project = method.project
100+ WriteCommandAction .writeCommandAction(project, method.containingFile).run<Throwable > {
101+ val newStatement = PsiElementFactory .getInstance(project).createStatementFromText(
102+ " return $layoutFieldRef${if (isJava) " ;" else " " } " , method)
103+ method.add(newStatement)
104+ JavaCodeStyleManager .getInstance(project).shortenClassReferences(method)
105+ CodeStyleManager .getInstance(project).reformat(method)
106+ }
107+ }
89108
0 commit comments