Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

How to satisfy the code checker in this instance?

20 views
Skip to first unread message

laredotornado

unread,
Dec 17, 2009, 12:51:05 PM12/17/09
to
Hi,

I'm using Java 1.5 with a code checker named PMD. It is complaining
about the following method ...

private static Date parse(final String dateStr, final String
dateFormat) {
Date date = null;
try {
final DateFormat sdf = new SimpleDateFormat(dateFormat,
Locale.getDefault());
date = sdf.parse(dateStr);
} catch (Exception e) {
LOGGER.error("Could not parse time:" + dateStr, e);
}
return date;
} // parse

specifically, complaining about the fact that the variable "Date date
= null" is redefined -- first set to null and then later set to a new
value (Found 'DD' anomaly for variable date). Yes, quite a bizarre
warning, but do you know how to rewrite the above to preserve the
functionality while not redefining the variable?

Thanks, - Dave

Lew

unread,
Dec 17, 2009, 1:05:16 PM12/17/09
to

private static Date parse(
final String date, final String format) {
try {
final DateFormat df = new SimpleDateFormat( format );
return df.parse( date );


}
catch (Exception e) {
LOGGER.error("Could not parse time:" + dateStr, e);
}
}

--
Lew

Peter Duniho

unread,
Dec 17, 2009, 1:05:21 PM12/17/09
to

I'm not convinced it needs fixing. It seems like a common enough idiom
that the checker is what needs fixing. But, here are a couple of
variations that ought to work:

private static Date parse(


final String dateStr,
final String dateFormat)
{

Date date;


try
{
final DateFormat sdf =
new SimpleDateFormat(dateFormat, Locale.getDefault());

date = sdf.parse(dateStr);
}
catch (Exception e)
{
LOGGER.error("Could not parse time:" + dateStr, e);

date = null;
}

return date;
} // parse


Or:

private static Date parse(


final String dateStr,
final String dateFormat)
{

try
{
final DateFormat sdf =
new SimpleDateFormat(dateFormat, Locale.getDefault());

return sdf.parse(dateStr);


}
catch (Exception e)
{
LOGGER.error("Could not parse time:" + dateStr, e);
}

return null;
} // parse

Pete

John B. Matthews

unread,
Dec 17, 2009, 2:17:01 PM12/17/09
to
In article
<08bfc392-d9ee-4714...@v15g2000prn.googlegroups.com>,
laredotornado <laredo...@zipmail.com> wrote:

The initialization seems superfluous: just pass a new ParsePosition()
to sdf.parse(). As long as dateStr is not null and dateFormat is
well-formed, there's no exception to catch. Alternatively, you can move
the initialization to a finally clause, but you should probably catch
specific exceptions. In addition, consider using the SimpleDateFormat
constructor that uses the default locale. Finally, note that DD is not
an indisputable data flow anomaly:

<http://pmd.sourceforge.net/rules/controversial.html>

--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>

Message has been deleted

Jim Janney

unread,
Dec 17, 2009, 4:47:26 PM12/17/09
to
laredotornado <laredo...@zipmail.com> writes:

return sdf.parse(dateStr);
}

According to the javadoc for SimpleDateFormat.parse(String), it
returns null in case of error, so no exception handling is needed.

--
Jim Janney

Jim Janney

unread,
Dec 17, 2009, 5:28:24 PM12/17/09
to
Jim Janney <jja...@shell.xmission.com> writes:

Doubly wrong. SimpleDateFormat.parse(String, ParsePosition) returns
null, but DateFormat.parse(String) throws a ParseException. Worse,
the constructor for SimpleDateFormat throws an IllegalArgumentException
if the date format is invalid.

--
Jim Janney

Lew

unread,
Dec 17, 2009, 6:06:38 PM12/17/09
to
Lew writes:
>>   private static Date parse(
>>     final String date, final String format) {
>>     try {
>>       final DateFormat df = new SimpleDateFormat( format );
>>       return df.parse( date );
>>     }
>>     catch (Exception e) {
>>       LOGGER.error("Could not parse time:" + dateStr, e);
>>     }
>>   }
>

Jukka Lahtinen wrote:
> I think you should add
> return null;
> to the catch block.
>

Good call. Or one could throw a wrapper exception. One should also
not catch 'Exception' but specific exceptions.

--
Lew

0 new messages