Code Duplication    Length = 62-62 lines in 2 locations

sdk/build-support/cpplint.py 1 location

@@ 5781-5842 (lines=62) @@
5778
          ' OR use pair directly OR if appropriate, construct a pair directly')
5779
5780
5781
def CheckRedundantVirtual(filename, clean_lines, linenum, error):
5782
  """Check if line contains a redundant "virtual" function-specifier.
5783
5784
  Args:
5785
    filename: The name of the current file.
5786
    clean_lines: A CleansedLines instance containing the file.
5787
    linenum: The number of the line to check.
5788
    error: The function to call with any errors found.
5789
  """
5790
  # Look for "virtual" on current line.
5791
  line = clean_lines.elided[linenum]
5792
  virtual = Match(r'^(.*)(\bvirtual\b)(.*)$', line)
5793
  if not virtual: return
5794
5795
  # Ignore "virtual" keywords that are near access-specifiers.  These
5796
  # are only used in class base-specifier and do not apply to member
5797
  # functions.
5798
  if (Search(r'\b(public|protected|private)\s+$', virtual.group(1)) or
5799
      Match(r'^\s+(public|protected|private)\b', virtual.group(3))):
5800
    return
5801
5802
  # Ignore the "virtual" keyword from virtual base classes.  Usually
5803
  # there is a column on the same line in these cases (virtual base
5804
  # classes are rare in google3 because multiple inheritance is rare).
5805
  if Match(r'^.*[^:]:[^:].*$', line): return
5806
5807
  # Look for the next opening parenthesis.  This is the start of the
5808
  # parameter list (possibly on the next line shortly after virtual).
5809
  # TODO(unknown): doesn't work if there are virtual functions with
5810
  # decltype() or other things that use parentheses, but csearch suggests
5811
  # that this is rare.
5812
  end_col = -1
5813
  end_line = -1
5814
  start_col = len(virtual.group(2))
5815
  for start_line in xrange(linenum, min(linenum + 3, clean_lines.NumLines())):
5816
    line = clean_lines.elided[start_line][start_col:]
5817
    parameter_list = Match(r'^([^(]*)\(', line)
5818
    if parameter_list:
5819
      # Match parentheses to find the end of the parameter list
5820
      (_, end_line, end_col) = CloseExpression(
5821
          clean_lines, start_line, start_col + len(parameter_list.group(1)))
5822
      break
5823
    start_col = 0
5824
5825
  if end_col < 0:
5826
    return  # Couldn't find end of parameter list, give up
5827
5828
  # Look for "override" or "final" after the parameter list
5829
  # (possibly on the next few lines).
5830
  for i in xrange(end_line, min(end_line + 3, clean_lines.NumLines())):
5831
    line = clean_lines.elided[i][end_col:]
5832
    match = Search(r'\b(override|final)\b', line)
5833
    if match:
5834
      error(filename, linenum, 'readability/inheritance', 4,
5835
            ('"virtual" is redundant since function is '
5836
             'already declared as "%s"' % match.group(1)))
5837
5838
    # Set end_col to check whole lines after we are done with the
5839
    # first line.
5840
    end_col = 0
5841
    if Search(r'[^\w]\s*$', line):
5842
      break
5843
5844
5845
def CheckRedundantOverrideOrFinal(filename, clean_lines, linenum, error):

core/build-support/cpplint.py 1 location

@@ 5781-5842 (lines=62) @@
5778
          ' OR use pair directly OR if appropriate, construct a pair directly')
5779
5780
5781
def CheckRedundantVirtual(filename, clean_lines, linenum, error):
5782
  """Check if line contains a redundant "virtual" function-specifier.
5783
5784
  Args:
5785
    filename: The name of the current file.
5786
    clean_lines: A CleansedLines instance containing the file.
5787
    linenum: The number of the line to check.
5788
    error: The function to call with any errors found.
5789
  """
5790
  # Look for "virtual" on current line.
5791
  line = clean_lines.elided[linenum]
5792
  virtual = Match(r'^(.*)(\bvirtual\b)(.*)$', line)
5793
  if not virtual: return
5794
5795
  # Ignore "virtual" keywords that are near access-specifiers.  These
5796
  # are only used in class base-specifier and do not apply to member
5797
  # functions.
5798
  if (Search(r'\b(public|protected|private)\s+$', virtual.group(1)) or
5799
      Match(r'^\s+(public|protected|private)\b', virtual.group(3))):
5800
    return
5801
5802
  # Ignore the "virtual" keyword from virtual base classes.  Usually
5803
  # there is a column on the same line in these cases (virtual base
5804
  # classes are rare in google3 because multiple inheritance is rare).
5805
  if Match(r'^.*[^:]:[^:].*$', line): return
5806
5807
  # Look for the next opening parenthesis.  This is the start of the
5808
  # parameter list (possibly on the next line shortly after virtual).
5809
  # TODO(unknown): doesn't work if there are virtual functions with
5810
  # decltype() or other things that use parentheses, but csearch suggests
5811
  # that this is rare.
5812
  end_col = -1
5813
  end_line = -1
5814
  start_col = len(virtual.group(2))
5815
  for start_line in xrange(linenum, min(linenum + 3, clean_lines.NumLines())):
5816
    line = clean_lines.elided[start_line][start_col:]
5817
    parameter_list = Match(r'^([^(]*)\(', line)
5818
    if parameter_list:
5819
      # Match parentheses to find the end of the parameter list
5820
      (_, end_line, end_col) = CloseExpression(
5821
          clean_lines, start_line, start_col + len(parameter_list.group(1)))
5822
      break
5823
    start_col = 0
5824
5825
  if end_col < 0:
5826
    return  # Couldn't find end of parameter list, give up
5827
5828
  # Look for "override" or "final" after the parameter list
5829
  # (possibly on the next few lines).
5830
  for i in xrange(end_line, min(end_line + 3, clean_lines.NumLines())):
5831
    line = clean_lines.elided[i][end_col:]
5832
    match = Search(r'\b(override|final)\b', line)
5833
    if match:
5834
      error(filename, linenum, 'readability/inheritance', 4,
5835
            ('"virtual" is redundant since function is '
5836
             'already declared as "%s"' % match.group(1)))
5837
5838
    # Set end_col to check whole lines after we are done with the
5839
    # first line.
5840
    end_col = 0
5841
    if Search(r'[^\w]\s*$', line):
5842
      break
5843
5844
5845
def CheckRedundantOverrideOrFinal(filename, clean_lines, linenum, error):