In August 2008, FlexibleStringExpander class was redesigned to help conserve memory. The main change needed to use the redesigned class was to replace

FlexibleStringExpander fse = new FlexibleStringExpander("someExpression");

with

FlexibleStringExpander fse = FlexibleStringExpander.getInstance("someExpression");

The getInstance method was designed to ALWAYS return an instance, even when the method was called with a null or empty argument. Doing things this way makes coding simpler - just treat the instance as if it contains something. There is no need to check for null or empty expressions.

A simple project-wide search-and-replace was done to use the redesigned class. The problem is, doing that left behind a lot of unnecessary code that was needed for the old design.

It would be nice if we could get some of that legacy code cleaned up. Here are a couple of suggested changes...

Replace

FlexibleStringExpander fse = FlexibleStringExpander.getInstance("someExpression");
if (fse != null) {
  // some code
}

with

FlexibleStringExpander fse = FlexibleStringExpander.getInstance("someExpression");
// some code (getInstance never returns null)

Replace

FlexibleStringExpander fse = FlexibleStringExpander.getInstance(var);
if (fse.getOriginal() != null) {
  // some code
}

with

FlexibleStringExpander fse = FlexibleStringExpander.getInstance(var);
if (!fse.isEmpty()) {
  // some code
}

-Adrian


Jacques Le Roux wrote:
Then we should have this kind of advices in the API or the documentation somewhere. We can't expect that future devs will pick this
message easily. It would be easier for us to refer to somewhere as well.

My 2 cts

Jacques

From: "Adrian Crum" <[email protected]>
I think you're reading too much into what I said.

I didn't assign blame to anyone else - I'm using this as an opportunity to instruct. I haven't forgotten the history of the code. A lot of those unnecessary checks are left over from the older version of FSE that used the new operator. So, for the benefit of
the other developers I'm explaining why that code is no longer necessary.

And I'm not surprised by framework changes causing unintended side effects. I usually time my framework commits so I have time
available to fix any problems that pop up.

-Adrian

David E Jones wrote:
And that matters because... ?

The problem is that whenever you change the framework there may be unintended side-effects because the way you think it should be used may not be the way it is being used (or even the way it was originally intended to be used).

Even if you test a lot there is always the risk of this. So, the point is that you shouldn't be surprised by things like this.

Yes, it is disappointing that people fail to use obvious things like an isEmpty method. Whatever the case, if you change how the code operates you ALWAYS risk these sorts of issues. It's still to say the problem was caused by how the class was being used... maybe convenient, but not really correct or useful. Yes, if only everyone would always develop things the way that I think they should be developed! Well, if that were the case for me, OFBiz would be a lot different right now... :)

-David


On Feb 2, 2010, at 11:28 AM, Adrian Crum wrote:

I looked through some example uses of FlexibleStringExpander and there is a lot of inconsistency. Some client code expects getOriginal() to always return a String - it doesn't check for null. Other code checks for null.

The whole point of the null instance was to eliminate all of the checking for this or that. Just use it as if it contains
something. If it's empty it will do nothing.

-Adrian

David E Jones wrote:
There's the fun of changing the framework...
-David
On Feb 2, 2010, at 10:40 AM, Adrian Crum wrote:
Okay, I found the problem and committed a fix. We really need to go through the framework and fix the code that uses
FlexibleStringExpander in inappropriate ways.

FlexibleStringExpander.getInstance will ALWAYS return an instance, so there is no need to check if an instance is equal to
null.

Checking FlexibleStringExpander.getOriginal() for null or empty is bad coding style. There is an isEmpty() method for that.

-Adrian

Adrian Crum wrote:
Hans,
How is that commit affecting UI labels?
-Adrian
Hans Bakker wrote:
Hi this seems to be caused by  r904592

to revert this change:
svn merge http://svn.apache.org/repos/asf/ofbiz/trunk -r904592:904591

Regards,
Hans


On Mon, 2010-02-01 at 23:07 -0800, Scott Gray wrote:
After taking an update today, a lot of form widget field labels seem to be missing from various screens. If any committers are aware of any changes they may have made which could have impacted this please take a look and see if it's related to
your work.

Here's an example: https://localhost:8443/catalog/control/FindProductConfigItems (only one of the 3 search option fields
are presenting a field label)
Here's another: https://localhost:8443/accounting/control/findPayments

Thanks
Scott

HotWax Media
http://www.hotwaxmedia.com







Reply via email to