Java [Eclipse] Argument names werden nicht richtig gesetzt (arg0, arg1, arg2, ...)

Killkrog

Lt. Junior Grade
Registriert
Jan. 2006
Beiträge
354
Hallo Jungs und Mädels!

Jetzt häuft es sich aber in letzter Zeit, dass ich mich ratlos an euch wenden muss. Seid bitte geduldig mit mir ;)

Also:
Eclipse zeigt ja beim Hinzufügen einer Methode gleich die entsprechenden Parameternamen an.

Beispiel:
new String("").subs -> Ctrl-Leertaste + Enter -> new String("").substring(beginIndex)

Soweit so gut, macht er bei mir auch ganz brav. Javadoc und Sourcecode sind für alle JDK Libraries verlinkt. Nun benutzte ich schon seit Jahren eine eigene Library, die sich bei mir als Projekt im Workplace befindet. Dort ist natürlich alles ordentlich mit Javadocs durchkommentiert.
In dieser Library gibt es nun beispielsweise ein Interface ProcessListener, welches vier Methoden definiert.

Wenn ich nun in einem anderen Projekt auf meine Library zugreife (im Build Path als Library eben den class folder angegeben) und eine neue Klasse schreibe, die das Interface implementiert, will er von mir auch sofort die vier Methoden implementiert haben.

Also wieder Ctrl-Leertaste, und er zeigt mir zuoberst die Namen der vier Methoden an, mitsamt (wie erwartet) der Javadoc daneben, die die richtigen Argumentnamen enthält. Wenn ich jetzt doch Enter drücke und er mir die Methode einfügt, gibt er mir als Argumentnamen nur arg0, arg1, ... vor. Den Sourcecode der Methode findet er, wenn ich über Navigate -> Open Super Implementation auswähle...

Also, trotz Sourcecode und Javadoc bekommt er es nicht gebacken, mir die richtigen Argumentnamen anzuzeigen.

Ideen und Vorschläge?

Liebe Grüße,
Killy

PS.: Eclipse Version: Eclipse IDE for Java Developers 1.4.1.20110909-1818
 
Wenn du den class Ordner refernezierst (= compilierter Java code) gibt es natürlich keine Argumentenamen mehr, da die vom Compiler als arg0,arg1...etc. ersetz werden. Wenn du die Argumentennamen haben willst muss du den src folder referenzieren nicht den class folder.
 
1. Siehe *.class-File Referenz
2. Ich habe den Source verlinkt (Siehe meinen Post)

// edit
Dennoch natürlich willkommen im Forum!
 
Zuletzt bearbeitet:
im Build Path als Library eben den class folder angegeben
class folder != source folder

In eclipse gibt es bei "build path" -> "Source" -> "Link Source..." die funktion.

Ich sehe zwar, das bei meinen class files auch die argumente behalten bleiben, würde aber schätzen, dass das Problem daher kommt. Ich würds an deiner Stelle mal mit "Link Source" versuchen und schauen obs dann geht.

Achja und in Eclipse nach solchen Änderung nie die Wunderlösung vergessen: Project -> Clean ;)
 
Okay, das hilft merkwürdigerweise, ist aber keine akzeptable Lösung für mich. Ich meine, es liegt denke ich nicht im Sinne des Erfinders, erst einmal alle durch 'link source' definierten class files in mein verlinkendes Projekt zu verschieben, oder?

Außerdem: Wieso hat er diese Macke nur bei Interfaces?

Code:
main(String[] args) {
	new KThreadPool(numThreads); <-- argumentnamen erkannt und vorgeschlagen
	new KProcessListener() {
	     member methods <-- Im ersten Post beschriebenes Problem
	};
}
 
Du braucht nicht class files in den source ordner kopieren. Eclipse compiliert für dich automatisch den referenzierten source und hängt ihn deinem Projekt an. (Das is ja die Idee dahinter)

Wie man nun hier in diesem stackoverflow thread lesen kann http://stackoverflow.com/questions/...meter-argument-names-in-compiled-java-classes sieht die class file definition keine speicherung von argumentennamen in interfaces vor. (In normalen Klassen, ist es eine option, die wie ich schon geschrieben haben, vom compiler aber wegoptimiert werden kann, da dem bytecode lieber ist wenn die variablen kurze namen haben und filegrößen zu reduzieren). Nun warum du jetzt per Linksource die Argumentenamen sehen kannst ist leicht zu erklären: Der On-the-fly Syntaxcheck nimmt hier die Sourcefiles als Basis und nicht die class files. Im endeffekt verwendet er aber die Classfiles zum ausführen.

Ich muss ehrlich gestehen ich hatte noch nie das Porblem, dass mir Arguemtennamen gefehlt hätten. Meistens reicht es doch wenn den Typ weiß bzw. in der Javadoc nachschaut. Wenn du allerdings Methoden mit sehr langen Argumentenlisten hast solltest dies sowieso auflösen mit mehreren Methoden (ich weiß ja nicht ob du aus der prozedularen Ecke kommst wo man sowas macht)
 
Ich selber habe gar nichts kopiert, sondern eclipse, und zwar die lib-*.class Dateien in den 'bin' Ordner meines Projektes. Find ich halt ein wenig unpraktisch, weil sie schon wo anders existieren, aber wenn er das braucht, dann soll es eben so sein.

Und nein, ich brauche die Hilfe der Argumentnamen nicht, weil ich nicht weiß, wo welches Argument reinkommt ^^ Das wäre erstens bei einer eigenen Library wirklich peinlich, zweitens sind die Argumentlisten schön kurz gehalten. Der einzige Fall, wo mich das Nichtauflösen der Argumentnamen richtig gestört hat, war bei den Interfaces (und dort besonderes bei eigenen EventListenern). Wenn man einen Listener hinzufügt, dessen acht Methoden implementiert und dann erstmal überall das erste Argument in 'source' umbenennen muss nervt es micht einfach.

Aber das Problem wäre dann damit soweit gelöst. Ich danke dir sehr für deine Hilfestellung!

Grüße,
Killy
 
Zurück
Oben