IntelliJ Plugin
Diese Seite ist in Arbeit und gerade noch sehr chaotisch.
Anmerkungen
- GUI Designer von IntelliJ nicht nutzen
- braucht Bytecode-Instrumentierung
- ist mit Gradle nicht so einfach einzurichten.
- Error Handling
- Zentrale Fehlermeldungen bzw. Fehlerbehandlung in
ErrorAdvice
umsetzen ErrorAdvice
entspricht catch-all (Globaler Exception Handler) für Fehler, auf die nur mit Logging/Fehlermeldung reagiert werden kann- try-catch mit
ErrorAdvice
in jeden Einstiegspunkt in das Plugin einbauen. Nicht vorher, um den Code nicht unnötig zu verunreinigen
- Zentrale Fehlermeldungen bzw. Fehlerbehandlung in
Konfiguration
Das IntelliJ-Plugin ermöglicht die hochfrequentierte Erfassung von Daten zum Programmierprozess von Studierenden.
Hierfür wird Trustee-Based Encryption eingesetzt.
Für die Verschlüsselung muss der öffentliche Schlüssel (z.B. ss24.der
) unter
src/main/resources/encryption
abgelegt werden. Anschließend in src/main/resources/application.properties
konfigurieren:
fides.encryption.key = encryption/ss24.der
fides.encryption.enabled = false
Persistierung
Daten werden im Homeverzeichnis des Benutzers ($HOME/.subato-intellij
) gespeichert. Somit werden die Daten für jedes Benutzerkonto getrennt gespeichert.
Zudem bleiben die Daten bei der Deinstallation des Plugins, der Deinstallation von IntelliJ oder einem IntelliJ-Update bestehen.
Theoretisch sollte das IntelliJ Configuration Verzeichnis diese Anforderungen erfüllen.
Im IntelliJ-SDK können bestimmte Klassen (wie z.B. com.intellij.ide.util.PropertiesComponent
) verwendet werden um Daten zu speichern.
In der Vergangenheit gab es jedoch einige Berichte (1 2 3) darüber, dass dieses Verzeichnis bei IntelliJ-Updates nicht kopiert wurde, obwohl es das eigentlich tun sollte.
Um die Datenerfassung somit nicht zu verfälschen werden diese Klassen nicht verwendet.
Post-Processing
Die erfassten Daten müssen nach der Erfassungsperiode aus folgenden Gründen bereinigt werden:
SessionStopEvent
kann fehlen wenn der IDE-Prozess abstürzt oder manuell gekillt wird. Auch muss berücksichtigt werden dass einige Benutzer den Laptop zuklappen ohne die IDE zu schließen.- Die Insertion-Reihenfolge der Events repräsentiert aufgrund des Throttling-Mechanismus von
PluginDocumentListener
nicht die tatsächliche Reihenfolge der Events. Die Insertion-Reihenfolge ist insgesamt nicht zuverlässig, da Events serverseitig in der Reihenfolge abgespeichert werden, in der sie hochgeladen werden. Jedes Event enthält mitoccuredAt
den tatsächlichen Zeitpunkt an dem es aufgetreten ist. Demnach muss über dieses Attribut nachträglich sortiert werden. - Viele Events (z.B.
FileSaveEvent
oderCompileEvent
) erfassen immer den vollständigen Inhalt von Dateien ohne den vorherigen Inhalt zu berücksichtigen. Dadurch kommt es zu Duplikaten in Bezug auf den Inhalt von Dateien.