itemisCREATE / solidity-ide

Solidity plugin for Eclipse
Eclipse Public License 1.0
87 stars 25 forks source link

EValidator fails with error when being called from lsp (Theia integration). #303

Closed nyssen closed 4 years ago

nyssen commented 4 years ago

[Worker-1: Building workspace] ERROR org.eclipse.xtext.validation.CompositeEValidator - Error executing EValidator java.util.NoSuchElementException: No value present at java.util.Optional.get(Optional.java:135) at com.yakindu.solidity.validation.SolidityValidator.compilerValidations(SolidityValidator.java:70) at sun.reflect.GeneratedMethodAccessor120.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.xtext.validation.AbstractDeclarativeValidator$MethodWrapper.invoke(AbstractDeclarativeValidator.java:127) at org.eclipse.xtext.validation.AbstractDeclarativeValidator.internalValidate(AbstractDeclarativeValidator.java:318) at org.eclipse.xtext.validation.AbstractInjectableValidator.validate(AbstractInjectableValidator.java:71) at org.eclipse.xtext.validation.CompositeEValidator.validate(CompositeEValidator.java:150) at org.eclipse.emf.ecore.util.Diagnostician.doValidate(Diagnostician.java:257) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:244) at org.eclipse.xtext.validation.CancelableDiagnostician.validate(CancelableDiagnostician.java:40) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:201) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:143) at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:146) at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:124) at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:90) at org.eclipse.xtext.ui.validation.DefaultResourceUIValidatorExtension.addMarkers(DefaultResourceUIValidatorExtension.java:60) at org.eclipse.xtext.ui.validation.DefaultResourceUIValidatorExtension.updateValidationMarkers(DefaultResourceUIValidatorExtension.java:46) at org.eclipse.xtext.builder.builderState.MarkerUpdaterImpl.processDelta(MarkerUpdaterImpl.java:93) at org.eclipse.xtext.builder.builderState.MarkerUpdaterImpl.updateMarkers(MarkerUpdaterImpl.java:63) at org.eclipse.xtext.builder.builderState.AbstractBuilderState.updateMarkers(AbstractBuilderState.java:118) at org.eclipse.xtext.builder.clustering.ClusteringBuilderState.doUpdate(ClusteringBuilderState.java:284) at org.eclipse.xtext.builder.builderState.AbstractBuilderState.update(AbstractBuilderState.java:152) at org.eclipse.xtext.builder.impl.XtextBuilder.doBuild(XtextBuilder.java:408) at org.eclipse.xtext.builder.impl.XtextBuilder.addInfosFromTaskAndBuild(XtextBuilder.java:342) at org.eclipse.xtext.builder.impl.XtextBuilder.fullBuild(XtextBuilder.java:447) at org.eclipse.xtext.builder.impl.XtextBuilder.build(XtextBuilder.java:234) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:833) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:220) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:263) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:316) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:319) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:371) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:392) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:154) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:244) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

nyssen commented 4 years ago

Root cause is: java.lang.IllegalStateException: Workspace is closed. This is because SolidityValidator uses the workspace root to determine the unit to compile, while the language server is not started as a headless Eclipse application:

final Set resources = Sets.newHashSet( ResourcesPlugin.getWorkspace().getRoot().findMember(unit.eResource().getURI().toPlatformString(true)));