Autor Beitrag
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 25.09.08 10:36 
Also, es sollte soweit alles funktionieren, ich werde Samstag oder Sonntag dann das entsprechende Package posten, im Moment fehlt noch eine kleine Oberfläche und die Speicherung der Einstellungen.

Zunächst kannst du wenn du möchtest schon mal den Parser testen, er sollte aus der Deklaration alle Klassen und die entsprechenden Methoden suchen und anzeigen. Der auf der rechten Seite angezeigte Quelltext wird dabei selbst zusammengebaut, d.h. es wurde vorher alles (objektorientiert) gespeichert.
Wenn die Klasse Interfaces implementiert, sollten darin enthaltene Methoden ebenfalls aufgeführt sein (das funktioniert im Beispiel nur, wenn das Interface in der selben Unit implementiert ist, sollte aber im Experten dann auch gehen, wenn es in anderen Units deklariert ist).

Im Experten sollte es auch dann gehen, wenn irgendwo erreichbar der Quelltext der Unit liegt, wobei ich da noch überlege zusätzliche Funktionen hinzuzufügen, die es erlauben die Units auch dann zu finden, wenn sie nicht im Suchpfad liegen (indem der Benutzer vorher eigene Suchpfade / Unitlisten angibt oder eine Verzeichnisstruktur nach Units durchsuchen lässt, mal schauen was ich da mache).

Ach ja: Fehler beim Parsen werden derzeit noch nicht behandelt, das kommt erst bei der Integration in den Experten dazu.

// EDIT:
Fehler: Records mit Feldern mit direkter Angabe einer Methode als Typ werden nicht korrekt geparst. --> Exception
Also sowas wie
ausblenden Delphi-Quelltext
1:
2:
TXy = record
  xy: function...

Fehler: Klassenfunktionen werden nicht erkannt.

// EDIT: Parsertest.exe wieder entfernt, im nächsten Beitrag von mir gibts die neue Version ;-).


Zuletzt bearbeitet von jaenicke am So 28.09.08 16:42, insgesamt 1-mal bearbeitet
matze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Fr 26.09.08 19:47 
Ich habe mir dein Testprogramm grade mal runtergeladen. Mit dem Quelltexten, für die ich so eine Funktionalität hätte brauchen können, funktioniert es einwandfrei. Die Methoden werden korrekt erkannt und ausgegeben :-)
Cool!

_________________
In the beginning was the word.
And the word was content-type: text/plain.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 28.09.08 16:42 
Nachdem ich heute festgestellt habe, dass sowohl Konstruktoren als auch Destruktoren als leere Prozeduren ankommen, dazu bereits die beiden bereits von mir angesprochenen Probleme, und sich Delphi-eigene Quelltextdateien gar nicht parsen lassen (Exceptions), habe ich mich da noch einmal drangesetzt, mit dem Ergebnis, dass jetzt in Tests mit ca. 100 teilweise recht komplexen Dateien keine Probleme mehr aufgetreten sind.

Der Experte selbst kommt daher erst morgen dran, im Anhang befindet sich der korrigierte Parser.
Einloggen, um Attachments anzusehen!
matze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Mo 03.11.08 14:26 
Gibts denn mittlerweile schon Fortschritte?

_________________
In the beginning was the word.
And the word was content-type: text/plain.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 04.11.08 19:40 
Ja, gibt es, ich habe leider kaum Zeit gehabt, deshalb ist es nicht wirklich fertig.
Das Problem ist, dass ich irgendwo vermutlich ein Speicherleck habe und nicht die Zeit hatte mir das genauer anzuschauen.
Wegen des Fehlers fehlt auch noch die Auswahl der Methoden, da ich erstmal mich darum kümmern muss.

Ich kann ja die aktuelle Arbeitsversion mal hochladen. Um keinen Quelltext zu verunstalten ist die Funktion zur tatsächlichen Änderung der Zielunit nicht dabei, es wird nur eine Vorschau des generierten Quelltexts erzeugt (aus der man natürlich auch kopieren kann).

Es sollte die Auswahl der Quellunit, der Quellklasse und der Zielunit funktionieren, auch die Vorschau sollte korrekt erzeugt werden. Mit dem Eintrag im Hilfemenü kommt man auch zur Konfiguration, in der man das Menü, in dem der Eintrag erscheint, sowie dessen Shortcut festlegen kann. Dies wird unter "HKEY_CURRENT_USER\Software\Borland\BDS\4.0\SJDelphiCodeAssist" in der Registry gespeichert. Fehlen tut an der Stelle die Anpassung für verschiedene Delphiversionen.

Der gesamte Quelltext steht unter der MPL, inklusive des verwendeten Parsers (dieser ist leicht verändert, das fehlt noch in der Copyright Angabe!!) und eines Teils von SynEdit. Dies ist eine Alpha Version, deshalb muss der Lizenzteil und die Dokumentation noch überarbeitet bzw. erstellt werden.

Bekannte Bugs:
  • Vermutlich gibt es ein Speicherleck, dies äußert sich durch unklare / im Debugger nicht reproduzierbare Fehler im generierten Quelltext
  • Wenn gar keine Datei offen ist gibt es eine Schutzverletzung, da dies bisher nicht vorher geprüft wird

Probleme / ungeprüft / nicht implementiert:
  • Der Dateimanager, der das mehrfache Parsen unnötig machen soll, muss noch umstrukturiert werden, im Moment erscheint jegliche offene Datei in der Liste
  • (Umstellbarkeit geplant) Es erscheinen alle Klassen in der Liste auch wenn sie keine Methoden zum Überschreiben enthalten
  • (Absichtlich) Es kann der Quelltext nicht tatsächlich eingefügt werden, es wird nur eine Vorschau generiert
  • Es können keine Funktionen einzeln ausgewählt werden, bisher werden einfach alle gefundenen benutzt
  • Es fehlt der Zugriff auf Bezüge / Interfaces aus anderen Dateien (unklar wie am besten zu realisieren)

Das größte Problem ist, dass die ganze Realisierung nicht so ist wie ich mir das vorstelle. Weil ich die Möglichkeiten der ToolsAPI nicht so gut überblicke bisher bzw. es Fehler gab wird im Moment ständig alles neu erstellt und wieder aus dem Speicher entfernt, auch die Weitergabe von Daten etc. ist suboptimal, da so bei der Verwendung der falschen Events (FormCreate statt FormShow...) Fehler auftreten.
Das muss ich entweder noch korrekt dokumentieren oder anders lösen.
Einloggen, um Attachments anzusehen!