ide-1.9.x-beta: code completion fails when any library is invalid
- Dominant language
- Java
- Stars
- 14.6k
- Forks
- 7k
- PR merge metrics
- No merged PRs in 30d
Description
### **Version**:
ide-1.9.x-beta nightly built just now
### **Issue**:
When a library in the libraries folder is invalid (in my case, missing a header file that matches the folder name), code completion fails (even though compiling the sketch still works).
The behaviour is that no completion box is brought up by the shortcut. But, also there's no indication as to why it failed in the output pane, so it's a silent fail. (However, fortunately, there is output on stdout if I run Arduino IDE from Terminal).
It's perhaps worth noting that the error message about the invalid library happens all the time during compilation,(and so I've developed a blindness to it until now. It has not prevented any other behaviour before, so I've had no reason to fix it until now.
### **Workaround**:
Moving the invalid library out of the libraries folder works around the problem.
### **Debugging output**:
Whilst error messages do not appear in the error dialog, they do appear when running the IDE from Terminal.
Printed at the point of using the completion shortcut:
```
java.lang.NullPointerException
at cc.arduino.packages.discoverers.PluggableDiscovery.run(PluggableDiscovery.java:78)
at java.lang.Thread.run(Thread.java:748)
java.lang.NullPointerException
at cc.arduino.packages.discoverers.PluggableDiscovery.run(PluggableDiscovery.java:78)
at java.lang.Thread.run(Thread.java:748)
Invalid library found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4: no headers files (.h) found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4
Invalid library found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4: no headers files (.h) found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4
Invalid library found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4: no headers files (.h) found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4
Invalid library found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4: no headers files (.h) found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4
Invalid library found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4: no headers files (.h) found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4
Invalid library found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4: no headers files (.h) found in /Users/ben/Documents/Arduino/libraries/ArduinoFHT4
/Users/ben/Downloads/Arduino 1.9.0-beta.app/Contents/Java/arduino-builder -code-complete-at /Users/ben/Documents/Arduino/vu3/vu3.ino:35:20 -logger=machine -hardware /Users/ben/Downloads/Arduino 1.9.0-beta.app/Contents/Java/hardware -hardware /Users/ben/Library/Arduino15/packages -tools /Users/ben/Downloads/Arduino 1.9.0-beta.app/Contents/Java/tools-builder -tools /Users/ben/Downloads/Arduino 1.9.0-beta.app/Contents/Java/hardware/tools/avr -tools /Users/ben/Library/Arduino15/packages -built-in-libraries /Users/ben/Downloads/Arduino 1.9.0-beta.app/Contents/Java/libraries -libraries /Users/ben/Documents/Arduino/libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10900 -build-path /var/folders/0s/75kn5wf101v8fwvwb169sbhr0000gn/T/arduino_build_190981 -warnings=all -build-cache /var/folders/0s/75kn5wf101v8fwvwb169sbhr0000gn/T/arduino_cache_960188 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=/Users/ben/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=/Users/ben/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.avr-gcc.path=/Users/ben/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=/Users/ben/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.arduinoOTA.path=/Users/ben/Library/Arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=/Users/ben/Library/Arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -experimental /Users/ben/Documents/Arduino/vu3/vu3.ino
autocomplete failure output:
[]
#include
#line 1 "/Users/ben/Documents/Arduino/vu3/vu3.ino"
… content of my sketch …
com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
at [Source: (String)""; line: 1, column: 0]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4133)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3988)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2992)
at cc.arduino.autocomplete.ClangCompletionProvider.getCompletionsImpl(ClangCompletionProvider.java:99)
at org.fife.ui.autocomplete.CompletionProviderBase.getCompletions(CompletionProviderBase.java:104)
at org.fife.ui.autocomplete.AutoCompletion.refreshPopupWindow(AutoCompletion.java:801)
at org.fife.ui.autocomplete.AutoCompletion$AutoCompleteAction.actionPerformed(AutoCompletion.java:1351)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1668)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2882)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2929)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
at java.awt.Component.processEvent(Component.java:6316)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:834)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1102)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:973)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:799)
at java.awt.Component.dispatchEventImpl(Component.java:4760)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
```
For my example, removing `ArduinoFHT4` allows autocomplete to succeed.
Contributor guide
Research direction
Reproduce the failure with an invalid library such as ArduinoFHT4, then start with cc.arduino.packages.discoverers.PluggableDiscovery.run and cc.arduino.autocomplete.ClangCompletionProvider.getCompletionsImpl from the reported stack trace. Check the code-completion command and its output handling; done means completion no longer silently fails when an invalid library is present and the failure is reported appropriately.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 42/100