Project symbol table durchsuchen

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
Benutzeravatar
tionov
Site Admin
Beiträge: 316
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Project symbol table durchsuchen

Beitrag von tionov » Sa 24. Sep 2016, 22:13

Hallo,

ich würde gerne innerhalb eines Projektes die lokalen Klassen auflisten. Geht das mit Gambas? Ich fand nur die "Classes" Auflistung, darin sind alle exportierten Klassen enthalten.
Alles Gute,

tionov

Benutzeravatar
gambi
Moderator
Beiträge: 321
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: Project symbol table durchsuchen

Beitrag von gambi » Mi 28. Sep 2016, 18:28

Hallo 4tionov,
vielleicht hilft das:
Class.Count: Returns the number of existing objects that are an instance of this class.
gambas code
Dim className As Class
For Each className In Classes
  If className.Count > 0 Then
    Print className.name
  Endif
Next
gg

Benutzeravatar
tionov
Site Admin
Beiträge: 316
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Project symbol table durchsuchen

Beitrag von tionov » Mi 28. Sep 2016, 21:07

gambi hat geschrieben: Class.Count: Returns the number of existing objects that are an instance of this class.
Danke gambi, aber das hilft leider nicht. Die "Classes" Auflistung zeigt nur exportierte Klassen an.

Zur Erklärung: Ich habe ein Unittest-Tool für Gambas gebaut, das kann in ein Projekt als Komponente eingebunden werden, damit innerhalb dieses Projekt dieses selbst getestet werden kann. Leider findet der Unittest die notwendigen Testklassen Klassen in dem Projekt nicht "von selbst", sondern nur, wenn diese exportiert sind. Wiederum erben diese exportierten Testklassen selbst eine Klasse des Unittest-Tool. Das wäre alles eigentlich kein Problem...

Nur: Wenn eine Library, die selbst mit dem Unittest-Tool getestet wird, in andere Projekte eingebunden wird, verlangt der Interpreter, dass diese ebenfalls die Unittest-Komponente verwenden (selbst wenn sie dort nicht notwendig ist). Dadurch wird es natürlich schwierig, die Library weiter zu geben, weil jeder, der sie verwendet, muss dann in seinem Projekt wiederum unnötigerweise die Unittest-Komponente einbinden. So würde die Unittest-Komponente quasi verlangen, weitere Projekte mit ihr zu "infizieren". Eine Lib verwendet die Komponente – fünf Programme, die diese Lib verwenden, müssen die Komponente ebenfalls einbinden. Das ist unnötig und unangenehm.

Nun hatte ich gehofft, irgendwie die Komponente dazu zu bringen, dass sie nicht exportierte Klassen des Projektes, in die sie eingebunden ist, erkennt und verwenden kann. Aber das Projekt selbst – so musste ich nun lernen – kann seine eigenen nicht exportierten Klassen nicht sehen.

Btw: Der Unittest ist hier:
https://github.com/Deganius/gb.deg.unittest/
Alles Gute,

tionov

tux_
Moderator
Beiträge: 950
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: Project symbol table durchsuchen

Beitrag von tux_ » Mi 28. Sep 2016, 21:28

Aber das Projekt selbst – so musste ich nun lernen – kann seine eigenen nicht exportierten Klassen nicht sehen.
Es gibt derzeit keine API dafuer, man koennte aber (bestimmt) eine C-Komponente schreiben, die die noetigen Introspektionsmoeglichkeiten schafft. Eine nicht so schoene Moeglichkeit gibt es aber jetzt schon: du kannst alle Klassen des aktuellen Projekts mit gambas code
Dir(".gambas") ' aktuelles Projekt, bzw.
Dir("../.gambas") ' das Projekt, das dieses Projekt als Komponente benutzt
auflisten ;-)
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Benutzeravatar
tionov
Site Admin
Beiträge: 316
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Project symbol table durchsuchen

Beitrag von tionov » Mi 28. Sep 2016, 21:43

Hi tux_
tux_ hat geschrieben:
Aber das Projekt selbst – so musste ich nun lernen – kann seine eigenen nicht exportierten Klassen nicht sehen.
Es gibt derzeit keine API dafuer, man koennte aber (bestimmt) eine C-Komponente schreiben, die die noetigen Introspektionsmoeglichkeiten schafft. Eine nicht so schoene Moeglichkeit gibt es aber jetzt schon: du kannst alle Klassen des aktuellen Projekts mit gambas code
Dir(".gambas") ' aktuelles Projekt, bzw.
Dir("../.gambas") ' das Projekt, das dieses Projekt als Komponente benutzt
auflisten ;-)
Das ist cool, damit sollte ich die notwendige Auflistung der Klassen gut hinbekommen.

Das geht aber nur in einem Projekt, das sich in der Entwicklungsumgebung befindet und nicht mit gba3 gepackt ist, nicht? Ich könnte es natürlich gleich testen, aber ich bin mir sicher, du weißt die Antwort.

;-)
Alles Gute,

tionov

tux_
Moderator
Beiträge: 950
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: Project symbol table durchsuchen

Beitrag von tux_ » Mi 28. Sep 2016, 21:51

Tatsaechlich kannte ich die Antwort nicht, hatte aber mein Testprojekt mit Testkomponente von der vorherigen Antwort noch parat. Es funktioniert auch mit ausfuehrbaren Archiven. Ein fluechtiger Blick in den Quelltext laesst mich vermuten, dass der Interpreter selbst diese Dateien in ".gambas" braucht -- dort werden die Kompilate des Projekts gespeichert, und scheinbar nur dort.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Benutzeravatar
tionov
Site Admin
Beiträge: 316
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Project symbol table durchsuchen

Beitrag von tionov » Mi 28. Sep 2016, 22:20

tux_ hat geschrieben:Tatsaechlich kannte ich die Antwort nicht, hatte aber mein Testprojekt mit Testkomponente von der vorherigen Antwort noch parat. Es funktioniert auch mit ausfuehrbaren Archiven. Ein fluechtiger Blick in den Quelltext laesst mich vermuten, dass der Interpreter selbst diese Dateien in ".gambas" braucht -- dort werden die Kompilate des Projekts gespeichert, und scheinbar nur dort.
Oh cool, dann sollte das die Lösung für mein Problem sein, ich probiere dann morgen mal. Was täten wir nur ohne Dich ...

:-)
Alles Gute,

tionov

Benutzeravatar
tionov
Site Admin
Beiträge: 316
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Project symbol table durchsuchen

Beitrag von tionov » Do 29. Sep 2016, 08:11

So, ich habe das nun getestet. Zwar habe ich nun die Möglichkeit, tatsächlich die Testklassen ausfindig zu machen, aber nach wie vor kann aus der Unittest-Komponente die im zu testenden Projekt bestehende Klasse nur geladen werden, wenn diese exportiert ist, sonst kommt der Fehler "Klassendatei kann nicht geladen werden.". Und damit habe ich weiterhin das Problem, dass nachfolgende Projekte "infiziert" werden, wie oben beschrieben.
Alles Gute,

tionov

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste