Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Asniffer não funcionando normalmente no plugin do InteliJ #5

Closed
sergioppires opened this issue Sep 17, 2021 · 2 comments
Closed

Asniffer não funcionando normalmente no plugin do InteliJ #5

sergioppires opened this issue Sep 17, 2021 · 2 comments

Comments

@sergioppires
Copy link
Member

Descrição do Problema

Resumo
Ao tentar executar a serialização para JSON dos resultados do ASniffer dentro de um Plugin para InteliJ, recebemos um null pointer. Ao analisar o código, vejo que algumas métricas possuem dados faltantes. Eu não consegui reproduzir esse bug no código em Java e Kotlin, isso apenas acontece no ecossistema do plugin.

Um adendo, por mais que o Null Pointer aconteça apenas no JSONReportCV, eu percebi que os arquivos gerados para o SV e PV estão menores do que os gerados em Kotlin/Java

Trecho com erro

JSONReportCV().generateReport(report, dirPathResults)

Stack Trace

2021-09-16 20:20:38,197 [ 236805]  ERROR - llij.ide.plugins.PluginManager - null 
java.lang.NullPointerException
	at com.github.phillima.asniffer.output.json.d3hierarchy.FetchClassViewIMP.fetchAnnotations(FetchClassViewIMP.java:68)
	at com.github.phillima.asniffer.output.json.d3hierarchy.FetchClassViewIMP.fetchChildren(FetchClassViewIMP.java:28)
	at com.github.phillima.asniffer.utils.ReportTypeUtils.fetchPackages(ReportTypeUtils.java:70)
	at com.github.phillima.asniffer.output.json.d3hierarchy.classview.JSONReportCV.prepareJson(JSONReportCV.java:46)
	at com.github.phillima.asniffer.output.json.d3hierarchy.classview.JSONReportCV.generateReport(JSONReportCV.java:24)
	at com.github.sergioppires.asnifferpluginintegration.services.ASnifferService.runAsniffer(ASnifferService.kt:34)
	at com.github.sergioppires.asnifferpluginintegration.services.ASnifferService.actionPerformed(ASnifferService.kt:17)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:281)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:310)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:286)
	at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:77)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:299)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:110)
	at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:95)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:110)
	at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:514)
	at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:544)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6652)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)
	at java.desktop/java.awt.Component.processEvent(Component.java:6417)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5027)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4859)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4859)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:976)
	at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:911)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:840)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:454)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:773)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:453)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:822)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:507)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Exemplo

Plugin com o código usado: https://github.com/sergioppires/asniffer-plugin-integration
Projeto Usado como exemplo: https://github.com/spring-projects/spring-retry

@sergioppires
Copy link
Member Author

Coloco aqui os 2 AMReports (em JSON) gerados pelo InteliJ e pelo Kotlin, para efeitos de comparação. Em uma análise inicial, vejo que todos os annotSchemasMap{} e annotationMetrics estão vazios no InteliJ, mas eles aparecem no Kotlin. irei continuar minha análise e postarei os updates.

Seguem os dois arquivos gerados.

amReport-InteliJ.txt
amReport-Kotlin.txt

@phillima
Copy link
Member

@sergioppires O problema foi identificado. O ASniffer não estava conseguindo achar as métricas de anotações para coletar, com a estratégia que eu estava usando através de um ClassPath Scanning. Fiz uma modificação e disponibilizei uma nova versão do ASniffer com a correção: 2.4.6

implementation("io.github.phillima:asniffer:2.4.6")

Foi possível gerar a pasta asniffer_results corretamente com o código abaixo:

fun runAsniffer(e: AnActionEvent) {
        if (e.project?.basePath != null) {
            var basePath = Paths.get(e.project?.basePath).normalize().toString()
            val report: AMReport = ASniffer(basePath, basePath, JSONReportAvisuIMP()).collectSingle()
        }
}

phillima pushed a commit that referenced this issue Oct 24, 2021
closes #6
closes #5

Co-Authored-By: Maik <48337058+MaikHenriqueSP@users.noreply.github.com>
Co-Authored-By: Felipe Mandu Pereira <felipemandupereira@outlook.com>
Co-Authored-By: Bruno S Rodrigues <34436334+brusangues@users.noreply.github.com>
Co-Authored-By: RafawsMasm <41874395+RafawsMasm@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants