apicompatanamdw/compatanalysercmd/headeranalyser/src/BBCAnalyser.h
author noe\swadi
Tue, 12 Jan 2010 14:52:39 +0530
changeset 0 638b9c697799
permissions -rw-r--r--
1. Licenses updated to EPL. 2. New components test cases added to BC Drivers 3. Some minor fixes and few feature additions to CA.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     1
/*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     2
* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     3
* All rights reserved.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     4
* This component and the accompanying materials are made available
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     6
* which accompanies this distribution, and is available
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     8
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     9
* Initial Contributors:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    11
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    12
* Contributors:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    13
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    14
* Description:  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    15
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    16
*/
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    17
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    18
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    19
#ifndef BBCANALYSER_H_
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    20
#define BBCANALYSER_H_
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    21
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    22
#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    23
#pragma warning(disable:4786)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    24
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    25
#include <assert.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    26
#include <map>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    27
#include <list>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    28
#include "CmdGlobals.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    29
#include "ReportGenerator.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    30
#include "XMLUtils.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    31
#include "NodeIndex.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    32
#include "HANodeIterator.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    33
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    34
#include "HeaderAnalyser.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    35
#include "PreAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    36
#include "NodeAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    37
#include "BBCPreAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    38
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    39
#include <xercesc/dom/DOM.hpp>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    40
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    41
using namespace std;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    42
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    43
XERCES_CPP_NAMESPACE_USE
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    44
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    45
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    46
/**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    47
* The BBCAnalyser implements the HeaderAnalyser interface and includes the analysis 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    48
* functionality.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    49
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    50
* The BBCAnalyser includes two kinds of analysis. Firstly, some frequently used 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    51
* properties of declarations are calculated and saved in XML document for usage
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    52
* in further analysis. These are implemented in classes implementing the 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    53
* PreAnalysis interface.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    54
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    55
* Secondly, the declarations are analyzed by classes that implement the
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    56
* NodeAnalysis interface. The idea is to have the top level NodeAnalysis to analyze
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    57
* all global declarations and delegate the complex declarations to other 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    58
* NodeAnalysis classes for further analysis. This enables the problem partitioning
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    59
* in solvable units and keeps the analysis algorithms maintainable.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    60
*/
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    61
class BBCAnalyser: public HeaderAnalyser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    62
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    63
public:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    64
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    65
    * Constructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    66
    * @param report reference to <code>ReportGenerator</code>    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    67
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    68
    BBCAnalyser(ReportGenerator & report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    69
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    70
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    71
    * Traverses recursively the parsed xml tree and analyses it.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    72
    * @param baseline Pointer to the root of the baseline platform's xml output.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    73
    * @param current Pointer to the root of the current platform's xml output.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    74
    * @param filesToAnalyse List containing the filepairs to be analysed.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    75
    * @return Error code, return code 0 means no error.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    76
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    77
    int analyseTrees(DOMNode* baseline, DOMNode* current, const list< pair<string,string> >& filesToAnalyse, const list<string>& aMacroFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    78
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    79
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    80
    * This method does the actual analysis recursively for the nodes of the parser's xml output. 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    81
    * This method is called by <code>analyseTrees</code>.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    82
    * @param baseline Iterator object pointing to the baseline platform's node.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    83
    * @param current Iterator object pointing to the current platform's node.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    84
    * @param filesToAnalyse List of the files to be analysed (ordered as pairs).
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    85
    * @return Error code, return code 0 means no error.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    86
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    87
    int nodeAnalyseTrees(HANodeIterator baseline, HANodeIterator current, const list< pair<string,string> >& filesToAnalyse);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    88
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    89
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    90
    * Destructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    91
    */
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    92
    ~BBCAnalyser(){}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    93
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    94
private:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    95
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    96
    * Check if there is empty files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    97
    * @param Iterator pointing to the root node of the parsers xml output
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    98
    * @param filesToAnalyse List of files to analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    99
    * @return Vector containing the boolean values, that indicate is the file in the
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   100
    * position empty or not. For example, if <code>vector<bool>[0]==true</code>, then
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   101
    * the first file in <code>filesToAnalyse</code> is empty.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   102
    */
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   103
	vector<bool> checkForEmptyFiles(HANodeIterator rootnode, const list<string>& filesToAnalyse, const list<string>& aMacroFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   104
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   105
private:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   106
    //! Preanalyse object
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   107
	BBCPreAnalysis preAnalysis;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   108
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   109
    //! Baseline node index
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   110
    NodeIndex iBaselineIndex;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   111
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   112
    //! Current node index
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   113
    NodeIndex iCurrentIndex;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   114
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   115
    //! Reference to ReporGenerator object
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   116
    ReportGenerator& iReport;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   117
};
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   118
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   119
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   120
class UnderConstructionNodeAnalysis: public NodeAnalysis
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   121
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   122
public:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   123
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   124
    * Constructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   125
    * @return pointer NodeAnalysis object
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   126
    */
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   127
    static NodeAnalysis* Construct();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   128
public:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   129
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   130
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   131
    * Find node and analyse it 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   132
    * @param baseline to analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   133
    * @param current to analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   134
    * @return 0 if there was no issues
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   135
    */
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   136
    int FindNodeAndAnalyse(HANodeIterator baseline,HANodeIterator current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   137
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   138
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   139
    * Analyse nodes
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   140
    * @param baseline to analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   141
    * @param current to analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   142
    * @param report true if analysed results are reported (default=true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   143
    * @return 0 if no issues found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   144
    */
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   145
    int Analyse(HANodeIterator baseline,HANodeIterator current, bool report = true);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   146
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   147
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   148
    * Destructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   149
    */
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   150
    ~UnderConstructionNodeAnalysis(){};
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   151
};
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   152
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   153
#endif