Summary: This document provides information about the extension providing support for Kotlin Programming Language.
Extension ID
com.castsoftware.kotlin
What's new?
See Kotlin 1.1 - Release Notes.
Description
If your application contains Kotlin source code and you want to view these object types and their links with other objects, then you should install this extension. All files with the .kt extension are analyzed. Kotlin code and Java code may coexist in the same application, and a Kotlin method may call a Java method, and inversely. If a JEE analysis is defined for the Application, call links from Kotlin methods to Java methods should be created. But links from Java methods to Kotlin methods are not supported yet: this is a limitation.
Technology support
Kotlin versions | 1.x |
---|
Supported frameworks
The following libraries are supported for Web Service HTTP calls:
- Retrofit
Once the Kotlin extension analysis is finished, the analyzer will output the final number of web service calls created.
Retrofit
import retrofit2.http.GET import retrofit2.http.POST interface ApiInterfaces { @GET("v2/Contacts") fun getContacts(): Call<CrmContacts> @POST("v2/Contacts") fun addContact(): Call<AddResponse> }
This code produces Web Service HTTP calls
Spring http operation (since version 1.0.3-funcrel)
import org.springframework.stereotype.Controller import org.springframework.validation.BindingResult import org.springframework.web.bind.WebDataBinder import org.springframework.web.bind.annotation.* interface ApiInterfaces { @Controller class VisitController(val visits: VisitRepository, val pets: PetRepository) { // Spring MVC calls method loadPetWithVisit(...) before initNewVisitForm is called @GetMapping("/owners/*/pets/{petId}/visits/new") fun initNewVisitForm(@PathVariable("petId") petId: Int, model: Map<String, Any>): String = "pets/createOrUpdateVisitForm" }
This code produces Web Service HTTP operations. Supported annotations are:
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
Spring beans (since version 1.0.3-funcrel)
The following code:
import pkg.queue.StandaloneBxCleanup import org.springframework.context.annotation.AnnotationConfigApplicationContext fun main(args: Array<String>) { val standaloneBxCleanup = app.getBean(StandaloneBxCleanup::class.java) standaloneBxCleanup.cleanupBxData() }
package pkg.queue @Component class StandaloneBxCleanup(@Autowired val parseProcApiFactory: ProcApiFactory, @Autowired val bxCleanerFactory: BxCleanerFactory, @Autowired val cleanupExecutorService: ExecutorService) { fun cleanupBxData() { } }
will generate the following links when analyzed:
The following code:
import pkg.queue.BillQueueProcessor import org.springframework.context.annotation.AnnotationConfigApplicationContext fun main(args: Array<String>) { val billQueueProcessor= app.getBean(BillQueueProcessor::class.java) Thread(billQueueProcessor).start() }
package pkg.queue @Component class BillQueueProcessor(@Autowired val parseProcApiFactory: ProcApiFactory, @Autowired val bxCleanerFactory: BxCleanerFactory, @Autowired val cleanupExecutorService: ExecutorService) { override fun run() { } }
will generate the following links when analyzed:
Spring JDBC (since version 1.0.3-funcrel)
Only links to database procedures are supported. The following code:
package pkg.db.proc import org.springframework.jdbc.`object`.StoredProcedure class BxCleanupBillList(jdbcTemplate: JdbcTemplate) : StoredProcedure(jdbcTemplate, "best.pkg_bb_bill_load.bbl_get_bx_cleanup_bills") { fun getBxCleanupBills(): List<Long> { val outputParams = execute() return outputParams[cv1Param] as List<Long> } }
will generate the following links when analyzed:
Same for following code where "REPLACE_FORBEARANCE" is a procedure.
interface ForbearanceRepository : CrudRepository<Client, String> { @Query("CALL FORBEARANCE_P.REPLACE_FORBEARANCE(:clientId, :eventId, :category, :type, :subtype, :note, :reasons, :accountNumber, :productSource, :expectedEndDate, :monitoringPeriodStartDate, :forbearanceChangeRequestAt, :source)") fun replaceForbearance(clientId: String, eventId: String, category: String, type: String, subtype: String?, note: String?, reasons: String?, accountNumber: String?, productSource: String?, expectedEndDate: LocalDate?, monitoringPeriodStartDate: LocalDate?, forbearanceChangeRequestAt: LocalDate?, source: String) }
A link is created to the "FORBEARANCE_CV" table for code:
interface ForbearanceRepository : CrudRepository<Client, String> { @Query("select * from FORBEARANCE_CV f where f.CLIENT_ID = :clientId", rowMapperClass = ForbearanceAdapter.ForbearanceMapper::class) fun replaceForbearance(clientId: String, eventId: String, category: String, type: String, subtype: String?, note: String?, reasons: String?, accountNumber: String?, productSource: String?, expectedEndDate: LocalDate?, monitoringPeriodStartDate: LocalDate?, forbearanceChangeRequestAt: LocalDate?, source: String) }
A link to the "ENROLL_CORPORATE_CLIENT" procedure is created for code:
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate .... namedParameterJdbcTemplate.update(""" CALL ENROLLMENT_P.ENROLL_CORPORATE_CLIENT( :enrollmentDraftId )""".trimIndent(),...)
Function Point, Quality and Sizing support
Function Points (transactions) | A green tick indicates that OMG Function Point counting and Transaction Risk Index are supported. | |
---|---|---|
Quality and Sizing | A green tick indicates that CAST can measure size and that a minimum set of Quality Rules exist. |
Release | Operating System | Supported |
---|---|---|
8.3.x | Microsoft Windows |
Download and installation instructions
The extension will be automatically installed by CAST Imaging Console when at least one .kt file is delivered for analysis.
Source code discovery
A discoverer is provided with the extension to automatically detect Kotlin code: one Kotlin project will be discovered for the package's root folder when at least one .kt file is detected in the root folder or any sub-folders, resulting in a corresponding Universal Technology Analysis Unit.
What results can you expect?
Example application:
Properties, getters, setters
class class1 { val counter = 0 get() = field set(value) { if (value >= 0) field = value } }
Objects
Icon | Description |
---|---|
Kotlin anonymous class | |
Kotlin class / Kotlin generic class / Kotlin JVM class / Kotlin JVM generic class | |
Kotlin function / Kotlin JVM method | |
Kotlin generic interface / Kotlin interface | |
Kotlin instantiated class | |
Kotlin lambda | |
Kotlin main | |
Kotlin method | |
Kotlin object | |
Kotlin property | |
Kotlin getter | |
Kotlin setter | |
Kotlin source code | |
Kotlin Get HttpRequest Service Kotlin Web service Get Operation | |
Kotlin Post HttpRequest Service Kotlin Web service Post Operation | |
Kotlin Delete HttpRequest Service Kotlin Web service Delete Operation | |
Kotlin Put HttpRequest Service Kotlin Web service Put Operation |
Structural rules
The following structural rules are provided:
You can also find a global list here: https://technologies.castsoftware.com/rules?sec=t_1030000&ref=||.
Known Limitations
- Links from java methods to Kotlin methods are not supported.