cloudwego / cloudwego/abcoder

parser/java: output instability

Offen
#95 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Go
Sterne
390
Forks
57
Ø Merge
2 T. 21 Std.
Gemergte PRs (30 T.)
1

Beschreibung

**Describe the bug**

The java parser generates different outputs for the same input.

**To Reproduce**

1. clone main branch and build abcoder
2. run abcoder on testdata/java/4_full_maven_repo twice
3. compare the generated uniasts (using the smart diff script)

**Expected behavior**

For the same repo, abcoder should generate two identical uniASTs.

**Screenshots**

```bash
[~/Programs/test/arti/java/abcoder] [main =] [05:43:56 PM] zhenyang
$ git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

[~/Programs/test/arti/java/abcoder] [main =] [05:43:57 PM] zhenyang
$ go build

[~/Programs/test/arti/java/abcoder] [main =] [05:44:02 PM] zhenyang
$ ./abcoder parse java testdata/java/4_full_maven_repo -o java_1.json
2025/09/26 17:44:13 Using JDTLS_ROOT_PATH from environment: /home/zhenyang/O/data/Programs/bytedance/LanguageServers
[ERROR]17:44:13 client.go:264: LSP server stderr: OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
[ERROR]17:44:14 client.go:264: LSP server stderr: Sep 26, 2025 5:44:14 PM org.apache.aries.spifly.BaseActivator log
[ERROR]17:44:14 client.go:264: LSP server stderr: INFO: Registered provider ch.qos.logback.classic.servlet.LogbackServletContainerInitializer of service jakarta.servlet.ServletContainerInitializer in bundle ch.qos.logback.classic
[ERROR]17:44:14 client.go:264: LSP server stderr: Sep 26, 2025 5:44:14 PM org.apache.aries.spifly.BaseActivator log
[ERROR]17:44:14 client.go:264: LSP server stderr: INFO: Registered provider ch.qos.logback.classic.spi.LogbackServiceProvider of service org.slf4j.spi.SLF4JServiceProvider in bundle ch.qos.logback.classic

[~/Programs/test/arti/java/abcoder] [main =] [05:44:47 PM] zhenyang
$ ./abcoder parse java testdata/java/4_full_maven_repo -o java_2.json >/dev/null 2>&1

[~/Programs/test/arti/java/abcoder] [main =] [05:45:06 PM] zhenyang
$ ./script/diffjson.py java_1.json java_2.json 2>&1 | head

Differences found between 'java_1.json' and 'java_2.json':

Value Changed at: root['Modules']['com.example.test:core-module:1.0.0-SNAPSHOT']['Packages']['com.example.core.repository']['Types']['InMemoryUserRepository']['Methods']['findAll()']['Name']
- old: 'findAll()'
+ new: 'InMemoryUserRepository.findAll()'
--------------------
Value Changed at: root['Modules']['com.example.test:core-module:1.0.0-SNAPSHOT']['Packages']['com.example.core.repository']['Types']['InMemoryUserRepository']['Methods']['save(User)']['Name']
- old: 'InMemoryUserRepository.save(User)'
+ new: 'save(User)'
--------------------
```

**Version:**

main branch

**Environment:**

The output of `go env`.

**Additional context**

Add any other context about the problem here.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Baue abcoder, führe die beiden Befehle gegen testdata/java/4_full_maven_repo aus und vergleiche die Ausgaben mit script/diffjson.py. Verfolge zunächst den parser/java-Pfad nach, der an der Generierung von Methodennamen beteiligt ist, und verwende die gemeldeten Unterschiede bei InMemoryUserRepository als reproduzierbaren Fall. Erledigt ist die Aufgabe, wenn wiederholte Parsvorgänge identische uniASTs erzeugen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
go, java
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.