Git Product home page Git Product logo

ros-integrate's People

Contributors

noam-dori avatar peci1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ros-integrate's Issues

Document installing plugin from source

Feature:
Document how to install the development version

Background
Good documentation on how people can help can increase their interactivity and as a result improve the quality of the project. Helping people who want to install the "development" versions of a plugin for testing, and possibly contribution is a critical part of that.

Details

  • add a wiki page describing in full and with pictures how to install the development version and run it from commandline of any system.
  • reference this wiki page from the README.md
  • add additional details on how to view and edit the source code in another wiki page.

annotate package with no buildtool dependency

Feature:
Annotate package.xmls without buildtool_depend tags

Background
at least one buildtool is required in each manifest, and ROS will not work unless this is satisfied.

Details

  • add the error annotation
  • suggest a fix that adds the dependency and allows the user to fill in the value

Format 3 Version tag

Feature:
Support for the "compatibility" attribute in version tags.

Background
Format 3 introduces the "compatibility" tag which is used to guarantee support for packages built against older versions of the package.

Details

  • Add new attribute "compatibilty" with completion to version tag.
  • completion & annotations for attribute value are the same as the version value.
  • new annotation makes sure version compatiblity is smaller than version value
  • when the format is lower than 3 and the attribute is used, add an inspection that suggests upgrading to format 3

<export> tag support

Feature:
full support of the <export> tag.

Background
an important feature even in the first ROS format, this tag allows freely adding additional metadata with some already having built-in functionality. It is critical that support for the tag itself is added (and potentially sub-features like plugins, package marking, etc.)

Details

  • auto-completion for the tag
  • it is important to save and preserve ALL data in the tag, even when reformatting the file. This is important in the reformat file intention.
  • in the tag, add auto-completion of basic annotations specified in the REP:
    • Remove outside completions for tags (like depends)
    • architecture_independent: autocomplete for empty tag
    • architecture_independent: marks packages that do not have C/C++ code (sent to plugin extensions)
    • build_type: marks the build type of the package. REP 140 available options are:
      catkin (classic ROS), cmake (non ROS / special ROS), ament_cmake (ROS2), ament_python (python ROS2). These options should be in a .properties file.
    • build_type also has an annotation of a weak warning if the build system is not one of the options specified.
    • deprecated: marks the package as deprecated. Should open a multiline message in text (NOT HTML or anything special)
    • deprecated makes it so that any package that depends on this one get a "deprecated" annotation on the dependency.
    • message_generator takes a text argument that should be a language. Since there are so many languages ROS could support (from C++ to python to Java to Lisp to...), no autocompletion or annotations are done on the text inside (beside non-empty)
    • metapackage: autocompletes for an empty tag.
    • metapackage restricts all of its dependencies to <exec_depend> and ONE <buildtool_depend>. Annotate otherwise.
    • metapackage marks the package as a metapackage. only metapackages may depend on metapackages. If a non-meta package depends on a metapackage, mark it.

package format 2?

Feature:
Support package.xml format 2.

Background
I've some format 2 packages, and any time I want package suggestions in <depend> or <exec_depend> tags, CLion tells there is nothing to suggest. <build_depend> works as it is also a format 1 tag.

Details
Version 0.1.5., CLion 2020.1 Beta

NPE caused by in-file refactoring

What I did - I renamed a method in a source file within a package. However, this may happen because of indexing.
What this does is cause ROS Support to crash.
Stack trace:

java.lang.NullPointerException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:598)
	at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677)
	at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:735)
	at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:160)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:583)
	at ros.integrate.workspace.ROSPackageManagerImpl.doBulkFileChangeEvents(ROSPackageManagerImpl.java:52)
	at ros.integrate.workspace.ROSPackageManagerImpl.access$000(ROSPackageManagerImpl.java:18)
	at ros.integrate.workspace.ROSPackageManagerImpl$1.after(ROSPackageManagerImpl.java:35)

Error popup appears for projects without ROS Path

Describe the bug
Error popup appears for projects without ROS Path

To Reproduce
Steps to reproduce the behavior:

  1. Open a project
  2. In the ROS settings, make sure the "ROS Path" variable is empty
  3. A log error popup appears with the stack trace

Expected behavior
The popup should not appear at all

Environment Information:

  • OS: Ubuntu 20.04
  • IDE: CLion 2020.2
  • Plugin Version: 0.1.6
  • Related Plugins: none

Stack Trace
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at ros.integrate.pkg.ROSCompiledPackageFinder.getROSRoot(ROSCompiledPackageFinder.java:49)
at ros.integrate.pkg.ROSCompiledPackageFinder.inFinder(ROSCompiledPackageFinder.java:134)
at ros.integrate.pkg.ROSPackageFinderBase.lambda$investigate$1(ROSPackageFinderBase.java:98)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at ros.integrate.pkg.ROSPackageFinderBase.investigate(ROSPackageFinderBase.java:101)
at ros.integrate.pkg.ROSPackageManagerImpl.lambda$applyChangesToOrphans$3(ROSPackageManagerImpl.java:96)
at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:201)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)
at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:322)
at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:84)
at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:132)
at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:47)
at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:188)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:971)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:841)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:452)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:744)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:451)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:499)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)=

Settings page for workspaces and additional sources ($ROS_PACKAGE_PATH)

new structure:

Environment -----------------------------------------
ROS Path:       [                             ] [...]
Workspace:      [                             ] [...]
Additional Package Repositories: [            ] [...]
[*] Sync with $ROS_PACKAGE_PATH

If possible, make Additional Package Repositories something that can open up to a list of paths.

Format 3 license files

Feature:
license tags should support the "file" attribute in format 3.

Background
A less prominent format 3 feature but important for legality, this feature allows directly referencing the added license file.

Details

  • When auto-completing the license tag, just like with URLs, the "file" attribute should be suggested. Trying to complete the file in the argument should trigger a file lookup with a path relative to package.xml.
  • Add a new inspection that goes through the value of the license tags and if they require a file (like Apache-2.0) and the format is 3 or higher, raise a warning that tells the user to add a LICENSE file and suggests a fix.
  • when the format is lower than 3 and the attribute is used, add an inspection that suggests upgrading to format 3

more details on the new tag are available in REP 149

Uninstall plugins don't work well.

Recently, I don't use ROS anymore, so I uninstall this plugin.
Unfortunately, the ROS directory is still left inside "External Libraries". As in the below image

image

I tried everything, include uninstall and removing all of pycharm's config, log, cache. But it didn't work well.

~/.config/JetBrains/PyCharm2020.1
~/.cache/JetBrains/PyCharm2020.1
~/.local/share/JetBrains/PyCharm2020.1
~/.cache/JetBrains/PyCharm2020.1/log

Do you know how to solve this?

documentation on ROS conditionals

Feature:
document the technical behavior of ROS condition attributes.

Background
Being a very useful and lesser known, it is good to let users know it exists. For this, documentation on how it works is needed. Add some documentation here.

Details
In the wiki, under a "ROS Features" category, describe conditions. Also explain how they look in the plugin.

Distribution dependencies not resolved properly

Describe the bug
Packages found in distribution ROSDep source lists are not properly found. Autocomplete does not function on them either.

To Reproduce
Steps to reproduce the behavior:

  1. Open a valid package.xml file
  2. Observe that standard ros packages (such as roscpp or catkin) are not found properly, indicating an unresolved dependency.

Expected behavior
Dependency is properly found, and autocomplete works just as it would on packages found in the base.yaml dependency list.

Environment Information:

  • OS: Ubuntu 18.04
  • IDE: CLion 2020.2.1
  • Plugin Version: 0.15 (and the current master 0.16)
  • Related Plugins: None

Stack Trace
N/A

Screenshots
image
Note: roscpp is a distribution package. eigen is from the base yaml.

Additional context
Issue persists even if the distribution is added directly.
To be more clear, rosdep itself gets the location from index.yaml but assuming this plugin cannot do what rosdep does, the plugin does not work even when adding the distribution itself (in my case https://raw.githubusercontent.com/ros/rosdistro/master/melodic/distribution.yaml) to the "Online ROSDep Source Lists".

tracking file locations

what is the plugin looking for to resolve locations of the files. I can assure that the files are there. Maybe the files have to contain something?

image

0.1.4 NPEs, Freezes, ISEs

If you encountered any NullPointerExceptions, IllegalStateExceptions that were raised in the log, please report them here, along with a stack trace and the action you were doing.

If your IDE happens to freeze, please use this guide to get a thread dump (like a stack trace, but for freezes), and if it is caused by this plugin, please report it here as well (with your thread dump attached).

group tags

Feature:
add support for group dependencies

Background
The driver behind format 3, this feature allows grouping dependencies in an extendable manner, better than what meta-packages offer. A good example for this is message generators, where if you would want java generators, you would add them to a group called "message_generation". Then a package that needs this group could say that it uses it. Note that groups are not physical objects, they "act like namespaces". Since they are metaphysical, you can depend on a group without declaring it.
Details available on REP 149

Details

  • structure:
    • the tag names are: group_depend (dependency on group), and member_of_group (membership of a group)
    • the value is the group the package is member of or depends on. Groups do not need to be declared, they are "created" when a their first member declares membership of that group.
    • in both tags, the "condition" attribute created in (#31) may be used (optional).
    • since groups are metaphysical, if their names are the same, the groups are the same.
  • completion:
    • add auto-completion for new tag names.
    • add completion for the "condition" attribute in both tags.
    • in tag value completion, look up all groups that are either depended on already or have a member and suggest them.
  • annotation:
    • if the format is lower than 3 and either group tag exists, annotate it as an error.
    • if the condition in the tag resolves to false, it should be annotated as ignored with the special highlighting defined for that purpose.
    • If the tag points a dependency to a group that doesn't have any members, point it out in an inspection.
    • Since group tags are the final tags in format 3 (outside export), annotate unknown tags outside export and suggest moving them into the export tag.
    • every package can only depend on each group/ be member of each group once. Duplicate tags should be annotated accordingly (with consideration for conditions)
    • empty group tags should be annotated accordingly
  • references:
    • a group value references all the group members (multi-resolve), which can be browed by CTRL+Clicking. Navigation will jump to the value of the group tag.
    • the usages of the group value are all the packages that depend on the group. Navigation will jump to the value of the group tag.
  • add group tags to the reformat file fix.

add tags in the right order

Feature:
Tags should be added according to REP order.

Background
It can be very annoying that tags are added in the beginning of the file and than having to sort them.

Details
When an intention or a call to add a tag is made, instead of putting the new tag at the top, it will find the last appearance of a tag from the same order group or if none exist. If none exist, it will run the same check with the previous order group, and so on. If the search reaches the end with no previous result, it will be added first.

Add condition attribute to <build_type> in format 3.

Feature:
add conditon attribute to build_type

Background
like dependencies, build_type also can be conditional (for example, catkin in ROS1, ament in ROS2). Thus, support for the conditional attribute should be added.

Details

  • If the file is in format 3, the annotation for unknown build type could be toggled off by the conditional.
  • If the file is in a lower format, use an inspection on conditionals to point out they are not considered.
  • If format is 3, suggest completion for condition in build_type with all the features it has.
  • additionally, if the format is 3, the completion allows multiple build_types assuming the ones added were turned off by their conditions
  • restrict the multiple build_types annotation to check only for non-ignored build_type tags.
  • if the condition in the build_type resolves to false, it should be annotated as ignored with the special highlighting defined for that purpose.

0.1.3 Freeze on exetrnal file changes

When I ran catkin_make in a console (which can change some of the files monitored by CLion), my IDE froze. And CLion marked ROS Support as the problematic plugin.

Freeze in EDT for 182 seconds
IDE KILLED! Sampled time: 165200ms, sampling rate: 100ms, GC time: 421ms (0%), Class loading: 0%

com.intellij.diagnostic.Freeze
	at [email protected]/java.lang.Object.wait(Native Method)
	at [email protected]/java.util.concurrent.ForkJoinTask.externalAwaitDone(ForkJoinTask.java:330)
	at [email protected]/java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:412)
	at [email protected]/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:736)
	at [email protected]/java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:159)
	at [email protected]/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:173)
	at [email protected]/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
	at [email protected]/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
	at [email protected]/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:661)
	at ros.integrate.workspace.ROSPackageManagerImpl.doBulkFileChangeEvents(ROSPackageManagerImpl.java:119)
	at ros.integrate.workspace.ROSPackageManagerImpl.access$300(ROSPackageManagerImpl.java:28)
	at ros.integrate.workspace.ROSPackageManagerImpl$1.after(ROSPackageManagerImpl.java:52)
	at jdk.internal.reflect.GeneratedMethodAccessor151.invoke(Unknown Source)
	at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at [email protected]/java.lang.reflect.Method.invoke(Method.java:566)
	at com.intellij.util.messages.impl.MessageBusImpl.invokeListener(MessageBusImpl.java:513)
	at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:142)
	at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:438)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:398)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:388)
	at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:370)
	at com.intellij.util.messages.impl.MessageBusImpl.lambda$createTopicHandler$1(MessageBusImpl.java:241)
	at com.intellij.util.messages.impl.MessageBusImpl$$Lambda$312/0x000000080046c840.invoke(Unknown Source)
	at com.sun.proxy.$Proxy43.modificationCountChanged(Unknown Source)
	at com.intellij.psi.impl.PsiModificationTrackerImpl.fireEvent(PsiModificationTrackerImpl.java:70)
	at com.intellij.psi.impl.PsiModificationTrackerImpl.incCountersInner(PsiModificationTrackerImpl.java:75)
	at com.intellij.psi.impl.PsiModificationTrackerImpl.incOutOfCodeBlockModificationCounter(PsiModificationTrackerImpl.java:65)
	at com.jetbrains.cidr.lang.symbols.symtable.FileSymbolTablesCache$1.incModificationCount(FileSymbolTablesCache.java:130)
	at com.jetbrains.cidr.lang.symbols.symtable.FileSymbolTablesCache$3.done(FileSymbolTablesCache.java:205)
	at com.jetbrains.cidr.VirtualFileChangeListener.after(VirtualFileChangeListener.kt:76)
	at jdk.internal.reflect.GeneratedMethodAccessor151.invoke(Unknown Source)
	at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at [email protected]/java.lang.reflect.Method.invoke(Method.java:566)
	at com.intellij.util.messages.impl.MessageBusImpl.invokeListener(MessageBusImpl.java:513)
	at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:142)
	at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:438)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:398)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:388)
	at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:370)
	at com.intellij.util.messages.impl.MessageBusImpl.lambda$createTopicHandler$1(MessageBusImpl.java:241)
	at com.intellij.util.messages.impl.MessageBusImpl$$Lambda$312/0x000000080046c840.invoke(Unknown Source)
	at com.sun.proxy.$Proxy43.modificationCountChanged(Unknown Source)
	at com.intellij.psi.impl.PsiModificationTrackerImpl.fireEvent(PsiModificationTrackerImpl.java:70)
	at com.intellij.psi.impl.PsiModificationTrackerImpl.incCountersInner(PsiModificationTrackerImpl.java:75)
	at com.intellij.psi.impl.PsiModificationTrackerImpl.incOutOfCodeBlockModificationCounter(PsiModificationTrackerImpl.java:65)
	at com.jetbrains.cidr.lang.symbols.symtable.FileSymbolTablesCache$1.incModificationCount(FileSymbolTablesCache.java:130)
	at com.jetbrains.cidr.lang.symbols.symtable.FileSymbolTablesCache$3.done(FileSymbolTablesCache.java:205)
	at com.jetbrains.cidr.VirtualFileChangeListener.after(VirtualFileChangeListener.kt:76)
	at jdk.internal.reflect.GeneratedMethodAccessor151.invoke(Unknown Source)
	at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at [email protected]/java.lang.reflect.Method.invoke(Method.java:566)
	at com.intellij.util.messages.impl.MessageBusImpl.invokeListener(MessageBusImpl.java:513)
	at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:142)
	at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:438)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:398)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:388)
	at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:370)
	at com.intellij.util.messages.impl.MessageBusImpl.lambda$createTopicHandler$1(MessageBusImpl.java:241)
	at com.intellij.util.messages.impl.MessageBusImpl$$Lambda$312/0x000000080046c840.invoke(Unknown Source)
	at com.sun.proxy.$Proxy43.modificationCountChanged(Unknown Source)
	at com.intellij.psi.impl.PsiModificationTrackerImpl.fireEvent(PsiModificationTrackerImpl.java:70)
	at com.intellij.psi.impl.PsiModificationTrackerImpl.incCountersInner(PsiModificationTrackerImpl.java:75)
	at com.intellij.psi.impl.PsiModificationTrackerImpl.incOutOfCodeBlockModificationCounter(PsiModificationTrackerImpl.java:65)
	at com.jetbrains.cidr.lang.symbols.symtable.FileSymbolTablesCache$1.incModificationCount(FileSymbolTablesCache.java:130)
	at com.jetbrains.cidr.lang.symbols.symtable.FileSymbolTablesCache$3.done(FileSymbolTablesCache.java:205)
	at com.jetbrains.cidr.VirtualFileChangeListener.after(VirtualFileChangeListener.kt:76)
	at jdk.internal.reflect.GeneratedMethodAccessor151.invoke(Unknown Source)
	at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at [email protected]/java.lang.reflect.Method.invoke(Method.java:566)
	at com.intellij.util.messages.impl.MessageBusImpl.invokeListener(MessageBusImpl.java:513)
	at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:142)
	at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:438)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:398)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:388)
	at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:372)
	at com.intellij.util.messages.impl.MessageBusImpl.lambda$createTopicHandler$1(MessageBusImpl.java:241)
	at com.intellij.util.messages.impl.MessageBusImpl$$Lambda$312/0x000000080046c840.invoke(Unknown Source)
	at com.sun.proxy.$Proxy129.after(Unknown Source)
	at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.processEvents(PersistentFSImpl.java:983)
	at com.intellij.openapi.vfs.newvfs.AsyncEventSupport.processEvents(AsyncEventSupport.java:124)
	at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.fireEventsInWriteAction(RefreshSessionImpl.java:193)
	at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.lambda$fireEvents$1(RefreshSessionImpl.java:180)
	at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl$$Lambda$3391/0x0000000801ab3040.run(Unknown Source)
	at com.intellij.openapi.application.WriteAction.run(WriteAction.java:98)
	at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.fireEvents(RefreshSessionImpl.java:180)
	at com.intellij.openapi.vfs.newvfs.RefreshQueueImpl.lambda$tryProcessingEvents$5(RefreshQueueImpl.java:152)
	at com.intellij.openapi.vfs.newvfs.RefreshQueueImpl$$Lambda$779/0x0000000800963040.run(Unknown Source)
	at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:83)
	at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:107)
	at com.intellij.openapi.application.TransactionGuardImpl$$Lambda$561/0x00000008006fa040.run(Unknown Source)
	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:441)
	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:424)
	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:407)
	at [email protected]/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at [email protected]/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
	at [email protected]/java.awt.EventQueue$4.run(EventQueue.java:727)
	at [email protected]/java.awt.EventQueue$4.run(EventQueue.java:721)
	at [email protected]/java.security.AccessController.doPrivileged(Native Method)
	at [email protected]/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at [email protected]/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:906)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:779)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:422)
	at com.intellij.ide.IdeEventQueue$$Lambda$532/0x00000008006a1840.compute(Unknown Source)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:698)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:421)
	at [email protected]/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at [email protected]/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at [email protected]/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at [email protected]/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at [email protected]/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at [email protected]/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

dependency conditionals

Feature:
highlighting and evaluation of dependency "conditional" attribute.

Background
A prominent feature in Format 3 packages, it allows toggling dependencies based on the evaluated value of the conditional. In contract to the version restriction attributes, this feature actually relaxes the rules rather than making them more strict.

Details

  • A brand new language for the conditional attribute will be added. It is rather simple to implement and REP 149 describes it in full. It is also used in some of the base ROS packages. This language will have no associated file (if possible) and will be directly injected into the tag.
  • This internal language should also have color options added like other languages.
  • The language should suggest known env variables when writing $
  • The language should allow completing the basic keywords: and,or
  • Tags should have a new attribute completion for "condition"
  • parenthesis should be matched using the brace matcher
  • fragments should be annotated with the error and with the correct fixes
  • Toggling tags:
    • After completing (#28), and given that the file is in format 3, the annotation for invalid dependency version could be toggled off by the conditional.
    • if the format is 3 or higher, highlight turned off tags in a special configurable color that is by default the "unused" color.
    • ignored tags should not affect package completion.
  • If the file is in a lower format, use an inspection on conditionals to point out they are not considered.

Features Currently Supported

  • Is there somewhere that you list all the currently supported features(ex. what filetypes there's parsing for, what ros things the plugins support, etc.)?

  • Does this plugin currently support the build process or is that something that needs to be done outside of Clion? If it does, is it compatible with catkin_tools or is it only compatible with catkin_make?

  • Have you seen https://github.com/paoloach/ROS-JetBrains-Plugin and https://github.com/duckietown/hatchery? How will this plugin differ from those? What featureset will it have compared to those?

Plugin Version
0.1.6

Somehow interferes with CMake project loading.

Describe the bug
After CLion is started and loading a previous project, all project files are reported as not belonging to the project.

To Reproduce

  1. Have a CMake C++ project, set up the ROS plugin for it.
  2. Exit CLion
  3. Start clion
  4. load the previous project

Expected behavior
The project files should be recognized as project files. Sometimes, the non-recognized project files get a weird yellowis-brownish background in the project view, sometimes they have normal background. When I press the "reload cmake project" button, project files are recognized correctly.

Environment Information:

  • OS: Ubuntu 18.04
  • IDE: CLion 2020.1 beta (but has been happening all the time)
  • Plugin Version: 0.1.5 (but has been happening all the time)
  • Related Plugins: hatchery

Additional context
Add any other context about the problem here.

some inspection do not have supression fix for fragments

for example, if you add in the end of the file
tf/tfMessage (perfectly valid type, though not PascalCased)
the inspection will appear correctly but will not offer a supression fix. This probably happens because of a misuse of the ROSPktField class (should be ROSPktFieldBase)

Wrongly take my junit run button.

Hi

I am using intellij for java, and all the junit test case button had been replace by your plugin , when I click on it ,it create a test run with the cute icon , which actually I want to run my test case via junit. please help fix it, it is really boring.

BR
Xavier

Document new "License Details Preference" option

Feature:
documentation on "License Details Preference" option in ROS Settings tab.

Background
This plugin specific option does not come with any explanation as to what the options lead to and what advantages each choice offers. This is left to the wiki

Details
Add documentation in the ROS Settings page on the wiki on this site.

Can you add a Wiki/tutorial to setup a project ?

Hi,

I'm trying to use your plugin to add rospy to my work environment but it's kinda hard to figure out what to do with it ^^ It's basically the same issue as #3

When I add it to PyCharm, it leads to an inspection of my home directory, which is not where my ROS package is located, and which also leads to "every line of your code is duplicated from another source" because, my repo is basically scans 2 times.

I think that I have to add some paths in .xml files from the .idea folder but I do not know which field I should fill ... ๐Ÿ˜›

Can you help on that ? Maybe, you could do a tutorial ?

Cheers

message parsing - small bugs

  1. while comments are properly found after a number and than 1 space, they are not correctly parsed (they become a string const) if there are multiple spaces.
  2. bytes and chars MAY be assigned numerical constants. byte is an alias for int8 and char alias to uint8.

Teaming up with hatchery

Just wondering, is this project related to hatchery? If not, I think it would be great to team up to improve ROS support in IntelliJ more quickly.

I'm using CLion with the Hatchery plugin so far, but what I'm missing is catkin build support. roslaunch support would be nice as well.

REP 140 simple package.xml stuff

In here all planned stuff for package.xml will be written:
see REP 140 for more details

<name />

  • min tags: 1
  • max tags: 1
  • must match folder name
  • Capital letters are acceptable, but would have a warning. Thus, package names are either smake_case or kebab-case

<version />

  • min tags: 1
  • max tags: 1
  • must be in form NUMBER.NUMBER.NUMBER

<description />

  • min tags: 1
  • max tags: 1
  • may use HTML tags (automatic language injection)
  • this is the only tag that can be empty

<maintainer />

  • min tags: 1
  • email attribute is required
  • tag must contain a value (name)

<license />

  • min tags: 1
  • one license per tag
  • tag must contain a value.
  • must contain ONLY an actual license.
  • proper license tags should link to license page on CTRL+Click. Use this as reference for Open Source and add Proprietary as an option (how ?)
  • autocompletion for license values, only suggest licenses that are not currently used.

<url />

  • must have a value, doesn't have to be a link (warning will be displayed however)
  • optional type attribute, possible values are website (default), repository, bugtracker
  • autocompletion for type options

<author />

  • tag must contain a value (name)

general

  • provide completion for tag names: maintainer,author,license,version,url,etc. Also make sure to remove old default variant.
  • provide completion for attribute names: email for author and maintainer, type for url

dependency stuff is far more complex and thus will be another issue.

0.1.3 PluginException

com.intellij.diagnostic.PluginException: Incorrect name specified in <fileType>, should be ROSAct, actual ROS Action [Plugin: ros-integrate]
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.instantiateFileTypeBean(FileTypeManagerImpl.java:491)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.instantiatePendingFileTypes(FileTypeManagerImpl.java:464)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.initializeComponent(FileTypeManagerImpl.java:666)
	at com.intellij.configurationStore.ComponentStoreImpl.initComponent(ComponentStoreImpl.kt:97)
	at com.intellij.configurationStore.ComponentStoreWithExtraComponents.initComponent(ComponentStoreWithExtraComponents.kt:49)
	at com.intellij.serviceContainer.PlatformComponentManagerImpl.initializeComponent(PlatformComponentManagerImpl.kt:259)
	at com.intellij.serviceContainer.ServiceComponentAdapter.createAndInitialize(ServiceComponentAdapter.kt:56)
	at com.intellij.serviceContainer.ServiceComponentAdapter.doCreateInstance(ServiceComponentAdapter.kt:39)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstanceUncached(BaseComponentAdapter.kt:110)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstance(BaseComponentAdapter.kt:72)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstance$default(BaseComponentAdapter.kt:65)
	at com.intellij.serviceContainer.PlatformComponentManagerImpl$preloadServices$future$1.run(PlatformComponentManagerImpl.kt:623)
	at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1736)
	at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:222)
	at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:30)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.execute(BoundedTaskExecutor.java:201)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:193)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)

reorder package.xml file intention

add an intention for entire package.xml file that will reorder itself according to the sorting in REP 140 example

order:

  1. name
  2. version
  3. description
  4. maintainer(s)
  5. license(s)
  6. url(2)
  7. author(s)
  8. buildtool_depend(s)
  9. buildtool_export_depends(s)
  10. depend(s)
  11. build_depend(s)
  12. build_export_depend(s)
  13. exec_depend(s)
  14. doc_depend(s)
  15. test_depends(s)
  16. export

Automatically remove /opt/ros/*/setup.bash from additional workspace packages

As pointed out in #18, The default ROS installation path should not be a part of the additional workspace packages setting. However, this setting gets pre-filled with ROS_PACKAGE_PATH, which in many cases does contain this path. I think the plugin should remove it automatically, or at least warn the user that he should do that.

"complete package.xml" intention

Feature:
A "one click" fix for missing tags in package.xml files

Background
Often package.xml files are missing a lot of tags. It can be especially annoying to Alt+Enter each and every one of them, even more so when you just created a new package.xml file. Granted, they do make creating a package.xml file a lot easier, but it can be much easier, and most importantly, "in one click".
Another big issue is that there are just too many intentions making the intention option bar hard to look at

Details

  • there should be a unified intention for all "add new " intentions. The individual intentions should still be available, but only visible if explicitly configured from the intention settings
  • By default, the intention should be completely automatic, taking whatever information it has and automatically creating the tags necessary. This is pretty much the sum of all the current intentions.
  • A dialog to allow filling the package.xml file should also exist.
    • this dialog is off by default, but can be turned on from the intention menu
    • Format: checkmark ticked on by default is used as "latest format", but can be unticked to open a text bar for a custom format number.
    • If the format attribute is already set, show it instead (if its the latest, keep the tick mark)
    • Version: a text bar with 1.0.0 as default, or with the version currently set
    • version compatibility should be another text bar next to version with (optional)
    • Description: a text bar that has the default text unless there is already a real description tag which is used as input
    • License: offer an editable table of dropdowns of available licenses along with the TODO license that's set by default. If possible, make it so that you can write custom texts in
    • each license entry should also have a "file" bar next to it that can be filled optionally
    • at least one license is required to click on OK
    • Maintainer: a editable table of users (text) and email (text). This table is read from the file
    • at least one maintainer is required to click on OK
    • Dependencies: a table of dependencies containing the type and package. For the sake of simplicity, condition and version range will not be added.
    • at least one buildtool dependency is required to click on OK

dependency version restrictions

Feature:
Autocompletion for version dependency, with additional inspections

Background
Sometimes a package depends on specific versions of another package. The attributes version_COMP specify that.

Details

  • Add autocompletion for the attributes of version ranges, and suggest the current version of the target package (if applicable) as a value.
  • Add an inspection that checks the validity of that dependency.
  • Add annotation for the value of the attribute (must be valid version)
  • Limit autocompletion to only be of version ranges (one max, one min)
  • Add annotation for conflicting version attributes. (lt + lte, gt + gte, eq + any of the others)
  • Add inspection for non matching version attributes for similar dependencies.
  • suggested value for the attribute should be the package's current version (if one exists)

Avoid whole computer indexing

Feature:
I would like PyCharm to not index files when Workspace (Langugages & Framworks > ROS) is not filled

Background
The plugin always want to index. It starts to index my whole computer as soon as I create a project because initially, the workspace is empty which corresponds to the PC's root (I guess)
As it is not possible to enable/disable plugins for one specific project, ROS Support is always enable on my PyCharm and each time I create a new project, my computer almost freeze because PyCharm is indexing everything

Details
Can you add an option/condition which will allow set a new external library only if the user set one :) ?

Cheers

NullPointerException at ROSPackageManagerImpl.sortToLists

java.lang.NullPointerException
	at java.util.TreeMap.rotateLeft(TreeMap.java:2224)
	at java.util.TreeMap.fixAfterInsertion(TreeMap.java:2291)
	at java.util.TreeMap.put(TreeMap.java:582)
	at com.intellij.util.containers.SortedList.addToMap(SortedList.java:49)
	at com.intellij.util.containers.SortedList.add(SortedList.java:57)
	at ros.integrate.workspace.ROSPackageManagerImpl.sortToLists(ROSPackageManagerImpl.java:125)
	at ros.integrate.workspace.ROSPackageManagerImpl.lambda$doBulkFileChangeEvents$1(ROSPackageManagerImpl.java:52)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:291)
	at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool.helpComplete(ForkJoinPool.java:1870)
	at java.util.concurrent.ForkJoinPool.externalHelpComplete(ForkJoinPool.java:2467)
	at java.util.concurrent.ForkJoinTask.externalAwaitDone(ForkJoinTask.java:324)
	at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:405)
	at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:734)
	at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:160)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:583)
	at ros.integrate.workspace.ROSPackageManagerImpl.doBulkFileChangeEvents(ROSPackageManagerImpl.java:52)
	at ros.integrate.workspace.ROSPackageManagerImpl.access$000(ROSPackageManagerImpl.java:18)
	at ros.integrate.workspace.ROSPackageManagerImpl$1.after(ROSPackageManagerImpl.java:35)
	at sun.reflect.GeneratedMethodAccessor162.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:114)
	at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:393)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:354)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:343)
	at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:318)
	at com.intellij.util.messages.impl.MessageBusImpl.access$100(MessageBusImpl.java:29)
	at com.intellij.util.messages.impl.MessageBusImpl$1.invoke(MessageBusImpl.java:192)
	at com.sun.proxy.$Proxy27.beforeFileContentReload(Unknown Source)
	at sun.reflect.GeneratedMethodAccessor386.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.multiCast(FileDocumentManagerImpl.java:142)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.lambda$new$0(FileDocumentManagerImpl.java:122)
	at com.sun.proxy.$Proxy27.beforeFileContentReload(Unknown Source)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.fireBeforeFileContentReload(FileDocumentManagerImpl.java:733)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.reloadFromDisk(FileDocumentManagerImpl.java:633)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.contentsChanged(FileDocumentManagerImpl.java:622)
	at sun.reflect.GeneratedMethodAccessor380.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.util.EventDispatcher.dispatchVoidMethod(EventDispatcher.java:132)
	at com.intellij.util.EventDispatcher.access$000(EventDispatcher.java:26)
	at com.intellij.util.EventDispatcher$1.invoke(EventDispatcher.java:90)
	at com.sun.proxy.$Proxy23.contentsChanged(Unknown Source)
	at com.intellij.openapi.vfs.impl.BulkVirtualFileListenerAdapter.fireAfter(BulkVirtualFileListenerAdapter.java:65)
	at com.intellij.openapi.vfs.impl.BulkVirtualFileListenerAdapter.after(BulkVirtualFileListenerAdapter.java:56)
	at sun.reflect.GeneratedMethodAccessor162.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:114)
	at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:393)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:354)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:343)
	at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:320)
	at com.intellij.util.messages.impl.MessageBusImpl.access$100(MessageBusImpl.java:29)
	at com.intellij.util.messages.impl.MessageBusImpl$1.invoke(MessageBusImpl.java:192)
	at com.sun.proxy.$Proxy21.after(Unknown Source)
	at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.processEvents(PersistentFSImpl.java:903)
	at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.fireEventsInWriteAction(RefreshSessionImpl.java:199)
	at com.intellij.openapi.application.WriteAction.run(WriteAction.java:92)
	at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.fireEvents(RefreshSessionImpl.java:186)
	at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:88)
	at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:111)
	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:435)
	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:419)
	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:403)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764)
	at java.awt.EventQueue.access$500(EventQueue.java:98)
	at java.awt.EventQueue$3.run(EventQueue.java:715)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:734)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:741)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:690)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:385)
	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)

The specified source space does not exist

I am getting the following error when I attempt to run a Python module

sh -c "echo 'ROS workspace directory: /home/nbro' &&
      cd /home/nbro &&
      catkin_make &&
      echo 'Sourcing /home/nbro:devel:setup.sh' &&
      . /home/nbro:devel:setup.sh &&
      echo 'Available nodes:' &&
      rosnode list &&
      echo 'Available topics:' &&
      rostopic list &&
      echo 'Available services:' &&
      rossrv list &&
      echo 'Available parameters:' &&
      rosparam list &&
      roslaunch  /home/nbro/Desktop/my_project/my_file.py "
ROS workspace directory: /home/nbro
Base path: /home/nbro
The specified source space "/home/nbro/src" does not exist

which states that the ROS workspace is at /home/nbro, but it is not there, it is under /home/nbro/catwin_ws. How can I change these configurations? I know I can change the location of the ROS distribution (in the settings).

Of course, I can solve this issue by simply editing the run configurations in PyCharm so that it uses a Python template and not a ROS Launch file. But is it possible to change this PyCharm default behavior after having installed the ROS Support plugin, so that Python modules are executed as Python modules and not ROS Launch files?

0.1.3 NPEs

any cought NPEs and IllegalArgumentExceptions in ROS support 0.1.3 will be posted here. Keep in mind that some of them were already solved in preperations for 0.1.4

invalid file types

while upgrading from 0.1.2 to 0.1.3, the file types ROSSrv and ROSAct caused annoying log errors.
While CLion manages fairly well, its a good idea to remove those error logs somehow. Stack trace for the two (and possibly ROSMsg):

ROSAct:

java.lang.Throwable: Incorrect name specified in <fileType>, should be ROSAct, actual ROS Action
	at com.intellij.openapi.diagnostic.Logger.error(Logger.java:145)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.instantiateFileTypeBean(FileTypeManagerImpl.java:493)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.instantiatePendingFileTypes(FileTypeManagerImpl.java:467)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.getRegisteredFileTypes(FileTypeManagerImpl.java:1262)
	at com.intellij.psi.impl.cache.impl.id.IdIndexImpl.getVersion(IdIndexImpl.java:25)
	at com.intellij.util.indexing.FileBasedIndexImpl.registerIndexer(FileBasedIndexImpl.java:342)
	at com.intellij.util.indexing.FileBasedIndexImpl.access$5300(FileBasedIndexImpl.java:107)
	at com.intellij.util.indexing.FileBasedIndexImpl$FileIndexDataInitialization.lambda$initAssociatedDataForExtensions$0(FileBasedIndexImpl.java:2431)
	at com.intellij.util.indexing.IndexInfrastructure$DataInitialization.executeNestedInitializationTask(IndexInfrastructure.java:173)
	at com.intellij.util.indexing.IndexInfrastructure$DataInitialization.runParallelNestedInitializationTasks(IndexInfrastructure.java:161)
	at com.intellij.util.indexing.IndexInfrastructure$DataInitialization.call(IndexInfrastructure.java:122)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:222)
	at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:30)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.execute(BoundedTaskExecutor.java:201)
	at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:221)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:190)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)

ROSSrv:

java.lang.Throwable: Incorrect name specified in <fileType>, should be ROSSrv, actual ROS Srv
	at com.intellij.openapi.diagnostic.Logger.error(Logger.java:145)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.instantiateFileTypeBean(FileTypeManagerImpl.java:493)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.instantiatePendingFileTypes(FileTypeManagerImpl.java:467)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.getRegisteredFileTypes(FileTypeManagerImpl.java:1262)
	at com.intellij.psi.impl.cache.impl.id.IdIndexImpl.getVersion(IdIndexImpl.java:25)
	at com.intellij.util.indexing.FileBasedIndexImpl.registerIndexer(FileBasedIndexImpl.java:342)
	at com.intellij.util.indexing.FileBasedIndexImpl.access$5300(FileBasedIndexImpl.java:107)
	at com.intellij.util.indexing.FileBasedIndexImpl$FileIndexDataInitialization.lambda$initAssociatedDataForExtensions$0(FileBasedIndexImpl.java:2431)
	at com.intellij.util.indexing.IndexInfrastructure$DataInitialization.executeNestedInitializationTask(IndexInfrastructure.java:173)
	at com.intellij.util.indexing.IndexInfrastructure$DataInitialization.runParallelNestedInitializationTasks(IndexInfrastructure.java:161)
	at com.intellij.util.indexing.IndexInfrastructure$DataInitialization.call(IndexInfrastructure.java:122)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:222)
	at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:30)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.execute(BoundedTaskExecutor.java:201)
	at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:221)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:190)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)

easy fix via plugin.xml I think

package manager does not find packages

This is a severe bug that causes the main component of the plugin, the package manager (class ROSPackageManager) to fail in either indexing or in loading the packages it finds.
Please report any instances you encounter this bug, what product you were using (for example CLion 2019.3.4), what version of the plugin you were using, and if possible, the steps you took to get the bug.

In future version of the plugin a tool to detect and report this bug will be added to help solve it.

Information so far:

  • this bug only happens in CLion.
  • restarting the IDE can temporarily solve the issue.
  • This issue causes autocompletion for .msg files to fail for any message file outside the current package for both types of packages (compiled package like std_msgs, or packages in the workspace or a package path)

non-package rosdep keys

as expected, some rosdep keys are not packages (for example, cmake, eigen). These need to be tracked using the ROS git, preferably automatically and without relying on commands. If a dependency links to one of these rosdep keys, it should not mark it as an error, somehow.

This is the list of rosdep keys and what they resolve to:

https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml

You can read files directly from the internet or download them per version and read them there,
or try to decipher the .pickle files available on the computer in ~/.ros/rosdep/sources.cache

caching could also be possible.

field label snake_case inspection

Feature:
field label snake_case inspection

Background
the standard for ROS message field names (or labels in plugin terms) is snake_case. Thus, it should be enforced via inspections.
The fix for it would be to convert the name to snake_case

Details

  • annotate field labels that do not follow snake_case conventions.
  • for said annotations, suggest a fix that converts pascal/camel to snake and adds underscores wherever necessary
  • add HTML description

autocompletion of package -> msg in a message file does not add dependency.

Describe the bug
When autocompleting in a .msg file by choosing an external package then a message in the package, no dependency tag is added the the original .msg file's package.xml.

To Reproduce
Steps to reproduce the behavior:

  1. start autocompletion in a .msg file for a package other than the one the .msg file is in.
  2. *enter*
  3. choose a message file in the other package
  4. *enter*

Expected behavior
in the package's package.xml, a new build dependency tag should be added.

Environment Information:

  • OS: Windows 10
  • IDE: IntelliJ IDEA 2019.3.3
  • Plugin Version: 0.1.5
  • Related Plugins: none

Changing worksapce/ROS path does not add libraries to index

Describe the bug
Changing workspace/ROS path settings does not modify the respective libraries.

To Reproduce
Steps to reproduce the behavior:

  1. Open a new project on a package in a workspace
  2. Open the settings, and change ROS path and workspace path to the correct ones.
  3. After "apply", the "External Libraries" tab is unchanged.

Expected behavior
when the settings for either the workspace or ROS path are changed, the index should update the external libraries with additional roots.

Environment Information:

  • OS: Windows 10 (issue also happens on Ubuntu 20.04)
  • IDE: CLion 2019.3
  • Plugin Version: 0.1.6
  • Related Plugins: none

Additional context
See PR #41 ,Issue #39 , and pre-release v0.1.6b2 as those fixed the model but failed to fix the "change settings" part of the model.

Like the pre-release says, this issue can be solved by deleting the .idea folder and restarting the IDE. Deleting lib files wasn't enough, so figuring out the responsible file could help.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.