Skip to content

Commit ee716fc

Browse files
committed
Merge branch 'topic/W406-030' into 'master'
W406-030 Increasing performance of Goto_Declaration See merge request eng/ide/ada_language_server!1183
2 parents b2340ad + 015c4a8 commit ee716fc

File tree

1 file changed

+27
-25
lines changed

1 file changed

+27
-25
lines changed

source/ada/lsp-ada_contexts.adb

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,6 @@ package body LSP.Ada_Contexts is
185185
return; -- Name resolution fails, nothing to do.
186186
end if;
187187

188-
First_Part := Laltools.Common.Find_Canonical_Part
189-
(Definition, Self.Trace);
190-
191188
-- Display the method ancestry in three cases:
192189
--
193190
-- . When the preference is set to Always
@@ -204,6 +201,9 @@ package body LSP.Ada_Contexts is
204201
or else (Display_Method_Ancestry_Policy = Definition_Only
205202
and then On_Defining_Name)
206203
then
204+
First_Part := Laltools.Common.Find_Canonical_Part
205+
(Definition, Self.Trace);
206+
207207
if First_Part = Libadalang.Analysis.No_Defining_Name then
208208
Decl_For_Find_Overrides := Definition.P_Basic_Decl;
209209
else
@@ -227,28 +227,30 @@ package body LSP.Ada_Contexts is
227227
LSP.Lal_Utils.Append_Location (Result, Definition);
228228
end if;
229229

230-
declare
231-
Imprecise_Over : Boolean;
232-
Imprecise_Base : Boolean;
233-
Overriding_Subps : constant Basic_Decl_Array :=
234-
Self.Find_All_Overrides
235-
(Decl_For_Find_Overrides,
236-
Imprecise_Results => Imprecise_Over);
237-
Base_Subps : constant Basic_Decl_Array :=
238-
Self.Find_All_Base_Declarations
239-
(Decl_For_Find_Overrides,
240-
Imprecise_Results => Imprecise_Base);
241-
begin
242-
for Subp of Base_Subps loop
243-
Append_Location
244-
(Result, Subp.P_Defining_Name, LSP.Common.Is_Parent);
245-
end loop;
246-
for Subp of Overriding_Subps loop
247-
Append_Location
248-
(Result, Subp.P_Defining_Name, LSP.Common.Is_Child);
249-
end loop;
250-
Imprecise := Imprecise or Imprecise_Over or Imprecise_Base;
251-
end;
230+
if not Decl_For_Find_Overrides.Is_Null then
231+
declare
232+
Imprecise_Over : Boolean;
233+
Imprecise_Base : Boolean;
234+
Overriding_Subps : constant Basic_Decl_Array :=
235+
Self.Find_All_Overrides
236+
(Decl_For_Find_Overrides,
237+
Imprecise_Results => Imprecise_Over);
238+
Base_Subps : constant Basic_Decl_Array :=
239+
Self.Find_All_Base_Declarations
240+
(Decl_For_Find_Overrides,
241+
Imprecise_Results => Imprecise_Base);
242+
begin
243+
for Subp of Base_Subps loop
244+
Append_Location
245+
(Result, Subp.P_Defining_Name, LSP.Common.Is_Parent);
246+
end loop;
247+
for Subp of Overriding_Subps loop
248+
Append_Location
249+
(Result, Subp.P_Defining_Name, LSP.Common.Is_Child);
250+
end loop;
251+
Imprecise := Imprecise or Imprecise_Over or Imprecise_Base;
252+
end;
253+
end if;
252254
end Append_Declarations;
253255

254256
------------

0 commit comments

Comments
 (0)