Procedure/Bezeichner mit der IDE suchen

Für Fragen rund um die Ide und zum Debugger

Procedure/Bezeichner mit der IDE suchen

Beitragvon Mathias » 6. Sep 2018, 22:11 Procedure/Bezeichner mit der IDE suchen

Wen ich in folgender Zeile "SetAlternativeCompile" markiere und Alt+Hoch drücke,
Code: Alles auswählen
  AProject.LazCompilerOptions.SetAlternativeCompile('vorher', True);


Springt die IDE auf folgende Zeilen in der Unit "CompOptsIntf".
Code: Alles auswählen
    // execute
    property CompilerPath: String read GetCompilerPath write SetCompilerPath;
    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean); virtual; abstract; // disable normal compile and call this instead
  end;
Das diese Procedure als abstract deklariert ist, gibt es auch keine passende Procedure im implementations-Teil.

Aber leer kann die Procedure aber nicht sein, ansonsten würde ein Aufruf von ihr ins Leere gehen. Somit muss die Procedure irgendwo vorhanden sein, nur die Frage wo ?

Ich habe mit "grep" den ganzen Lazarus-Ordner durchsucht, und wurde fündig xxx/lazarus/ide/compileroptions.pp und xxx/lazarus/ide/project.pp.
Wieso aber findet die IDE diese beiden Units nicht ?
Der Compiler hat sie anscheinend gefunden, ansonsten würde der Aufruf von SetAlternativeCompile von wie oben beschrieben ins Leer gehen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4343
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Warf » 7. Sep 2018, 00:44 Re: Procedure/Bezeichner mit der IDE suchen

Ganz einfach, es wird eine abgeleitete klasse verwendet die woanders definiert ist, aber nur per die Oberklasse angesprochen wird. Z.B. Eine listbox hat eine TStrings properly (items) aber das ist eine abstrakte Klasse. Die tatsächliche Instanz ist eine TStringList. Nur von dem schauen in TStrings findest du aber nicht dir implementation.

Schau dir an wie das Objekt das du verwendest erzeugt wird, da ist die Klasse die du dir anschauen musst (kann z.b. Dynamisch entschieden werden was für das aktuelle System besser passt, ist also nicht unbedingt sehr einfach)

Oder mach ein grep nach „class(AbstrakteKlassenName)“ über den gesamten source Ordner:
Code: Alles auswählen
grep -ir "= class(XXX)" /xxx/src 
Warf
 
Beiträge: 1103
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Mathias » 7. Sep 2018, 17:31 Re: Procedure/Bezeichner mit der IDE suchen

grep spuckt mir folgendes aus:
Code: Alles auswählen
~/fpcupdeluxe/lazarus $ grep SetAlternativeCompile * -ir
components/instantfpc/instantfpcregisterlaz.pas:  AProject.LazCompilerOptions.SetAlternativeCompile(
Übereinstimmungen in Binärdatei components/ideintf/units/x86_64-linux/nogui/compoptsintf.ppu
Übereinstimmungen in Binärdatei components/ideintf/units/x86_64-linux/nogui/compoptsintf.o
Übereinstimmungen in Binärdatei components/ideintf/units/x86_64-linux/gtk2/compoptsintf.ppu
Übereinstimmungen in Binärdatei components/ideintf/units/x86_64-linux/gtk2/compoptsintf.o
components/ideintf/compoptsintf.pas:    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean); virtual; abstract; // disable normal compile and call this instead
ide/compileroptions.pp:    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean); override;
ide/compileroptions.pp:procedure TBaseCompilerOptions.SetAlternativeCompile(const Command: string;
ide/project.pp:    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean); override;
ide/project.pp:procedure TProjectCompilerOptions.SetAlternativeCompile(const Command: string;
ide/project.pp:  inherited SetAlternativeCompile(Command, ScanFPCMsgs);
Übereinstimmungen in Binärdatei lazarus
Übereinstimmungen in Binärdatei lazarus.old
Übereinstimmungen in Binärdatei lazbuild
Übereinstimmungen in Binärdatei tools/lazdatadesktop/lazdatadesktop
Übereinstimmungen in Binärdatei units/x86_64-linux/nogui/project.o
Übereinstimmungen in Binärdatei units/x86_64-linux/nogui/packagedefs.o
Übereinstimmungen in Binärdatei units/x86_64-linux/nogui/compileroptions.o
Übereinstimmungen in Binärdatei units/x86_64-linux/nogui/compileroptions.ppu
Übereinstimmungen in Binärdatei units/x86_64-linux/nogui/project.ppu
Übereinstimmungen in Binärdatei units/x86_64-linux/gtk2/project.o
Übereinstimmungen in Binärdatei units/x86_64-linux/gtk2/packagedefs.o
Übereinstimmungen in Binärdatei units/x86_64-linux/gtk2/compileroptions.o
Übereinstimmungen in Binärdatei units/x86_64-linux/gtk2/compileroptions.ppu
Übereinstimmungen in Binärdatei units/x86_64-linux/gtk2/project.ppu


Einzig im Ordner ide, hat es Vererbungen von SetAlternativeCompile.
Aber ist ide nicht die Lazarus-IDE ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4343
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 8. Sep 2018, 06:59 Re: Procedure/Bezeichner mit der IDE suchen

MSEide 'Search'-'Find in Files' liefert:
findinfile.png

Doppelklick in Zeile 4 springt zu:
source1.png

Ctrl+Shift+Up springt zum Header, der Klassenkopf sieht so aus:
source2.png

Ctrl+LeftClick auf TLazCompilerOptions springt auf
source3.png

wo die abstrakte Definition von SetAlternativeCompile() steht. AProject.LazCompilerOptions ist wahrscheinlich vom Typ TLazCompilerOptions daher zeigt Lazarus die Definition TLazCompilerOptions.SetAlternativeCompile(). Dass zur Laufzeit AProject.LazCompilerOptions eine Instanz von TBaseCompilerOptions oder TProjectCompilerOptions (Zeile 6 von 'Find in file result') ist, kann Lazarus nicht wissen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Mathias » 8. Sep 2018, 16:28 Re: Procedure/Bezeichner mit der IDE suchen

Die MSEide kommt etwa auf das gleiche Ergebnis wie grep.

Verstehe ich es richtig. In der Unit CompOptsIntf wir SetAlternativeCompile als virtual/abstract deklariert, das ich es in meiner Package überhaupt verwenden kann.
Da ich eine Package entwickle braucht es zur Entwicklungszeit noch keine Funktion für SetAlternativeCompile.
Aber sobald ich die Package in die Lazarus-IDE einbinde, dann muss die Funktion SetAlternativeCompile zu Verfügung stehen. Und dort ist sie auch vorhanden, so wie grep es beweist.

Mein Problem, das ich überhaupt Frage, ist hier beschrieben: viewtopic.php?f=18&t=11760
Ich will eine Funktion einbauen, mit dem ich die "Nacher" Option beschreiben kann.
So wie es scheint, müsste man dafür zuerst die ganze Lazarus-IDE modifizieren.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4343
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Benutzung der IDE



Wer ist online?

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

porpoises-institution
accuracy-worried