srcanamdw/codescanner/scripts/deleteMemberVariable.py
author noe\swadi
Thu, 18 Feb 2010 12:29:02 +0530
changeset 1 22878952f6e2
permissions -rw-r--r--
Committing the CodeScanner Core tool This component has been moved from the StaticAnaApps package. BUG : 5889 (http://developer.symbian.org/webbugs/show_bug.cgi?id=5889).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     1
# #################################################################
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     3
# All rights reserved.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     4
# 
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     5
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     6
# 
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     7
# * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     8
# * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     9
# * Neither the name of Nokia Corporation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    10
# 
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    11
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    12
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    13
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    14
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    15
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    16
#
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    17
# deleteMemberVariable.py
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    18
#
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    19
# Checks : Member variable deleted incorrectly.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    20
#
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    21
# Reason : When a member variable is deleted, it should be assigned 
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    22
# either to NULL or to another value. This prevents accidental 
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    23
# access of the deleted object. If a NewL() or other leaving 
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    24
# function is called to reassign the member variable, it should 
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    25
# first be assigned to NULL in case that function leaves.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    26
#
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    27
# #################################################################
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    28
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    29
script = CScript("deleteMemberVariable")
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    30
script.iReString = r"""
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    31
	delete		# delete command
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    32
	\s*			# optional space
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    33
	\(*			# optional open bracket
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    34
	\s*			# optional space
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    35
	i[A-Z]		# member variable name
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    36
	"""
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    37
script.iFileExts = ["cpp"]
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    38
script.iCategory = KCategoryCanPanic
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    39
script.iIgnore = KIgnoreCommentsAndQuotes
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    40
script.iSeverity = KSeverityHigh
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    41
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    42
deleteMemberVariableLeavingFunction = re.compile("""
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    43
	[A-Za-z0-9]+
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    44
	L
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    45
	(C|D)*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    46
	\s*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    47
	\(
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    48
	""", re.VERBOSE)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    49
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    50
deleteMemberVariableNewELeave = re.compile("""
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    51
	new
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    52
	\s*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    53
	\(
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    54
	\s*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    55
	ELeave
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    56
	\s*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    57
	\)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    58
	""", re.VERBOSE)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    59
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    60
deleteMemberVariableLeave = re.compile("""
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    61
	User::Leave
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    62
	""", re.VERBOSE)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    63
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    64
deleteMemberVariableArrayDeletion = re.compile("""
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    65
	(\.|->)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    66
	\s*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    67
	Delete
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    68
	\s*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    69
	\(
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    70
	""", re.VERBOSE)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    71
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    72
deleteMemberVariableArrayDeletion2 = re.compile("""
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    73
	(\.|->)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    74
	\s*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    75
	Remove
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    76
	\s*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    77
	\(
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    78
	""", re.VERBOSE)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    79
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    80
def deleteMemberVariableCompare(lines, currentline, rematch, filename):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    81
	line = lines[currentline]
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    82
	m = rematch.search(line)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    83
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    84
	if m:
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    85
		if (scanner.iCurrentMethodName.find(scanner.iCurrentClassName) > -1):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    86
			return 0
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    87
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    88
		deletingArrayMember = 0
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    89
		if (line.find("[")):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    90
			deletingArrayMember = 1
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    91
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    92
		# get the variable name, between the 'delete' and the ';'
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    93
		endindex = line.find(";")
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    94
		if (endindex == -1):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    95
			endindex = len(line)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    96
		startindex = line.find("delete")
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    97
		variable = line[startindex+6:endindex]
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    98
		variable2 = TrimVariableName(variable)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    99
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   100
		bracketdepth = GetBracketDepth(lines, currentline)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   101
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   102
		i = currentline
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   103
		while (i < len(lines)):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   104
			nextLine = lines[i]
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   105
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   106
			if deleteMemberVariableLeavingFunction.search(nextLine):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   107
				return 1
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   108
			if deleteMemberVariableLeave.search(nextLine):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   109
				return 1
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   110
			if deleteMemberVariableNewELeave.search(nextLine):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   111
				return 1
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   112
			
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   113
			if (deletingArrayMember == 1):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   114
				if (nextLine.find(variable2)):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   115
					if deleteMemberVariableArrayDeletion.search(nextLine):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   116
						return 0
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   117
					if deleteMemberVariableArrayDeletion2.search(nextLine):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   118
						return 0
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   119
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   120
			foundAssignment = nextLine.find("=")
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   121
			if (foundAssignment > -1 and nextLine[foundAssignment+1] != "="):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   122
				assigned = nextLine[:foundAssignment]
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   123
				if (assigned.find(variable2)):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   124
					return 0
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   125
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   126
			if (nextLine.find('{') >= 0):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   127
				bracketdepth = bracketdepth + 1
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   128
			if (nextLine.find('}') >= 0):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   129
				bracketdepth = bracketdepth - 1
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   130
				if (bracketdepth == 0):
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   131
					return 1
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   132
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   133
			i = i + 1
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   134
	return 0
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   135
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   136
script.iCompare	= deleteMemberVariableCompare
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   137
scanner.AddScript(script)