《KSP(Kotlin Symbol Processing)让你我的工作更加轻松.pdf》由会员分享,可在线阅读,更多相关《KSP(Kotlin Symbol Processing)让你我的工作更加轻松.pdf(54页珍藏版)》请在三个皮匠报告上搜索。
1、Kotlinkotlin|Developed by JetBrains KSP?Orange?NoteNotebookNoteDaoNotebookDaoNotebookRepositoryNotebookViewModelNotebooksAdapterNotesAdapterNotebooksFragmentNotesFragmentNotebooksScreenNotesScreenPhotoItemPhotoItemDaoPhotoItemRepositoryPhotoItemDatabaseNotebookDatabaseNoteDatabasePhotoItemsViewModel
2、PhotosFragmentPhotosScreenNoteRepository?PhotosAdapter?NoteNotebookPhotoItemListScreenAdapterNoteDaoNotebookDaoPhotoItemDaoRoomCompanionNotebookViewModelPhotoItemsViewModelViewModelNotebooksAdapterNotesAdapterPhotosAdapterNotebooksFragmentNotesFragmentPhotosFragmentListFragementNotebooksScreenNotesS
3、creenPhotosScreenNotebookDatabaseNoteDatabasePhotoItemDatabaseNotebookRepositoryNoteRepositoryPhotoItemRepository?问?26%37%22%28%74%63%78%72%Android ViewJetpack ComposeAndroid ViewJetpack ComposeNotebookNotebookGalleryGallery?53%62%48%53%47%38%52%47%Android ViewJetpack ComposeAndroid ViewJetpack Comp
4、oseNotebookNotebookGalleryGallery?devbricksx-compilerNotebookNotebookGalleryGallery26%37%22%28%74%63%78%72%Android ViewJetpack ComposeAndroid ViewJetpack ComposeNotebookNotebookGalleryGallery?devbricksx-compilerroom-compilerNotebookNotebookGalleryGallery?kaptKotlin Annotation Processing ToolKSPKotli
5、n Symbol Processing?kaptKotlin Annotation Processing ToolKSPKotlin Symbol Processing?KSPKotlin Symbol Processing?问?Stub?出?Java?问?11.010.23.84.00.05.010.015.0GalleryNotebook?(s)kaptKSP37.335.722.321.00.010.020.030.040.0GalleryNotebook?(s)kaptKSP?NotebookNotebookDaoNotebookRepositoryNotebookViewModelN
6、otebooksAdapterNotebooksFragmentNotebooksScreenNotebookDatabaseNoteNoteDaoNotesAdapterNotesFragmentNotesScreenPhotoItemPhotoItemDaoPhotoItemRepositoryPhotoItemDatabaseNoteDatabasePhotoItemsViewModelPhotosFragmentPhotosScreenNoteRepository?NotebookDatabaseNotebookDao?UI Layer?Repositories)?Data Sourc
7、es)NotebookNotebookRepositoryNotebookViewModelNotebooksFragmentNotebooksAdapterNotebooksScreenRoomNotebookDatabaseNotebookDao?Data Sources)NotebookRoomRoomCompanionEntityNotebookDatabaseNotebookDao?Data Sources)NotebookRoomRoomCompanionEntity_Notebook_Notebook问?动?Notebook问?动?Notebook_NotebookViewMod
8、elinsertNotebook(Notebook)_insertNotebook(_Notebook)insertNotebook(Notebook)getAll():FlowListgetAll():FlowList_getAll():FlowListgetAll():FlowListinsertNotebook(Notebook)DaoRepository问?动?Notebook_NotebookidnamecreatedlastModifiedidnamecreatedlastModified问?动?Notebook_NotebookidnamecreatedlastModifiedi
9、dColumnInfoPrimaryKeynameColumnInfocreatedColumnInfolastModifiedColumnInfoEntity问?动?fromObject(Notebook):_NotebookcopyFieldsFromObject(Notebook)toObject():NotebookcopyFieldsToObject(Notebook)Notebook_Notebookid namecreatedlastModified,id namecreatedlastModified,?问?问?KSP?API?RoomCompanion(RoomCompani
10、on(primaryKeys=“id”,autoGenerate=true,converters=DateConverter:class,extension=NotebookDaoExtension:class,database=“notes”,)open class Notebook(id:Int=0):Record(id)var name:String?=null)?Retention(AnnotationRetention.BINARY)Target(AnnotationTarget.CLASS)annotation class RoomCompanion(val primaryKeys
11、:Array=,val autoGenerate:Boolean=false,val converters:ArrayKClass=,val extension:KClass=Unit:class,val database:String=,)?Retention(AnnotationRetention.BINARY)NotebookRoomCompanionNotebooknotebook-core.aarRoomCompanionNotebookRoomCompanionNotebooknotebook-appRoomCompanionnotebook-app-compose?Noteboo
12、kRoomCompanionNotebookRoomCompanionnotebook-coreBinaryRetentionSourceRetention.kt.kt.class.class.class.class?val symbols=).filterIsInstance()resolver.getSymbolsWithAnnotation(RoomCompanion:class.qualifiedName!ResolvergetSymbolsWithAnnotation(RoomCompanion)?KSClassDeclaration?RoomCompanionRecord(id)v
13、ar lastModified:Date?=nullvar name:String?=nulloverride fun countNotes():Int .fun displayName(prefix:String):String .(id:Int=0):class Notebookcom.dailystudio.devbricksx.notebook.dbpackage?RoomCompanionRecord(id)var lastModified:Date?=nullvar name:String?=nulloverride fun countNotes():Int .fun displa
14、yName(prefix:String):String .(id:Int=0):class NotebookKSClassDeclarationKSClassDeclaration.packageName()?com.dailystudio.devbricksx.notebook.dbpackagecom.dailystudio.devbricksx.notebook.db?RoomCompanionRecord(id)var lastModified:Date?=nullvar name:String?=nulloverride fun countNotes():Int .fun displ
15、ayName(prefix:String):String .KSClassDeclarationKSClassDeclaration.typeName()?(id:Int=0):classNotebookNotebookcom.dailystudio.devbricksx.notebook.dbpackageKSClassDeclarationKSClassDeclaration.packageName()?RoomCompanionRecord(id)var lastModified:Date?=nullvar name:String?=nulloverride fun countNotes
16、():Int .fun displayName(prefix:String):String .(id:Int=0):classNotebookKSClassDeclarationKSClassDeclaration.primaryConstructor?Notebook(id:Int=0):com.dailystudio.devbricksx.notebook.dbpackageKSClassDeclarationKSClassDeclaration.packageName()?KSClassDeclarationKSClassDeclaration.typeName()?RoomCompan
17、ionRecord(id)var lastModified:Date?=nullvar name:String?=nulloverride fun countNotes():Int .fun displayName(prefix:String):String .(id:Int=0):class NotebookKSClassDeclarationKSClassDeclaration.getAllProperties()?var name:String?=nullvar lastModified:Date?=nullcom.dailystudio.devbricksx.notebook.dbpa
18、ckageKSClassDeclarationKSClassDeclaration.packageName()?KSClassDeclarationKSClassDeclaration.typeName()?KSClassDeclarationKSClassDeclaration.primaryConstructor?RoomCompanionRecord(id)var lastModified:Date?=nullvar name:String?=nulloverride fun countNotes():Int .fun displayName(prefix:String):String
19、.(id:Int=0):class NotebookKSClassDeclarationKSClassDeclaration.getAllFunctions()?override fun countNotes():Int .fun displayName(prefix:String):String .com.dailystudio.devbricksx.notebook.dbpackageKSClassDeclarationKSClassDeclaration.packageName()?KSClassDeclarationKSClassDeclaration.typeName()?KSCla
20、ssDeclarationKSClassDeclaration.primaryConstructor?KSClassDeclarationKSClassDeclaration.getAllProperties()?KSClassDeclarationKSClassDeclaration.packageName()?KSClassDeclarationKSClassDeclaration.typeName()?KSClassDeclarationKSClassDeclaration.primaryConstructor?KSClassDeclarationKSClassDeclaration.g
21、etAllFunctions()?KSClassDeclarationKSClassDeclaration.getAllProperties()?Version 1.15.1?问?KotlinPoetSquare Open SourceVersion 1.14+?问?KotlinPoetSquare Open Sourceimport androidx.lifecycle.map as LifecycleMapimport kotlinx.coroutines.flow.map as FlowMapEntity(tableName=“notebook”)public open override
22、 var id:Int,):_Record(id)ColumnInfo(name=“name”)public open var name:String?=nullpublic fun copyFieldsToObject()notebook:Notebooksuper.copyFieldsToObject(notebook)notebook.name=this.namepublic open classColumnInfo(name=“id”)PrimaryKey(autoGenerate=true)_Notebook(?问?Entity(tableName=“notebook”)public
23、 open override var id:Int,):_Record(id)ColumnInfo(name=“name”)public open var name:String?=nullpublic fun copyFieldsToObject()notebook:Notebooksuper.copyFieldsToObject(notebook)notebook.name=this.namepublic open classColumnInfo(name=“id”)PrimaryKey(autoGenerate=true)_Notebook(_NotebookTypeSpec.class
24、Builder(.).addModifiers(.).build()TypeSpec?问?Entity(tableName=“notebook”)public open override var id:Int,):_Record(id)ColumnInfo(name=“name”)public open var name:String?=nullpublic fun copyFieldsToObject()notebook:Notebooksuper.copyFieldsToObject(notebook)notebook.name=this.namepublic open classColu
25、mnInfo(name=“id”)PrimaryKey(autoGenerate=true)ColumnInfo(name=“id”)PrimaryKey(autoGenerate=true)ColumnInfo(name=“name”)_Notebook?问?Entity(tableName=“notebook”)AnnotationSpec.builder(.).addMember(.).build()(AnnotationSpecTypeSpec?Entity(tableName=“notebook”)public open override var id:Int,):_Record(i
26、d)ColumnInfo(name=“name”)public open var name:String?=nullpublic fun copyFieldsToObject()notebook:Notebooksuper.copyFieldsToObject(notebook)notebook.name=this.namepublic open classColumnInfo(name=“id”)PrimaryKey(autoGenerate=true)_Notebook(?问?TypeSpecAnnotationSpecEntity(tableName=“notebook”)public
27、open override var id:Int,):_Record(id)ColumnInfo(name=“name”)public open var name:String?=nullpublic fun copyFieldsToObject()notebook:Notebooksuper.copyFieldsToObject(notebook)notebook.name=this.namepublic open classColumnInfo(name=“id”)PrimaryKey(autoGenerate=true)_Notebook(?问?public open var name:
28、String?=nullPropertySpec.builder(.).addModifiers(.).initializer(.).build()TypeSpecAnnotationSpecPropertySpec?Entity(tableName=“notebook”)public open override var id:Int,):_Record(id)ColumnInfo(name=“name”)public open var name:String?=nullpublic fun copyFieldsToObject()notebook:Notebooksuper.copyFiel
29、dsToObject(notebook)notebook.name=this.namepublic open classColumnInfo(name=“id”)PrimaryKey(autoGenerate=true)_Notebook(?问?public fun copyFieldsToObject(FunSpec.builder(.).addModifiers(.).build()FuncSpecTypeSpecAnnotationSpecPropertySpec?Entity(tableName=“notebook”)public open override var id:Int,):
30、_Record(id)ColumnInfo(name=“name”)public open var name:String?=nullpublic fun copyFieldsToObject()notebook:Notebooksuper.copyFieldsToObject(notebook)notebook.name=this.namepublic open classColumnInfo(name=“id”)PrimaryKey(autoGenerate=true)_Notebook(?问?notebook:NotebookParameterSpec.builder(.).defaul
31、tValue(.).build()ParameterSpecFuncSpecTypeSpecAnnotationSpecPropertySpec?Entity(tableName=“notebook”)public open override var id:Int,):_Record(id)ColumnInfo(name=“name”)public open var name:String?=nullpublic fun copyFieldsToObject()notebook:Notebooksuper.copyFieldsToObject(notebook)notebook.name=th
32、is.namepublic open classColumnInfo(name=“id”)PrimaryKey(autoGenerate=true)_Notebook(?问?super.copyFieldsToObject(notebook)notebook.name=this.nameCodeBlock.builder().addStatement(.).build()CodeBlockParameterSpecFuncSpecPropertySpecTypeSpecAnnotationSpec?Entity(tableName=“notebook”)public open override
33、 var id:Int,):_Record(id)ColumnInfo(name=“name”)public open var name:String?=nullpublic fun copyFieldsToObject()notebook:Notebooksuper.copyFieldsToObject(notebook)notebook.name=this.namepublic open classColumnInfo(name=“id”)PrimaryKey(autoGenerate=true)_Notebook(?问?CodeBlockParameterSpecFuncSpecProp
34、ertySpecTypeSpecAnnotationSpecCodeBlockParameterSpec?问?.addParameter(FuncSpec.builder()PropertySpecTypeSpecAnnotationSpec.add().build().addFunction(AnnotationSpec.addAnnotation(?问?FuncSpec.builder()PropertySpecTypeSpec.addProperty().build()?问?TypeSpec.addType(.builder()FileSpec.build().writeTo()aggr
35、egating=false,?Dependencies()KSClassDecalaration.containingFile,.?TypeSpec.addType(.builder()FileSpec.build().writeTo()DependenciesDependencies?TypeSpec.addType(.builder()FileSpec.build().writeTo()?notebook-corenotebook-appnotebook-app-composeListScreenAdapterRoomCompanionNotebookViewModelViewModelN
36、otebooksAdapterNotebooksFragmentListFragementNotebooksScreenNotebookDaoNotebookDatabaseNotebookRepositoryNotebookNotebookNotebook?notebook-corenotebook-appnotebook-app-composeListScreenAdapterRoomCompanionNotebookViewModelViewModelNotebooksAdapterNotebooksFragmentListFragementNotebooksScreenNotebook
37、DaoNotebookDatabaseNotebookRepositoryNotebook_Notebook_NotebookDevBricksX-AndroidDevBricksX?Android?dailystudiohttps:/ by JetBrains?DevBricksX-AndroidDevBricksX?Android?dailystudiohttps:/ a nice Kotlin?kapt https:/kotlinlang.org/docs/kapt.htmlKSP https:/kotlinlang.org/docs/ksp-overview.htmlKotlinPoet https:/square.github.io/kotlinpoet/?DevBricks Xhttps:/ a nice Kotlinkotlin|Developed by JetBrains?IconFinder https:/ http:/