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 <Arduino.h>
#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.