{"id":136775,"date":"2021-04-15T21:26:36","date_gmt":"2021-04-15T20:26:36","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=kotlin&#038;p=136775"},"modified":"2021-04-15T21:39:21","modified_gmt":"2021-04-15T20:39:21","slug":"lancamento-do-plugin-kotlin-2021-1-melhor-desempenho-no-ide-e-mais-suporte-para-refatoracoes","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/pt-br\/kotlin\/2021\/04\/lancamento-do-plugin-kotlin-2021-1-melhor-desempenho-no-ide-e-mais-suporte-para-refatoracoes\/","title":{"rendered":"Lan\u00e7amento do Plugin Kotlin 2021.1: melhor desempenho no IDE e mais suporte para refatora\u00e7\u00f5es"},"content":{"rendered":"<style>p > code {font-weight: 400; background: #f6f6f6}<\/style>\n<p>O lan\u00e7amento mais recente do IntelliJ IDEA, vers\u00e3o 2021.1, vem com o plugin Kotlin melhorado. Desfrute de uma experi\u00eancia de desenvolvedor melhorada com complementa\u00e7\u00e3o e realce de c\u00f3digo mais r\u00e1pidos, altere assinaturas com melhor suporte do IDE, usufrua de uma melhor experi\u00eancia de depura\u00e7\u00e3o para computar propriedades e muito mais.<\/p>\n<p>Isto \u00e9 o que voc\u00ea obt\u00e9m ao instalar o novo plug-in:<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/04\/kotlin-plugin-2021-1-released\/#code-completion-and-highlighting\">Complementa\u00e7\u00e3o e realce de c\u00f3digo mais r\u00e1pidos<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/04\/kotlin-plugin-2021-1-released\/#custom-getters-in-variables-view\">Avalia\u00e7\u00e3o de getters personalizados diretamente na view Variables<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/04\/kotlin-plugin-2021-1-released\/#improved-change-signature-refactoring\">Refatora\u00e7\u00e3o Change Signature com melhor suporte do IDE<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/04\/kotlin-plugin-2021-1-released\/#code-completion-for-type-parameters\">Complementa\u00e7\u00e3o de c\u00f3digo para argumentos de tipo<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/04\/kotlin-plugin-2021-1-released\/#class-diagrams-for-kotlin-code\">Diagramas de classe para seu c\u00f3digo Kotlin<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/04\/kotlin-plugin-2021-1-released\/#other-ide-improvements\">Outras melhorias do IDE<\/a><\/li>\n<\/ul>\n<h2>Fa\u00e7a uma atualiza\u00e7\u00e3o autom\u00e1tica para este novo lan\u00e7amento<\/h2>\n<p>No IntelliJ IDEA voc\u00ea tem a op\u00e7\u00e3o de atualizar automaticamente para a nova vers\u00e3o assim que ela for lan\u00e7ada.<\/p>\n<p>Se voc\u00ea ainda n\u00e3o for um usu\u00e1rio IntelliJ IDEA, voc\u00ea pode <a href=\"https:\/\/www.jetbrains.com\/idea\/download\/\" target=\"_blank\" rel=\"noopener\">baixar a vers\u00e3o mais recente<\/a> que ela j\u00e1 vem com a \u00faltima vers\u00e3o do plugin Kotlin.<\/p>\n<p><a name=\"code-completion-and-highlighting\"><\/a><\/p>\n<h2>Mais velocidade na complementa\u00e7\u00e3o e realce de c\u00f3digo<\/h2>\n<p>\u00c0s vezes, escrever c\u00f3digo pode n\u00e3o ser t\u00e3o divertido quanto poderia, especialmente se voc\u00ea precisar esperar que o IDE destaque seu c\u00f3digo ou ajude na complementa\u00e7\u00e3o. Nosso objetivo \u00e9 fazer com que o realce e a complementa\u00e7\u00e3o do c\u00f3digo funcionem de forma impec\u00e1vel para voc\u00ea.<\/p>\n<p>O novo plugin Kotlin melhora significativamente o desempenho para realce e complementa\u00e7\u00e3o de c\u00f3digo Kotlin.<\/p>\n<p>Com base nos nossos testes, a velocidade do realce melhorou em cerca de 25% e a complementa\u00e7\u00e3o de c\u00f3digo ficou pelo menos 50% mais r\u00e1pida, o que a deixa bem perto do n\u00edvel de desempenho oferecido para Java.<\/p>\n<div style=\"background-color: #f1f6fe; margin-bottom: 2px; padding: 5px; margin-right: 0%; text-align: left; min-height: px;\"><strong>Observe<\/strong> que esses n\u00fameros est\u00e3o baseados apenas nos nossos testes. Os ganhos de desempenho nos seus projetos reais podem n\u00e3o ser t\u00e3o significativos quanto nossos testes indicam, mas voc\u00ea deve perceber um desempenho muito melhor.<\/div>\n<h3>Realce de c\u00f3digo Kotlin no novo plugin<\/h3>\n<p>Aqui voc\u00ea pode ver uma compara\u00e7\u00e3o da velocidade do realce de c\u00f3digo Kotlin entre o plugin Kotlin anterior, vers\u00e3o 2020.3, e o novo, vers\u00e3o 2021.1. Os resultados s\u00e3o baseados nos nossos testes de benchmark que medem o tempo de realce do c\u00f3digo em arquivos Kotlin complexos.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/faster-code-highlighting.jpg\" alt=\"Realce de c\u00f3digo Kotlin mais r\u00e1pido\" \/><\/p>\n<h3>Complementa\u00e7\u00e3o de c\u00f3digo Kotlin no novo plugin<\/h3>\n<p>E aqui est\u00e1 uma compara\u00e7\u00e3o do desempenho da complementa\u00e7\u00e3o de c\u00f3digo Kotlin entre a vers\u00e3o 2020.3 e a vers\u00e3o 2021.1. Os resultados s\u00e3o baseados nos nossos testes de benchmark que medem o tempo da complementa\u00e7\u00e3o de c\u00f3digo em arquivos Kotlin complexos.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/faster-code-completion.jpg\" alt=\"Complementa\u00e7\u00e3o de c\u00f3digo Kotlin mais r\u00e1pida\" \/><\/p>\n<p><a name=\"improved-change-signature\"><\/a><\/p>\n<h2>Change signature com melhor suporte do IDE<\/h2>\n<p>Se voc\u00ea j\u00e1 usou a <a href=\"https:\/\/www.jetbrains.com\/help\/idea\/change-signature.html\" target=\"_blank\" rel=\"noopener\">refatora\u00e7\u00e3o Change Signature<\/a> em vers\u00f5es anteriores do plugin Kotlin, pode ter encontrado problemas e algumas limita\u00e7\u00f5es, assim como falta de visibilidade em rela\u00e7\u00e3o ao que deu errado naqueles casos.<\/p>\n<p>Atualize para o novo plugin Kotlin para colher os benef\u00edcios de mais de <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KTIJ-685\" target=\"_blank\" rel=\"noopener\">40 corre\u00e7\u00f5es de bugs e melhorias na refatora\u00e7\u00e3o Change Signature<\/a>.<\/p>\n<p>Eis aqui algumas das melhorias mais importantes:<\/p>\n<ul>\n<li>Detec\u00e7\u00e3o de mais situa\u00e7\u00f5es em que o c\u00f3digo resultante pode ser quebrado.<\/li>\n<li>Corre\u00e7\u00f5es na refatora\u00e7\u00e3o de heran\u00e7a, incluindo <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KTIJ-966\" target=\"_blank\" rel=\"noopener\">refatora\u00e7\u00e3o entre linguagens<\/a>.<\/li>\n<li>Melhor UX para processamento de propriedades.<\/li>\n<li><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KTIJ-903\" target=\"_blank\" rel=\"noopener\">Maneira alternativa de declarar o valor do par\u00e2metro default<\/a>.<\/li>\n<li>Processamento correto de crases.<\/li>\n<\/ul>\n<p><a name=\"custom-getters-in-variables-view\"><\/a><\/p>\n<h2>Avalia\u00e7\u00e3o de getters personalizados diretamente na view Variables<\/h2>\n<p>Com base na nossa pesquisa, a experi\u00eancia de depura\u00e7\u00e3o para o Kotlin requer melhorias significativas para entregar uma melhor experi\u00eancia ao desenvolvedor. N\u00f3s j\u00e1 temos <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44330\" target=\"_blank\" rel=\"noopener\">uma s\u00e9rie de planos<\/a> em andamento para alcan\u00e7ar esse objetivo.<\/p>\n<p>Este lan\u00e7amento traz uma pequena, mas importante melhoria para computar propriedades na view <strong>Variables<\/strong>.<\/p>\n<p>Antes, durante uma sess\u00e3o de depura\u00e7\u00e3o, voc\u00ea s\u00f3 podia ver as propriedades que n\u00e3o tinham um getter personalizado e aquelas com um <a href=\"https:\/\/kotlinlang.org\/docs\/properties.html#backing-fields\" target=\"_blank\" rel=\"noopener\">campo de apoio<\/a>. As propriedades com um getter personalizado n\u00e3o apareciam porque elas s\u00e3o representadas como m\u00e9todos comuns na JVM. Na vers\u00e3o 2021.1 do plug-in Kotlin, voc\u00ea pode ver todas essas propriedades e computar seus valores sob demanda ao clicar em <code>get()<\/code> pr\u00f3ximo ao nome da propriedade.<\/p>\n<p>Por exemplo, ao depurar o c\u00f3digo a seguir, voc\u00ea pode executar o m\u00e9todo <code>get()<\/code> para ver o valor <code>versionString<\/code>:<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nclass LanguageVersion(val major: Int, val minor: Int) {\nval isStable: Boolean\nget() = major &lt;= 1 &amp;&amp; minor &lt;= 4\nval isExperimental: Boolean\nget() = !isStable\nval versionString: String\nget() = &quot;$major.$minor&quot;\noverride fun toString() = versionString\n}\nfun main() {\nval version = LanguageVersion(1, 4)\n}\n<\/pre>\n<p>Na janela <strong>Debug<\/strong>, voc\u00ea poder\u00e1 ver os valores das propriedades:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/debugging-variables-view.png\" alt=\"Depura\u00e7\u00e3o na view Variables\" \/><\/p>\n<p>Ficar\u00edamos muito gratos se voc\u00ea pudesse experimentar este recurso e deixar seus coment\u00e1rios <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-19752\" target=\"_blank\" rel=\"noopener\">neste ticket<\/a> ou na se\u00e7\u00e3o de coment\u00e1rios desta postagem.<\/p>\n<p><a name=\"code-completion-for-type-parameters\"><\/a><\/p>\n<h2>Use complementa\u00e7\u00e3o de c\u00f3digo para argumentos de tipo<\/h2>\n<p>O novo plugin Kotlin agora pode complementar o c\u00f3digo para argumentos de tipo. Antes, voc\u00ea precisava escrever este c\u00f3digo manualmente sem o benef\u00edcio dos recursos de assist\u00eancia do IDE.<\/p>\n<p>Agora, a complementa\u00e7\u00e3o de c\u00f3digo sugere fun\u00e7\u00f5es e propriedades depois das fun\u00e7\u00f5es gen\u00e9ricas e restaura argumentos de tipo onde necess\u00e1rio. Quando voc\u00ea seleciona uma fun\u00e7\u00e3o dessas da lista, o IDE acrescenta o argumento de tipo correto no c\u00f3digo anterior.<\/p>\n<p>No exemplo a seguir, o IDE adiciona automaticamente o tipo <code>&lt;String&gt;()<\/code>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/code-completion-type-arguments.png\" alt=\"Complementa\u00e7\u00e3o de c\u00f3digo para argumentos de tipo\" \/><\/p>\n<p>Depois que voc\u00ea aplica a sugest\u00e3o do IDE, voc\u00ea obt\u00e9m o seguinte c\u00f3digo:<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nfun typeArgumentsAtCodeCompletion() {\n\/\/ Function definition from stdlib:\n\/\/ public fun &lt;T&gt; emptyList(): List&lt;T&gt;\nval listA: List&lt;String&gt; = emptyList() \/\/ T is inferred from the context (explicit variable type)\nval listB: List&lt;String&gt; =\nemptyList&lt;String&gt;().reversed() \/\/ type argument for emptyList() is required to evaluate expression type\n}\n<\/pre>\n<p><a name=\"class-diagrams-for-kotlin-code\"><\/a><\/p>\n<h2>Revise a estrutura do seu c\u00f3digo Kotlin com diagramas de classe<\/h2>\n<p>Com o novo lan\u00e7amento, voc\u00ea poder\u00e1 revisar a estrutura de seu c\u00f3digo Kotlin atrav\u00e9s de diagramas de classe UML. Para construir um diagrama, selecione <strong>Diagrams | Show Diagram&#8230; | Kotlin Classes<\/strong> em <strong>Project View<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/kotlin-classes-uml-diagram.png\" alt=\"Diagramas de classe UML para c\u00f3digo Kotlin\" \/><\/p>\n<p><a name=\"other-ide-improvements\"><\/a><\/p>\n<h2>Aproveite os benef\u00edcios das outras melhorias do IDE<\/h2>\n<p>Como o plug-in Kotlin e a plataforma IntelliJ foram transferidos para a mesma base de c\u00f3digo e agora s\u00e3o distribu\u00eddos simultaneamente, sua experi\u00eancia Kotlin foi melhorada e agora voc\u00ea tamb\u00e9m ter\u00e1 condi\u00e7\u00f5es de fazer o seguinte:<\/p>\n<ul>\n<li>Use o profiler de mem\u00f3ria b\u00e1sico que foi anunciado no <a href=\"https:\/\/www.jetbrains.com\/idea\/whatsnew\/#debugger\" target=\"_blank\" rel=\"noopener\">lan\u00e7amento do IntelliJ IDEA 2020.3<\/a> atrav\u00e9s da execu\u00e7\u00e3o do Gradle.<\/li>\n<li>Receba avisos sobre <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KTIJ-826\" target=\"_blank\" rel=\"noopener\">chamadas de bloqueio de thread inadequadas em coroutines<\/a>.<\/li>\n<li>Evite problemas de inje\u00e7\u00e3o de linguagem ao <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KTIJ-679\" target=\"_blank\" rel=\"noopener\">usar aspas triplas<\/a> ou <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KTIJ-855\" target=\"_blank\" rel=\"noopener\">concatenar strings<\/a>.<\/li>\n<\/ul>\n<h2>Veja tamb\u00e9m<\/h2>\n<ul>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew-plugin-20211.html\" target=\"_blank\" rel=\"noopener\">O que h\u00e1 de novo no plugin Kotlin 2021.1<\/a><\/li>\n<li>O que h\u00e1 de novo no IntelliJ IDEA 2021.1 \u2013 <a href=\"https:\/\/www.jetbrains.com\/idea\/whatsnew\/\" target=\"_blank\" rel=\"noopener\">docs<\/a> e <a href=\"https:\/\/youtu.be\/YBmR0J3-r3o?t=567\" target=\"_blank\" rel=\"noopener\">v\u00eddeo<\/a>.<\/li>\n<\/ul>\n","protected":false},"author":1086,"featured_media":131725,"comment_status":"closed","ping_status":"closed","template":"","categories":[907],"tags":[21,33,477],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/136775"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/comments?post=136775"}],"version-history":[{"count":2,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/136775\/revisions"}],"predecessor-version":[{"id":136777,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/136775\/revisions\/136777"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/131725"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=136775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=136775"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=136775"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=136775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}