--- a/apicompatanamdw/compatanalysercmd/headeranalyser/src/BBCAnalyser.cpp Thu Apr 22 17:15:08 2010 +0530
+++ b/apicompatanamdw/compatanalysercmd/headeranalyser/src/BBCAnalyser.cpp Mon Apr 26 16:28:13 2010 +0530
@@ -822,19 +822,19 @@
{
// Serious problem, the analysed file is not in the GCCXML output
iReport.addIssue(fileit->first,"", EIssueIdentityFile, EIssueTypeEmpty,
- BCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), SCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), "", 0, fileit->second, "");
+ BCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), SCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), "", 0, "",fileit->second, "");
}
else if ( !bfilefound[i] )
{
// Serious problem, the analysed file is not in the GCCXML output
iReport.addIssue(fileit->first,"", EIssueIdentityFile, EIssueTypeEmpty,
- BCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), SCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), "", 0, fileit->second, "");
+ BCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), SCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), "", 0, "",fileit->second, "");
}
else if ( !cfilefound[i])
{
// Serious problem, the analysed file is not in the GCCXML output
iReport.addIssue(fileit->first,"", EIssueIdentityFile, EIssueTypeEmpty,
- BCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), SCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), "", 0, fileit->second, "",false);
+ BCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), SCseverityAccessible<EIssueIdentityFile,EIssueTypeEmpty>(true), "", 0, "",fileit->second, "");
}
}
@@ -926,7 +926,7 @@
if (report)
{
- AddIssue<EIssueIdentityFile, EIssueTypeUnderConstruction>(&baseline, baseline,0);
+ AddIssue<EIssueIdentityFile, EIssueTypeUnderConstruction>(&baseline, baseline,0,"");
}
return 1;
}
@@ -939,7 +939,7 @@
//
int UnderConstructionNodeAnalysis::FindNodeAndAnalyse(HANodeIterator baseline,HANodeIterator current)
{
- AddIssue<EIssueIdentityFile,EIssueTypeUnderConstruction>(&baseline,baseline,0);
+ AddIssue<EIssueIdentityFile,EIssueTypeUnderConstruction>(&baseline,baseline,0,"");
return 1;
}
////////////////////////////////////////////////////////////////////////////////////////
@@ -964,7 +964,7 @@
DOMNode* node = NodeAnalysis::findNode(baseline,current);
if ( !node )
{
- AddIssue<EIssueIdentityVariable, EIssueTypeRemoval>(&baseline, baseline,0);
+ AddIssue<EIssueIdentityVariable, EIssueTypeRemoval>(&baseline, baseline,0,"");
return 1;
}
current.current = node;
@@ -987,8 +987,16 @@
int ret = 0;
int lineNo = 0;
+ string issueLoc;
const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
lineNo = atoi(toString(lineNumber).c_str());
+ const XMLCh* fnameNode= current.GetAttribute(KXMLFileIdString);
+ if( fnameNode!= NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool ret1 = fileNode.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
if ( IsAnonymousType(baseline) )
{
@@ -1018,7 +1026,7 @@
{
if (report)
{
- AddIssue<EIssueIdentityVariable, EIssueTypeChangeInType>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityVariable, EIssueTypeChangeInType>(&baseline, current,lineNo,issueLoc);
}
++ret;
}
@@ -1032,7 +1040,7 @@
{
if (report)
{
- AddIssue<EIssueIdentityVariable, EIssueTypeChangeInType>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityVariable, EIssueTypeChangeInType>(&baseline, current,lineNo,issueLoc);
}
++ret;
}
@@ -1046,7 +1054,7 @@
{
if (report)
{
- AddIssue<EIssueIdentityVariable, EIssueTypeChangeInType>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityVariable, EIssueTypeChangeInType>(&baseline, current,lineNo,issueLoc);
}
++ret;
}
@@ -1057,7 +1065,7 @@
{
if (report)
{
- AddIssue<EIssueIdentityVariable, EIssueTypeChangeInInitialisation>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityVariable, EIssueTypeChangeInInitialisation>(&baseline, current,lineNo,issueLoc);
}
++ret;
}
@@ -1067,7 +1075,7 @@
if (report)
{
//AddIssue<iIdentity,EIssueTypeAccess>(&baseline, current);
- AddIssue<EIssueIdentityVariable,EIssueTypeAccess>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityVariable,EIssueTypeAccess>(&baseline, current,lineNo,issueLoc);
}
ret += 1;
}
@@ -1104,13 +1112,14 @@
for (i = 0; i < enumchildcount; ++i)
{
int lineNo = 0;
+ string issueLoc;
HANodeIterator enumchildit(baseline);
enumchildit.current = enumchilds->item(i);
DOMNode* node = NodeAnalysis::findNode(enumchildit,current);
if ( !node )
{
- AddIssue<EIssueIdentityEnumerationValue,EIssueTypeRemoval>(&enumchildit, enumchildit, 0, baseline.GetAttribute(KXMLFileIdString));
+ AddIssue<EIssueIdentityEnumerationValue,EIssueTypeRemoval>(&enumchildit, enumchildit, 0, "", baseline.GetAttribute(KXMLFileIdString));
++ret;
continue;
}
@@ -1118,10 +1127,17 @@
DOMNode* parentnode = node->getParentNode();
const XMLCh* lineNumber = GetAttribute(parentnode,KXMLLineString);
lineNo = atoi(toString(lineNumber).c_str());
+ const XMLCh* fnameNode= current.GetAttribute(KXMLFileIdString);
+ if( fnameNode!= NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool ret1 = fileNode.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
if ( !CheckEnumValue(enumchildit,current) )
{
- AddIssue<EIssueIdentityEnumerationValue,EIssueTypeChangeInInitialisation>(&enumchildit, current, lineNo, baseline.GetAttribute(KXMLFileIdString));
+ AddIssue<EIssueIdentityEnumerationValue,EIssueTypeChangeInInitialisation>(&enumchildit, current, lineNo, issueLoc,baseline.GetAttribute(KXMLFileIdString));
++ret;
}
HANodeIterator currentparent(current);
@@ -1129,7 +1145,7 @@
{
if ( !CheckAccessModifier(baseline,currentparent) )
{
- AddIssue<EIssueIdentityEnumerationValue,EIssueTypeAccess>(&enumchildit, current, lineNo, baseline.GetAttribute(KXMLFileIdString));
+ AddIssue<EIssueIdentityEnumerationValue,EIssueTypeAccess>(&enumchildit, current, lineNo, issueLoc, baseline.GetAttribute(KXMLFileIdString));
++ret;
}
}
@@ -1141,7 +1157,7 @@
DOMNode* node = NodeAnalysis::findNode(baseline,current);
if ( !node )
{
- AddIssue<EIssueIdentityEnumeration,EIssueTypeRemoval>(&baseline, baseline,0);
+ AddIssue<EIssueIdentityEnumeration,EIssueTypeRemoval>(&baseline, baseline,0,"");
return 1;
}
current.current = node;
@@ -1178,15 +1194,23 @@
int ret = 0;
int lineNo = 0;
+ string issueLoc;
const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
lineNo = atoi(toString(lineNumber).c_str());
+ const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
+ if( fnameNode!= NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool ret1 = fileNode.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
//{KXMLAlignString,ESimpleAttribute}
if ( !CompareAttributes(baseline,current,KXMLAlignString,ESimpleAttribute) )
{
if (report)
{
- AddIssue<EIssueIdentityEnumeration,EIssueTypeAlign>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityEnumeration,EIssueTypeAlign>(&baseline, current,lineNo,issueLoc);
}
++ret;
}
@@ -1196,7 +1220,7 @@
{
if (report)
{
- AddIssue<EIssueIdentityEnumeration,EIssueTypeSize>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityEnumeration,EIssueTypeSize>(&baseline, current,lineNo,issueLoc);
}
++ret;
}
@@ -1206,7 +1230,7 @@
if (report)
{
//AddIssue<iIdentity,EIssueTypeAccess>(&baseline, current);
- AddIssue<EIssueIdentityEnumeration, EIssueTypeAccess>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityEnumeration, EIssueTypeAccess>(&baseline, current,lineNo,issueLoc);
}
++ret;
}
@@ -1235,7 +1259,7 @@
{
if (report)
{
- AddIssue<EIssueIdentityEnumeration,EIssueTypeChange>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityEnumeration,EIssueTypeChange>(&baseline, current,lineNo,issueLoc);
}
++ret;
return ret;
@@ -1250,7 +1274,7 @@
if (report)
{
- AddIssue<EIssueIdentityEnumerationValue,EIssueTypeRemoval>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityEnumerationValue,EIssueTypeRemoval>(&baseline, current,lineNo,issueLoc);
}
++ret;
return ret;
@@ -1305,7 +1329,7 @@
if ( !node )
{
//AddIssue<iFuncType,EIssueTypeRemoval>(&baseline, baseline);
- AddIssueFunction<EIssueTypeRemoval>(&baseline,iFuncType,baseline,0);
+ AddIssueFunction<EIssueTypeRemoval>(&baseline,iFuncType,baseline,0,"");
return 1;
}
current.current = node;
@@ -1334,8 +1358,16 @@
//<!ATTLIST FunctionType returns IDREF #REQUIRED>
int lineNo = 0;
+ string issueLoc;
const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
lineNo = atoi(toString(lineNumber).c_str());
+ const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
+ if( fnameNode!= NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool ret1 = fileNode.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
const XMLCh* attributeValue = current.GetAttribute(KXMLAttributeString);
if (
@@ -1351,7 +1383,7 @@
{
if (report)
{
- AddIssueFunction<EIssueTypeRemoval>(&baseline,iFuncType,baseline,0);
+ AddIssueFunction<EIssueTypeRemoval>(&baseline,iFuncType,baseline,0,"");
}
++ret;
@@ -1366,7 +1398,7 @@
++ret;
if (report)
{
- AddIssueFunction<EIssueTypeParam>(&baseline,iFuncType,current,lineNo);
+ AddIssueFunction<EIssueTypeParam>(&baseline,iFuncType,current,lineNo,issueLoc);
}
}
else
@@ -1409,16 +1441,25 @@
currentsize = currentalign;
}
- if ( !Equals(baselinesize,currentsize) || !Equals(baselinealign, currentalign) ||
- !CompareAttributes(baselinechildit,currentchildit,KXMLDefaultString,EOptionalSimpleAttribute))
+ if ( !Equals(baselinesize,currentsize) || !Equals(baselinealign, currentalign) )
{
- ++ret;
- if (report)
- {
- //AddIssue<iFuncType,EIssueTypeParam>(&baseline, current);
- AddIssueFunction<EIssueTypeParam>(&baseline,iFuncType,current,lineNo);
- }
- break;
+ ++ret;
+ if (report)
+ {
+ //AddIssue<iFuncType,EIssueTypeParam>(&baseline, current);
+ AddIssueFunction<EIssueTypeParam>(&baseline,iFuncType,current,lineNo,issueLoc);
+ }
+ break;
+ }
+ // if default value is changed then it should be reported as informative
+ if(!CompareAttributes(baselinechildit,currentchildit,KXMLDefaultString,EOptionalSimpleAttribute))
+ {
+ ++ret;
+ if (report)
+ {
+ AddIssueFunction<EIssueTypeDefaultParam>(&baseline,iFuncType,current,lineNo,issueLoc);
+ }
+ break;
}
}
@@ -1431,7 +1472,7 @@
++ret;
if (report)
{
- AddIssueFunction<EIssueTypeReturn>(&baseline,iFuncType,current,lineNo);
+ AddIssueFunction<EIssueTypeReturn>(&baseline,iFuncType,current,lineNo,issueLoc);
}
}
@@ -1461,7 +1502,7 @@
DOMNode* node = NodeAnalysis::findNode(baseline,current);
if ( !node )
{
- AddIssue<EIssueIdentityTypedef,EIssueTypeRemoval>(&baseline, baseline,0);
+ AddIssue<EIssueIdentityTypedef,EIssueTypeRemoval>(&baseline, baseline,0,"");
return 1;
}
current.current = node;
@@ -1483,8 +1524,16 @@
//<Typedef id="_9" name="TOmaInt" type="_8" context="_1" location="f0:108" file="f0" line="108"/>
int lineNo = 0;
+ string issueLoc;
const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
lineNo = atoi(toString(lineNumber).c_str());
+ const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
+ if( fnameNode != NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool retval= fileNode.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
int ret = 0;
@@ -1492,7 +1541,7 @@
{
if (report)
{
- AddIssue<EIssueIdentityTypedef,EIssueTypeChange>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityTypedef,EIssueTypeChange>(&baseline, current,lineNo,issueLoc);
}
++ret;
}
@@ -1501,7 +1550,7 @@
{
if (report)
{
- AddIssue<EIssueIdentityTypedef,EIssueTypeChange>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityTypedef,EIssueTypeChange>(&baseline, current,lineNo,issueLoc);
}
++ret;
}
@@ -1525,7 +1574,7 @@
{
if (report)
{
- AddIssue<EIssueIdentityTypedef,EIssueTypeChange>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityTypedef,EIssueTypeChange>(&baseline, current,lineNo,issueLoc);
}
++ret;
}
@@ -1536,7 +1585,7 @@
if (report)
{
//AddIssue<iIdentity,EIssueTypeAccess>(&baseline, current);
- AddIssue<EIssueIdentityTypedef,EIssueTypeAccess>(&baseline, current,lineNo);
+ AddIssue<EIssueIdentityTypedef,EIssueTypeAccess>(&baseline, current,lineNo,issueLoc);
}
ret += 1;
}
@@ -1612,7 +1661,7 @@
if ( !node )
{
- AddIssue<EIssueIdentityUnion,EIssueTypeRemoval>(&baseline, baseline,0);
+ AddIssue<EIssueIdentityUnion,EIssueTypeRemoval>(&baseline, baseline,0,"");
return 1;
}
current.current = node;
@@ -1753,6 +1802,15 @@
TIssueIdentity identity = EIssueIdentityField;
bool accessthroughinline = false;
+ string issueLoc;
+ const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
+ if( fnameNode!= NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool ret1 = fileNode.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
+
if ( !CheckAccessibility(baseline,accessthroughinline,basemember.iAccess) )
{
identity = EIssueIdentityFieldInaccessible;
@@ -1764,7 +1822,8 @@
ret++;
if ( report )
{
- AddIssueField<EIssueTypeOffset>(&baseline,identity, currentfield,currentmember.iLineNo,NULL,basemember);
+ AddIssueField<EIssueTypeOffset>(&baseline,identity, currentfield,currentmember.iLineNo,
+ issueLoc,NULL,basemember);
}
else
{
@@ -1802,7 +1861,8 @@
{
if (report)
{
- AddIssueField<EIssueTypeChangeInType>(&baseline,identity, currentfield,currentmember.iLineNo,NULL,basemember);
+ AddIssueField<EIssueTypeChangeInType>(&baseline,identity, currentfield,currentmember.iLineNo,
+ issueLoc, NULL,basemember);
}
ret++;
}
@@ -1822,7 +1882,8 @@
{
if (report)
{
- AddIssueField<EIssueTypeChangeInType>(&baseline,identity, currentfield,currentmember.iLineNo,NULL,basemember);
+ AddIssueField<EIssueTypeChangeInType>(&baseline,identity, currentfield,currentmember.iLineNo,
+ issueLoc,NULL,basemember);
}
++ret;
}
@@ -1837,7 +1898,8 @@
ret++;
if ( report )
{
- AddIssueField<EIssueTypeChangeInType>(&baseline,identity, currentfield,currentmember.iLineNo,NULL,basemember);
+ AddIssueField<EIssueTypeChangeInType>(&baseline,identity, currentfield,currentmember.iLineNo,
+ issueLoc,NULL,basemember);
}
else
{
@@ -1853,7 +1915,8 @@
ret++;
if ( report )
{
- AddIssueField<EIssueTypeSize>(&baseline,identity, currentfield,currentmember.iLineNo,NULL,basemember);
+ AddIssueField<EIssueTypeSize>(&baseline,identity, currentfield,currentmember.iLineNo,
+ issueLoc,NULL,basemember);
}
else
{
@@ -1915,6 +1978,15 @@
const XMLCh* parenLinenumber = current.GetAttribute( KXMLLineString);
parentLineNo = atoi(toString(parenLinenumber).c_str());
+ string parentIssueLoc;
+ const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
+ if(fnameNode != NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool ret1 = fileNode.FindNodeById(fnameNode);
+ parentIssueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
+
// Build method maps for baseline and current platform's classes:
MethodMatchMap baseMap;
vector<DOMNode*>::const_iterator i = bexportedMethods.begin();
@@ -1961,7 +2033,7 @@
// Function signatures do not match
HANodeIterator removedMethod(baseline);
removedMethod.current = baseFunc->first;
- AddIssueFunction<EIssueTypeRemoval>(&removedMethod, identity, removedMethod,parentLineNo);
+ AddIssueFunction<EIssueTypeRemoval>(&removedMethod, identity, removedMethod,parentLineNo,parentIssueLoc);
++ret;
}
else if( baseFunc->second.returnValueMatch == false )
@@ -1969,7 +2041,7 @@
// Function return values do not match
HANodeIterator removedMethod(baseline);
removedMethod.current = baseFunc->first;
- AddIssueFunction<EIssueTypeReturn>(&removedMethod,identity, removedMethod,lineNo);
+ AddIssueFunction<EIssueTypeReturn>(&removedMethod,identity, removedMethod,lineNo,parentIssueLoc);
++ret;
}
}
@@ -2002,6 +2074,8 @@
vector<DOMNode*>::const_iterator bIter = bexportedMethods.begin();
for( ; bIter != bexportedMethods.end(); ++bIter )
{
+ int baseCount = 0;
+ int currCount = 0;
MethodMatchMap::iterator baseMapIter = baseMap.find(*bIter);
assert(baseMapIter != baseMap.end());
if( baseMapIter->second.signatureMatch )
@@ -2010,178 +2084,290 @@
}
HANodeIterator basemethod(baseline);
basemethod.current = *bIter;
-
- //Check the accessibility
- if ( CheckAccessibility(basemethod) )
- {
- vector<DOMNode*>::const_iterator cIter = cexportedMethods.begin();
-
+
+ vector<DOMNode*>::const_iterator cIter = cexportedMethods.begin();
+ const XMLCh* baseMathodID = basemethod->getNodeName();
+ const XMLCh* basenameatt;
+ const XMLCh* basereturnatt;
+ const XMLCh* basemangledatt;
+ if(Equals(baseMathodID,KXMLMethodString))
+ {
+ basenameatt = basemethod.GetAttribute(KXMLNameString);
+ HANodeIterator baseReturMathod(basemethod);
+ bool ret = baseReturMathod.FindNodeById(basemethod.GetAttribute(KXMLReturnsString));
+ basereturnatt = baseReturMathod.GetAttribute(KXMLNameString);
+ basemangledatt = basemethod.GetAttribute(KXMLMangledString);
+ }
+ for( ; cIter != cexportedMethods.end(); ++cIter)
+ {
+ HANodeIterator currentmethod(current);
+ currentmethod.current = *cIter;
+ const XMLCh* lineNumber1 = GetAttribute(currentmethod.current,KXMLLineString);
+ lineNo1 = atoi(toString(lineNumber1).c_str());
+
+ string issueLoc;
+ const XMLCh* fnameNode = currentmethod.GetAttribute(KXMLFileIdString);
+ if( fnameNode!= NULL)
+ {
+ HANodeIterator fileNode(currentmethod);
+ bool retval = fileNode.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
+
+ MethodMatchMap::iterator currMapIter = currMap.find(*cIter);
+
+ const XMLCh* curMathodID = currentmethod->getNodeName();
+ if(Equals(curMathodID,KXMLMethodString))
+ {
+ HANodeIterator curReturMathod(currentmethod);
+ bool ret1 = curReturMathod.FindNodeById(currentmethod.GetAttribute(KXMLReturnsString));
+ const XMLCh* curReturnatt = curReturMathod.GetAttribute(KXMLNameString);
+
+ // check for overloaded function, first time matching the name, return type and signature
+ if( Equals(baseMathodID,KXMLMethodString)&&
+ Equals(basenameatt, currentmethod.GetAttribute(KXMLNameString)) &&
+ Equals(basereturnatt, curReturnatt) &&
+ Equals(basemangledatt, currentmethod.GetAttribute(KXMLMangledString)) )
+ {
+ baseCount++;// match found
+ }
+
+
+ }
+
+ if( currMapIter != currMap.end() &&
+ currMapIter->second.signatureMatch == false &&
+ compareMethodsSignature(basemethod, currentmethod, **comparator) )
+ {
+ if( comparatorRound==CONSTFILTER_COMPARATOR )
+ {
+ // if one of the parameter has changed from non-const to const
+ ret++;
+ if(report)
+ {
+ //add the issue as it is a source compatibility break
+ AddIssueFunction<EIssueTypeParamConst>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
+ }
+
+ //make signature and return value true so that the issue is not reported again
+ if( baseMapIter != baseMap.end() )
+ baseMapIter->second.signatureMatch = true;
+ currMapIter->second.signatureMatch = true;
+
+ baseMapIter->second.returnValueMatch = true;
+ currMapIter->second.returnValueMatch = true;
+ break;
+ }
+
+ else if( comparatorRound==CONSTFILTER2_COMPARATOR )
+ {
+ // if one of the parameter has changed from const to non-const
+ ret++;
+ if(report)
+ {
+ //add the issue as it is a source compatibility break
+ AddIssueFunction<EIssueTypeParamConst2>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
+ }
+
+ //make signature and return value true so that the issue is not reported again
+ if( baseMapIter != baseMap.end() )
+ baseMapIter->second.signatureMatch = true;
+ currMapIter->second.signatureMatch = true;
+
+ baseMapIter->second.returnValueMatch = true;
+ currMapIter->second.returnValueMatch = true;
+ break;
+ }
+
+ if( baseMapIter != baseMap.end() )
+ baseMapIter->second.signatureMatch = true;
+ currMapIter->second.signatureMatch = true;
+ //Check also the default parameter values
+ DOMElement * baselineelement = static_cast<DOMElement*>(basemethod.current);
+ DOMNodeList* baselinechilds = baselineelement->getChildNodes();
+ DOMElement * currentelement = static_cast<DOMElement*>(currentmethod.current);
+ DOMNodeList* currentchilds = currentelement->getChildNodes();
+
+ XMLSize_t childcount = baselinechilds->getLength();
+
+ unsigned int i = 0;
+ for (i = 0; i < childcount; ++i)
+ {
+ DOMNode* baselinechild = baselinechilds->item(i);
+ HANodeIterator baselinechildit(baseline);
+ baselinechildit.current = baselinechild;
+
+ DOMNode* currentchild = currentchilds->item(i);
+ HANodeIterator currentchildit(current);
+ currentchildit.current = currentchild;
+
+ short nodetype = baselinechildit->getNodeType();
+ if (nodetype == DOMNode::ELEMENT_NODE)
+ {
+ const XMLCh * baselinesize = FindAttributeValueForType(baselinechildit,KXMLSizeString);
+ const XMLCh * currentsize = FindAttributeValueForType(currentchildit,KXMLSizeString);
+
+ const XMLCh * baselinealign = FindAttributeValueForType(baselinechildit,KXMLAlignString);
+ const XMLCh * currentalign = FindAttributeValueForType(currentchildit,KXMLAlignString);
+
+ if ( !baselinesize )
+ {
+ baselinesize = baselinealign;
+ }
+
+ if ( !currentsize )
+ {
+ currentsize = currentalign;
+ }
+
+ if ( !Equals(baselinesize,currentsize) || !Equals(baselinealign, currentalign) )
+ {
+ ++ret;
+ if (report)
+ {
+ AddIssueFunction<EIssueTypeParam>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
+ }
+ break;
+ }
+ // if default value is changed then it should be reported as informative
+ if(!CompareAttributes(baselinechildit,currentchildit,KXMLDefaultString,EOptionalSimpleAttribute))
+ {
+ ++ret;
+ if (report)
+ {
+ AddIssueFunction<EIssueTypeDefaultParam>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
+ }
+ break;
+ }
+ }
+ }
+
+ // Check function return values
+ const ComparatorVector& cmps = ComparatorFactory::Instance().GetComparators();
+ ComparatorVector::const_iterator retComparator = cmps.begin();
+ int retComparatorRound = 1;
+ for ( ; retComparator != cmps.end(); retComparator++ )
+ {
+ if ( compareMethodsReturn(basemethod,currentmethod, **retComparator) )
+ {
+ if( retComparatorRound==CONSTFILTER_COMPARATOR )
+ {
+ // if the return value has changed from const to non-const
+ ret++;
+ if(report)
+ {
+ //add the issue as it is a source compatibility break
+ AddIssueFunction<EIssueTypeReturnConst>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
+ }
+ }
+ else if( retComparatorRound==CONSTFILTER2_COMPARATOR )
+ {
+ // if the return calue has changed from non-const to const
+ ret++;
+ if(report)
+ {
+ //add the issue as it is a source compatibility break
+ AddIssueFunction<EIssueTypeReturnConst2>(&basemethod,identity,currentmethod,lineNo1,issueLoc);
+ }
+ }
+
+ baseMapIter->second.returnValueMatch = true;
+ currMapIter->second.returnValueMatch = true;
+ break;
+ }
+ retComparatorRound++;
+ }
+
+
+ if ( !CheckAccessModifier(basemethod,currentmethod) )
+ {
+ if (report)
+ {
+ AddIssueFunction<EIssueTypeAccess>(&basemethod,identity, currentmethod,lineNo1,issueLoc);
+ }
+ ++ret;
+ }
+ break;
+ }
+ } // end of cuurent mathod loop
+ // check for overloaded function in current having same name and return type with diff signature
+ if (baseCount)
+ {
+ currCount++;
+ cIter = cexportedMethods.begin();
+ int lineNo;
+ string fileName;
for( ; cIter != cexportedMethods.end(); ++cIter)
{
HANodeIterator currentmethod(current);
currentmethod.current = *cIter;
- const XMLCh* lineNumber1 = GetAttribute(currentmethod.current,KXMLLineString);
- lineNo1 = atoi(toString(lineNumber1).c_str());
-
- MethodMatchMap::iterator currMapIter = currMap.find(*cIter);
-
- if( currMapIter != currMap.end() &&
- currMapIter->second.signatureMatch == false &&
- compareMethodsSignature(basemethod, currentmethod, **comparator) )
- {
- if( comparatorRound==CONSTFILTER_COMPARATOR )
- {
- // if one of the parameter has changed from non-const to const
- ret++;
- if(report)
- {
- //add the issue as it is a source compatibility break
- AddIssueFunction<EIssueTypeParamConst>(&basemethod,identity,currentmethod,lineNo1);
- }
-
- //make signature and return value true so that the issue is not reported again
- if( baseMapIter != baseMap.end() )
- baseMapIter->second.signatureMatch = true;
- currMapIter->second.signatureMatch = true;
-
- baseMapIter->second.returnValueMatch = true;
- currMapIter->second.returnValueMatch = true;
- break;
- }
-
- else if( comparatorRound==CONSTFILTER2_COMPARATOR )
- {
- // if one of the parameter has changed from const to non-const
- ret++;
- if(report)
- {
- //add the issue as it is a source compatibility break
- AddIssueFunction<EIssueTypeParamConst2>(&basemethod,identity,currentmethod,lineNo1);
- }
-
- //make signature and return value true so that the issue is not reported again
- if( baseMapIter != baseMap.end() )
- baseMapIter->second.signatureMatch = true;
- currMapIter->second.signatureMatch = true;
-
- baseMapIter->second.returnValueMatch = true;
- currMapIter->second.returnValueMatch = true;
- break;
- }
-
- if( baseMapIter != baseMap.end() )
- baseMapIter->second.signatureMatch = true;
- currMapIter->second.signatureMatch = true;
- //Check also the default parameter values
- DOMElement * baselineelement = static_cast<DOMElement*>(basemethod.current);
- DOMNodeList* baselinechilds = baselineelement->getChildNodes();
- DOMElement * currentelement = static_cast<DOMElement*>(currentmethod.current);
- DOMNodeList* currentchilds = currentelement->getChildNodes();
-
- XMLSize_t childcount = baselinechilds->getLength();
-
- unsigned int i = 0;
- for (i = 0; i < childcount; ++i)
- {
- DOMNode* baselinechild = baselinechilds->item(i);
- HANodeIterator baselinechildit(baseline);
- baselinechildit.current = baselinechild;
-
- DOMNode* currentchild = currentchilds->item(i);
- HANodeIterator currentchildit(current);
- currentchildit.current = currentchild;
-
- short nodetype = baselinechildit->getNodeType();
- if (nodetype == DOMNode::ELEMENT_NODE)
- {
- const XMLCh * baselinesize = FindAttributeValueForType(baselinechildit,KXMLSizeString);
- const XMLCh * currentsize = FindAttributeValueForType(currentchildit,KXMLSizeString);
-
- const XMLCh * baselinealign = FindAttributeValueForType(baselinechildit,KXMLAlignString);
- const XMLCh * currentalign = FindAttributeValueForType(currentchildit,KXMLAlignString);
-
- if ( !baselinesize )
- {
- baselinesize = baselinealign;
- }
-
- if ( !currentsize )
- {
- currentsize = currentalign;
- }
-
- if ( !Equals(baselinesize,currentsize) || !Equals(baselinealign, currentalign) ||
- !CompareAttributes(baselinechildit,currentchildit,KXMLDefaultString,EOptionalSimpleAttribute))
- {
- ++ret;
- if (report)
- {
- AddIssueFunction<EIssueTypeParam>(&basemethod,identity,currentmethod,lineNo1);
- }
- break;
- }
- }
- }
-
- // Check function return values
- const ComparatorVector& cmps = ComparatorFactory::Instance().GetComparators();
- ComparatorVector::const_iterator retComparator = cmps.begin();
- int retComparatorRound = 1;
- for ( ; retComparator != cmps.end(); retComparator++ )
- {
- if ( compareMethodsReturn(basemethod,currentmethod, **retComparator) )
- {
- if( retComparatorRound==CONSTFILTER_COMPARATOR )
- {
- // if the return value has changed from const to non-const
- ret++;
- if(report)
- {
- //add the issue as it is a source compatibility break
- AddIssueFunction<EIssueTypeReturnConst>(&basemethod,identity,currentmethod,lineNo1);
- }
- }
- else if( retComparatorRound==CONSTFILTER2_COMPARATOR )
- {
- // if the return calue has changed from non-const to const
- ret++;
- if(report)
- {
- //add the issue as it is a source compatibility break
- AddIssueFunction<EIssueTypeReturnConst2>(&basemethod,identity,currentmethod,lineNo1);
- }
- }
-
- baseMapIter->second.returnValueMatch = true;
- currMapIter->second.returnValueMatch = true;
- break;
- }
- retComparatorRound++;
- }
-
-
- if ( !CheckAccessModifier(basemethod,currentmethod) )
- {
- if (report)
- {
- AddIssueFunction<EIssueTypeAccess>(&basemethod,identity, currentmethod,lineNo1);
- }
- ++ret;
- }
- break;
- }
- }
- }
- else
- {
- // Not accessible, can be marked as matching.
- if( baseMapIter != baseMap.end() )
- {
- baseMapIter->second.signatureMatch = true;
- baseMapIter->second.returnValueMatch = true;
- }
- }
- }
+
+ const XMLCh* curMathodID = currentmethod->getNodeName();
+ if(Equals(curMathodID,KXMLMethodString))
+ {
+ HANodeIterator curReturMathod(currentmethod);
+ bool ret1 = curReturMathod.FindNodeById(currentmethod.GetAttribute(KXMLReturnsString));
+ const XMLCh* curReturnatt = curReturMathod.GetAttribute(KXMLNameString);
+
+ const XMLCh* lineNumber1 = GetAttribute(currentmethod.current,KXMLLineString);
+ lineNo = atoi(toString(lineNumber1).c_str());
+ const XMLCh* fnameNode = currentmethod.GetAttribute(KXMLFileIdString);
+ if(fnameNode != NULL)
+ {
+ HANodeIterator filenode1(currentmethod);
+ ret1 = filenode1.FindNodeById(fnameNode);
+ fileName = toString(filenode1.GetAttribute(KXMLNameString));
+ }
+
+ if(Equals(basenameatt, currentmethod.GetAttribute(KXMLNameString)) &&
+ Equals(basereturnatt, curReturnatt ) &&
+ !Equals(basemangledatt, currentmethod.GetAttribute(KXMLMangledString)) )
+ {
+ currCount++;// overloaded function found in current
+ break;
+ }
+ }
+ }
+
+ //Now check if the function is overloaded in base also or not .
+ if(currCount > 1)
+ {
+ vector<DOMNode*>::const_iterator baseInnerIter = bexportedMethods.begin();
+ for( ; baseInnerIter != bexportedMethods.end(); ++baseInnerIter )
+ {
+ HANodeIterator bmethod(baseline);
+ bmethod.current = *baseInnerIter;
+
+ const XMLCh* bMathodID = bmethod->getNodeName();
+ if(Equals(bMathodID,KXMLMethodString))
+ {
+ HANodeIterator returMathod(bmethod);
+ bool ret1 = returMathod.FindNodeById(bmethod.GetAttribute(KXMLReturnsString));
+ const XMLCh* returnatt = returMathod.GetAttribute(KXMLNameString);
+
+ if(Equals(basenameatt, bmethod.GetAttribute(KXMLNameString)) &&
+ Equals(basereturnatt, returnatt) &&
+ !Equals(basemangledatt, bmethod.GetAttribute(KXMLMangledString)) )
+ {
+ baseCount++;// overloaded function found in base
+ break;
+ }
+ }
+ }
+
+ // Report the overloaded function only if it first time overloaded
+ if(baseCount == 1)
+ {
+ ret++;
+ if(report)
+ {
+ //add the issue as it is a binary compatibility break
+ AddIssue<EIssueIdentityExportedFunction,EIssueTypeOverload>(&basemethod, basemethod,lineNo,fileName);
+ }
+ }
+ }
+ }
+ }//end of base exported mathod loop
// Recursive call with next comparator (if any) and updated method maps.
const ComparatorVector& cmps = ComparatorFactory::Instance().GetComparators();
@@ -2247,6 +2433,15 @@
const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
lineNo = atoi(toString(lineNumber).c_str());
+ string issueLoc;
+ const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
+ if(fnameNode != NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool retval = fileNode.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
+
// If you don't like to see the issue about base size when the size has changed
// uncomment the test below
@@ -2281,7 +2476,8 @@
{
if (report)
{
- AddIssue<EIssueIdentityVirtualTablePointer,EIssueTypeOffset>(&baseline,current,lineNo,NULL,bfields[i]);
+ AddIssue<EIssueIdentityVirtualTablePointer,EIssueTypeOffset>(&baseline,current,
+ lineNo,issueLoc,NULL,bfields[i]);
}
++ret;
}
@@ -2316,7 +2512,8 @@
{
if (report)
{
- AddIssue<EIssueIdentityField,EIssueTypeAccess>(&baseline, currentfield,cfields[ii].iLineNo,NULL,bfields[i]);
+ AddIssue<EIssueIdentityField,EIssueTypeAccess>(&baseline, currentfield,cfields[ii].iLineNo,
+ issueLoc,NULL,bfields[i]);
}
++ret;
}
@@ -2352,7 +2549,8 @@
{
if (report)
{
- AddIssue<EIssueIdentityVirtualTablePointer,EIssueTypeRemoval>(&baseline,current,lineNo,NULL,bfields[i]);
+ AddIssue<EIssueIdentityVirtualTablePointer,EIssueTypeRemoval>(&baseline,current,lineNo,
+ issueLoc,NULL,bfields[i]);
}
continue;
}
@@ -2366,11 +2564,13 @@
{
if (fieldAccessible[i])
{
- AddIssue<EIssueIdentityField,EIssueTypeRemoval>(&baseline, basefield,lineNo,NULL,bfields[i]);
+ AddIssue<EIssueIdentityField,EIssueTypeRemoval>(&baseline, basefield,lineNo,
+ issueLoc,NULL,bfields[i]);
}
else
{
- AddIssue<EIssueIdentityFieldInaccessible,EIssueTypeRemoval>(&baseline, basefield,lineNo,NULL,bfields[i]);
+ AddIssue<EIssueIdentityFieldInaccessible,EIssueTypeRemoval>(&baseline, basefield,lineNo,
+ issueLoc,NULL,bfields[i]);
}
}
++ret;
@@ -2409,7 +2609,8 @@
{
if (report)
{
- AddIssue<EIssueIdentityVirtualTablePointer,EIssueTypeAddition>(&baseline,current,lineNo,NULL,cfields[i]);
+ AddIssue<EIssueIdentityVirtualTablePointer,EIssueTypeAddition>(&baseline,current,lineNo,
+ issueLoc,NULL,cfields[i]);
}
continue;
}
@@ -2418,7 +2619,8 @@
currentfield.current = cfields[i].iNode;
if (report && iReportAddedMembers)
{
- AddIssue<EIssueIdentityField,EIssueTypeAddition>(¤t, currentfield,cfields[i].iLineNo,NULL,cfields[i]);
+ AddIssue<EIssueIdentityField,EIssueTypeAddition>(¤t, currentfield,cfields[i].iLineNo,
+ issueLoc,NULL,cfields[i]);
}
++ret;
}
@@ -2523,13 +2725,21 @@
int parentLineNo = 0;
int lineNo = 0;
+ string parentIssueLoc;
const XMLCh* parentlineNumber = current.GetAttribute(KXMLLineString);
parentLineNo = atoi(toString(parentlineNumber).c_str());
-
+ const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
+ if(fnameNode != NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool retval = fileNode.FindNodeById(fnameNode);
+ parentIssueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
if ( 0 != compareVirtualTables(baseline,current,basevtable,currentvtable,report) )
{
// Virtual table has been changed.
- AddIssue<EIssueIdentityVirtualTable,EIssueTypeChange>(&baseline, current, parentLineNo, NULL, "[Primary-vtable]");
+ AddIssue<EIssueIdentityVirtualTable,EIssueTypeChange>(&baseline, current, parentLineNo,
+ parentIssueLoc, NULL, "[Primary-vtable]");
}
vector<pair<DOMNode*,int> > bvirtualMethodsWithIndex;
@@ -2559,9 +2769,17 @@
currentmethod.current = cvirtualMethodsWithIndex[ii].first;
lineNo = 0;
+ string issueLoc;
const XMLCh* lineNumber = currentmethod.GetAttribute(KXMLLineString);
lineNo = atoi(toString(lineNumber).c_str());
- if ( compareMethodsSignature(basemethod,currentmethod, **defaultcomparator) )
+ const XMLCh* fnameNode = currentmethod.GetAttribute(KXMLFileIdString);
+ if( fnameNode!= NULL)
+ {
+ HANodeIterator fileNode1(currentmethod);
+ bool retval = fileNode1.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode1.GetAttribute(KXMLNameString));
+ }
+ if ( compareMethodsSignature(basemethod,currentmethod, **defaultcomparator) )
{
virtualMethodFound[ii] = true;
if (bvirtualMethodsWithIndex[i].second != cvirtualMethodsWithIndex[ii].second)
@@ -2571,7 +2789,8 @@
// and the binary compatibility is broken.
if (report)
{
- AddIssue<EIssueIdentityVirtualFunction,EIssueTypeOrderChange>(&basemethod, currentmethod,lineNo);
+ AddIssue<EIssueIdentityVirtualFunction,EIssueTypeOrderChange>(&basemethod, currentmethod,
+ lineNo,issueLoc);
}
++ret;
}
@@ -2614,13 +2833,24 @@
currentsize = currentalign;
}
- if ( !Equals(baselinesize,currentsize) || !Equals(baselinealign, currentalign) ||
- !CompareAttributes(baselinechildit,currentchildit,KXMLDefaultString,EOptionalSimpleAttribute))
+ if ( !Equals(baselinesize,currentsize) || !Equals(baselinealign, currentalign) )
{
++ret;
if (report)
{
- AddIssue<EIssueIdentityVirtualFunction,EIssueTypeParam>(&basemethod,currentmethod, lineNo);
+ AddIssue<EIssueIdentityVirtualFunction,EIssueTypeParam>(&basemethod,currentmethod,
+ lineNo,issueLoc);
+ }
+ break;
+ }
+ // if default value is changed then it should be reported as informative
+ if(!CompareAttributes(baselinechildit,currentchildit,KXMLDefaultString,EOptionalSimpleAttribute))
+ {
+ ++ret;
+ if (report)
+ {
+ AddIssue<EIssueIdentityVirtualFunction,EIssueTypeDefaultParam>(&basemethod,currentmethod,
+ lineNo,issueLoc);
}
break;
}
@@ -2631,7 +2861,7 @@
{
if (report)
{
- AddIssue<EIssueIdentityVirtualFunction,EIssueTypeReturn>(&basemethod, currentmethod,lineNo);
+ AddIssue<EIssueIdentityVirtualFunction,EIssueTypeReturn>(&basemethod, currentmethod,lineNo,issueLoc);
}
++ret;
}
@@ -2640,7 +2870,7 @@
{
if (report)
{
- AddIssue<EIssueIdentityVirtualFunction,EIssueTypeAccess>(&basemethod, currentmethod,lineNo);
+ AddIssue<EIssueIdentityVirtualFunction,EIssueTypeAccess>(&basemethod, currentmethod,lineNo,issueLoc);
}
++ret;
}
@@ -2674,7 +2904,8 @@
{
if (report)
{
- AddIssue<EIssueIdentityVirtualFunction,EIssueTypeRemoval>(&basemethod, basemethod,parentLineNo);
+ AddIssue<EIssueIdentityVirtualFunction,EIssueTypeRemoval>(&basemethod, basemethod,
+ parentLineNo,parentIssueLoc);
}
++ret;
}
@@ -2689,19 +2920,35 @@
currentmethod.current = cvirtualMethodsWithIndex[i].first;
lineNo = 0;
+ string issueLoc;
const XMLCh* lineNumber = currentmethod.GetAttribute(KXMLLineString);
lineNo = atoi(toString(lineNumber).c_str());
+ const XMLCh* fnameNode = currentmethod.GetAttribute(KXMLFileIdString);
+ if( fnameNode!= NULL)
+ {
+ HANodeIterator fileNode1(currentmethod);
+ bool retval = fileNode1.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode1.GetAttribute(KXMLNameString));
+ }
//Check the base vtable for entry for this function
unsigned int baseindex = cvirtualMethodsWithIndex[i].second;
if ( (baseindex < basevtable.size()) && (basevtable[baseindex].first == GenerateFunctionSignature(currentmethod)) )
- {
- //This is a new overwrite and we should report this if the class is derivable
- if (ClassIsDerivable(baseline))
+ {
+ // New rule is added for Q_OBJECT macro defining virtual functions.
+ // Do - add the Q_OBJECT macro to a class if the class already inherits from QObject ,
+ // should not report as overridden.
+ if( basevtable[baseindex].first == __Q_OBJECT_METAOBJECT__
+ || basevtable[baseindex].first == __Q_OBJECT_METACALL__
+ || basevtable[baseindex].first == __Q_OBJECT_METACAST__ )
{
+ }
+ else if(ClassIsDerivable(baseline))
+ {//This is a new overwrite and we should report this if the class is derivable
if (report)
{
- AddIssue<EIssueIdentityVirtualFunction,EIssueTypeNewOverride>(¤tmethod, currentmethod,lineNo);
+ AddIssue<EIssueIdentityVirtualFunction,EIssueTypeNewOverride>(¤tmethod, currentmethod,
+ lineNo,issueLoc);
}
++ret;
}
@@ -2713,7 +2960,8 @@
// then generate virtual table for them and search for the function signature from them
if (report)
{
- AddIssue<EIssueIdentityVirtualFunction,EIssueTypeAddition>(¤tmethod, currentmethod,lineNo);
+ AddIssue<EIssueIdentityVirtualFunction,EIssueTypeAddition>(¤tmethod, currentmethod,
+ lineNo,issueLoc);
}
++ret;
}
@@ -2740,10 +2988,18 @@
int lineNo = 0;
const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
lineNo = atoi(toString(lineNumber).c_str());
+ string issueLoc;
+ const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
+ if(fnameNode != NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool retval = fileNode.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
++ret;
if (report)
{
- AddIssueClass<EIssueTypeBaseSize>(&baseline,iIdentity, current,lineNo);
+ AddIssueClass<EIssueTypeBaseSize>(&baseline,iIdentity, current,lineNo,issueLoc);
}
}
}
@@ -2835,8 +3091,16 @@
XMLSize_t currentchildcount = currentchilds->getLength();
int lineNo = 0;
+ string issueLoc;
const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
lineNo = atoi(toString(lineNumber).c_str());
+ const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
+ if(fnameNode!= NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool retval = fileNode.FindNodeById(fnameNode);
+ issueLoc = toString(fileNode.GetAttribute(KXMLNameString));
+ }
if ( baselinechildcount == currentchildcount )
{
unsigned int i = 0;
@@ -2871,7 +3135,8 @@
string vtablename = "[";
vtablename += basename;
vtablename += "-vtable]";
- AddIssue<EIssueIdentityVirtualTable,EIssueTypeChange>(&baseline, current, lineNo, NULL, vtablename);
+ AddIssue<EIssueIdentityVirtualTable,EIssueTypeChange>(&baseline, current,
+ lineNo, issueLoc,NULL, vtablename);
}
}
@@ -2881,7 +3146,7 @@
//Virtuality differs
if (report)
{
- AddIssueClass<EIssueTypeInheritance>(&baseline,iIdentity, current,lineNo);
+ AddIssueClass<EIssueTypeInheritance>(&baseline,iIdentity, current,lineNo,issueLoc);
}
++ret;
}
@@ -2892,7 +3157,8 @@
{
string subobjectname = "[" + basename;
subobjectname += "]";
- AddIssue<EIssueIdentitySubobject,EIssueTypeOffset>(&baseline,current,lineNo, NULL,subobjectname);
+ AddIssue<EIssueIdentitySubobject,EIssueTypeOffset>(&baseline,current,lineNo,
+ issueLoc,NULL,subobjectname);
}
++ret;
}
@@ -2907,7 +3173,7 @@
//base class removed from inheritance
string subobjectname = "[" + basename;
subobjectname += "]";
- AddIssue<EIssueIdentitySubobject,EIssueTypeRemoval>(&baseline,current,lineNo, NULL,subobjectname);
+ AddIssue<EIssueIdentitySubobject,EIssueTypeRemoval>(&baseline,current,lineNo,issueLoc,NULL,subobjectname);
}
++ret;
}
@@ -2917,7 +3183,7 @@
//Different amount of bases
if (report)
{
- AddIssueClass<EIssueTypeInheritance>(&baseline,iIdentity, current,lineNo);
+ AddIssueClass<EIssueTypeInheritance>(&baseline,iIdentity, current,lineNo,issueLoc);
}
++ret;
@@ -2953,7 +3219,7 @@
{
string subobjectname = "[" + basename;
subobjectname += "]";
- AddIssue<EIssueIdentitySubobject,EIssueTypeRemoval>(&baseline,current,lineNo, NULL,subobjectname);
+ AddIssue<EIssueIdentitySubobject,EIssueTypeRemoval>(&baseline,current,lineNo,issueLoc,NULL,subobjectname);
}
++ret;
}
@@ -2999,7 +3265,7 @@
if ( !node )
{
//AddIssue<>(&baseline,EIssue_class_removal);
- AddIssue<EIssueIdentityClass,EIssueTypeRemoval>(&baseline, baseline,0);
+ AddIssue<EIssueIdentityClass,EIssueTypeRemoval>(&baseline, baseline,0,"");
return 1;
}
current.current = node;
@@ -3022,6 +3288,14 @@
int lineNo = 0;
const XMLCh* lineNumber = current.GetAttribute(KXMLLineString);
lineNo = atoi(toString(lineNumber).c_str());
+ string issueLoc;
+ const XMLCh* fnameNode = current.GetAttribute(KXMLFileIdString);
+ if( fnameNode!= NULL)
+ {
+ HANodeIterator fileNode(current);
+ bool retval = fileNode.FindNodeById(fnameNode);
+ issueLoc =toString(fileNode.GetAttribute(KXMLNameString));
+ }
const XMLCh* baseanalysisstatus = baseline.GetAttribute(KXMLBBCAnalysisStatus);
@@ -3069,7 +3343,7 @@
}
else
{
- AddIssueClass<EIssueTypeNotAnalysed>(&baseline,iIdentity, baseline,0);
+ AddIssueClass<EIssueTypeNotAnalysed>(&baseline,iIdentity, baseline,0,issueLoc);
ret = 1;
}
}
@@ -3081,7 +3355,7 @@
{
if (report)
{
- AddIssueClass<EIssueTypeAccess>(&baseline,iIdentity, current,lineNo);
+ AddIssueClass<EIssueTypeAccess>(&baseline,iIdentity, current,lineNo,issueLoc);
}
ret += 1;
}
@@ -3090,13 +3364,13 @@
// Check if the class has virtual bases
if ( baseline.CheckForBooleanAttribute(KXMLBBCVirtualInheritanceString) )
{
- AddIssueClass<EIssueTypeVirtualBases>(&baseline,iIdentity, current,lineNo);
+ AddIssueClass<EIssueTypeVirtualBases>(&baseline,iIdentity, current,lineNo,issueLoc);
++ret;
}
if ( current.CheckForBooleanAttribute(KXMLBBCVirtualInheritanceString) )
{
- AddIssueClass<EIssueTypeVirtualBases>(¤t,iIdentity, current,lineNo);
+ AddIssueClass<EIssueTypeVirtualBases>(¤t,iIdentity, current,lineNo,issueLoc);
++ret;
}
@@ -3108,7 +3382,7 @@
{
if (report)
{
- AddIssueClass<EIssueTypeAlign>(&baseline,iIdentity, current,lineNo);
+ AddIssueClass<EIssueTypeAlign>(&baseline,iIdentity, current,lineNo,issueLoc);
iReportAddedMembers = true;
}
ret += 1;
@@ -3118,7 +3392,7 @@
{
if (report)
{
- AddIssueClass<EIssueTypeSize>(&baseline,iIdentity, current,lineNo);
+ AddIssueClass<EIssueTypeSize>(&baseline,iIdentity, current,lineNo,issueLoc);
iReportAddedMembers = true;
}
ret += 1;