apicompatanamdw/compatanalysercmd/headeranalyser/src/BBCAnalyser.cpp
author shrivatsa
Mon, 27 Sep 2010 14:51:17 +0530
changeset 12 a0eee409ff14
parent 3 ebe3f8f03b59
permissions -rw-r--r--
Updates to CompatibilityAnalyser - The Tool should now work with Symbian^4 - Some minor bug fixes related to Qt headers in the Symbian Platform
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
#include "CmdGlobals.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    20
#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    21
#pragma warning(disable:4786)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    22
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    23
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    24
#include <assert.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    25
#include <map>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    26
#include <list>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    27
#include <string>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    28
#include <time.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    29
#include <xercesc/dom/DOM.hpp>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    30
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    31
#include "BBCAnalyser.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    32
#include "BBCPreAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    33
#include "Issues.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    34
#include "ReportGenerator.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    35
#include "ReportIssue.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    36
#include "XMLUtils.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    37
#include "XMLStringConst.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    38
#include "VariableNodeAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    39
#include "EnumNodeAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    40
#include "FunctionNodeAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    41
#include "TypedefNodeAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    42
#include "OperatorFunctionNodeAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    43
#include "UnionNodeAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    44
#include "ClassNodeAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    45
#include "StructNodeAnalysis.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    46
#include "NodeTypeComparator.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    47
#include "Utils.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    48
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    49
using namespace std;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    50
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    51
XERCES_CPP_NAMESPACE_USE
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    52
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    53
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    54
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    55
struct ConstructorElement
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    56
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    57
    const XMLCHAR* iEntityName;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    58
    NodeAnalysis::Constructor iConstructor;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    59
};
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    60
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    61
// Table of different node analysis constructor functions
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    62
const ConstructorElement KConstructorTable[KEntityComparisonTableCount]=
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    63
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    64
    {KXMLBaseString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    65
    {KXMLFundamentalTypeString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    66
    {KXMLTypedefString,TypedefNodeAnalysis::Construct},//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    67
    {KXMLNamespaceString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    68
    {KXMLCvQualifiedTypeString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    69
    {KXMLVariableString,VariableNodeAnalysis::Construct},//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    70
    {KXMLFundamentalTypeString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    71
    {KXMLTypedefString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    72
    {KXMLNamespaceString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    73
    {KXMLFunctionString,FunctionNodeAnalysis::Construct},//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    74
    {KXMLEnumerationString,EnumNodeAnalysis::Construct},//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    75
    {KXMLFieldString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    76
    {KXMLArgumentString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    77
    {KXMLEllipsisString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    78
    {KXMLArrayTypeString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    79
    {KXMLClassString,ClassNodeAnalysis::Construct},//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    80
    {KXMLConstructorString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    81
    {KXMLConverterString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    82
    {KXMLDestructorString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    83
    {KXMLEnumValueString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    84
    {KXMLFileString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    85
    {KXMLFunctionTypeString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    86
    {KXMLMethodString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    87
    {KXMLMethodTypeString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    88
    {KXMLNamespaceAliasString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    89
    {KXMLOffsetTypeString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    90
    {KXMLOperatorFunctionString,OperatorFunctionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    91
    {KXMLOperatorMethodString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    92
    {KXMLPointerTypeString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    93
    {KXMLReferenceTypeString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    94
    {KXMLStructString,StructNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    95
    {KXMLUnimplementedString,UnderConstructionNodeAnalysis::Construct},
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    96
    {KXMLUnionString,UnionNodeAnalysis::Construct}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    97
    };
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    98
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    99
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   100
// NodeAnalysis::FindNodeAnalysisConstructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   101
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   102
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   103
NodeAnalysis::Constructor FindNodeAnalysisConstructor(const XMLCh* nodeName)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   104
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   105
    int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   106
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   107
    for (i = 0;i < KEntityComparisonTableCount; ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   108
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   109
        if ( Equals(KConstructorTable[i].iEntityName,nodeName) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   110
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   111
            return KConstructorTable[i].iConstructor;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   112
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   113
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   114
    return NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   115
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   116
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   117
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   118
// BBCPreAnalysis::preAnalyseClassForVirtuality
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   119
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   120
// Analyse for virtuality
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   121
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   122
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   123
bool BBCPreAnalysis::preAnalyseClassForVirtuality(HANodeIterator classNode)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   124
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   125
	bool isvirtual = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   126
	bool hasvirtualbases = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   127
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   128
    //Check to see if we have already inspected this class
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   129
    if ( classNode.GetAttribute(KXMLBBCVirtualString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   130
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   131
        return classNode.CheckForBooleanAttribute(KXMLBBCVirtualString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   132
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   133
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   134
    if ( classNode->hasChildNodes() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   135
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   136
        //Check for virtual bases first as it is quicker
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   137
        DOMNodeList * childs = classNode->getChildNodes();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   138
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   139
        XMLSize_t childcount = childs->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   140
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   141
        for (unsigned int i = 0; i < childcount; ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   142
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   143
            DOMNode* child = childs->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   144
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   145
            //Skip any other than Base node
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   146
            if ( !Equals(child->getNodeName(),KXMLBaseString) ) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   147
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   148
                continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   149
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   150
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   151
            HANodeIterator childclass(classNode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   152
            childclass.current = child;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   153
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   154
            if ( childclass.CheckForBooleanAttribute(KXMLVirtualString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   155
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   156
                classNode.SetAttribute(KXMLBBCVirtualInheritanceString,KXML1String);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   157
                hasvirtualbases = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   158
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   159
				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   160
            const XMLCh * classid = childclass.GetAttribute(KXMLTypeString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   161
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   162
            assert(classid != NULL);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   163
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   164
            bool ret = childclass.FindNodeById(classid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   165
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   166
            assert(ret == true);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   167
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   168
            if ( preAnalyseClassForVirtuality( childclass ) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   169
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   170
                //The class is virtual, mark it to the xml document and return
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   171
                classNode.SetAttribute(KXMLBBCVirtualString, KXML1String);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   172
                isvirtual = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   173
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   174
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   175
            if ( childclass.CheckForBooleanAttribute(KXMLBBCVirtualInheritanceString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   176
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   177
                classNode.SetAttribute(KXMLBBCVirtualInheritanceString,KXML1String);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   178
                hasvirtualbases = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   179
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   180
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   181
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   182
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   183
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   184
    //We have already detected that this is virtual class
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   185
    if ( isvirtual )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   186
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   187
        ClassGenerateVirtualTable(classNode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   188
        return true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   189
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   190
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   191
    //Go through the methods of the class and check them for virtuality
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   192
    const XMLCh* attributeValue = classNode.GetAttribute(KXMLMembersString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   193
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   194
    if (attributeValue)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   195
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   196
        BaseRefVectorOf< XMLCh > * memberids_ptr = XMLString::tokenizeString(attributeValue);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   197
        auto_ptr<BaseRefVectorOf< XMLCh > > memberids(memberids_ptr);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   198
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   199
        for (unsigned int i = 0; i < memberids->size(); ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   200
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   201
            const XMLCh * memberid = memberids->elementAt(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   202
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   203
            HANodeIterator member(classNode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   204
            bool memberfound = member.FindNodeById(memberid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   205
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   206
            if ( memberfound )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   207
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   208
                if ( member.CheckForBooleanAttribute(KXMLVirtualString) ||
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   209
                    member.CheckForBooleanAttribute(KXMLPureVirtualString))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   210
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   211
                    //Generate primary virtual table for the class
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   212
                    ClassGenerateVirtualTable(classNode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   213
                    //The class is virtual, mark it to the xml document and return
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   214
                    classNode.SetAttribute(KXMLBBCVirtualString, KXML1String);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   215
                    return true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   216
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   217
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   218
            else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   219
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   220
                //The tree is broken
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   221
                assert(false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   222
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   223
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   224
        //memberids->cleanup();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   225
        //delete memberids;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   226
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   227
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   228
    classNode.SetAttribute(KXMLBBCVirtualString, KXML0String);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   229
    return false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   230
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   231
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   232
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   233
// BBCAnalyser::preAnalyseClassForDerivability
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   234
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   235
// Check for derivability. The class is derivable iff:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   236
// 1. Has a public or protected explicitely declared exported constructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   237
// 2. Has a public or protected inline constructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   238
// In GCCXML:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   239
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   240
// Check methods of type "Constructor" 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   241
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   242
// Constructor type / attribute:| artificial | explicit | inline | exported
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   243
//--------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   244
// implicite inline constructor |     x     |     x     |   x    |          
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   245
// inline constructor           |           |    (x)    |   x    |          
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   246
// exported constructor         |           |    (x)    |        |    x     
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   247
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   248
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   249
void BBCPreAnalysis::preAnalyseClassForDerivability(HANodeIterator classNode)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   250
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   251
    //Go through the methods of the class and check them for constructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   252
    const XMLCh* attributeValue = classNode.GetAttribute(KXMLMembersString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   253
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   254
    //Default to public desctructor as it is same as no desctructor at all
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   255
    classNode.SetAttribute(KXMLBBCDestructorAccessString,KXMLBBCAccessPublicString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   256
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   257
    if (attributeValue)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   258
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   259
        BaseRefVectorOf< XMLCh > * memberids_ptr = XMLString::tokenizeString (attributeValue);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   260
        auto_ptr<BaseRefVectorOf< XMLCh > > memberids(memberids_ptr);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   261
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   262
        for (unsigned int i = 0; i < memberids->size(); ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   263
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   264
            const XMLCh * memberid = memberids->elementAt(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   265
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   266
            HANodeIterator member(classNode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   267
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   268
            if ( member.FindNodeById(memberid) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   269
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   270
                //The member is constructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   271
                if ( Equals(member->getNodeName(),KXMLConstructorString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   272
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   273
                    //Check if the constructor is protected or public
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   274
                    const XMLCh* accessAttribute = member.GetAttribute(KXMLAccessString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   275
                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   276
                    if ( Equals(accessAttribute,KXMLProtectedString) || Equals(accessAttribute,KXMLPublicString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   277
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   278
                        //If the constructor is artificial (compiler generated) we need to check for the explicit attribute 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   279
                        // to recognize the proper constructor and not the helper constructor generated by the compiler
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   280
                        bool artificial = member.CheckForBooleanAttribute(KXMLArtificialString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   281
                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   282
                        bool explicit_val = member.CheckForBooleanAttribute(KXMLExplicitString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   283
                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   284
                        bool inline_val = member.CheckForBooleanAttribute(KXMLInlineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   285
                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   286
                        const XMLCh* attributeAttribute = member.GetAttribute(KXMLAttributeString);                            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   287
                        //Check for export or inline
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   288
                        if ( ( inline_val && explicit_val && artificial ) || //the constructor is compiler generated inline function
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   289
                             ( inline_val && !artificial ) ||  //the constructor is explicitely declared inline function
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   290
                             (attributeAttribute && Equals(attributeAttribute,KXMLExportedString))  //the constructor is explicitely declared exported function
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   291
                            )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   292
                            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   293
                                if ( Equals(accessAttribute,KXMLProtectedString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   294
                                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   295
                                    //Is derivable class. Mark the node as one.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   296
                                    classNode.SetAttribute(KXMLBBCProtectedConstructorString,KXML1String);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   297
                                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   298
                                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   299
                                if ( Equals(accessAttribute,KXMLPublicString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   300
                                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   301
                                    classNode.SetAttribute(KXMLBBCPublicConstructorString,KXML1String);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   302
                                    //Class is instantiable,too!!!
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   303
                                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   304
                            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   305
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   306
                } else if ( Equals(member->getNodeName(),KXMLDestructorString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   307
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   308
                    //Check if the destructor is private, protected or public and accessibility
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   309
                    // if the desctructor is not accessible it is marked as private 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   310
                    const XMLCh* accessAttribute = member.GetAttribute(KXMLAccessString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   311
                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   312
                    bool inline_val = member.CheckForBooleanAttribute(KXMLInlineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   313
                    bool virtual_val = member.CheckForBooleanAttribute(KXMLVirtualString) ||
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   314
                                        member.CheckForBooleanAttribute(KXMLPureVirtualString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   315
                    bool exported_val = false; 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   316
                    const XMLCh* attributeAttribute = member.GetAttribute(KXMLAttributeString);                            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   317
                             
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   318
                    if (attributeAttribute && Equals(attributeAttribute,KXMLExportedString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   319
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   320
                        exported_val = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   321
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   322
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   323
                    if ( !Equals(accessAttribute,KXMLPrivateString) && (inline_val || virtual_val || exported_val) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   324
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   325
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   326
                        if ( Equals(accessAttribute,KXMLPublicString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   327
                        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   328
                            classNode.SetAttribute(KXMLBBCDestructorAccessString,KXMLBBCAccessPublicString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   329
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   330
                        } else if ( Equals(accessAttribute,KXMLProtectedString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   331
                        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   332
                            classNode.SetAttribute(KXMLBBCDestructorAccessString,KXMLBBCAccessProtectedString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   333
                        } 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   334
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   335
                    else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   336
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   337
                        classNode.SetAttribute(KXMLBBCDestructorAccessString,KXMLBBCAccessPrivateString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   338
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   339
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   340
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   341
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   342
            else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   343
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   344
                //The tree is broken
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   345
                assert(false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   346
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   347
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   348
        //delete memberids;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   349
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   350
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   351
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   352
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   353
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   354
// BBCAnalyser::preAnalyseClassForInlineFunctions
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   355
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   356
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   357
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   358
void BBCPreAnalysis::preAnalyseClassForInlineFunctions(HANodeIterator classNode)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   359
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   360
    //Go through the methods of the class and check them for virtuality
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   361
    const XMLCh* attributeValue = classNode.GetAttribute(KXMLMembersString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   362
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   363
    if (attributeValue)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   364
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   365
        BaseRefVectorOf< XMLCh > * memberids_ptr = XMLString::tokenizeString (attributeValue);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   366
        auto_ptr<BaseRefVectorOf< XMLCh > > memberids(memberids_ptr);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   367
        bool hasPublicInline = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   368
        bool hasProtectedInline = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   369
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   370
        for (unsigned int i = 0; i < memberids->size(); ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   371
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   372
            const XMLCh * memberid = memberids->elementAt(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   373
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   374
            HANodeIterator member(classNode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   375
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   376
            if ( member.FindNodeById(memberid) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   377
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   378
                //Check every inline function but do not take artificial (compiler generated) functions into account
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   379
                if ( member.CheckForBooleanAttribute(KXMLInlineString) && !member.CheckForBooleanAttribute(KXMLArtificialString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   380
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   381
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   382
                    //Check if the constructor is protected or public
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   383
                    const XMLCh* attributeValue = member.GetAttribute(KXMLAccessString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   384
                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   385
                    if ( Equals(attributeValue,KXMLProtectedString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   386
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   387
                        //The class has protected inline function
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   388
                        hasProtectedInline = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   389
                        classNode.SetAttribute(KXMLBBCProtectedInlineString,KXML1String);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   390
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   391
                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   392
                    if ( Equals(attributeValue,KXMLPublicString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   393
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   394
                        //The class has public inline function
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   395
                        hasPublicInline = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   396
                        classNode.SetAttribute(KXMLBBCPublicInlineString,KXML1String);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   397
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   398
                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   399
                    //It is enough if we have public inline, the class is fully exposed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   400
                    if ( hasPublicInline )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   401
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   402
                        return;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   403
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   404
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   405
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   406
            else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   407
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   408
                //The tree is broken
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   409
                assert(false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   410
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   411
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   412
        //memberids->cleanup();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   413
        //delete memberids;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   414
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   415
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   416
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   417
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   418
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   419
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   420
// BBCAnalyser::preAnalyseClass
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   421
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   422
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   423
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   424
void BBCPreAnalysis::preAnalyseClass(HANodeIterator classNode)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   425
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   426
    preAnalyseClassForVirtuality(classNode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   427
    preAnalyseClassForDerivability(classNode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   428
    preAnalyseClassForInlineFunctions(classNode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   429
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   430
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   431
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   432
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   433
// printNode
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   434
// DEBUG method
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   435
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   436
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   437
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   438
void printNode(HANodeIterator node)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   439
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   440
    DEBUG_STUFF(const XMLCh * name = node->getNodeName();)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   441
    const XMLCh * value = node->getNodeValue();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   442
 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   443
    DEBUG_PRINT_XMLCh(name)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   444
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   445
    if ( value )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   446
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   447
        DEBUG_PRINT(":")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   448
        DEBUG_PRINT_XMLCh(value)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   449
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   450
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   451
    DOMNamedNodeMap * atts = node->getAttributes();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   452
    if (atts)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   453
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   454
        DEBUG_PRINT(" attributes: ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   455
        XMLSize_t size = atts->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   456
        for (unsigned int i = 0; i < size; ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   457
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   458
            DOMNode * att = atts->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   459
            HANodeIterator cit(node);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   460
            cit.current = att;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   461
            printNode(cit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   462
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   463
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   464
    DEBUG_PRINT("\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   465
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   466
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   467
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   468
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   469
// BBCAnalyser::preAnalyseGenerateMaps
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   470
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   471
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   472
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   473
void BBCPreAnalysis::preAnalyseGenerateMaps(HANodeIterator rootnode, bool baseline)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   474
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   475
    //First generate the file maps	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   476
    short nodetype = rootnode->getNodeType();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   477
    assert(nodetype == DOMNode::ELEMENT_NODE);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   478
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   479
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   480
    DEBUG_PRINT("****************preAnalyse: Generating index*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   481
    DEBUG_STUFF(time_t starttime = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   482
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   483
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   484
    DOMDocument * doc =  rootnode->getOwnerDocument();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   485
    DOMNodeIterator * domit = doc->createNodeIterator (rootnode.current,DOMNodeFilter::SHOW_ELEMENT, NULL, true);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   486
    DOMNode * it = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   487
    while ( NULL != (it = domit->nextNode()) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   488
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   489
        HANodeIterator childit(rootnode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   490
        childit.current = it;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   491
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   492
#ifdef _DEBUG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   493
        //printNode(childit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   494
        // Keep commented, too much stuff to print
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   495
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   496
        if (DOMNode::ELEMENT_NODE == childit->getNodeType())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   497
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   498
            childit.IndexNode();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   499
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   500
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   501
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   502
    DEBUG_PRINT("****************preAnalyse: Generating index END*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   503
    DEBUG_STUFF(time_t endtime = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   504
    DEBUG_STUFF(time_t runningtime = endtime - starttime;)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   505
    DEBUG_PRINT("ELAPSED TIME: ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   506
    DEBUG_PRINT((long)runningtime)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   507
    DEBUG_PRINT("\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   508
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   509
    DEBUG_PRINT("****************preAnalyse: Generating name map*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   510
    DEBUG_STUFF(time_t starttime2 = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   511
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   512
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   513
    doc =  rootnode->getOwnerDocument();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   514
    domit = doc->createNodeIterator (rootnode.current,DOMNodeFilter::SHOW_ELEMENT, NULL, true);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   515
    it = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   516
    while ( NULL != (it = domit->nextNode()) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   517
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   518
        HANodeIterator childit(rootnode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   519
        childit.current = it;		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   520
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   521
        // Add node to name map if following conditions are true:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   522
        // 1. Node is proper i.e. it is in proper context and it is not artificial (compiler generated).
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   523
        // 2. Node is named (class, enum, function.. etc.)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   524
        // 3. It is declared in the analysed header OR it is not a baseline node. 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   525
        //    Without this rule, classes that are moved to another, not to be analysed header,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   526
        //    would not be properly analysed.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   527
        if (IsProperNode(childit) && IsNamedNode(childit) && (childit.toBeAnalysed() || !baseline))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   528
        {        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   529
            const XMLCh* nodetype = childit->getNodeName();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   530
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   531
            if ( Equals(nodetype,KXMLEnumerationString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   532
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   533
                //Check to see if the enumeration is anonymous	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   534
                if ( IsAnonymous(childit) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   535
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   536
                    DOMNodeList* enumchilds = childit.GetElementsByTagName(KXMLEnumValueString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   537
                    XMLSize_t enumchildcount = enumchilds->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   538
                    unsigned int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   539
                    for (i = 0; i < enumchildcount; ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   540
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   541
                        HANodeIterator enumchildit(childit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   542
                        enumchildit.current = enumchilds->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   543
                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   544
                        enumchildit.NameNode(!baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   545
                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   546
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   547
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   548
                    continue;//Skip the enum naming 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   549
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   550
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   551
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   552
            childit.NameNode(!baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   553
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   554
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   555
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   556
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   557
    DEBUG_PRINT("****************preAnalyse: Generating name map END*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   558
    DEBUG_STUFF(time_t endtime2 = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   559
    DEBUG_STUFF(time_t runningtime2 = endtime2 - starttime2;)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   560
    DEBUG_PRINT("ELAPSED TIME: ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   561
    DEBUG_PRINT((long)runningtime2)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   562
    DEBUG_PRINT("\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   563
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   564
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   565
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   566
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   567
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   568
// BBCAnalyser::checkForEmptyFiles 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   569
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   570
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   571
vector<bool> BBCAnalyser::checkForEmptyFiles(HANodeIterator rootnode, const list<string>& filesToAnalyse, const list<string>& aMacroFiles)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   572
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   573
    DOMNodeList* childs = rootnode.GetElementsByTagName(KXMLFileString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   574
    XMLSize_t childcount = childs->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   575
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   576
    vector<bool> filefound(filesToAnalyse.size(),false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   577
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   578
    for (unsigned int i = 0; i < childcount; ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   579
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   580
        DOMNode* child = childs->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   581
        HANodeIterator childit(rootnode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   582
        childit.current = child;        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   583
        const XMLCh* filename = childit.GetAttribute(KXMLNameString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   584
        list<string>::const_iterator it = filesToAnalyse.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   585
        int j = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   586
        for (;it != filesToAnalyse.end(); ++it)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   587
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   588
            if ( CompareFileNames((*it),toString(filename)) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   589
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   590
                filefound[j] = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   591
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   592
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   593
            ++j;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   594
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   595
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   596
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   597
	//validate that file is not empty
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   598
	//in case file only contained macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   599
	if(!aMacroFiles.empty())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   600
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   601
		list<string>::const_iterator start = filesToAnalyse.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   602
		for(unsigned int i=0; i < filesToAnalyse.size(); i++, start++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   603
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   604
			if(!filefound[i])
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   605
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   606
				list<string>::const_iterator mFiles = aMacroFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   607
				for(;mFiles != aMacroFiles.end();mFiles++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   608
					if( toLowerCaseWin(*start) == *mFiles )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   609
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   610
						filefound[i] = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   611
						break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   612
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   613
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   614
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   615
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   616
	return filefound;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   617
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   618
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   619
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   620
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   621
// BBCAnalyser::preAnalyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   622
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   623
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   624
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   625
void BBCPreAnalysis::preAnalyse(HANodeIterator rootnode,const list<string> & filesToAnalyse, bool baseline)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   626
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   627
    short nodetype = rootnode->getNodeType();    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   628
    assert(nodetype == DOMNode::ELEMENT_NODE);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   629
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   630
    //First generate the file maps	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   631
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   632
    DEBUG_PRINT("****************preAnalyse: Generating file maps*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   633
    DEBUG_STUFF(time_t starttime = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   634
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   635
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   636
    DOMNodeList* childs = rootnode.GetElementsByTagName(KXMLFileString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   637
    XMLSize_t childcount = childs->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   638
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   639
    DEBUG_PRINT("preAnalyseGenerateMaps: Files to analyse: ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   640
    DEBUG_PRINT(childcount)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   641
    DEBUG_PRINT("\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   642
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   643
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   644
    unsigned int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   645
    for (i = 0; i < childcount; ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   646
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   647
        DOMNode* child = childs->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   648
        HANodeIterator childit(rootnode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   649
        childit.current = child;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   650
        bool filetoanalyse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   651
        const XMLCh* filename = childit.GetAttribute(KXMLNameString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   652
        list<string>::const_iterator it = filesToAnalyse.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   653
        int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   654
        for (;it != filesToAnalyse.end(); ++it)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   655
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   656
            if ( CompareFileNames((*it),toString(filename)) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   657
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   658
                filetoanalyse = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   659
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   660
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   661
            ++i;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   662
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   663
        childit.IndexFileNode(filetoanalyse);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   664
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   665
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   666
    DEBUG_PRINT("****************preAnalyse: Generating file maps END*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   667
    DEBUG_STUFF(time_t endtime = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   668
    DEBUG_STUFF(time_t runningtime = endtime - starttime;)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   669
    DEBUG_PRINT("ELAPSED TIME: ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   670
    DEBUG_PRINT((long)runningtime)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   671
    DEBUG_PRINT("\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   672
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   673
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   674
    preAnalyseGenerateMaps(rootnode,baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   675
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   676
    //rootnode.iNodeIndex.DumpTables();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   677
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   678
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   679
    DEBUG_PRINT("****************preAnalyse: Preanalysing classes*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   680
    DEBUG_STUFF(time_t starttime2 = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   681
    DEBUG_PRINT("preAnalyse: Nodes to analyse: ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   682
    DEBUG_PRINT(childcount)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   683
    DEBUG_PRINT("\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   684
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   685
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   686
    DOMDocument * doc =  rootnode->getOwnerDocument();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   687
    DOMNodeIterator * domit = doc->createNodeIterator (rootnode.current,DOMNodeFilter::SHOW_ELEMENT, NULL, true);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   688
    DOMNode * it = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   689
    while ( NULL != (it = domit->nextNode()) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   690
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   691
        HANodeIterator childit(rootnode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   692
        childit.current = it;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   693
#ifdef _DEBUG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   694
        // printNode(childit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   695
        // Keep commented, too much stuff to print
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   696
#endif      
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   697
        const XMLCh * nodename = childit->getNodeName();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   698
        if ( DOMNode::ELEMENT_NODE == childit->getNodeType() && childit.toBeAnalysed() && 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   699
             ( Equals(nodename,KXMLClassString) || Equals(nodename,KXMLStructString)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   700
			 || Equals(nodename,KXMLUnionString))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   701
           )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   702
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   703
            preAnalyseClass(childit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   704
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   705
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   706
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   707
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   708
    DEBUG_PRINT("****************preAnalyse: Preanalysing classes END*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   709
    DEBUG_STUFF(time_t endtime2 = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   710
    DEBUG_STUFF(time_t runningtime2 = endtime2 - starttime2;)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   711
    DEBUG_PRINT("ELAPSED TIME: ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   712
    DEBUG_PRINT((long)runningtime2)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   713
    DEBUG_PRINT("\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   714
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   715
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   716
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   717
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   718
// BBCAnalyser::nodeAnalyseTrees
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   719
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   720
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   721
int BBCAnalyser::nodeAnalyseTrees(HANodeIterator baseline, HANodeIterator current,const list< pair<string,string> >& filesToAnalyse)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   722
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   723
    //Find out the files to be processed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   724
    short nodetype = baseline->getNodeType();    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   725
    assert(nodetype == DOMNode::ELEMENT_NODE);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   726
    nodetype = current->getNodeType();    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   727
    assert(nodetype == DOMNode::ELEMENT_NODE);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   728
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   729
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   730
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   731
    DOMDocument * doc =  baseline->getOwnerDocument();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   732
    DOMNodeIterator * domit = doc->createNodeIterator (baseline.current,DOMNodeFilter::SHOW_ELEMENT, NULL, true);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   733
    DOMNode * it = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   734
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   735
    while ( NULL != (it = domit->nextNode()) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   736
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   737
        HANodeIterator childit(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   738
        childit.current = it;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   739
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   740
         if (IsNamedNode(childit) && IsProperNode(childit) && childit.toBeAnalysed())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   741
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   742
            if ( !CheckAccessibility(childit) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   743
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   744
                //The node is not visible, so no need to analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   745
                continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   746
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   747
            HANodeIterator currentit(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   748
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   749
            const XMLCh* name = childit.GetAttribute(KXMLNameString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   750
            if ( StartsWith(name,KXMLInternalNamePrefix) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   751
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   752
                //Skip compiler generated pseudo elements
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   753
                continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   754
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   755
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   756
            const XMLCh* id = childit.GetAttribute(KXMLIdString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   757
            DEBUG_PRINT("Analysing:")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   758
            if ( name )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   759
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   760
                DEBUG_PRINT_XMLCh(name)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   761
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   762
            if ( id )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   763
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   764
                DEBUG_PRINT(":")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   765
                DEBUG_PRINT_XMLCh(id)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   766
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   767
            DEBUG_PRINT("\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   768
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   769
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   770
            NodeAnalysis::Constructor constructorfunction = FindNodeAnalysisConstructor(childit->getNodeName());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   771
            NodeAnalysis * analyser = constructorfunction();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   772
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   773
            ret += analyser->FindNodeAndAnalyse(childit,currentit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   774
            delete analyser;			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   775
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   776
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   777
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   778
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   779
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   780
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   781
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   782
// BBCAnalyser::analyseTrees
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   783
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   784
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   785
int BBCAnalyser::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
   786
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   787
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   788
    DEBUG_PRINT("****************Analyse: ANALYSE starts*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   789
    DEBUG_STUFF(time_t starttime = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   790
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   791
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   792
    iBaselineIndex.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   793
    iCurrentIndex.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   794
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   795
    HANodeIterator baselineit(baseline,iBaselineIndex,iReport, filesToAnalyse, true );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   796
    HANodeIterator currentit(current,iCurrentIndex,iReport, filesToAnalyse, false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   797
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   798
    list<string> basefiles, currentfiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   799
    list< pair<string,string> >::const_iterator it = filesToAnalyse.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   800
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   801
    for (; it != filesToAnalyse.end(); ++it)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   802
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   803
        basefiles.push_back((*it).first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   804
        currentfiles.push_back((*it).second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   805
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   806
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   807
    preAnalysis.preAnalyse(baselineit,basefiles,true);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   808
    preAnalysis.preAnalyse(currentit,currentfiles,false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   809
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   810
    vector<bool> bfilefound;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   811
    bfilefound = checkForEmptyFiles(baselineit,basefiles,aMacroFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   812
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   813
    vector<bool> cfilefound;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   814
    cfilefound = checkForEmptyFiles(currentit,currentfiles,aMacroFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   815
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   816
    list<pair<string,string> >::const_iterator fileit = filesToAnalyse.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   817
    size_t i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   818
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   819
    for (i=0;i < bfilefound.size(); ++i,++fileit)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   820
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   821
        if ( !cfilefound[i] && !bfilefound[i] )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   822
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   823
            // Serious problem, the analysed file is not in the GCCXML output
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   824
            iReport.addIssue(fileit->first,"", EIssueIdentityFile, EIssueTypeEmpty, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   825
            BCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), SCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), "", 0, "",fileit->second, "");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   826
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   827
        else if ( !bfilefound[i] )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   828
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   829
            // Serious problem, the analysed file is not in the GCCXML output
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   830
            iReport.addIssue(fileit->first,"", EIssueIdentityFile, EIssueTypeEmpty, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   831
            BCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), SCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), "", 0, "",fileit->second, "");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   832
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   833
        else if ( !cfilefound[i])
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   834
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   835
            // Serious problem, the analysed file is not in the GCCXML output
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   836
            iReport.addIssue(fileit->first,"", EIssueIdentityFile, EIssueTypeEmpty, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   837
				    BCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), SCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), "", 0, "",fileit->second, "");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   838
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   839
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   840
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   841
    //baselineit.iNodeIndex.DumpTables();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   842
    //currentit.iNodeIndex.DumpTables();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   843
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   844
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   845
    DEBUG_PRINT("****************nodeAnalyse: Analysing*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   846
    DEBUG_STUFF(time_t starttime2 = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   847
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   848
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   849
    int ret = nodeAnalyseTrees(baselineit, currentit, filesToAnalyse);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   850
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   851
    DEBUG_STUFF(time_t endtime2 = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   852
    DEBUG_STUFF(time_t runningtime2 = endtime2- starttime2;)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   853
    DEBUG_PRINT("****************nodeAnalyse: Analysing END*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   854
    DEBUG_PRINT("ELAPSED TIME: ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   855
    DEBUG_PRINT((long)runningtime2)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   856
    DEBUG_PRINT("\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   857
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   858
    DEBUG_PRINT("****************Analyse: ANALYSE END*********************\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   859
    DEBUG_STUFF(time_t endtime = time(NULL);)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   860
    DEBUG_STUFF(time_t runningtime = endtime - starttime;)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   861
    DEBUG_PRINT("ELAPSED TIME: ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   862
    DEBUG_PRINT((long)runningtime)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   863
    DEBUG_PRINT("\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   864
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   865
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   866
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   867
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   868
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   869
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   870
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   871
// BBCAnalyser::BBCAnalyser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   872
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   873
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   874
BBCAnalyser::BBCAnalyser(ReportGenerator & report):
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   875
iReport(report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   876
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   877
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   878
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   879
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   880
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   881
// NodeAnalysis::findNode
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   882
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   883
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   884
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   885
DOMNode* NodeAnalysis::findNode(HANodeIterator nodetofind, HANodeIterator findfrom )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   886
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   887
    DOMNode * ret = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   888
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   889
    pair<const XMLCh*,const XMLCh*> fqname = nodetofind.GetFullyQualifiedName();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   890
#ifndef NO_DBG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   891
    DEBUG_PRINT("Finding node from current three with fqname: ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   892
    DEBUG_PRINT_XMLCh(fqname.first)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   893
    DEBUG_PRINT(" ... ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   894
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   895
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   896
    if ( findfrom.FindNodeByName(fqname) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   897
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   898
        ret = findfrom.current;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   899
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   900
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   901
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   902
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   903
///////////////////////////////UnderConstructionNodeAnalysis////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   904
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   905
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   906
// UnderConstructionNodeAnalysis::Construct
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   907
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   908
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   909
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   910
NodeAnalysis* UnderConstructionNodeAnalysis::Construct()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   911
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   912
    return new UnderConstructionNodeAnalysis();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   913
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   914
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   915
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   916
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   917
// UnderConstructionNodeAnalysis::Analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   918
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   919
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   920
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   921
int UnderConstructionNodeAnalysis::Analyse(HANodeIterator baseline,HANodeIterator current, bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   922
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   923
    assert(
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   924
        Equals(baseline->getNodeName(), current->getNodeName())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   925
        );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   926
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   927
    if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   928
    {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   929
        AddIssue<EIssueIdentityFile, EIssueTypeUnderConstruction>(&baseline, baseline,0,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   930
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   931
    return 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   932
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   933
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   934
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   935
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   936
// UnderConstructionNodeAnalysis::FindNodeAndAnalyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   937
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   938
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   939
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   940
int UnderConstructionNodeAnalysis::FindNodeAndAnalyse(HANodeIterator baseline,HANodeIterator current)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   941
{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   942
    AddIssue<EIssueIdentityFile,EIssueTypeUnderConstruction>(&baseline,baseline,0,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   943
    return 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   944
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   945
////////////////////////////////////////////////////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   946
///////////////////////////////VariableNodeAnalysis/////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   947
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   948
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   949
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   950
// VariableNodeAnalysis::Construct
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   951
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   952
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   953
NodeAnalysis* VariableNodeAnalysis::Construct()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   954
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   955
    return new VariableNodeAnalysis();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   956
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   957
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   958
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   959
// VariableNodeAnalysis::FindNodeAndAnalyse 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   960
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   961
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   962
int VariableNodeAnalysis::FindNodeAndAnalyse(HANodeIterator baseline,HANodeIterator current)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   963
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   964
    DOMNode* node = NodeAnalysis::findNode(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   965
    if ( !node )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   966
    {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   967
        AddIssue<EIssueIdentityVariable, EIssueTypeRemoval>(&baseline, baseline,0,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   968
        return 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   969
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   970
    current.current = node;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   971
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   972
    return this->Analyse(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   973
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   974
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   975
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   976
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   977
// VariableNodeAnalysis::Analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   978
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   979
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   980
int VariableNodeAnalysis::Analyse(HANodeIterator baseline,HANodeIterator current, bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   981
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   982
    assert( Equals(KXMLVariableString, baseline->getNodeName()) &&
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   983
        Equals(KXMLVariableString, current->getNodeName()) &&
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   984
        Equals(baseline->getNodeName(), current->getNodeName())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   985
        );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   986
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   987
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   988
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   989
	int lineNo = 0;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   990
	string issueLoc;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   991
	const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   992
	lineNo = atoi(toString(lineNumber).c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   993
	const XMLCh* fnameNode= current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   994
	if( fnameNode!= NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   995
	{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   996
		HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   997
		bool ret1 = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   998
		issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   999
	}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1000
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1001
    if ( IsAnonymousType(baseline) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1002
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1003
        //We need to to comparison between the baseline type and current type anonymously
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1004
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1005
        HANodeIterator baselinetypeit(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1006
        HANodeIterator currenttypeit(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1007
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1008
        const XMLCh* baselinetypeid = baseline.GetAttribute(KXMLTypeString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1009
        const XMLCh* currenttypeid = current.GetAttribute(KXMLTypeString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1010
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1011
        assert( baselinetypeid && currenttypeid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1012
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1013
        bool ret1 = baselinetypeit.FindNodeById(baselinetypeid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1014
        bool ret2 = currenttypeit.FindNodeById(currenttypeid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1015
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1016
        assert(ret1 && ret2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1017
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1018
        HANodeIterator baselinetypeanonit(baselinetypeit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1019
        HANodeIterator currenttypeanonit(currenttypeit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1020
        ret1 = FindAnonymousType(baselinetypeit,baselinetypeanonit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1021
        ret2 = FindAnonymousType(currenttypeit,currenttypeanonit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1022
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1023
        assert(ret1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1024
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1025
        if ( !ret2 || !baselinetypeanonit.IsSameNodeType(currenttypeanonit) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1026
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1027
            if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1028
            {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1029
                AddIssue<EIssueIdentityVariable, EIssueTypeChangeInType>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1030
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1031
            ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1032
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1033
        else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1034
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1035
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1036
            NodeAnalysis::Constructor constructorfunction = FindNodeAnalysisConstructor(baselinetypeanonit->getNodeName());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1037
            NodeAnalysis * analyser = constructorfunction();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1038
            int ret = analyser->Analyse(baselinetypeanonit,currenttypeanonit,false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1039
            if ( ret > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1040
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1041
                if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1042
                {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1043
                    AddIssue<EIssueIdentityVariable, EIssueTypeChangeInType>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1044
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1045
                ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1046
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1047
            delete analyser;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1048
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1049
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1050
    else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1051
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1052
        //{KXMLTypeString,EIdAttribute}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1053
        if ( !CompareAttributes(baseline,current,KXMLTypeString,ETypeAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1054
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1055
            if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1056
            {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1057
                AddIssue<EIssueIdentityVariable, EIssueTypeChangeInType>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1058
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1059
            ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1060
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1061
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1062
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1063
    //{KXMLInitString,EOptionalSimpleAttribute}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1064
    if ( !CompareAttributes(baseline,current,KXMLInitString,EOptionalSimpleAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1065
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1066
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1067
        {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1068
            AddIssue<EIssueIdentityVariable, EIssueTypeChangeInInitialisation>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1069
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1070
        ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1071
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1072
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1073
	if (!CheckAccessModifier(baseline,current))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1074
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1075
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1076
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1077
            //AddIssue<iIdentity,EIssueTypeAccess>(&baseline, current);
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1078
			AddIssue<EIssueIdentityVariable,EIssueTypeAccess>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1079
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1080
        ret += 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1081
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1082
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1083
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1084
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1085
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1086
////////////////////////////////////////////////////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1087
///////////////////////////////EnumNodeAnalysis/////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1088
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1089
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1090
// EnumNodeAnalysis::Construct
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1091
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1092
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1093
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1094
NodeAnalysis* EnumNodeAnalysis::Construct()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1095
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1096
    return new EnumNodeAnalysis;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1097
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1098
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1099
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1100
// EnumNodeAnalysis::FindNodeAndAnalyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1101
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1102
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1103
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1104
int EnumNodeAnalysis::FindNodeAndAnalyse(HANodeIterator baseline,HANodeIterator current)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1105
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1106
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1107
    if ( IsAnonymous(baseline) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1108
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1109
        DOMNodeList* enumchilds = baseline.GetElementsByTagName(KXMLEnumValueString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1110
        XMLSize_t enumchildcount = enumchilds->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1111
        unsigned int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1112
        for (i = 0; i < enumchildcount; ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1113
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1114
			int lineNo = 0;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1115
			string issueLoc;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1116
            HANodeIterator enumchildit(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1117
            enumchildit.current = enumchilds->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1118
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1119
            DOMNode* node = NodeAnalysis::findNode(enumchildit,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1120
            if ( !node )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1121
            {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1122
                AddIssue<EIssueIdentityEnumerationValue,EIssueTypeRemoval>(&enumchildit, enumchildit, 0, "", baseline.GetAttribute(KXMLFileIdString));
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1123
                ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1124
                continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1125
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1126
            current.current = node;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1127
			DOMNode* parentnode = node->getParentNode();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1128
			const XMLCh* lineNumber = GetAttribute(parentnode,KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1129
			lineNo = atoi(toString(lineNumber).c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1130
			const XMLCh* fnameNode= current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1131
			if( fnameNode!= NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1132
			{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1133
				HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1134
				bool ret1 = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1135
				issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1136
			}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1137
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1138
            if ( !CheckEnumValue(enumchildit,current) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1139
            {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1140
                AddIssue<EIssueIdentityEnumerationValue,EIssueTypeChangeInInitialisation>(&enumchildit, current, lineNo, issueLoc,baseline.GetAttribute(KXMLFileIdString));
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1141
                ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1142
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1143
			HANodeIterator currentparent(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1144
			if ( FindParentContext(current, currentparent))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1145
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1146
				if ( !CheckAccessModifier(baseline,currentparent) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1147
				{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1148
					AddIssue<EIssueIdentityEnumerationValue,EIssueTypeAccess>(&enumchildit, current, lineNo, issueLoc, baseline.GetAttribute(KXMLFileIdString));
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1149
					++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1150
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1151
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1152
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1153
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1154
    else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1155
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1156
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1157
         DOMNode* node = NodeAnalysis::findNode(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1158
        if ( !node )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1159
        {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1160
            AddIssue<EIssueIdentityEnumeration,EIssueTypeRemoval>(&baseline, baseline,0,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1161
            return 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1162
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1163
        current.current = node;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1164
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1165
        ret += this->Analyse(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1166
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1167
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1168
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1169
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1170
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1171
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1172
// EnumNodeAnalysis::CheckEnumValue
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1173
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1174
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1175
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1176
bool EnumNodeAnalysis::CheckEnumValue(HANodeIterator baseline,HANodeIterator current)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1177
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1178
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1179
    return CompareNodes(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1180
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1181
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1182
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1183
// EnumNodeAnalysis::Analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1184
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1185
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1186
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1187
int EnumNodeAnalysis::Analyse(HANodeIterator baseline,HANodeIterator current, bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1188
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1189
    assert( Equals(KXMLEnumerationString, baseline->getNodeName()) &&
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1190
            Equals(KXMLEnumerationString, current->getNodeName()) &&
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1191
            Equals(baseline->getNodeName(), current->getNodeName())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1192
            );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1193
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1194
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1195
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1196
	int lineNo = 0;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1197
	string issueLoc;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1198
	const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1199
	lineNo = atoi(toString(lineNumber).c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1200
	const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1201
	if( fnameNode!= NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1202
	{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1203
		HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1204
		bool ret1 = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1205
		issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1206
	}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1207
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1208
    //{KXMLAlignString,ESimpleAttribute}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1209
    if ( !CompareAttributes(baseline,current,KXMLAlignString,ESimpleAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1210
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1211
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1212
        {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1213
            AddIssue<EIssueIdentityEnumeration,EIssueTypeAlign>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1214
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1215
        ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1216
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1217
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1218
    //{KXMLSizeString,ESimpleAttribute}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1219
    if ( !CompareAttributes(baseline,current,KXMLSizeString,ESimpleAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1220
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1221
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1222
        {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1223
            AddIssue<EIssueIdentityEnumeration,EIssueTypeSize>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1224
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1225
        ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1226
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1227
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1228
	if (!CheckAccessModifier(baseline,current))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1229
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1230
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1231
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1232
            //AddIssue<iIdentity,EIssueTypeAccess>(&baseline, current);
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1233
			AddIssue<EIssueIdentityEnumeration, EIssueTypeAccess>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1234
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1235
        ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1236
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1237
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1238
    //Check the enum values
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1239
    DOMNodeList* baselinechilds = baseline.GetElementsByTagName(KXMLEnumValueString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1240
    DOMNodeList* currentchilds = current.GetElementsByTagName(KXMLEnumValueString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1241
   
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1242
    XMLSize_t baselinechildcount = baselinechilds->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1243
    XMLSize_t currentchildcount = currentchilds->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1244
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1245
    unsigned int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1246
    for (i = 0; i < baselinechildcount; ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1247
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1248
        HANodeIterator baselineit(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1249
        baselineit.current = baselinechilds->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1250
        unsigned int ii = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1251
        for (ii = 0; ii < currentchildcount; ++ii)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1252
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1253
            HANodeIterator currentit(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1254
            currentit.current = currentchilds->item(ii);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1255
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1256
            if ( CompareAttributes(baselineit,currentit,KXMLNameString,ESimpleAttribute)  )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1257
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1258
                if ( !CompareAttributes(baselineit,currentit,KXMLInitString,ESimpleAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1259
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1260
                    if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1261
                    {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1262
                        AddIssue<EIssueIdentityEnumeration,EIssueTypeChange>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1263
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1264
                    ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1265
                    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1266
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1267
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1268
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1269
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1270
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1271
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1272
        if ( currentchildcount == ii )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1273
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1274
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1275
            if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1276
            {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1277
				AddIssue<EIssueIdentityEnumerationValue,EIssueTypeRemoval>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1278
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1279
            ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1280
            return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1281
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1282
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1283
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1284
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1285
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1286
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1287
////////////////////////////////////////////////////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1288
///////////////////////////////FunctionNodeAnalysis/////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1289
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1290
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1291
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1292
// FunctionNodeAnalysis::FunctionNodeAnalysis
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1293
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1294
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1295
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1296
FunctionNodeAnalysis::FunctionNodeAnalysis():
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1297
iFuncType(EIssueIdentityExportedFunction)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1298
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1299
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1300
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1301
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1302
// FunctionNodeAnalysis::Construct
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1303
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1304
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1305
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1306
NodeAnalysis* FunctionNodeAnalysis::Construct()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1307
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1308
    return new FunctionNodeAnalysis;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1309
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1310
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1311
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1312
// FunctionNodeAnalysis::FindNodeAndAnalyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1313
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1314
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1315
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1316
int FunctionNodeAnalysis::FindNodeAndAnalyse(HANodeIterator baseline,HANodeIterator current)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1317
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1318
    if ( baseline.CheckForBooleanAttribute(KXMLInlineString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1319
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1320
        iFuncType = EIssueIdentityInlineFunction;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1321
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1322
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1323
    //Check first if the function is exported
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1324
    const XMLCh* attributeValue = baseline.GetAttribute(KXMLAttributeString);                            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1325
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1326
    if ( (iFuncType == EIssueIdentityInlineFunction) || (attributeValue && Equals(attributeValue,KXMLExportedString)) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1327
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1328
        DOMNode* node = NodeAnalysis::findNode(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1329
        if ( !node )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1330
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1331
			//AddIssue<iFuncType,EIssueTypeRemoval>(&baseline, baseline);
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1332
            AddIssueFunction<EIssueTypeRemoval>(&baseline,iFuncType,baseline,0,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1333
            return 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1334
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1335
        current.current = node;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1336
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1337
        return this->Analyse(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1338
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1339
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1340
    return 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1341
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1342
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1343
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1344
// FunctionNodeAnalysis::Analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1345
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1346
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1347
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1348
int FunctionNodeAnalysis::Analyse(HANodeIterator baseline,HANodeIterator current, bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1349
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1350
    assert( 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1351
    Equals(baseline->getNodeName(), current->getNodeName())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1352
    );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1353
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1354
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1355
//<!ELEMENT FunctionType (Argument | Ellipsis)*>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1356
//<!ATTLIST FunctionType attributes CDATA #IMPLIED>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1357
//<!ATTLIST FunctionType id ID #REQUIRED>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1358
//<!ATTLIST FunctionType returns IDREF #REQUIRED>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1359
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1360
	int lineNo = 0;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1361
	string issueLoc;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1362
	const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1363
	lineNo = atoi(toString(lineNumber).c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1364
	const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1365
	if( fnameNode!= NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1366
	{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1367
		HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1368
		bool ret1 = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1369
		issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1370
	}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1371
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1372
    const XMLCh* attributeValue = current.GetAttribute(KXMLAttributeString);                            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1373
    if (
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1374
        (
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1375
            (iFuncType == EIssueIdentityInlineFunction) && !current.CheckForBooleanAttribute(KXMLInlineString) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1376
        ) ||
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1377
        ( 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1378
            (iFuncType == EIssueIdentityExportedFunction) && (!attributeValue || !Equals(attributeValue,KXMLExportedString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1379
            &&
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1380
            (!current.CheckForBooleanAttribute(KXMLVirtualString))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1381
        )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1382
       )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1383
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1384
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1385
        {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1386
			AddIssueFunction<EIssueTypeRemoval>(&baseline,iFuncType,baseline,0,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1387
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1388
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1389
        ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1390
        return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1391
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1392
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1393
    string basefuncsig = GenerateFunctionSignature(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1394
    string currentfuncsig = GenerateFunctionSignature(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1395
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1396
    if ( basefuncsig != currentfuncsig )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1397
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1398
        ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1399
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1400
        {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1401
			AddIssueFunction<EIssueTypeParam>(&baseline,iFuncType,current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1402
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1403
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1404
    else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1405
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1406
        //Check also the default parameter values
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1407
        DOMElement * baselineelement = static_cast<DOMElement*>(baseline.current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1408
        DOMNodeList* baselinechilds = baselineelement->getChildNodes();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1409
        DOMElement * currentelement = static_cast<DOMElement*>(current.current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1410
        DOMNodeList* currentchilds = currentelement->getChildNodes();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1411
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1412
        XMLSize_t childcount = baselinechilds->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1413
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1414
        unsigned int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1415
        for (i = 0; i < childcount; ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1416
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1417
            DOMNode* baselinechild = baselinechilds->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1418
            HANodeIterator baselinechildit(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1419
            baselinechildit.current = baselinechild;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1420
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1421
            DOMNode* currentchild = currentchilds->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1422
            HANodeIterator currentchildit(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1423
            currentchildit.current = currentchild;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1424
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1425
            short nodetype = baselinechildit->getNodeType();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1426
            if (nodetype == DOMNode::ELEMENT_NODE)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1427
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1428
				const XMLCh * baselinesize = FindAttributeValueForType(baselinechildit,KXMLSizeString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1429
				const XMLCh * currentsize = FindAttributeValueForType(currentchildit,KXMLSizeString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1430
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1431
				const XMLCh * baselinealign = FindAttributeValueForType(baselinechildit,KXMLAlignString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1432
				const XMLCh * currentalign = FindAttributeValueForType(currentchildit,KXMLAlignString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1433
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1434
				if ( !baselinesize )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1435
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1436
					baselinesize = baselinealign;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1437
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1438
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1439
				if ( !currentsize )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1440
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1441
					currentsize = currentalign;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1442
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1443
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1444
				if ( !Equals(baselinesize,currentsize) || !Equals(baselinealign, currentalign) )
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1445
				{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1446
					++ret;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1447
					if (report)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1448
					{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1449
						//AddIssue<iFuncType,EIssueTypeParam>(&baseline, current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1450
						AddIssueFunction<EIssueTypeParam>(&baseline,iFuncType,current,lineNo,issueLoc);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1451
					}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1452
					break;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1453
				}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1454
				// if default value is changed then it should be reported as informative
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1455
				if(!CompareAttributes(baselinechildit,currentchildit,KXMLDefaultString,EOptionalSimpleAttribute))
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1456
				{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1457
					++ret;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1458
					if (report)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1459
					{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1460
						AddIssueFunction<EIssueTypeDefaultParam>(&baseline,iFuncType,current,lineNo,issueLoc);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1461
					}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1462
					break;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1463
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1464
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1465
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1466
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1467
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1468
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1469
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1470
    if ( !CompareAttributes(baseline,current,KXMLReturnsString,EOptionalTypeAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1471
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1472
        ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1473
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1474
        {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1475
			AddIssueFunction<EIssueTypeReturn>(&baseline,iFuncType,current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1476
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1477
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1478
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1479
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1480
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1481
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1482
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1483
////////////////////////////////////////////////////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1484
///////////////////////////////TypedefNodeAnalysis/////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1485
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1486
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1487
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1488
// TypedefNodeAnalysis::Construct
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1489
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1490
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1491
NodeAnalysis* TypedefNodeAnalysis::Construct()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1492
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1493
    return new TypedefNodeAnalysis;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1494
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1495
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1496
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1497
// TypedefNodeAnalysis::FindNodeAndAnalyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1498
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1499
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1500
int TypedefNodeAnalysis::FindNodeAndAnalyse(HANodeIterator baseline,HANodeIterator current)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1501
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1502
     DOMNode* node = NodeAnalysis::findNode(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1503
    if ( !node )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1504
    {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1505
        AddIssue<EIssueIdentityTypedef,EIssueTypeRemoval>(&baseline, baseline,0,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1506
        return 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1507
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1508
    current.current = node;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1509
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1510
    return this->Analyse(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1511
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1512
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1513
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1514
// TypedefNodeAnalysis::Analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1515
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1516
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1517
int TypedefNodeAnalysis::Analyse(HANodeIterator baseline,HANodeIterator current, bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1518
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1519
    assert( Equals(KXMLTypedefString, baseline->getNodeName()) &&
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1520
    Equals(KXMLTypedefString, current->getNodeName()) &&
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1521
    Equals(baseline->getNodeName(), current->getNodeName())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1522
    );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1523
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1524
  //<Typedef id="_9" name="TOmaInt" type="_8" context="_1" location="f0:108" file="f0" line="108"/>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1525
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1526
	int lineNo = 0;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1527
	string issueLoc;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1528
	const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1529
	lineNo = atoi(toString(lineNumber).c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1530
	const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1531
	if( fnameNode != NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1532
	{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1533
		HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1534
		bool retval= fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1535
		issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1536
	}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1537
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1538
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1539
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1540
    if ( !CompareAttributes(baseline,current,KXMLNameString,ESimpleAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1541
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1542
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1543
        {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1544
            AddIssue<EIssueIdentityTypedef,EIssueTypeChange>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1545
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1546
        ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1547
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1548
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1549
    if ( !CompareAttributes(baseline,current,KXMLTypeString,ETypeAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1550
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1551
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1552
        {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1553
            AddIssue<EIssueIdentityTypedef,EIssueTypeChange>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1554
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1555
        ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1556
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1557
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1558
    HANodeIterator baselinetypeit(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1559
    HANodeIterator currenttypeit(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1560
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1561
    const XMLCh* baselinetypeid = baseline.GetAttribute(KXMLTypeString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1562
    const XMLCh* currenttypeid = current.GetAttribute(KXMLTypeString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1563
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1564
    assert( baselinetypeid && currenttypeid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1565
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1566
    bool ret1 = baselinetypeit.FindNodeById(baselinetypeid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1567
    bool ret2 = currenttypeit.FindNodeById(currenttypeid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1568
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1569
    assert(ret1 && ret2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1570
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1571
	if ( IsFunction(baselinetypeit) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1572
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1573
		if ( !CompareAttributes(baselinetypeit,currenttypeit,KXMLReturnsString,EOptionalTypeAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1574
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1575
			if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1576
			{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1577
				AddIssue<EIssueIdentityTypedef,EIssueTypeChange>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1578
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1579
			++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1580
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1581
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1582
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1583
	if (!CheckAccessModifier(baseline,current))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1584
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1585
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1586
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1587
            //AddIssue<iIdentity,EIssueTypeAccess>(&baseline, current);
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1588
            AddIssue<EIssueIdentityTypedef,EIssueTypeAccess>(&baseline, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1589
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1590
        ret += 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1591
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1592
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1593
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1594
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1595
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1596
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1597
////////////////////////////////////////////////////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1598
///////////////////////////////OperatorFunctionNodeAnalysis/////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1599
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1600
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1601
// OperatorFunctionNodeAnalysis::Construct
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1602
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1603
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1604
NodeAnalysis* OperatorFunctionNodeAnalysis::Construct()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1605
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1606
    return new OperatorFunctionNodeAnalysis;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1607
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1608
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1609
////////////////////////////////////////////////////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1610
///////////////////////////////UnionNodeAnalysis////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1611
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1612
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1613
// UnionNodeAnalysis::Construct
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1614
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1615
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1616
NodeAnalysis* UnionNodeAnalysis::Construct()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1617
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1618
    return new UnionNodeAnalysis;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1619
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1620
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1621
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1622
// UnionNodeAnalysis::UnionNodeAnalysis
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1623
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1624
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1625
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1626
UnionNodeAnalysis::UnionNodeAnalysis()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1627
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1628
	iIdentity = EIssueIdentityUnion;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1629
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1630
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1631
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1632
// UnionNodeAnalysis::compareBaseSizes
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1633
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1634
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1635
int UnionNodeAnalysis::compareBaseSizes(HANodeIterator baseline, HANodeIterator current, const NodeIndex::dtable_t& bfields, const NodeIndex::dtable_t& cfields, bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1636
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1637
	//Not meaningful in union as it can not be derived
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1638
	return 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1639
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1640
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1641
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1642
// UnionNodeAnalysis::FindNodeAndAnalyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1643
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1644
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1645
int UnionNodeAnalysis::FindNodeAndAnalyse(HANodeIterator baseline,HANodeIterator current)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1646
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1647
    //First check to see if this is an anonymous Union
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1648
    const XMLCh* name = baseline.GetAttribute(KXMLNameString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1649
    if ( !name )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1650
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1651
        //This is anonymous union and does not need to be analysed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1652
        return 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1653
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1654
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1655
    if ( Equals(name,KXMLEmptyString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1656
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1657
        return 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1658
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1659
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1660
    DOMNode* node = NodeAnalysis::findNode(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1661
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1662
    if ( !node )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1663
    {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1664
        AddIssue<EIssueIdentityUnion,EIssueTypeRemoval>(&baseline, baseline,0,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1665
        return 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1666
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1667
    current.current = node;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1668
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1669
    return this->Analyse(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1670
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1671
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1672
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1673
// UnionNodeAnalysis::compareVirtualFunctions
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1674
// The union can not have virtual functions
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1675
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1676
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1677
int UnionNodeAnalysis::compareVirtualFunctions(HANodeIterator baseline,HANodeIterator current, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1678
                                                  const vector<DOMNode*>& bvirtualMethods, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1679
												  const vector<DOMNode*>& cvirtualMethods, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1680
                                                  bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1681
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1682
	return 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1683
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1684
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1685
////////////////////////////////////////////////////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1686
///////////////////////////////ClassNodeAnalysis////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1687
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1688
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1689
// printMember
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1690
// Debug stuff
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1691
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1692
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1693
void printMember(HANodeIterator member)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1694
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1695
    DEBUG_PRINT_XMLCh(member->getNodeName());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1696
    DEBUG_PRINT(":");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1697
    const XMLCh * memname = member.GetAttribute(KXMLNameString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1698
    if (memname)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1699
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1700
        DEBUG_PRINT_XMLCh(memname);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1701
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1702
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1703
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1704
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1705
// ClassNodeAnalysis::compareMethodsSignature
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1706
// Compare baseline and current methods and return false if they do not match.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1707
// Uses additional comparator object if available.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1708
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1709
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1710
bool ClassNodeAnalysis::compareMethodsSignature(HANodeIterator basemethod,HANodeIterator currentmethod, const NodeTypeComparator& comparator)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1711
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1712
    short basenodetype = basemethod->getNodeType();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1713
    short currnodetype = currentmethod->getNodeType();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1714
    assert(basenodetype == DOMNode::ELEMENT_NODE && currnodetype == DOMNode::ELEMENT_NODE);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1715
    assert(IsFunction(basemethod) && IsFunction(currentmethod));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1716
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1717
#ifdef _DEBUG
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1718
    string basefuncsig = GenerateFunctionSignature(basemethod);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1719
    string currentfuncsig = GenerateFunctionSignature(currentmethod);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1720
    cout << "   basefuncsig=" << basefuncsig << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1721
    cout << "currentfuncsig=" << currentfuncsig << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1722
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1723
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1724
    if( !Equals(basemethod->getNodeName(), currentmethod->getNodeName() ))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1725
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1726
        return false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1727
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1728
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1729
    const XMLCh* basenameatt = basemethod.GetAttribute(KXMLNameString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1730
    const XMLCh* currnameatt = currentmethod.GetAttribute(KXMLNameString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1731
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1732
    if( !Equals(basenameatt, currnameatt ))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1733
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1734
        return false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1735
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1736
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1737
    DOMElement * basenodeelement = static_cast<DOMElement*>(basemethod.current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1738
    DOMElement * currnodeelement = static_cast<DOMElement*>(currentmethod.current);    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1739
    std::vector<DOMNode*> baseElementNodes;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1740
    std::vector<DOMNode*> currElementNodes;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1741
    GetElementNodes(basemethod, basenodeelement->getChildNodes(), baseElementNodes);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1742
    GetElementNodes(currentmethod, currnodeelement->getChildNodes(), currElementNodes);    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1743
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1744
    if( baseElementNodes.size() != currElementNodes.size() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1745
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1746
        return false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1747
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1748
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1749
    for(size_t i = 0; i < baseElementNodes.size(); ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1750
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1751
        DOMNode* basechild = baseElementNodes[i];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1752
        DOMNode* currchild = currElementNodes[i];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1753
        HANodeIterator basechildit(basemethod);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1754
        HANodeIterator currchildit(currentmethod);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1755
        basechildit.current = basechild;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1756
        currchildit.current = currchild;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1757
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1758
        short basetype = basechildit->getNodeType();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1759
        short currtype = currchildit->getNodeType();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1760
        if( !comparator.CompareParameter(basechildit, currchildit) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1761
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1762
            return false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1763
        }        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1764
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1765
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1766
    if( !comparator.CompareConstness(basemethod, currentmethod) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1767
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1768
        return false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1769
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1770
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1771
    return true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1772
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1773
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1774
// ClassNodeAnalysis::compareMethodsReturn
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1775
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1776
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1777
bool ClassNodeAnalysis::compareMethodsReturn(HANodeIterator basemethod,HANodeIterator currentmethod, NodeTypeComparator& cmp) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1778
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1779
    return cmp.CompareReturnValue(basemethod, currentmethod);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1780
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1781
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1782
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1783
// ClassNodeAnalysis::compareField
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1784
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1785
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1786
int ClassNodeAnalysis::compareField(HANodeIterator baseline, HANodeIterator current, const DataMember& basemember,const DataMember& currentmember, bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1787
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1788
	//<!ATTLIST Field mutable (0 | 1) "0">
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1789
	//<!ATTLIST Field name CDATA #REQUIRED>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1790
	//<!ATTLIST Field offset CDATA #IMPLIED>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1791
	//<!ATTLIST Field type CDATA #REQUIRED>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1792
	int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1793
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1794
	HANodeIterator basefield(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1795
	basefield.current = basemember.iNode;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1796
	HANodeIterator currentfield(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1797
	currentfield.current = currentmember.iNode;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1798
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1799
	int baseoffset = basemember.iOffset;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1800
    int currentoffset = currentmember.iOffset;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1801
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1802
	TIssueIdentity identity = EIssueIdentityField;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1803
	bool accessthroughinline = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1804
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1805
	string issueLoc;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1806
	const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1807
	if( fnameNode!= NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1808
	{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1809
		HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1810
		bool ret1 = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1811
		issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1812
	}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1813
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1814
	if ( !CheckAccessibility(baseline,accessthroughinline,basemember.iAccess) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1815
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1816
		identity = EIssueIdentityFieldInaccessible;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1817
	} else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1818
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1819
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1820
		if ( baseoffset != currentoffset )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1821
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1822
			ret++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1823
			if ( report )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1824
			{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1825
				AddIssueField<EIssueTypeOffset>(&baseline,identity, currentfield,currentmember.iLineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1826
					issueLoc,NULL,basemember);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1827
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1828
			else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1829
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1830
				return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1831
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1832
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1833
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1834
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1835
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1836
	if ( IsAnonymousType(basefield) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1837
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1838
        //We need to do comparison between the baseline type and current type anonymously
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1839
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1840
        HANodeIterator baselinetypeit(basefield);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1841
        HANodeIterator currenttypeit(currentfield);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1842
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1843
        const XMLCh* baselinetypeid = basefield.GetAttribute(KXMLTypeString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1844
        const XMLCh* currenttypeid = currentfield.GetAttribute(KXMLTypeString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1845
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1846
        assert( baselinetypeid && currenttypeid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1847
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1848
        bool ret1 = baselinetypeit.FindNodeById(baselinetypeid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1849
        bool ret2 = currenttypeit.FindNodeById(currenttypeid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1850
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1851
        assert(ret1 && ret2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1852
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1853
        HANodeIterator baselinetypeanonit(baselinetypeit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1854
        HANodeIterator currenttypeanonit(currenttypeit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1855
        ret1 = FindAnonymousType(baselinetypeit,baselinetypeanonit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1856
        ret2 = FindAnonymousType(currenttypeit,currenttypeanonit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1857
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1858
        assert(ret1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1859
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1860
		if ( !ret2 || !baselinetypeanonit.IsSameNodeType(currenttypeanonit) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1861
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1862
			if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1863
			{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1864
				AddIssueField<EIssueTypeChangeInType>(&baseline,identity, currentfield,currentmember.iLineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1865
					issueLoc, NULL,basemember);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1866
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1867
			ret++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1868
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1869
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1870
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1871
			bool report2 = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1872
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1873
            if ( Equals(KXMLUnionString, baselinetypeit->getNodeName()) && Equals(KXMLEmptyString, basefield.GetAttribute(KXMLNameString)) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1874
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1875
                report2 = report;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1876
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1877
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1878
			NodeAnalysis::Constructor constructorfunction = FindNodeAnalysisConstructor(baselinetypeanonit->getNodeName());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1879
			NodeAnalysis * analyser = constructorfunction();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1880
			int retval2 = analyser->Analyse(baselinetypeanonit,currenttypeanonit,report2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1881
			if ( retval2 > 0 && !report2)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1882
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1883
				if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1884
				{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1885
					AddIssueField<EIssueTypeChangeInType>(&baseline,identity, currentfield,currentmember.iLineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1886
						issueLoc,NULL,basemember);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1887
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1888
				++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1889
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1890
            delete analyser;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1891
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1892
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1893
    else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1894
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1895
        //{KXMLTypeString,EIdAttribute}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1896
        if ( !CompareAttributes(basefield,currentfield,KXMLTypeString,ETypeAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1897
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1898
			ret++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1899
			if ( report )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1900
			{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1901
				AddIssueField<EIssueTypeChangeInType>(&baseline,identity, currentfield,currentmember.iLineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1902
					issueLoc,NULL,basemember);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1903
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1904
			else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1905
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1906
				return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1907
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1908
		}else //Check if the size has changed although the the type has remained same
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1909
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1910
			const XMLCh* basefieldsize = GetSize(basefield);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1911
			const XMLCh* currentfieldsize = GetSize(currentfield);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1912
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1913
			if ( !Equals(basefieldsize,currentfieldsize) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1914
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1915
				ret++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1916
				if ( report )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1917
				{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1918
					AddIssueField<EIssueTypeSize>(&baseline,identity, currentfield,currentmember.iLineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1919
						issueLoc,NULL,basemember);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1920
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1921
				else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1922
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1923
					return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1924
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1925
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1926
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1927
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1928
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1929
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1930
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1931
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1932
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1933
// dumpNodeVectordumpNodeVector
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1934
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1935
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1936
void dumpNodeVector(HANodeIterator node,const vector<DOMNode*> & nodes)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1937
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1938
    DEBUG_PRINT("Dumping node vector:\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1939
    vector<DOMNode*>::const_iterator it = nodes.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1940
    for (;it != nodes.end(); ++it)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1941
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1942
        node.current = (*it);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1943
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1944
        DEBUG_PRINT_XMLCh(node->getNodeName())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1945
        const XMLCh * name = node.GetAttribute(KXMLNameString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1946
        if (name)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1947
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1948
        DEBUG_PRINT(":")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1949
        DEBUG_PRINT_XMLCh(name)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1950
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1951
        const XMLCh * id = node.GetAttribute(KXMLIdString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1952
        if (id)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1953
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1954
        DEBUG_PRINT(" with id ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1955
        DEBUG_PRINT_XMLCh(id)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1956
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1957
        DEBUG_PRINT("\n")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1958
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1959
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1960
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1961
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1962
// ClassNodeAnalysis::compareNonvirtualFunctions
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1963
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1964
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1965
int ClassNodeAnalysis::compareNonvirtualFunctions( HANodeIterator baseline,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1966
                                                    HANodeIterator current, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1967
                                                    const vector<DOMNode*>& bexportedMethods,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1968
                                                    const vector<DOMNode*>& cexportedMethods,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1969
                                                    TIssueIdentity identity,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1970
                                                    bool report )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1971
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1972
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1973
	int parentLineNo = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1974
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1975
    // Get default comparator:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1976
    const ComparatorVector& cmps = ComparatorFactory::Instance().GetComparators();       
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1977
    ComparatorVector::const_iterator comparator = cmps.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1978
	const XMLCh* parenLinenumber = current.GetAttribute( KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1979
	parentLineNo = atoi(toString(parenLinenumber).c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1980
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1981
	string parentIssueLoc;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1982
	const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1983
	if(fnameNode != NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1984
	{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1985
		HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1986
		bool ret1 = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1987
		parentIssueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1988
	}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1989
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1990
    // Build method maps for baseline and current platform's classes:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1991
    MethodMatchMap baseMap;    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1992
    vector<DOMNode*>::const_iterator i = bexportedMethods.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1993
    for( ; i != bexportedMethods.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1994
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1995
        baseMap.insert( make_pair(*i, MethodMatchFlags(false, false)));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1996
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1997
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1998
    vector<DOMNode*>::const_iterator j = cexportedMethods.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1999
    MethodMatchMap currMap;    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2000
    for( ; j != cexportedMethods.end(); ++j )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2001
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2002
        currMap.insert( make_pair(*j, MethodMatchFlags(false, false)));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2003
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2004
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2005
    if( comparator != cmps.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2006
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2007
        int comparatorRound = 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2008
        // Call compare function and give the default comparator as a parameter
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2009
        ret = this->compareNonvirtualFunctions(baseline, current, bexportedMethods, cexportedMethods, identity, report, comparator, baseMap, currMap, comparatorRound);        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2010
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2011
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2012
    if( report )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2013
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2014
        MethodMatchMap::iterator baseFunc = baseMap.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2015
        for(; baseFunc != baseMap.end(); ++baseFunc )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2016
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2017
			int lineNo = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2018
			string baseMethodName = toString(GetAttribute(baseFunc->first,KXMLNameString));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2019
			MethodMatchMap::iterator curFunc = currMap.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2020
			for(; curFunc != currMap.end(); ++curFunc )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2021
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2022
				string curMethodName = toString(GetAttribute(curFunc->first,KXMLNameString));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2023
				if (baseMethodName == curMethodName)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2024
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2025
					const XMLCh* linenumber = GetAttribute(curFunc->first, KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2026
					lineNo = atoi(toString(linenumber).c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2027
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2028
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2029
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2030
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2031
            if( baseFunc->second.signatureMatch == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2032
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2033
                // Function signatures do not match
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2034
                HANodeIterator removedMethod(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2035
                removedMethod.current = baseFunc->first;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2036
                AddIssueFunction<EIssueTypeRemoval>(&removedMethod, identity, removedMethod,parentLineNo,parentIssueLoc);            
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2037
                ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2038
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2039
            else if( baseFunc->second.returnValueMatch == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2040
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2041
				// Function return values do not match
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2042
				HANodeIterator removedMethod(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2043
				removedMethod.current = baseFunc->first;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2044
				AddIssueFunction<EIssueTypeReturn>(&removedMethod,identity, removedMethod,lineNo,parentIssueLoc);                
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2045
				++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2046
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2047
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2048
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2049
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2050
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2051
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2052
// ClassNodeAnalysis::compareNonvirtualFunctions
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2053
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2054
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2055
int ClassNodeAnalysis::compareNonvirtualFunctions(
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2056
        HANodeIterator baseline,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2057
        HANodeIterator current, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2058
        const vector<DOMNode*>& bexportedMethods,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2059
        const vector<DOMNode*>& cexportedMethods,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2060
        TIssueIdentity identity,                                          
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2061
        bool report,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2062
        ComparatorVector::const_iterator comparator,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2063
        MethodMatchMap& baseMap,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2064
        MethodMatchMap& currMap,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2065
		int comparatorRound)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2066
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2067
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2068
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2069
	int lineNo1 = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2070
	//const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2071
	//lineNo = atoi(toString(lineNumber).c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2072
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2073
	//Exported methods    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2074
	vector<DOMNode*>::const_iterator bIter = bexportedMethods.begin();        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2075
	for( ; bIter != bexportedMethods.end(); ++bIter )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2076
	{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2077
		int baseCount = 0;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2078
		int currCount = 0;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2079
		MethodMatchMap::iterator baseMapIter = baseMap.find(*bIter);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2080
		assert(baseMapIter != baseMap.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2081
		if( baseMapIter->second.signatureMatch )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2082
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2083
			continue; // This method has already been found and analyzed.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2084
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2085
		HANodeIterator basemethod(baseline);        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2086
		basemethod.current = *bIter;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2087
            
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2088
		vector<DOMNode*>::const_iterator cIter = cexportedMethods.begin(); 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2089
		const XMLCh* baseMathodID = basemethod->getNodeName();
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2090
        const XMLCh* basenameatt;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2091
		const XMLCh* basereturnatt;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2092
		const XMLCh* basemangledatt;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2093
		if(Equals(baseMathodID,KXMLMethodString))
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2094
		{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2095
			basenameatt = basemethod.GetAttribute(KXMLNameString);
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2096
			
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2097
			HANodeIterator baseReturMathod(basemethod);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2098
			bool ret = baseReturMathod.FindNodeById(basemethod.GetAttribute(KXMLReturnsString));
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2099
			basereturnatt = GetActualTypeValue(baseReturMathod);
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2100
			
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2101
			basemangledatt = basemethod.GetAttribute(KXMLMangledString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2102
		}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2103
		for( ; cIter != cexportedMethods.end(); ++cIter)            
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2104
		{                
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2105
			HANodeIterator currentmethod(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2106
			currentmethod.current = *cIter;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2107
			const XMLCh* lineNumber1 = GetAttribute(currentmethod.current,KXMLLineString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2108
			lineNo1 = atoi(toString(lineNumber1).c_str());
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2109
			
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2110
			string issueLoc;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2111
			const XMLCh* fnameNode = currentmethod.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2112
			if( fnameNode!= NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2113
			{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2114
				HANodeIterator fileNode(currentmethod);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2115
				bool retval = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2116
				issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2117
			}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2118
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2119
			MethodMatchMap::iterator currMapIter = currMap.find(*cIter);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2120
            
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2121
			const XMLCh* curMathodID = currentmethod->getNodeName();
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2122
			if(Equals(curMathodID,KXMLMethodString))
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2123
			{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2124
				HANodeIterator curReturMathod(currentmethod);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2125
				bool ret1 = curReturMathod.FindNodeById(currentmethod.GetAttribute(KXMLReturnsString));
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2126
				const XMLCh* curReturnatt = GetActualTypeValue(curReturMathod);
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2127
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2128
				// check for overloaded function, first time matching the name, return type and signature
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2129
				if(	Equals(baseMathodID,KXMLMethodString)&&
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2130
					Equals(basenameatt, currentmethod.GetAttribute(KXMLNameString)) && 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2131
					Equals(basereturnatt, curReturnatt) && 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2132
					Equals(basemangledatt, currentmethod.GetAttribute(KXMLMangledString)) )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2133
				{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2134
					baseCount++;// match found
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2135
				}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2136
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2137
				
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2138
			}			
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2139
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2140
			if( currMapIter != currMap.end() && 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2141
				currMapIter->second.signatureMatch == false &&
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2142
				compareMethodsSignature(basemethod, currentmethod, **comparator) )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2143
			{                    
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2144
				if( comparatorRound==CONSTFILTER_COMPARATOR )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2145
				{                        
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2146
					// if one of the parameter has changed from non-const to const
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2147
					ret++;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2148
					if(report)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2149
					{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2150
						//add the issue as it is a source compatibility break
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2151
						AddIssueFunction<EIssueTypeParamConst>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2152
					}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2153
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2154
					//make signature and return value true so that the issue is not reported again
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2155
					if( baseMapIter != baseMap.end() )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2156
						baseMapIter->second.signatureMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2157
					currMapIter->second.signatureMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2158
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2159
					baseMapIter->second.returnValueMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2160
					currMapIter->second.returnValueMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2161
					break;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2162
				}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2163
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2164
				else if( comparatorRound==CONSTFILTER2_COMPARATOR )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2165
				{                        
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2166
					// if one of the parameter has changed from const to non-const
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2167
					ret++;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2168
					if(report)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2169
					{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2170
						//add the issue as it is a source compatibility break
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2171
						AddIssueFunction<EIssueTypeParamConst2>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2172
					}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2173
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2174
					//make signature and return value true so that the issue is not reported again
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2175
					if( baseMapIter != baseMap.end() )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2176
						baseMapIter->second.signatureMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2177
					currMapIter->second.signatureMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2178
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2179
					baseMapIter->second.returnValueMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2180
					currMapIter->second.returnValueMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2181
					break;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2182
				}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2183
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2184
				if( baseMapIter != baseMap.end() )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2185
					baseMapIter->second.signatureMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2186
				currMapIter->second.signatureMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2187
				//Check also the default parameter values
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2188
				DOMElement * baselineelement = static_cast<DOMElement*>(basemethod.current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2189
				DOMNodeList* baselinechilds = baselineelement->getChildNodes();
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2190
				DOMElement * currentelement = static_cast<DOMElement*>(currentmethod.current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2191
				DOMNodeList* currentchilds = currentelement->getChildNodes();
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2192
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2193
				XMLSize_t childcount = baselinechilds->getLength();
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2194
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2195
				unsigned int i = 0;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2196
				for (i = 0; i < childcount; ++i)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2197
				{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2198
					DOMNode* baselinechild = baselinechilds->item(i);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2199
					HANodeIterator baselinechildit(baseline);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2200
					baselinechildit.current = baselinechild;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2201
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2202
					DOMNode* currentchild = currentchilds->item(i);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2203
					HANodeIterator currentchildit(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2204
					currentchildit.current = currentchild;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2205
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2206
					short nodetype = baselinechildit->getNodeType();
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2207
					if (nodetype == DOMNode::ELEMENT_NODE)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2208
					{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2209
						const XMLCh * baselinesize = FindAttributeValueForType(baselinechildit,KXMLSizeString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2210
						const XMLCh * currentsize = FindAttributeValueForType(currentchildit,KXMLSizeString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2211
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2212
						const XMLCh * baselinealign = FindAttributeValueForType(baselinechildit,KXMLAlignString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2213
						const XMLCh * currentalign = FindAttributeValueForType(currentchildit,KXMLAlignString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2214
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2215
						if ( !baselinesize )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2216
						{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2217
							baselinesize = baselinealign;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2218
						}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2219
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2220
						if ( !currentsize )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2221
						{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2222
							currentsize = currentalign;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2223
						}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2224
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2225
						if ( !Equals(baselinesize,currentsize) || !Equals(baselinealign, currentalign) )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2226
						{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2227
							++ret;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2228
							if (report)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2229
							{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2230
								AddIssueFunction<EIssueTypeParam>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2231
							}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2232
							break;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2233
						}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2234
						// if default value is changed then it should be reported as informative
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2235
						if(!CompareAttributes(baselinechildit,currentchildit,KXMLDefaultString,EOptionalSimpleAttribute))
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2236
						{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2237
							++ret;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2238
							if (report)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2239
							{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2240
								AddIssueFunction<EIssueTypeDefaultParam>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2241
							}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2242
							break;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2243
						}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2244
					}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2245
				}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2246
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2247
				// Check function return values
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2248
				const ComparatorVector& cmps = ComparatorFactory::Instance().GetComparators();       
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2249
				ComparatorVector::const_iterator retComparator = cmps.begin();
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2250
				int retComparatorRound = 1;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2251
				for ( ; retComparator != cmps.end(); retComparator++ )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2252
				{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2253
					if ( compareMethodsReturn(basemethod,currentmethod, **retComparator) )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2254
					{ 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2255
						if( retComparatorRound==CONSTFILTER_COMPARATOR )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2256
						{                       
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2257
							// if the return value has changed from const to non-const
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2258
							ret++;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2259
							if(report)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2260
							{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2261
								//add the issue as it is a source compatibility break
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2262
								AddIssueFunction<EIssueTypeReturnConst>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2263
							}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2264
						}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2265
						else if( retComparatorRound==CONSTFILTER2_COMPARATOR )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2266
						{                       
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2267
							// if the return calue has changed from non-const to const
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2268
							ret++;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2269
							if(report)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2270
							{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2271
								//add the issue as it is a source compatibility break
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2272
								AddIssueFunction<EIssueTypeReturnConst2>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2273
							}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2274
						}         
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2275
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2276
						baseMapIter->second.returnValueMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2277
						currMapIter->second.returnValueMatch = true;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2278
						break;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2279
					}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2280
					retComparatorRound++;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2281
				}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2282
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2283
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2284
				if ( !CheckAccessModifier(basemethod,currentmethod) )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2285
				{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2286
					if (report)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2287
					{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2288
						AddIssueFunction<EIssueTypeAccess>(&basemethod,identity, currentmethod,lineNo1,issueLoc);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2289
					}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2290
					++ret;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2291
				}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2292
				break;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2293
			}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2294
		} // end of cuurent mathod loop
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2295
		// check for overloaded function in current having same name and return type with diff signature
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2296
		if (baseCount) 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2297
		{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2298
			currCount++;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2299
			cIter = cexportedMethods.begin(); 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2300
			int lineNo;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2301
			string fileName;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2302
			for( ; cIter != cexportedMethods.end(); ++cIter)            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2303
			{                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2304
				HANodeIterator currentmethod(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2305
				currentmethod.current = *cIter;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2306
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2307
				const XMLCh* curMathodID = currentmethod->getNodeName();
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2308
				if(Equals(curMathodID,KXMLMethodString))
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2309
				{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2310
					HANodeIterator curReturMathod(currentmethod);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2311
					bool ret1 = curReturMathod.FindNodeById(currentmethod.GetAttribute(KXMLReturnsString));
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2312
				    const XMLCh* curReturnatt = GetActualTypeValue(curReturMathod);
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2313
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2314
					const XMLCh* lineNumber1 = GetAttribute(currentmethod.current,KXMLLineString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2315
			        lineNo = atoi(toString(lineNumber1).c_str());
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2316
					const XMLCh* fnameNode = currentmethod.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2317
					if(fnameNode != NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2318
					{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2319
						HANodeIterator filenode1(currentmethod); 
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2320
						bool ret1 = filenode1.FindNodeById(fnameNode);
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2321
						fileName = toString(filenode1.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2322
					}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2323
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2324
					if(Equals(basenameatt, currentmethod.GetAttribute(KXMLNameString)) && 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2325
						Equals(basereturnatt, curReturnatt ) &&
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2326
						!Equals(basemangledatt, currentmethod.GetAttribute(KXMLMangledString)) )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2327
					{					
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2328
						currCount++;// overloaded function found in current
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2329
						break;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2330
					}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2331
				}				
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2332
			}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2333
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2334
			//Now check if the function is overloaded in base also or not .
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2335
			if(currCount > 1)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2336
			{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2337
				vector<DOMNode*>::const_iterator baseInnerIter = bexportedMethods.begin();        
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2338
				for( ; baseInnerIter != bexportedMethods.end(); ++baseInnerIter )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2339
				{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2340
					HANodeIterator bmethod(baseline);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2341
					bmethod.current = *baseInnerIter;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2342
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2343
					const XMLCh* bMathodID = bmethod->getNodeName();
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2344
					if(Equals(bMathodID,KXMLMethodString))
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2345
					{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2346
						HANodeIterator returMathod(bmethod);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2347
						bool ret1 = returMathod.FindNodeById(bmethod.GetAttribute(KXMLReturnsString));
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2348
						const XMLCh* returnatt = GetActualTypeValue(returMathod);
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2349
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2350
						if(Equals(basenameatt, bmethod.GetAttribute(KXMLNameString)) && 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2351
							Equals(basereturnatt, returnatt) &&
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2352
							!Equals(basemangledatt, bmethod.GetAttribute(KXMLMangledString)) )
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2353
						{					
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2354
							baseCount++;// overloaded function found in base
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2355
							break;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2356
						}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2357
					}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2358
				}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2359
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2360
				// Report the overloaded function only if it first time overloaded
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2361
				if(baseCount == 1)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2362
				{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2363
					ret++;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2364
					if(report)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2365
					{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2366
						//add the issue as it is a binary compatibility break
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2367
						AddIssue<EIssueIdentityExportedFunction,EIssueTypeOverload>(&basemethod, basemethod,lineNo,fileName);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2368
					}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2369
				}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2370
			}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2371
		}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2372
	}//end of base exported mathod loop
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2373
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2374
    // Recursive call with next comparator (if any) and updated method maps.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2375
    const ComparatorVector& cmps = ComparatorFactory::Instance().GetComparators();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2376
    if( ++comparator != cmps.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2377
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2378
        comparatorRound++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2379
        ret += ClassNodeAnalysis::compareNonvirtualFunctions(
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2380
            baseline,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2381
            current, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2382
            bexportedMethods,        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2383
            cexportedMethods,                                           
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2384
            identity,                                          
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2385
            report,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2386
            comparator,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2387
            baseMap,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2388
            currMap,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2389
            comparatorRound);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2390
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2391
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2392
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2393
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2394
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2395
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2396
// ClassNodeAnalysis::compareOthers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2397
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2398
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2399
int ClassNodeAnalysis::compareOthers(HANodeIterator baseline,HANodeIterator current, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2400
                                     const vector<DOMNode*>& bothers, const vector<DOMNode*>& cothers, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2401
                                     bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2402
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2403
	int retval = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2404
	return retval;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2405
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2406
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2407
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2408
// printlist
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2409
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2410
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2411
void printlist(const NodeIndex::dtable_t& lista)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2412
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2413
	NodeIndex::dtable_t::const_iterator it = lista.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2414
	for (; it != lista.end(); ++it)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2415
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2416
		cout << it->iName << " at " << it->iOffset << "with node:" << it->iNode <<  endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2417
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2418
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2419
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2420
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2421
// ClassNodeAnalysis::compareFields
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2422
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2423
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2424
int ClassNodeAnalysis::compareFields(HANodeIterator baseline,HANodeIterator current,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2425
                                     const vector<DOMNode*>& bfields_class,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2426
									 const vector<DOMNode*>& cfields_class,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2427
                                     bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2428
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2429
	int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2430
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2431
	const NodeIndex::dtable_t& bfields = ClassGenerateDataMemberTable(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2432
	const NodeIndex::dtable_t& cfields = ClassGenerateDataMemberTable(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2433
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2434
	int lineNo = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2435
	const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2436
	lineNo = atoi(toString(lineNumber).c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2437
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2438
	string issueLoc;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2439
	const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2440
	if(fnameNode != NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2441
	{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2442
		HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2443
		bool retval = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2444
		issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2445
	}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2446
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2447
	// If you don't like to see the issue about base size when the size has changed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2448
	// uncomment the test below
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2449
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2450
	//if (!iReportAddedMembers)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2451
	//{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2452
		// Check only if size has not changed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2453
		ret += compareBaseSizes(baseline, current, bfields, cfields, report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2454
	//}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2455
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2456
	// Fields
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2457
    // Order and type of accessible members matters
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2458
    //////////////////////////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2459
    vector<bool> fieldFound(cfields.size(),false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2460
    vector<bool> fieldRemoved(bfields.size(),false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2461
    vector<bool> fieldChanged(bfields.size(),false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2462
    vector<int> fieldChangedCurrent(bfields.size(),-1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2463
    vector<bool> fieldAccessible(bfields.size(),false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2464
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2465
	unsigned int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2466
    for (i=0; i < bfields.size(); ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2467
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2468
		if ( !bfields[i].iNode )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2469
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2470
			unsigned int ii = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2471
			for (ii=0; ii < cfields.size(); ++ii)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2472
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2473
				if ( !fieldFound[ii] && (bfields[i].iName == cfields[ii].iName) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2474
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2475
	                fieldFound[ii] = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2476
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2477
					if ( bfields[i].iOffset != cfields[ii].iOffset )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2478
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2479
						if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2480
						{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2481
							AddIssue<EIssueIdentityVirtualTablePointer,EIssueTypeOffset>(&baseline,current,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2482
								lineNo,issueLoc,NULL,bfields[i]);							
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2483
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2484
						++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2485
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2486
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2487
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2488
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2489
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2490
			if ( cfields.size() == ii )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2491
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2492
				fieldRemoved[i] = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2493
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2494
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2495
			continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2496
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2497
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2498
        HANodeIterator basefield(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2499
        basefield.current = bfields[i].iNode;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2500
		bool dummy;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2501
 		fieldAccessible[i] = CheckAccessibility(baseline, dummy, bfields[i].iAccess);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2502
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2503
        unsigned int ii = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2504
        for (ii=0; ii < cfields.size(); ++ii)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2505
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2506
            HANodeIterator currentfield(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2507
            currentfield.current = cfields[ii].iNode;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2508
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2509
            if ( !fieldFound[ii] && (bfields[i].iName == cfields[ii].iName) )//CompareNames(basefield,currentfield) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2510
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2511
                fieldFound[ii] = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2512
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2513
                if ( fieldAccessible[i] && !CheckAccessModifier(bfields[i].iAccess,cfields[ii].iAccess) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2514
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2515
                    if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2516
                    {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2517
                        AddIssue<EIssueIdentityField,EIssueTypeAccess>(&baseline, currentfield,cfields[ii].iLineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2518
							issueLoc,NULL,bfields[i]);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2519
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2520
                    ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2521
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2522
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2523
				if ( 0 != compareField(baseline,current,bfields[i],cfields[ii],false) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2524
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2525
					fieldChanged[i] = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2526
					fieldChangedCurrent[i] = ii;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2527
					if (fieldAccessible[i])
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2528
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2529
						iReportAddedMembers = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2530
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2531
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2532
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2533
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2534
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2535
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2536
        if ( cfields.size() == ii )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2537
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2538
			fieldRemoved[i] = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2539
            if ( fieldAccessible[i] )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2540
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2541
				iReportAddedMembers = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2542
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2543
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2544
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2545
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2546
    for (i = 0; i < fieldRemoved.size(); ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2547
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2548
        if (fieldRemoved[i])
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2549
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2550
			if ( !bfields[i].iNode )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2551
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2552
				if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2553
				{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2554
					AddIssue<EIssueIdentityVirtualTablePointer,EIssueTypeRemoval>(&baseline,current,lineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2555
						issueLoc,NULL,bfields[i]);							
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2556
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2557
				continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2558
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2559
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2560
            HANodeIterator basefield(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2561
            basefield.current = bfields[i].iNode;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2562
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2563
			if (iReportAddedMembers || fieldAccessible[i])
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2564
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2565
				if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2566
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2567
					if (fieldAccessible[i])
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2568
					{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2569
						AddIssue<EIssueIdentityField,EIssueTypeRemoval>(&baseline, basefield,lineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2570
							issueLoc,NULL,bfields[i]);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2571
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2572
					else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2573
					{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2574
						AddIssue<EIssueIdentityFieldInaccessible,EIssueTypeRemoval>(&baseline, basefield,lineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2575
							issueLoc,NULL,bfields[i]);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2576
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2577
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2578
				++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2579
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2580
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2581
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2582
        if (fieldChanged[i])
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2583
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2584
            HANodeIterator basefield(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2585
            HANodeIterator currentfield(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2586
            basefield.current = bfields[i].iNode;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2587
			int ii = fieldChangedCurrent[i];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2588
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2589
			if ( -1 == ii )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2590
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2591
				continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2592
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2593
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2594
			if (iReportAddedMembers || fieldAccessible[i])
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2595
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2596
				if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2597
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2598
					compareField(baseline, current, bfields[i], cfields[ii], report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2599
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2600
				++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2601
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2602
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2603
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2604
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2605
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2606
    for (i = 0; i < fieldFound.size(); ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2607
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2608
        if (!fieldFound[i])
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2609
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2610
 			if ( !cfields[i].iNode )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2611
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2612
				if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2613
				{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2614
					AddIssue<EIssueIdentityVirtualTablePointer,EIssueTypeAddition>(&baseline,current,lineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2615
						issueLoc,NULL,cfields[i]);							
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2616
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2617
				continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2618
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2619
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2620
			HANodeIterator currentfield(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2621
            currentfield.current = cfields[i].iNode;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2622
            if (report && iReportAddedMembers)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2623
            {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2624
                AddIssue<EIssueIdentityField,EIssueTypeAddition>(&current, currentfield,cfields[i].iLineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2625
					issueLoc,NULL,cfields[i]);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2626
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2627
            ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2628
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2629
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2630
	return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2631
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2632
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2633
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2634
// printlist
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2635
// Output list members
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2636
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2637
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2638
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2639
void printlist(const NodeIndex::vtable_t& lista)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2640
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2641
	NodeIndex::vtable_t::const_iterator it = lista.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2642
	for (; it != lista.end(); ++it)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2643
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2644
		cout << it->first << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2645
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2646
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2647
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2648
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2649
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2650
// ClassNodeAnalysis::indexVirtualMethods
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2651
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2652
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2653
void ClassNodeAnalysis::indexVirtualMethods(HANodeIterator node, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2654
											const vector<DOMNode*>& virtualMethods, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2655
											const NodeIndex::vtable_t& vtable,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2656
											vector<pair<DOMNode*,int> >& virtualMethodsWithIndex)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2657
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2658
	vector<DOMNode*>::const_iterator it = virtualMethods.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2659
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2660
	for (; it != virtualMethods.end(); ++it)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2661
	{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2662
		NodeIndex::vtable_t::const_iterator vtableit = vtable.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2663
		for (int i = 0; vtableit != vtable.end(); ++vtableit, ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2664
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2665
			HANodeIterator funcnode(node);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2666
			funcnode.current = *it;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2667
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2668
			char index_str[256];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2669
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2670
			sprintf(index_str, "%d",i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2671
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2672
			funcnode.SetAttribute(KXMLBBCVirtualFunctionIndex, index_str );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2673
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2674
			string funcsig = GenerateFunctionSignature(funcnode);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2675
			if (funcsig == vtableit->first)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2676
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2677
				virtualMethodsWithIndex.push_back(pair<DOMNode*,int>(*it,i));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2678
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2679
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2680
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2681
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2682
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2683
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2684
// ClassNodeAnalysis::compareVirtualTables
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2685
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2686
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2687
int ClassNodeAnalysis::compareVirtualTables(HANodeIterator baseline,HANodeIterator current,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2688
											const NodeIndex::vtable_t& basevtable, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2689
											const NodeIndex::vtable_t& currentvtable,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2690
                                            bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2691
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2692
	if ( basevtable.size() != currentvtable.size() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2693
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2694
		return 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2695
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2696
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2697
	NodeIndex::vtable_t::const_iterator baseit = basevtable.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2698
	NodeIndex::vtable_t::const_iterator currentit = currentvtable.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2699
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2700
	unsigned int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2701
    for (i=0; baseit != basevtable.end(); ++baseit,++i,++currentit)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2702
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2703
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2704
        if ( baseit->first != currentit->first )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2705
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2706
			return 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2707
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2708
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2709
	return 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2710
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2711
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2712
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2713
// ClassNodeAnalysis::compareVirtualFunctions
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2714
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2715
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2716
int ClassNodeAnalysis::compareVirtualFunctions(HANodeIterator baseline,HANodeIterator current, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2717
                                                  const vector<DOMNode*>& bvirtualMethods, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2718
												  const vector<DOMNode*>& cvirtualMethods, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2719
                                                  bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2720
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2721
	int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2722
	//Analyse virtual methods, not a single change is tolerated
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2723
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2724
    // First we build virtual tables for baseline and current classes.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2725
	const NodeIndex::vtable_t& basevtable = ClassGenerateVirtualTable(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2726
	const NodeIndex::vtable_t& currentvtable = ClassGenerateVirtualTable(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2727
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2728
	int parentLineNo = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2729
	int lineNo = 0;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2730
	string parentIssueLoc;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2731
	const XMLCh* parentlineNumber = current.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2732
	parentLineNo = atoi(toString(parentlineNumber).c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2733
	const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2734
	if(fnameNode != NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2735
	{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2736
		HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2737
		bool retval = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2738
		parentIssueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2739
	}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2740
	if ( 0 != compareVirtualTables(baseline,current,basevtable,currentvtable,report) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2741
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2742
        // Virtual table has been changed.
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2743
		AddIssue<EIssueIdentityVirtualTable,EIssueTypeChange>(&baseline, current, parentLineNo,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2744
			parentIssueLoc, NULL, "[Primary-vtable]");	
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2745
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2746
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2747
	vector<pair<DOMNode*,int> > bvirtualMethodsWithIndex;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2748
	vector<pair<DOMNode*,int> > cvirtualMethodsWithIndex;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2749
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2750
    // Add virtual methods to vectors with their indexes (i.e. order inside a class).
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2751
	indexVirtualMethods(baseline,bvirtualMethods,basevtable,bvirtualMethodsWithIndex);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2752
	indexVirtualMethods(current,cvirtualMethods,currentvtable,cvirtualMethodsWithIndex);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2753
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2754
    unsigned int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2755
    vector<bool> virtualMethodFound(cvirtualMethodsWithIndex.size(),false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2756
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2757
    // Use only default comparator here, since virtual functions should have strict match.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2758
    const ComparatorVector& cmps = ComparatorFactory::Instance().GetComparators();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2759
    ComparatorVector::const_iterator defaultcomparator = cmps.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2760
    assert( defaultcomparator != cmps.end() );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2761
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2762
    for (i=0; i < bvirtualMethodsWithIndex.size(); ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2763
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2764
        HANodeIterator basemethod(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2765
        basemethod.current = bvirtualMethodsWithIndex[i].first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2766
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2767
        unsigned int ii = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2768
        for (ii=0; ii < cvirtualMethodsWithIndex.size(); ++ii)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2769
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2770
            HANodeIterator currentmethod(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2771
            currentmethod.current = cvirtualMethodsWithIndex[ii].first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2772
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2773
			lineNo = 0;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2774
			string issueLoc;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2775
			const XMLCh* lineNumber = currentmethod.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2776
			lineNo = atoi(toString(lineNumber).c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2777
			const XMLCh* fnameNode = currentmethod.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2778
			if( fnameNode!= NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2779
			{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2780
				HANodeIterator fileNode1(currentmethod);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2781
				bool retval = fileNode1.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2782
				issueLoc = toString(fileNode1.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2783
			}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2784
            if ( compareMethodsSignature(basemethod,currentmethod, **defaultcomparator) )
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2785
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2786
                virtualMethodFound[ii] = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2787
                if (bvirtualMethodsWithIndex[i].second != cvirtualMethodsWithIndex[ii].second)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2788
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2789
                    // Here the indexes don't match --> The order of virtual methods has been
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2790
                    // changed. This means that the layout of the virtual table has been changed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2791
                    // and the binary compatibility is broken.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2792
                    if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2793
                    {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2794
						AddIssue<EIssueIdentityVirtualFunction,EIssueTypeOrderChange>(&basemethod, currentmethod,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2795
							lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2796
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2797
                    ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2798
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2799
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2800
				//Check also the default parameter values
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2801
				DOMElement * baselineelement = static_cast<DOMElement*>(basemethod.current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2802
				DOMNodeList* baselinechilds = baselineelement->getChildNodes();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2803
				DOMElement * currentelement = static_cast<DOMElement*>(currentmethod.current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2804
				DOMNodeList* currentchilds = currentelement->getChildNodes();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2805
			    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2806
				XMLSize_t childcount = baselinechilds->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2807
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2808
				unsigned int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2809
				for (i = 0; i < childcount; ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2810
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2811
					DOMNode* baselinechild = baselinechilds->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2812
					HANodeIterator baselinechildit(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2813
					baselinechildit.current = baselinechild;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2814
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2815
					DOMNode* currentchild = currentchilds->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2816
					HANodeIterator currentchildit(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2817
					currentchildit.current = currentchild;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2818
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2819
					short nodetype = baselinechildit->getNodeType();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2820
					if (nodetype == DOMNode::ELEMENT_NODE)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2821
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2822
						const XMLCh * baselinesize = FindAttributeValueForType(baselinechildit,KXMLSizeString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2823
						const XMLCh * currentsize = FindAttributeValueForType(currentchildit,KXMLSizeString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2824
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2825
						const XMLCh * baselinealign = FindAttributeValueForType(baselinechildit,KXMLAlignString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2826
						const XMLCh * currentalign = FindAttributeValueForType(currentchildit,KXMLAlignString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2827
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2828
						if ( !baselinesize )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2829
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2830
							baselinesize = baselinealign;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2831
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2832
							
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2833
						if ( !currentsize )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2834
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2835
							currentsize = currentalign;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2836
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2837
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2838
						if ( !Equals(baselinesize,currentsize) || !Equals(baselinealign, currentalign) )
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2839
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2840
							++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2841
							if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2842
							{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2843
								AddIssue<EIssueIdentityVirtualFunction,EIssueTypeParam>(&basemethod,currentmethod,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2844
									lineNo,issueLoc);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2845
							}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2846
							break;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2847
						}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2848
						// if default value is changed then it should be reported as informative
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2849
						if(!CompareAttributes(baselinechildit,currentchildit,KXMLDefaultString,EOptionalSimpleAttribute))
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2850
						{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2851
							++ret;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2852
							if (report)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2853
							{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2854
								AddIssue<EIssueIdentityVirtualFunction,EIssueTypeDefaultParam>(&basemethod,currentmethod, 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2855
									lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2856
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2857
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2858
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2859
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2860
				}					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2861
                // check the return types of the methods
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2862
				if ( !compareMethodsReturn(basemethod,currentmethod,**defaultcomparator) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2863
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2864
                    if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2865
                    {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2866
						AddIssue<EIssueIdentityVirtualFunction,EIssueTypeReturn>(&basemethod, currentmethod,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2867
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2868
                    ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2869
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2870
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2871
                if ( !CheckAccessModifier(basemethod,currentmethod) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2872
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2873
                    if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2874
                    {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2875
						AddIssue<EIssueIdentityVirtualFunction,EIssueTypeAccess>(&basemethod, currentmethod,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2876
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2877
                    ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2878
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2879
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2880
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2881
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2882
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2883
        if ( cvirtualMethodsWithIndex.size() == ii )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2884
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2885
            //Method not found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2886
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2887
/*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2888
			// This code detects if the removed virtual function was actually an removed override.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2889
            unsigned int baseindex = bvirtualMethodsWithIndex[i].second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2890
            HANodeIterator basemethod(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2891
            basemethod.current = bvirtualMethodsWithIndex[i].first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2892
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2893
			if ( (baseindex < currentvtable.size()) && (currentvtable[baseindex].first == GenerateFunctionSignature(basemethod)) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2894
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2895
				//This is a new override and we should report this if the class is derivable
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2896
				if (ClassIsDerivable(baseline))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2897
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2898
					if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2899
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2900
						AddIssue<EIssueIdentityVirtualFunction,EIssueTypeRemovedOverride>(&basemethod, basemethod);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2901
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2902
					++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2903
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2904
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2905
			else*/
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2906
			{				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2907
				if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2908
				{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2909
					AddIssue<EIssueIdentityVirtualFunction,EIssueTypeRemoval>(&basemethod, basemethod,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2910
						parentLineNo,parentIssueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2911
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2912
				++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2913
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2914
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2915
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2916
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2917
    for (i = 0; i < virtualMethodFound.size(); ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2918
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2919
        if (!virtualMethodFound[i])
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2920
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2921
            HANodeIterator currentmethod(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2922
            currentmethod.current = cvirtualMethodsWithIndex[i].first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2923
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2924
			lineNo = 0;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2925
			string issueLoc;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2926
			const XMLCh* lineNumber = currentmethod.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2927
			lineNo = atoi(toString(lineNumber).c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2928
			const XMLCh* fnameNode = currentmethod.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2929
			if( fnameNode!= NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2930
			{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2931
				HANodeIterator fileNode1(currentmethod);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2932
				bool retval = fileNode1.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2933
				issueLoc = toString(fileNode1.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2934
			}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2935
			//Check the base vtable for entry for this function
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2936
            unsigned int baseindex = cvirtualMethodsWithIndex[i].second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2937
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2938
			if ( (baseindex < basevtable.size()) && (basevtable[baseindex].first == GenerateFunctionSignature(currentmethod)) )
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2939
			{				
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2940
				// New rule is added for Q_OBJECT macro defining virtual functions.
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2941
				// Do - add the Q_OBJECT macro to a class if the class already inherits from QObject ,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2942
				// should not report as overridden.
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2943
				if( basevtable[baseindex].first == __Q_OBJECT_METAOBJECT__
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2944
					|| basevtable[baseindex].first == __Q_OBJECT_METACALL__
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2945
					|| basevtable[baseindex].first == __Q_OBJECT_METACAST__ )
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2946
				{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2947
				}
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2948
				else if(ClassIsDerivable(baseline))
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2949
				{//This is a new overwrite and we should report this if the class is derivable
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2950
					if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2951
					{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2952
						AddIssue<EIssueIdentityVirtualFunction,EIssueTypeNewOverride>(&currentmethod, currentmethod,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2953
							lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2954
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2955
					++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2956
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2957
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2958
			else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2959
			{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2960
				//This method really modifies the primary vtable
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2961
				// If you also want to find out if this function overrides entry in vtable of non-primary base 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2962
				// then generate virtual table for them and search for the function signature from them
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2963
				if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2964
				{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2965
					AddIssue<EIssueIdentityVirtualFunction,EIssueTypeAddition>(&currentmethod, currentmethod,
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2966
						lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2967
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2968
				++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2969
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2970
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2971
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2972
	return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2973
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2974
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2975
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2976
// ClassNodeAnalysis::compareBaseSizes
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2977
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2978
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2979
int ClassNodeAnalysis::compareBaseSizes(HANodeIterator baseline, HANodeIterator current, const NodeIndex::dtable_t& bfields, const NodeIndex::dtable_t& cfields, bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2980
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2981
	int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2982
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2983
	if ( ClassIsDerivable(baseline) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2984
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2985
		int bbasesize = ClassBaseSize(baseline,bfields);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2986
		int cbasesize = ClassBaseSize(current,cfields);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2987
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2988
		if ( (bbasesize) != (cbasesize) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2989
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2990
			int lineNo = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2991
			const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2992
			lineNo = atoi(toString(lineNumber).c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2993
			string issueLoc;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2994
			const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2995
			if(fnameNode != NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2996
			{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2997
				HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2998
				bool retval = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2999
				issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3000
			}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3001
			++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3002
			if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3003
			{		
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3004
				AddIssueClass<EIssueTypeBaseSize>(&baseline,iIdentity, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3005
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3006
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3007
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3008
	return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3009
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3010
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3011
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3012
// ClassNodeAnalysis::compareClassMembers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3013
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3014
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3015
int ClassNodeAnalysis::compareClassMembers(HANodeIterator baseline,HANodeIterator current, bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3016
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3017
	int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3018
    //Base material
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3019
    vector<DOMNode*> bvirtualMethods;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3020
    vector<DOMNode*> binlineMethods;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3021
    vector<DOMNode*> bexportedMethods;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3022
    vector<DOMNode*> bexportedvirtualMethods;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3023
    vector<DOMNode*> bmethods;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3024
    vector<DOMNode*> bfields;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3025
    vector<DOMNode*> bothers;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3026
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3027
    //Current material
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3028
    vector<DOMNode*> cvirtualMethods;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3029
    vector<DOMNode*> cinlineMethods;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3030
    vector<DOMNode*> cexportedMethods;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3031
    vector<DOMNode*> cexportedvirtualMethods;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3032
    vector<DOMNode*> cmethods;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3033
    vector<DOMNode*> cfields;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3034
    vector<DOMNode*> cothers;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3035
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3036
    //Reserve some space for efficiency
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3037
    bvirtualMethods.reserve(10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3038
    bexportedMethods.reserve(10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3039
    bmethods.reserve(10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3040
    bfields.reserve(10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3041
    bothers.reserve(10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3042
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3043
    cvirtualMethods.reserve(10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3044
    cexportedMethods.reserve(10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3045
    cmethods.reserve(10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3046
    cfields.reserve(10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3047
    cothers.reserve(10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3048
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3049
    //Order members
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3050
    ClassOrderMembers(baseline,bvirtualMethods,binlineMethods,bexportedMethods,bexportedvirtualMethods,bmethods,bfields,bothers);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3051
    ClassOrderMembers(current,cvirtualMethods,cinlineMethods,cexportedMethods,cexportedvirtualMethods,cmethods,cfields,cothers);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3052
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3053
	//Virtual functions
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3054
	ret += compareVirtualFunctions(baseline, current, bvirtualMethods, cvirtualMethods, report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3055
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3056
	//if ( baseline.CheckForBooleanAttribute(KXMLBBCVirtualString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3057
	//{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3058
		//ret += compareExportedVirtualFunctions(baseline, current, bexportedvirtualMethods, cexportedvirtualMethods, report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3059
	//}else if ( current.CheckForBooleanAttribute(KXMLBBCVirtualString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3060
	//{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3061
		//The class has changed from non-dynamic class to dynamic class
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3062
		//Do we need to report something?
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3063
	//}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3064
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3065
    //Exported methods
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3066
	ret += compareNonvirtualFunctions(baseline,current,bexportedMethods,cexportedMethods,EIssueIdentityExportedFunction,report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3067
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3068
    //Inlined methods
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3069
    ret += compareNonvirtualFunctions(baseline, current, binlineMethods, cinlineMethods,EIssueIdentityInlineFunction, report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3070
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3071
	//Fields
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3072
	ret += compareFields(baseline,current,bfields, cfields, report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3073
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3074
	//Others
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3075
	ret += compareOthers(baseline, current, bothers, cothers, report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3076
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3077
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3078
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3079
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3080
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3081
// ClassNodeAnalysis::compareBases
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3082
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3083
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3084
int ClassNodeAnalysis::compareBases(HANodeIterator baseline,HANodeIterator current,bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3085
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3086
    //Check base classes
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3087
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3088
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3089
    DOMNodeList* baselinechilds = baseline.GetElementsByTagName(KXMLBaseString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3090
    DOMNodeList* currentchilds = current.GetElementsByTagName(KXMLBaseString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3091
   
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3092
    XMLSize_t baselinechildcount = baselinechilds->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3093
    XMLSize_t currentchildcount = currentchilds->getLength();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3094
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3095
	int lineNo = 0;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3096
	string issueLoc;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3097
	const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3098
	lineNo = atoi(toString(lineNumber).c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3099
	const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3100
	if(fnameNode!= NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3101
	{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3102
		HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3103
		bool retval = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3104
		issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3105
	}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3106
    if ( baselinechildcount == currentchildcount )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3107
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3108
		unsigned int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3109
        for (i = 0; i < baselinechildcount; ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3110
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3111
            HANodeIterator baselineit(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3112
            HANodeIterator currentit(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3113
            baselineit.current = baselinechilds->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3114
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3115
            HANodeIterator basenameit(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3116
            basenameit.FindNodeById(baselineit.GetAttribute(KXMLTypeString));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3117
            string basename( GenerateFullyQualifiedName(basenameit) );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3118
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3119
			unsigned int ii = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3120
			for (ii = 0; ii < currentchildcount; ++ii)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3121
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3122
				currentit.current = currentchilds->item(ii);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3123
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3124
				HANodeIterator currentnameit(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3125
				currentnameit.FindNodeById(currentit.GetAttribute(KXMLTypeString));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3126
				string currentname( GenerateFullyQualifiedName(currentnameit) );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3127
				if ( basename == currentname )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3128
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3129
					if ( basenameit.CheckForBooleanAttribute(KXMLBBCVirtualString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3130
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3131
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3132
						const NodeIndex::vtable_t& basevtable = ClassGenerateVirtualTable(basenameit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3133
						const NodeIndex::vtable_t& currentvtable = ClassGenerateVirtualTable(currentnameit);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3134
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3135
						if ( 0 != compareVirtualTables(basenameit,currentnameit,basevtable,currentvtable,report) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3136
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3137
							string vtablename = "[";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3138
							vtablename += basename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3139
							vtablename += "-vtable]";
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3140
							AddIssue<EIssueIdentityVirtualTable,EIssueTypeChange>(&baseline, current, 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3141
								lineNo, issueLoc,NULL, vtablename);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3142
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3143
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3144
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3145
					if ( 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3146
						!Equals( baselineit.GetAttribute(KXMLVirtualString), currentit.GetAttribute(KXMLVirtualString)) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3147
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3148
						//Virtuality differs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3149
						if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3150
						{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3151
							AddIssueClass<EIssueTypeInheritance>(&baseline,iIdentity, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3152
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3153
						++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3154
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3155
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3156
					if ( !Equals( baselineit.GetAttribute(KXMLOffsetString), currentit.GetAttribute(KXMLOffsetString)) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3157
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3158
						if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3159
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3160
							string subobjectname = "[" + basename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3161
							subobjectname += "]";
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3162
							AddIssue<EIssueIdentitySubobject,EIssueTypeOffset>(&baseline,current,lineNo, 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3163
								issueLoc,NULL,subobjectname);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3164
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3165
						++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3166
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3167
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3168
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3169
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3170
			if ( currentchildcount == ii )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3171
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3172
				if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3173
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3174
					//AddIssueClass<EIssueTypeInheritance>(&baseline,iIdentity, current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3175
                    //base class removed from inheritance
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3176
					string subobjectname = "[" + basename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3177
					subobjectname += "]";
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3178
					AddIssue<EIssueIdentitySubobject,EIssueTypeRemoval>(&baseline,current,lineNo,issueLoc,NULL,subobjectname);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3179
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3180
				++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3181
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3182
        }    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3183
    } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3184
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3185
        //Different amount of bases
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3186
        if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3187
        {
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3188
			AddIssueClass<EIssueTypeInheritance>(&baseline,iIdentity, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3189
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3190
        ++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3191
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3192
        //check if a base class is removed from inheritance
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3193
		unsigned int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3194
        for (i = 0; i < baselinechildcount; ++i)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3195
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3196
            HANodeIterator baselineit(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3197
            HANodeIterator currentit(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3198
            baselineit.current = baselinechilds->item(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3199
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3200
            HANodeIterator basenameit(baseline);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3201
            basenameit.FindNodeById(baselineit.GetAttribute(KXMLTypeString));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3202
            string basename( GenerateFullyQualifiedName(basenameit) );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3203
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3204
			unsigned int ii = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3205
			for (ii = 0; ii < currentchildcount; ++ii)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3206
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3207
				currentit.current = currentchilds->item(ii);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3208
				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3209
				HANodeIterator currentnameit(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3210
				currentnameit.FindNodeById(currentit.GetAttribute(KXMLTypeString));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3211
				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3212
				string currentname( GenerateFullyQualifiedName(currentnameit) );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3213
				if ( basename == currentname )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3214
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3215
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3216
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3217
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3218
			if ( currentchildcount == ii )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3219
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3220
				if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3221
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3222
					string subobjectname = "[" + basename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3223
					subobjectname += "]";
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3224
					AddIssue<EIssueIdentitySubobject,EIssueTypeRemoval>(&baseline,current,lineNo,issueLoc,NULL,subobjectname);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3225
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3226
				++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3227
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3228
        }    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3229
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3230
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3231
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3232
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3233
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3234
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3235
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3236
// ClassNodeAnalysis::ClassNodeAnalysis
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3237
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3238
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3239
ClassNodeAnalysis::ClassNodeAnalysis()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3240
    : iReportAddedMembers(false),
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3241
      iIdentity(EIssueIdentityClass)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3242
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3243
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3244
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3245
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3246
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3247
// ClassNodeAnalysis::Construct
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3248
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3249
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3250
NodeAnalysis* ClassNodeAnalysis::Construct()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3251
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3252
    return new ClassNodeAnalysis;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3253
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3254
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3255
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3256
// ClassNodeAnalysis::FindNodeAndAnalyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3257
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3258
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3259
int ClassNodeAnalysis::FindNodeAndAnalyse(HANodeIterator baseline,HANodeIterator current)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3260
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3261
    if ( baseline.CheckForBooleanAttribute(KXMIncompleteString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3262
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3263
        return 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3264
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3265
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3266
     DOMNode* node = NodeAnalysis::findNode(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3267
    if ( !node )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3268
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3269
        //AddIssue<>(&baseline,EIssue_class_removal);
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3270
        AddIssue<EIssueIdentityClass,EIssueTypeRemoval>(&baseline, baseline,0,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3271
        return 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3272
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3273
    current.current = node;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3274
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3275
    return this->Analyse(baseline,current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3276
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3277
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3278
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3279
// ClassNodeAnalysis::Analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3280
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3281
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3282
int ClassNodeAnalysis::Analyse(HANodeIterator baseline,HANodeIterator current, bool report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3283
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3284
    //ASSERTS
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3285
    int ret=0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3286
    short nodetype = baseline->getNodeType();    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3287
    assert(nodetype == DOMNode::ELEMENT_NODE);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3288
    nodetype = current->getNodeType();    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3289
    assert(nodetype == DOMNode::ELEMENT_NODE);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3290
	int lineNo = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3291
	const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3292
	lineNo = atoi(toString(lineNumber).c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3293
    string issueLoc;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3294
	const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3295
	if( fnameNode!= NULL)
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3296
	{
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3297
		HANodeIterator fileNode(current);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3298
		bool retval = fileNode.FindNodeById(fnameNode);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3299
		issueLoc =toString(fileNode.GetAttribute(KXMLNameString)); 
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3300
	}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3301
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3302
    const XMLCh* baseanalysisstatus = baseline.GetAttribute(KXMLBBCAnalysisStatus);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3303
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3304
    if (baseanalysisstatus)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3305
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3306
        if ( Equals(baseanalysisstatus,KXMLBBCAnalysisStatusAnalysing) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3307
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3308
            //We are analysing recursively, should not happen
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3309
            assert(false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3310
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3311
        else if ( Equals(baseanalysisstatus,KXMLBBCAnalysisStatusClean) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3312
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3313
            return 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3314
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3315
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3316
		if (!report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3317
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3318
			return 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3319
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3320
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3321
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3322
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3323
    baseline.SetAttribute(KXMLBBCAnalysisStatus,KXMLBBCAnalysisStatusAnalysing);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3324
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3325
    bool bincomplete = baseline.CheckForBooleanAttribute(KXMIncompleteString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3326
    bool cincomplete = current.CheckForBooleanAttribute(KXMIncompleteString);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3327
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3328
    // Check if either baseline or current node is of incomplete type.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3329
    // Type is incomplete if the type is just forward declared or the
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3330
    // analysed header file can be compiled without resolving the details
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3331
    // of the type. This kind of situation occurs for example when only
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3332
    // a reference or pointer to the class is used in the analyzed header, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3333
    // and the class is declared in other header file.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3334
    //
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3335
    // If the type is incomplete, we cannot compare the nodes.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3336
    if ( bincomplete || cincomplete )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3337
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3338
        if ( bincomplete && cincomplete )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3339
        {	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3340
            ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3341
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3342
        else if (bincomplete)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3343
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3344
            ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3345
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3346
        else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3347
        {            
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3348
			AddIssueClass<EIssueTypeNotAnalysed>(&baseline,iIdentity, baseline,0,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3349
            ret = 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3350
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3351
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3352
    else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3353
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3354
        // Check that the access level of the current node has not been changed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3355
        // to more restricted.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3356
        if (!CheckAccessModifier(baseline,current))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3357
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3358
            if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3359
            {         
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3360
				AddIssueClass<EIssueTypeAccess>(&baseline,iIdentity, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3361
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3362
            ret += 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3363
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3364
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3365
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3366
		// Check if the class has virtual bases
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3367
		if ( baseline.CheckForBooleanAttribute(KXMLBBCVirtualInheritanceString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3368
		{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3369
			AddIssueClass<EIssueTypeVirtualBases>(&baseline,iIdentity, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3370
			++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3371
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3372
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3373
		if ( current.CheckForBooleanAttribute(KXMLBBCVirtualInheritanceString) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3374
		{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3375
			AddIssueClass<EIssueTypeVirtualBases>(&current,iIdentity, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3376
			++ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3377
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3378
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3379
        // Check if the class is istantiable or derivable
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3380
        if ( ClassIsInstantiable(baseline) || (ClassIsDerivable(baseline) && EIssueIdentityUnion != iIdentity) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3381
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3382
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3383
            if ( !CompareAttributes(baseline,current,KXMLAlignString,ESimpleAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3384
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3385
                if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3386
                {                    
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3387
					AddIssueClass<EIssueTypeAlign>(&baseline,iIdentity, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3388
                    iReportAddedMembers = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3389
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3390
                ret += 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3391
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3392
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3393
            if ( !CompareAttributes(baseline,current,KXMLSizeString,ESimpleAttribute) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3394
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3395
                if (report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3396
                {                 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3397
					AddIssueClass<EIssueTypeSize>(&baseline,iIdentity, current,lineNo,issueLoc);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3398
                    iReportAddedMembers = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3399
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3400
                ret += 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3401
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3402
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3403
       	//ret += compareBaseSizes(baseline,current,report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3404
        ret += compareClassMembers(baseline,current,report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3405
        ret += compareBases(baseline,current,report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3406
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3407
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3408
    if ( ret == 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3409
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3410
        baseline.SetAttribute(KXMLBBCAnalysisStatus,KXMLBBCAnalysisStatusClean);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3411
    } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3412
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3413
        baseline.SetAttribute(KXMLBBCAnalysisStatus,KXMLBBCAnalysisStatusIssues);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3414
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3415
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3416
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3417
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3418
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3419
////////////////////////////////////////////////////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3420
///////////////////////////////StructNodeAnalysis///////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3421
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3422
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3423
// StructNodeAnalysis::Construct
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3424
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3425
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3426
NodeAnalysis* StructNodeAnalysis::Construct()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3427
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3428
    return new StructNodeAnalysis;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3429
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3430
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3431
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3432
// StructNodeAnalysis::StructNodeAnalysis
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3433
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3434
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3435
StructNodeAnalysis::StructNodeAnalysis()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3436
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3437
	iIdentity = EIssueIdentityStruct;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3438
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3439
////////////////////////////////////////////////////////////////////////////////////////
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3440