Inspection question
IntellijIdea 8.1.3
Following code:
int n=1;
f(n++);
f(n++);
f(n++);
generates inspection warning "The value changed at 'n++' is never used".
In fact, 'n' is used: as a function parameter.
JetBrains, could you fix this minor inconvenience? In the spare time, of
course :)
TomP
请先登录再写评论。
Hello TomP,
The value of "n" is used, but the result of the increment operation is not.
The meaning of the code will not change if you replace the last n++ with
simply n.
--
Dmitry Jemerov
Development Lead
JetBrains, Inc.
http://www.jetbrains.com/
"Develop with Pleasure!"
I don't agree.
I frequently use this pattern in the following scenario:
PreparedStatement sqlStatement = connection.prepareStatement(sql);
int n = 1;
sqlStatement.setString(n++, paramA);
sqlStatement.setString(n++, paramB);
sqlStatement.setString(n++, paramC);
instead of
sqlStatement.setString(1, paramA);
sqlStatement.setString(2, paramB);
sqlStatement.setString(3, paramC);
Now, if I want to change the order of assigning parameters paramB and
paramC, then I just change the order of lines in the code to:
sqlStatement.setString(n++, paramA);
sqlStatement.setString(n++, paramC);
sqlStatement.setString(n++, paramB);
instead of error prone code:
sqlStatement.setString(1, paramA);
sqlStatement.setString(3, paramB);
sqlStatement.setString(2, paramC);
TomP
Dmitry Jemerov wrote:
>> IntellijIdea 8.1.3
>>
>> Following code:
>> int n=1;
>> f(n++);
>> f(n++);
>> f(n++);
>> generates inspection warning "The value changed at 'n++' is never
>> used".
>> In fact, 'n' is used: as a function parameter.
>>
>> JetBrains, could you fix this minor inconvenience? In the spare time,
>> of course :)
>>
>> TomP
>>
Hello TomP,
You may agree or not, but the inspection result is correct. :)
I'd say the right thing to do here is to use a builder patern:
StatementBuilder builder = createBuilder(connection, sql);
builder.addString(paramA).addString(paramB).addString(paramC);
builder.getStatement();
Alternatively, you can suppress the inspection.
>> Hello TomP,
>>
>> The value of "n" is used, but the result of the increment operation
>> is not. The meaning of the code will not change if you replace the
>> last n++ with simply n.
>>
>>> IntellijIdea 8.1.3
>>>
>>> Following code:
>>> int n=1;
>>> f(n++);
>>> f(n++);
>>> f(n++);
>>> generates inspection warning "The value changed at 'n++' is never
>>> used".
>>> In fact, 'n' is used: as a function parameter.
>>> JetBrains, could you fix this minor inconvenience? In the spare
>>> time, of course :)
>>>
>>> TomP
>>>
--
Dmitry Jemerov
Development Lead
JetBrains, Inc.
http://www.jetbrains.com/
"Develop with Pleasure!"
Dmitry,
Agree or not, it's a minor inconvenience.
Thanks for the builder pattern hint.
While you are online, can you answer this:
"How to locally disable, and than enable this inspection?"
TomP
Dmitry Jemerov wrote:
>> I don't agree.
>> I frequently use this pattern in the following scenario:
>> PreparedStatement sqlStatement = connection.prepareStatement(sql);
>> int n = 1;
>> sqlStatement.setString(n++, paramA);
>> sqlStatement.setString(n++, paramB);
>> sqlStatement.setString(n++, paramC);
>> instead of
>> sqlStatement.setString(1, paramA);
>> sqlStatement.setString(2, paramB);
>> sqlStatement.setString(3, paramC);
>> Now, if I want to change the order of assigning parameters paramB and
>> paramC, then I just change the order of lines in the code to:
>> sqlStatement.setString(n++, paramA);
>> sqlStatement.setString(n++, paramC);
>> sqlStatement.setString(n++, paramB);
>> instead of error prone code:
>> sqlStatement.setString(1, paramA);
>> sqlStatement.setString(3, paramB);
>> sqlStatement.setString(2, paramC);
>> TomP
>>
>> Dmitry Jemerov wrote:
>>
>>> Hello TomP,
>>>
>>> The value of "n" is used, but the result of the increment operation
>>> is not. The meaning of the code will not change if you replace the
>>> last n++ with simply n.
>>>
>>>> IntellijIdea 8.1.3
>>>>
>>>> Following code:
>>>> int n=1;
>>>> f(n++);
>>>> f(n++);
>>>> f(n++);
>>>> generates inspection warning "The value changed at 'n++' is never
>>>> used".
>>>> In fact, 'n' is used: as a function parameter.
>>>> JetBrains, could you fix this minor inconvenience? In the spare
>>>> time, of course :)
>>>>
>>>> TomP
>>>>
ItellijIdea is great.
I just learnt that I can disable the inspection for
statement/method/class/profile
TomP wrote:
>> Hello TomP,
>>
>> You may agree or not, but the inspection result is correct. :)
>>
>> I'd say the right thing to do here is to use a builder patern:
>>
>> StatementBuilder builder = createBuilder(connection, sql);
>> builder.addString(paramA).addString(paramB).addString(paramC);
>> builder.getStatement();
>>
>> Alternatively, you can suppress the inspection.
>>
>>> I don't agree.
>>> I frequently use this pattern in the following scenario:
>>> PreparedStatement sqlStatement = connection.prepareStatement(sql);
>>> int n = 1;
>>> sqlStatement.setString(n++, paramA);
>>> sqlStatement.setString(n++, paramB);
>>> sqlStatement.setString(n++, paramC);
>>> instead of
>>> sqlStatement.setString(1, paramA);
>>> sqlStatement.setString(2, paramB);
>>> sqlStatement.setString(3, paramC);
>>> Now, if I want to change the order of assigning parameters paramB and
>>> paramC, then I just change the order of lines in the code to:
>>> sqlStatement.setString(n++, paramA);
>>> sqlStatement.setString(n++, paramC);
>>> sqlStatement.setString(n++, paramB);
>>> instead of error prone code:
>>> sqlStatement.setString(1, paramA);
>>> sqlStatement.setString(3, paramB);
>>> sqlStatement.setString(2, paramC);
>>> TomP
>>>
>>> Dmitry Jemerov wrote:
>>>
>>>> Hello TomP,
>>>>
>>>> The value of "n" is used, but the result of the increment operation
>>>> is not. The meaning of the code will not change if you replace the
>>>> last n++ with simply n.
>>>>
>>>>> IntellijIdea 8.1.3
>>>>>
>>>>> Following code:
>>>>> int n=1;
>>>>> f(n++);
>>>>> f(n++);
>>>>> f(n++);
>>>>> generates inspection warning "The value changed at 'n++' is never
>>>>> used".
>>>>> In fact, 'n' is used: as a function parameter.
>>>>> JetBrains, could you fix this minor inconvenience? In the spare
>>>>> time, of course :)
>>>>>
>>>>> TomP
>>>>>
ItellijIdea is great.
I just learnt that I can disable the inspection for
statement/method/class/profile
TomP wrote:
>> Hello TomP,
>>
>> You may agree or not, but the inspection result is correct. :)
>>
>> I'd say the right thing to do here is to use a builder patern:
>>
>> StatementBuilder builder = createBuilder(connection, sql);
>> builder.addString(paramA).addString(paramB).addString(paramC);
>> builder.getStatement();
>>
>> Alternatively, you can suppress the inspection.
>>
>>> I don't agree.
>>> I frequently use this pattern in the following scenario:
>>> PreparedStatement sqlStatement = connection.prepareStatement(sql);
>>> int n = 1;
>>> sqlStatement.setString(n++, paramA);
>>> sqlStatement.setString(n++, paramB);
>>> sqlStatement.setString(n++, paramC);
>>> instead of
>>> sqlStatement.setString(1, paramA);
>>> sqlStatement.setString(2, paramB);
>>> sqlStatement.setString(3, paramC);
>>> Now, if I want to change the order of assigning parameters paramB and
>>> paramC, then I just change the order of lines in the code to:
>>> sqlStatement.setString(n++, paramA);
>>> sqlStatement.setString(n++, paramC);
>>> sqlStatement.setString(n++, paramB);
>>> instead of error prone code:
>>> sqlStatement.setString(1, paramA);
>>> sqlStatement.setString(3, paramB);
>>> sqlStatement.setString(2, paramC);
>>> TomP
>>>
>>> Dmitry Jemerov wrote:
>>>
>>>> Hello TomP,
>>>>
>>>> The value of "n" is used, but the result of the increment operation
>>>> is not. The meaning of the code will not change if you replace the
>>>> last n++ with simply n.
>>>>
>>>>> IntellijIdea 8.1.3
>>>>>
>>>>> Following code:
>>>>> int n=1;
>>>>> f(n++);
>>>>> f(n++);
>>>>> f(n++);
>>>>> generates inspection warning "The value changed at 'n++' is never
>>>>> used".
>>>>> In fact, 'n' is used: as a function parameter.
>>>>> JetBrains, could you fix this minor inconvenience? In the spare
>>>>> time, of course :)
>>>>>
>>>>> TomP
>>>>>