Indexing stuck while indexing JavaScript file
Apache NetBeans version
Apache NetBeans 15
What happened
I am working on a project that includes a bunch of JS files. When I open the project, the indexing always gets stuck at a random percentage and it is always while indexing the paper-full.js script (taken from https://cdnjs.cloudflare.com/ajax/libs/paper.js/0.12.15/paper-full.js which is linked from https://cdnjs.com/libraries/paper.js).
This is annoying as NB becomes slower and slower and finally freezes after a while.
How to reproduce
Create a new JS project with all default values. Paste the content of the linked paper-full.js into the main.js (or copy the entire file into the project). Reopen NB so the scanning/indexing begins.
Did this work correctly in an earlier version?
No / Don't know
Operating System
macOS Monterey Version 12.5.1, Apple M1
JDK
OpenJDK 64-Bit Server VM Zulu17.34+19-CA (build 17.0.3+7-LTS, mixed mode, sharing)
Apache NetBeans packaging
Apache NetBeans provided installer
Anything else
I dug a bit into the indexing code and added a bunch of logs.
- In
JsObjectImpl#getFullyQualifiedNamethe while loop runs endlessly because thepObjectin there seems to have itself as parent (of which I am pretty sure is responsible for the slowness and ultimately the freeze). I did not yet understand how this situation can occur codewise. - The
DefineInterceptor#interceptmethod, which (by javadoc, a rare thing there) is supposed to return a collection of the return types of a function, always returns an empty collection. I do not know how that affects anything. Also, there is a for loop/switch combination that possibly only handles one function argument. - A few other things, but that is probably because I have no clue about JS.
In the paper-js.full script is the following code:
var Base = new function() {
// a lot of code
function Base() {
// some code
}
// more code
}
which I suppose is the problem, because the JS indexing somehow mixes up the inner and outer method names and eventually one gets itself as parent, causing the endless while loop. I might be completely wrong about this.
Interestingly, the minified version is indexed without any problems. I believe this is because the minification process renames everything (uniquely?) and there are no nested functions with identical name. Again, I'm guessing.
Are you willing to submit a pull request?
Yes
Code of Conduct
Yes