=== is duplicated by: S2751

=== relates to: S1862

=== on 24 Apr 2015, 08:15:30 Tamas Vajk wrote:
\[~ann.campbell.2] This rule gives false positives on the following pattern:

----
if (a == null) {
    a = tryToGetA();
}
if (a == null) {
    throw new Exception();
}
...
----

Should we add an exception to this rule to check if the condition of the ``++if++`` is comparing an expression, and inside the ``++if++`` some value is assigned to the same expression? Or should this pattern be avoided?

=== on 27 Apr 2015, 07:57:37 Ann Campbell wrote:
\[~tamas.vajk] see what you think

=== on 27 Apr 2015, 08:28:29 Evgeny Mandrikov wrote:
\[~ann.campbell.2] as I already told to [~tamas.vajk] : I don't agree with such exception, IMO provided example doesn't show really readable code - why one wouldn't combine first two if-statements ?

=== on 27 Apr 2015, 15:40:32 Ann Campbell wrote:
Exception reverted

=== on 3 Jun 2015, 07:34:05 Evgeny Mandrikov wrote:
\[~ann.campbell.2] maybe we should add a little explanation why this is irrelevant for JavaScript? to prevent confusion during further reviews?

=== on 3 Jun 2015, 14:29:46 Ann Campbell wrote:
Irrelevant for JavaScript because this is a very common pattern, which raised hundreds of FP's

----
if ( ! isItOkay(a)) {
  doSomethingTo(a);
}
if ( ! isItOkay(a)) {
  // try again? raise error? ...
}
----
cc [~elena.vilchik]

=== on 3 Jun 2015, 14:35:48 Evgeny Mandrikov wrote:
\[~elena.vilchik], [~ann.campbell.2], same question as for example from C# - why one wouldn't combine those two if-statements into single one?

----
if ( ! isItOkay(a)) {
  doSomethingTo(a);
  if ( ! isItOkay(a)) {
    // try again? raise error? ...
  }
}
----

=== on 4 Jun 2015, 13:09:44 Tamas Vajk wrote:
\[~evgeny.mandrikov] we had the same in C# as we discussed it earlier. Since then, I added an exception for the following:

----
if (condition)
{
  statement
}
if (condition)
{
 //...
}
----

where ``++statement++`` is in any of the following three formats:

----
x = anything; //any kind of assignment (-=, +=, ...)
x++; //any postfix unary
++x; //any prefix unary
----
and ``++x++`` can be any symbol in ``++condition++``.


With this simple exception, I could get rid of all the false positives that we had in the C# ruling.



=== on 4 Jun 2015, 14:07:55 Evgeny Mandrikov wrote:
\[~tamas.vajk] I see the issue here - implementation not aligned with RSPEC. /CC [~dinesh.bolkensteyn] [~ann.campbell.2] [~freddy.mallet]

=== on 4 Jun 2015, 15:31:13 Dinesh Bolkensteyn wrote:
As the RSPEC is assigned to you [~evgeny.mandrikov] , I understand that you take care to come up with a solution to this issue.

=== on 5 Jun 2015, 12:09:48 Evgeny Mandrikov wrote:
\[~dinesh.bolkensteyn] no, I don't, I don't know why Ann assigned it back to me.

=== on 5 Jun 2015, 12:50:22 Ann Campbell wrote:
Absentmindedness [~evgeny.mandrikov]. I thought it was _still_ assigned to me, not _reassigned_ to me.

=== on 5 Jun 2015, 23:24:19 Evgeny Mandrikov wrote:
\[~tamas.vajk] if I correctly understand your exclusion, then this case will be excluded:

{noformat}

if (c > 5)

  {cpp};

if (c > 5) // copy-paste error

  c--;

{noformat}

I don't see an excuse for successive if-statements with identical conditions - they are error-prone and IMO make code less unreadable.



=== on 8 Jun 2015, 07:59:28 Tamas Vajk wrote:
\[~evgeny.mandrikov] Yes, you see it correctly, this won't report an issue in the current implementation.

=== on 8 Jun 2015, 08:04:06 Dinesh Bolkensteyn wrote:
my 2 cents: This is a maintainability rule, not a bug detection one - there should be another rule that targets the discovery of copy&paste errors


----
if (foo == null)
{
  foo = GetFoo1();
}

if (foo == null)
{
  foo = GetFoo2();
}
----

this could be refactored into:


----
if (foo == null)
{
  foo = GetFoo1();
  if (foo == null)
  {
    foo = GetFoo2();
  }
}
----

but there clearly is no bug here...

=== on 8 Jun 2015, 08:43:28 Dinesh Bolkensteyn wrote:
Let's discuss IRL

=== on 24 Jun 2015, 19:07:24 Ann Campbell wrote:
\[~tamas.vajk], [~evgeny.mandrikov], [~dinesh.bolkensteyn] where do we stand on this rule? FYI, I've just upgraded severity to Critical since I'm pretty sure we want to keep the 'bug' tag.

=== on 25 Jun 2015, 13:01:35 Tamas Vajk wrote:
\[~ann.campbell.2], I've added an exception to this rule in the C# substask.

=== on 3 Sep 2015, 13:51:39 Ann Campbell wrote:
Downgraded from Critical/bug/Reliability to Major/suspicious/Maintainability and exception added after discussion with [~freddy.mallet], [~tamas.vajk], [~ann.campbell.2]

