[JAVA] Suchen Sie eine Switch-Anweisung, die in einen Switch-Ausdruck konvertiert werden kann

Was ist dieser Artikel?

Gelegenheits-Quellcode-Analyse ab heute angekündigt bei JJUG CCC 2019 Spring -ccc-2019-spring) ist eine detaillierte Version des Anwendungsfalls, der im Inhalt der Ankündigung erläutert wird.

Überblick

Ab Java 12 wurden Switch-Ausdrücke als Vorschaufunktion hinzugefügt. Da Switch als Ausdruck behandelt werden kann, kann er in den Wert der Zuweisungsanweisung geschrieben werden.

Für Details ist dieser Artikel sehr einfach zu verstehen.

Wenn der Programmiersprache eine neue Syntax hinzugefügt wird, frage ich mich oft: "Wie nützlich ist das?"

Dieses Mal möchte ich, um eine solche Frage zu lösen und die intellektuelle Neugier zu befriedigen, den tatsächlichen Quellcode nach einer Switch-Anweisung durchsuchen, die in einen Switch-Ausdruck konvertiert werden kann.

Übersicht über den Suchvorgang

Die Quellcode-Analysetechnologie wird verwendet, um den Quellcode zu durchsuchen.

Insbesondere wird eine Bibliothek namens JavaParser verwendet, um eine Syntaxanalyse durchzuführen und einen Suchprozess für den generierten abstrakten Syntaxbaum durchzuführen.

Dieses Mal dachte ich wie folgt über "Switch-Anweisung, die in einen Switch-Ausdruck konvertiert werden kann" nach und suchte nach Switch-Anweisungen, die den Bedingungen entsprechen.

Der für die Analyse verwendete Quellcode lautet hier.

Suchziel

Ich habe 100 Java-Projekte auf GitHub in absteigender Reihenfolge der Sterne erhalten und sie als Ziel ausgewählt. Die Suchabfrage lautet wie folgt.

curl -o github_java_top100.json "https://api.github.com/search/repositories?q=stars:>0+language:Java&sort=stars&order=desc&page=1&per_page=100"

Da das Umfrageziel um Februar 2019 festgelegt wurde, kann es von der aktuellen Sternreihenfolge abweichen. Außerdem berücksichtigen wir nicht, wie das Projekt aussieht oder ob es archiviert ist.

Suchergebnisse

Die Zusammenfassung der Suchergebnisse im Markdown-Format lautet hier.

Ich konnte nicht alle Suchergebnisse bestätigen, aber ein kurzer Blick scheint darauf hinzudeuten, dass die Suche wie beabsichtigt war. Nachfolgend finden Sie zwei Beispiele für gute Suchergebnisse.

Aus PullToRefreshBase.java des Android-PullTo

switch(getPullToRefreshScrollDirection()) {
    case HORIZONTAL:
        oldScrollValue = getScrollX();
        break;
    case VERTICAL:
    default:
        oldScrollValue = getScrollY();
        break;
}

Aus RunParameterDefinition.java des Jenkins-Projekts

switch(getFilter()) {
    case COMPLETED:
        lastBuild = project.getLastCompletedBuild();
        break;
    case SUCCESSFUL:
        lastBuild = project.getLastSuccessfulBuild();
        break;
    case STABLE:
        lastBuild = project.getLastStableBuild();
        break;
    default:
        lastBuild = project.getLastBuild();
        break;
}

Zusammenfassung

Dieses Mal habe ich durch die Suche nach einer Switch-Anweisung, die in einen Switch-Ausdruck konvertiert werden kann, tatsächlich einen Suchprozess für den Quellcode des Projekts auf GitHub ausgeführt.

Persönlich habe ich das Gefühl, dass es mehr Orte gibt, die konvertiert werden können, als ich erwartet hatte.

Verwenden wir in Zukunft den Switch-Typ, wo er verwendet werden kann.

Recommended Posts

Suchen Sie eine Switch-Anweisung, die in einen Switch-Ausdruck konvertiert werden kann
[Android] Ich möchte einen ViewPager erstellen, der für Tutorials verwendet werden kann
Schreiben einer Klasse, die in Java bestellt werden kann Ein kleines Standard-Memo
Überprüfen Sie, ob eine Zeichenfolge ohne Verwendung von Integer # parseInt in int konvertiert werden kann
Erstellen Sie ein Seitensteuerelement, das mit RecyclerView verwendet werden kann
Erstellen Sie eine JAR-Datei, die auf Gradle ausgeführt werden kann
Einführung in Rakefile, die in ca. 10 Minuten durchgeführt werden kann
Konvertieren Sie ein potenziell null-Array in einen Stream
So erstellen Sie ein Schlüsselpaar von ecdsa in einem Format, das von Java gelesen werden kann
Mecab-Installation, die fast durch Eingabe eines Befehls erfolgen kann
Ich habe eine großartige switch-Anweisung getroffen
Um kein statischer Onkel zu sein
Beachten Sie, dass VS Code + JUnit 5 unter Windows 10 verwendet werden kann
Objektorientiert, das von Feen verstanden werden kann
Melden Sie eine CSV-Datei ab, die von Excel mithilfe von Logback gelesen werden kann
Ich habe einen THETA API-Client erstellt, der für die Plug-Entwicklung verwendet werden kann
Speichern Sie die Daten, die von JavaFX gelesen werden können, als PNG