AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Projektweit prüfen, ob Methode als virtuell (override) im protected steht
Thema durchsuchen
Ansicht
Themen-Optionen

Projektweit prüfen, ob Methode als virtuell (override) im protected steht

Ein Thema von ZOD · begonnen am 14. Sep 2016 · letzter Beitrag vom 14. Sep 2016
Antwort Antwort
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#1

Projektweit prüfen, ob Methode als virtuell (override) im protected steht

  Alt 14. Sep 2016, 08:34
Guten Morgen zusammen,

Vorbemerkung
ich entwickle seit längerem an einem Projekt in Delphi7 (mit Anbindung an DB Firebird).
Dieses Projekt wird seit 2014 produktiv eingesetzt.
Natürlich haben sich über die Jahre sehr viele Weiterentwicklungen ergeben.
Und nicht immer wurde der Code einwandfrei gepflegt (mea culpa).
Mir ist klar, dass hier irgendwann eine große Aufräum- und Aktualisierungsaktion nötig ist.
Sobald ich die Ressourcen dafür habe .. also irgendwann ..

Zustand:
ich verwende selbstverständlich abgeleitete Formulare. Nun hat es sich ergeben,
dass im Elternformular einige Methoden von private auf protected geändert wurde.
Und zusätzlich (unsauber .. siehe oben .. ich weiß) wurden im Entwicklungsprozess
diese Methoden in den abgeleiteten Formularen neu als Klassenmethoden oder private eingebaut.

Frage:
ich möchte nun diese Fehler/Unsauberkeiten beseitigen.
Dazu muss ich herausfinden, wo diese Fehler/Unsauberkeiten gegeben sind.
Wie finde ich die entsprechenden Stellen im Code?

Das geht sicher manuell .. ist aber aufgrund der Projektgröße zeitaufwändig und evt. auch fehleranfällig.
Ich könnte die Compilermeldungen "..verbirgt die " verwenden. Das mach ich auch wenn ich sie bekomme,
aber irgendwie scheint Delphi das nicht immer anzuzeigen.

Ich suche also nach so etwas (grobe Funktionsbeschreibung):

Suche in jedem Formular nach Methode xy. Dann prüfe, ob das ein abgeleitetes Formular ist.
Wenn es abgeleitet ist und die Methode xy im Elternformular existiert, dann prüfe, ob
die Methode im abeleiten Formular im protected (oder public ) steht und ob IN der Methode ein iherited programmiert ist.

Danke für Tips hierzu!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Projektweit prüfen, ob Methode als virtuell (override) im protected steht

  Alt 14. Sep 2016, 08:41
Ich glaube für einen von uns ist es noch zu früh am Morgen.

Wenn es private ist, dann ist es private. Du kannst das aus einer Unterklasse nicht mehr direkt aufrufen, auch nicht durch ein inherited .

Beispiel:
Delphi-Quellcode:
type
   TBase = class
      strict private procedure privateStuff();
   end;

   TSub = class(TBase)
      strict private procedure privateStuff();
      public procedure publicSubStuff();
   end;

{ TSub }

procedure TSub.privateStuff();
begin
   inherited; // Tut nichts
   WriteLn('TSub.privateStuff()');
end;

procedure TSub.publicSubStuff();
begin
   privateStuff();
   WriteLn('TSub.publicStuff()');
end;

{ TBase }

procedure TBase.privateStuff();
begin
   WriteLn('TBase.privateStuff');
end;

begin
   TSub.Create().publicSubStuff();
   readln;
end.
Das siehst du auch daran dass weder die Methode TBase.privateStuff() noch die Zeile
Code:
inherited; // Tut nichts
im Debugger einen Haltepunkt bekommen.
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#3

AW: Projektweit prüfen, ob Methode als virtuell (override) im protected steht

  Alt 14. Sep 2016, 08:52
oh wie war .. sicher zu früh.

Also - neuer Versuch -:
im Elternformular von private auf protected geändert,
im Kindformular als Klassenmethode oder private eingetragen - das ist falsch.
Genau das will ich ändern. Im Kindformular soll die Methode dann eben
auch protected sein, mit override gekennzeichnet und im Code das inherited stehen.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Projektweit prüfen, ob Methode als virtuell (override) im protected steht

  Alt 14. Sep 2016, 09:02
Alles klar, jetzt habe ich es verstanden.

Wie finde ich die entsprechenden Stellen im Code?
Mir fällt spontan nur ein die protected Methode in der Basisklasse noch mit virtual zu markieren, dann gibt es eine berechtigte Compiler-Warnung:

Delphi-Quellcode:
type
   TBase = class
      protected procedure stuff(); virtual;
   end;

   TSub = class(TBase)
      private procedure stuff();
   end;
Zitat:
[dcc32 Warnung] Project11.dpr(17): W1010 Methode 'stuff' verbirgt virtuelle Methode vom Basistyp 'TBase'
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Projektweit prüfen, ob Methode als virtuell (override) im protected steht

  Alt 14. Sep 2016, 09:02
Schätze, ich würde erstmal mit Menü=>Suchen=>In Dateien suchen=>alle Dateien des Projekts alle Vorkommen finden lassen und mir merken, wo die stehen.
Danach in den Elternklassen die Methoden umbenamsen, kompilieren und beobachten, wo es dann kracht bzw wo es nicht kracht, aber sollte...
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#6

AW: Projektweit prüfen, ob Methode als virtuell (override) im protected steht

  Alt 14. Sep 2016, 09:19
@ConnorMcLeod
klar - der manuelle Ansatz ist möglich. Ich hatte die Hoffnung, hier zumindest einen Teil automatisieren zu können.

@Der schöne Günther
das zusätzliche virtual werde ich ausprobieren. Wie gesagt bekomme ich irgendwie nicht alle Compilermeldungen angezeigt bzw. habe ich nicht genau verstanden, was für die Anzeige nötig ist (Kompilerschalter sind gesetzt).
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Projektweit prüfen, ob Methode als virtuell (override) im protected steht

  Alt 14. Sep 2016, 09:56
das zusätzliche virtual werde ich ausprobieren. Wie gesagt bekomme ich irgendwie nicht alle Compilermeldungen angezeigt bzw. habe ich nicht genau verstanden, was für die Anzeige nötig ist (Kompilerschalter sind gesetzt).
Sobald du an einer Unit etwas änderst sollten die entsprechenden Meldungen für diese Unit wieder erscheinen. Die erscheinen nur deshalb nicht mehr weil die nicht mehr compiliert werden. DCUs sind aktuell. Du kannst das aber erzwingen indem du das Projekt bereinigst. In neueren Delphis gibt es da so einen Button im Kontextmenü des Projektes in der Projektverwaltung. Alternativ kannst du die DCUs auch per Hand löschen. Dann müssten die Meldungen wieder kommen.

Aber wie gesagt nur so lange wie du an der Unit etwas änderst. Kompilierst du zwei Mal ohne etwas zu ändern, dann erscheinen die Meldungen nicht mehr. Das ist zumindest meine Erfahrung.
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#8

AW: Projektweit prüfen, ob Methode als virtuell (override) im protected steht

  Alt 14. Sep 2016, 10:13
@Aviator
das hatte ich auch schon mal vermutet. Lösche ich alle DCU Dateien und kompiliere neu, kommen immer noch keine Fehlermeldungen.

@Der schöne Günther
das Hier im Forum suchenvirtual war bereits drin, das hat nichts geändert -> keine Kompilermeldung.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Projektweit prüfen, ob Methode als virtuell (override) im protected steht

  Alt 14. Sep 2016, 10:21
@Aviator
das hatte ich auch schon mal vermutet. Lösche ich alle DCU Dateien und kompiliere neu, kommen immer noch keine Fehlermeldungen.
Hast du mal versucht alles neu zu erzeugen? Siehe Anhang die beiden Screenshots. Ist allerdings 10.1 Berlin.
Miniaturansicht angehängter Grafiken
neuerzeugen.png   bereinigen.png  
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#10

AW: Projektweit prüfen, ob Methode als virtuell (override) im protected steht

  Alt 14. Sep 2016, 10:39
ja - bei D7 geht das über "Projekt|xy.exe erzeugen" oder Umsch-F9.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz