asis_2019.0.0_3ca32fa2/templates/asis_application_driver_1.adb

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
------------------------------------------------------------------------------
--                                                                          --
--                    ASIS APPLICATION TEMPLATE COMPONENTS                  --
--                                                                          --
--              A S I S _ A P P L I C A T I O N _ D R I V E R _ 1           --
--                                                                          --
--                                 B o d y                                  --
--                                                                          --
--            Copyright (c) 2000, Free Software Foundation, Inc.            --
--                                                                          --
-- ASIS  Application  Templates are  free software; you can redistribute it --
-- and/or  modify it under  terms  of the  GNU  General  Public  License as --
-- published by the Free Software Foundation; either version 2, or (at your --
-- option) any later version. ASIS Application Templates are distributed in --
-- the hope that they will be useful, but  WITHOUT  ANY  WARRANTY; without  --
-- even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR --
-- PURPOSE. See the GNU General Public License for more details. You should --
-- have  received a copy of the GNU General Public License distributed with --
-- distributed  with  GNAT;  see  file  COPYING. If not, write to the Free  --
-- Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, --
-- USA.                                                                     --
--                                                                          --
-- ASIS Application Templates were developed and are now maintained by Ada  --
-- Core Technologies Inc (http://www.gnat.com).                             --
--                                                                          --
------------------------------------------------------------------------------

with Ada.Exceptions;
with Ada.Wide_Text_IO;
with Ada.Characters.Handling;

with Asis;
with Asis.Ada_Environments;
with Asis.Implementation;
with Asis.Exceptions;
with Asis.Errors;

with Context_Processing;

procedure ASIS_Application_Driver_1 is
   My_Context            : Asis.Context;

   My_Context_Name       : Wide_String := Asis.Ada_Environments.Default_Name;
   --  The default name in case of the GNAT ASIS implementation is empty.
   --  If you would like to have some non-null name for your ASIS Context,
   --  change the initialization expression in this declaration. Note, that
   --  in the GNAT ASIS implementation the name of a Context does not have any
   --  special meaning or semantics associated with particular names.

   My_Context_Parameters : Wide_String :=
      Asis.Ada_Environments.Default_Parameters;
   --  The default COntext parameters in case of the GNAT ASIS implementation
   --  are an empty string. This corresponds to the following Context
   --  definition: "-CA -FT -SA", and has the following meaning:
   --  -CA - a Context is made up by all the tree files in the tree search
   --        path; the tree search path is not set, so the default is used,
   --        and the default is the current directory;
   --  -FT - only pre-created trees are used, no tree file can be created by
   --        ASIS;
   --  -SA - source files for all the Compilation Units belonging to the
   --        Context (except the predefined Standard package) are considered
   --        in the consistency check when opening the Context;
   --
   --  If you would like to use some other Context definition, you have to
   --  replace the initialization expression in this declaration by
   --  the corresponding Parameters string. See the ASIS Reference Manual for
   --  the full details of the Context definition for the GNAT ASIS
   --  implementation.

   Initialization_Parameters : Wide_String := "";
   Finalization_Parameters   : Wide_String := "";
   --  If you would like to use some specific initialization or finalization
   --  parameters, you may set them here as initialization expressions in
   --  the declarations above.

begin
   --  The code below corresponds to the basic sequencing of calls to ASIS
   --  queries which is mandatory for any ASIS application.
   --  First, the ASIS implementation should be initialized
   --  (Asis.Implementation.Initialize), then an application should define
   --  an ASIS Context to process by associating the Context with an external
   --  environment (Asis.Ada_Environments.Associate), then the Context should
   --  be opened (sis.Ada_Environments.Open ). After that all the ASIS queries
   --  may be used (the ASIS processing is encapsulated in
   --  Context_Processing.Process_Context. When the ASIS analysis is over, the
   --  application should release the system resources by closing the ASIS
   --  Context (Asis.Ada_Environments.Close), breaking the association of the
   --  Context with the external world (Asis.Ada_Environments.Dissociate) and
   --  finalizing the ASIS implementation (Asis.Implementation.Finalize).

   Asis.Implementation.Initialize     (Initialization_Parameters);

   Asis.Ada_Environments.Associate
     (The_Context => My_Context,
      Name        => My_Context_Name,
      Parameters  => My_Context_Parameters);

   Asis.Ada_Environments.Open         (My_Context);

   Context_Processing.Process_Context (The_Context => My_Context,
                                       Trace       => True);

   Asis.Ada_Environments.Close        (My_Context);
   Asis.Ada_Environments.Dissociate   (My_Context);
   Asis.Implementation.Finalize       (Finalization_Parameters);

exception
   --  The exception handling in this driver is somewhat redundant and may
   --  need some reconsidering when using this driver in real ASIS tools

   when Ex : Asis.Exceptions.ASIS_Inappropriate_Context          |
             Asis.Exceptions.ASIS_Inappropriate_Container        |
             Asis.Exceptions.ASIS_Inappropriate_Compilation_Unit |
             Asis.Exceptions.ASIS_Inappropriate_Element          |
             Asis.Exceptions.ASIS_Inappropriate_Line             |
             Asis.Exceptions.ASIS_Inappropriate_Line_Number      |
             Asis.Exceptions.ASIS_Failed                         =>

      Ada.Wide_Text_IO.Put ("ASIS exception (");
      Ada.Wide_Text_IO.Put (Ada.Characters.Handling.To_Wide_String (
              Ada.Exceptions.Exception_Name (Ex)));
      Ada.Wide_Text_IO.Put (") is raised");
      Ada.Wide_Text_IO.New_Line;

      Ada.Wide_Text_IO.Put ("ASIS Error Status is ");
      Ada.Wide_Text_IO.Put
        (Asis.Errors.Error_Kinds'Wide_Image (Asis.Implementation.Status));
      Ada.Wide_Text_IO.New_Line;

      Ada.Wide_Text_IO.Put ("ASIS Diagnosis is ");
      Ada.Wide_Text_IO.New_Line;
      Ada.Wide_Text_IO.Put (Asis.Implementation.Diagnosis);
      Ada.Wide_Text_IO.New_Line;

      Asis.Implementation.Set_Status;

   when Ex : others =>

      Ada.Wide_Text_IO.Put (Ada.Characters.Handling.To_Wide_String (
              Ada.Exceptions.Exception_Name (Ex)));
      Ada.Wide_Text_IO.Put (" is raised (");
      Ada.Wide_Text_IO.Put (Ada.Characters.Handling.To_Wide_String (
              Ada.Exceptions.Exception_Information (Ex)));
      Ada.Wide_Text_IO.Put (")");
      Ada.Wide_Text_IO.New_Line;

end ASIS_Application_Driver_1;