Found this on 8.1.30, but I know this isn't a new issue. Searching for a bit of text that has been eluding me for a few versions. The binding isn't even one that's complicated or evaluated, it's just straight text on a template instance property. Shouldn't Find/Replace be able to find this?
That's not a binding, though. It's the value of the property. Not sure Find/Replace can find those.
What happens if you uncheck "Scripts" for both the "Templates" and "Windows" categories (would have to also uncheck "Scripts" in the "Views" category, if you had that selected)? I've noticed the same behavior in my searches recently and found that if I uncheck the "Scripts" checkboxes, it suddenly finds what I'm looking for... (@PGriffith - I'm assuming this bug is already known/tracked?)
With Scripts Selected:
With Scripts Unselected:
Can you look in the output console for an NPE? If you're seeing one from ClientScriptSearchProvider, then yes; fixed for 8.1.31.
I get a couple Exceptions in the console but not seeing anything for "ClientScriptSearchProvider":
Console Output
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
at java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Unknown Source)
at java.base/jdk.internal.util.Preconditions.checkIndex(Unknown Source)
at java.base/java.util.Objects.checkIndex(Unknown Source)
at java.base/java.util.ArrayList.get(Unknown Source)
at com.inductiveautomation.factorypmi.application.components.VisionAdvancedTable$TableSignature.getColumn(VisionAdvancedTable.java:1866)
at com.inductiveautomation.factorypmi.application.components.VisionAdvancedTable$Model.getColumnClass(VisionAdvancedTable.java:1787)
at com.jidesoft.grid.TableModelWrapperImpl.getColumnClass(Unknown Source)
at com.jidesoft.grid.TableModelWrapperImpl.getColumnClass(Unknown Source)
at com.inductiveautomation.factorypmi.application.components.VisionAdvancedTable.lambda$updateViewDataset$3(VisionAdvancedTable.java:708)
at com.inductiveautomation.ignition.client.util.EDTUtil$ProcessQueue.run(EDTUtil.java:126)
at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.base/java.util.Vector.elementAt(Unknown Source)
at java.desktop/javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
at com.inductiveautomation.factorypmi.application.components.VisionAdvancedTable.lambda$updateViewDataset$3(VisionAdvancedTable.java:704)
at com.inductiveautomation.ignition.client.util.EDTUtil$ProcessQueue.run(EDTUtil.java:126)
at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.base/java.util.Vector.elementAt(Unknown Source)
at java.desktop/javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
at com.inductiveautomation.factorypmi.application.components.VisionAdvancedTable.lambda$updateViewDataset$3(VisionAdvancedTable.java:704)
at com.inductiveautomation.ignition.client.util.EDTUtil$ProcessQueue.run(EDTUtil.java:126)
at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.base/java.util.Vector.elementAt(Unknown Source)
at java.desktop/javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
at com.inductiveautomation.factorypmi.application.components.VisionAdvancedTable.lambda$updateViewDataset$3(VisionAdvancedTable.java:704)
at com.inductiveautomation.ignition.client.util.EDTUtil$ProcessQueue.run(EDTUtil.java:126)
at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
13:51:49.208 [ForkJoinPool.commonPool-worker-31] WARN SearchReplace - Error during search.
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.base/java.lang.String.substring(Unknown Source)
at com.inductiveautomation.ignition.common.script.typing.ExtensionFunctionDescriptor$Companion.extractUserScript(ExtensionFunctionDescriptor.kt:129)
at com.inductiveautomation.ignition.common.script.typing.ExtensionFunctionDescriptor.extractUserScript(ExtensionFunctionDescriptor.kt)
at com.inductiveautomation.factorypmi.designer.search.searchobjects.ExtensionFunctionSearchObject.getText(ExtensionFunctionSearchObject.java:47)
at com.inductiveautomation.ignition.designer.findreplace.SearchReplaceDialog$PatternSearchPredicate.test(SearchReplaceDialog.java:900)
at com.inductiveautomation.ignition.designer.findreplace.SearchReplaceDialog$PatternSearchPredicate.test(SearchReplaceDialog.java:888)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
at java.base/java.util.Iterator.forEachRemaining(Unknown Source)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
at com.inductiveautomation.ignition.designer.findreplace.DefaultSearchExecutor.search(DefaultSearchExecutor.java:40)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(Unknown Source)
at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
Edit: Not sure if it's worth noting but if I have just the one window selected for searching, I'm not getting the error. As soon as I select "All Windows" or "All Templates" is when the error occurs.
Agreed with the premis of the post. Numerous times i have used the find tool to do a find and it fails to find the text i know exists and check boxes are checked to be able to find it... in 8.1.0-27. It seemed a lot more reliable in 7.9. I just cant trust the find and replace tool.
it should find it. When i try that same function in the same place, it usualy finds it. but the find tool is not reliable anymore. When i still need to use it i cross my fingers.
Oh it certainly can find contents of Property Values. Just look for the name of a window or a button.
I think the problem is that it's a template instance property value. Find/Replace is just not looking hard enough. But what's strange is if I bound that property to an expression that is just a string in quotes, I think it'll find it. I get that it's looking at the expression itself and not the evaluation of the expression as a property value. But all non-bound property values (especially ones for templates) should be fair game for the search.
I generally have some flavor of Grep open on the other monitor.
Even if the Find does find everything it should, the wildcard and regEx support is worth having.