eclipse-viatra / org.eclipse.viatra

Main components of the VIATRA framework
https://eclipse.dev/viatra
Eclipse Public License 2.0
1 stars 1 forks source link

ConcurrentModificationException thrown because of lazy processing of target platform metamodel index #108

Open eclipse-viatra-bot opened 6 months ago

eclipse-viatra-bot commented 6 months ago

| --- | --- | | Bugzilla Link | 549922 | | Status | NEW | | Importance | P3 normal | | Reported | Aug 09, 2019 05:25 EDT | | Modified | Aug 09, 2019 05:25 EDT | | Version | 2.0.0 | | Blocks | 539268 | | Reporter | Zoltan Ujhelyi |

Description

We have noticed a ConcurrentModificationException in bug 539268#c5 (copied below) that we can fix by making sure the stream of package declarations are processed in a synchronize block (instead of returning it outside). I have separated this to a dedicated ticket, as this can be reasonably done without any low-level requirements.

Error initializing JvmElement\ java.util.ConcurrentModificationException\ at java.util.HashMap$ValueSpliterator.tryAdvance(Unknown Source)\ at com.google.common.collect.CollectSpliterators$1FlatMapSpliterator.tryAdvance(CollectSpliterators.java:234)\ at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)\ at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)\ at java.util.stream.AbstractPipeline.copyInto(Unknown Source)\ at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)\ at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)\ at java.util.stream.AbstractPipeline.evaluate(Unknown Source)\ at java.util.stream.ReferencePipeline.findFirst(Unknown Source)\ at org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelsIndex.loadGenPackage(TargetPlatformMetamodelsIndex.java:312)\ at org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelProviderService.internalFindGenPackage(TargetPlatformMetamodelProviderService.java:95)\ at org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelProviderService.doGetQualifiedClassName(TargetPlatformMetamodelProviderService.java:110)\ at org.eclipse.viatra.query.patternlanguage.emf.scoping.BaseMetamodelProviderService.getQualifiedClassName(BaseMetamodelProviderService.java:122)\ at org.eclipse.viatra.query.patternlanguage.emf.scoping.CompoundMetamodelProviderService.getQualifiedClassName(CompoundMetamodelProviderService.java:92)\ at org.eclipse.viatra.query.patternlanguage.emf.types.EMFTypeSystem.getJvmType(EMFTypeSystem.java:501)\ at org.eclipse.viatra.query.patternlanguage.emf.types.EMFTypeSystem.toJvmTypeReference(EMFTypeSystem.java:479)\ at org.eclipse.viatra.query.patternlanguage.emf.types.AbstractTypeInferrer.getJvmType(AbstractTypeInferrer.java:80)\ at org.eclipse.viatra.query.patternlanguage.emf.jvmmodel.PatternQuerySpecificationClassInferrer.getTypeString(PatternQuerySpecificationClassInferrer.java:1072)\ at org.eclipse.viatra.query.patternlanguage.emf.jvmmodel.PatternQuerySpecificationClassInferrer.parameterInstantiation(PatternQuerySpecificationClassInferrer.java:998)\ at org.eclipse.viatra.query.patternlanguage.emf.jvmmodel.PatternQuerySpecificationClassInferrer.lambda$8(PatternQuerySpecificationClassInferrer.java:388)\ at org.eclipse.viatra.query.patternlanguage.emf.util.EMFJvmTypesBuilder.initializeSafely(EMFJvmTypesBuilder.java:37)\ at org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder.toField(JvmTypesBuilder.java:593)\ at org.eclipse.viatra.query.patternlanguage.emf.jvmmodel.PatternQuerySpecificationClassInferrer.inferPQueryMembers(PatternQuerySpecificationClassInferrer.java:390)\ at org.eclipse.viatra.query.patternlanguage.emf.jvmmodel.PatternQuerySpecificationClassInferrer.lambda$30(PatternQuerySpecificationClassInferrer.java:962)\ at org.eclipse.viatra.query.patternlanguage.emf.util.EMFJvmTypesBuilder.initializeSafely(EMFJvmTypesBuilder.java:37)\ at org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder.toClass(JvmTypesBuilder.java:389)\ at org.eclipse.viatra.query.patternlanguage.emf.jvmmodel.PatternQuerySpecificationClassInferrer.inferQuerySpecificationInnerClasses(PatternQuerySpecificationClassInferrer.java:964)\ at org.eclipse.viatra.query.patternlanguage.emf.jvmmodel.PatternQuerySpecificationClassInferrer.initializeSpecification(PatternQuerySpecificationClassInferrer.java:160)\ at org.eclipse.viatra.query.patternlanguage.emf.jvmmodel.EMFPatternLanguageJvmModelInferrer.lambda$2(EMFPatternLanguageJvmModelInferrer.java:223)\ at org.eclipse.xtext.xbase.jvmmodel.JvmModelAssociator$1.run(JvmModelAssociator.java:397)\ at org.eclipse.xtext.xbase.jvmmodel.JvmModelAssociator.installDerivedState(JvmModelAssociator.java:407)\ at org.eclipse.viatra.query.patternlanguage.emf.jvmmodel.EMFPatternJvmModelAssociator.installDerivedState(EMFPatternJvmModelAssociator.java:67)\ at org.eclipse.xtext.resource.DerivedStateAwareResource.installDerivedState(DerivedStateAwareResource.java:243)\ at org.eclipse.xtext.xbase.resource.BatchLinkableResource.getContents(BatchLinkableResource.java:148)\ at org.eclipse.emf.ecore.resource.impl.ResourceImpl.getEObjectForURIFragmentRootSegment(ResourceImpl.java:766)\ at org.eclipse.xtext.resource.DerivedStateAwareResource.getEObjectForURIFragmentRootSegment(DerivedStateAwareResource.java:212)\ at org.eclipse.emf.ecore.resource.impl.ResourceImpl.getEObject(ResourceImpl.java:808)\ at org.eclipse.emf.ecore.resource.impl.ResourceImpl.getEObject(ResourceImpl.java:787)\ at org.eclipse.xtext.resource.XtextResource.access$101(XtextResource.java:63)\ at org.eclipse.xtext.resource.XtextResource$1.getEObject(XtextResource.java:119)\ at org.eclipse.xtext.resource.DefaultFragmentProvider.getEObject(DefaultFragmentProvider.java:28)\ at org.eclipse.xtext.resource.XtextResource.basicGetEObject(XtextResource.java:363)\ at org.eclipse.xtext.resource.XtextResource.getEObject(XtextResource.java:349)\ at org.eclipse.xtext.linking.lazy.LazyLinkingResource.getEObject(LazyLinkingResource.java:246)\ at org.eclipse.xtext.resource.persistence.StorageAwareResource.getEObject(StorageAwareResource.java:119)\ at org.eclipse.xtext.xbase.resource.BatchLinkableResource.getEObject(BatchLinkableResource.java:124)\ at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getEObject(ResourceSetImpl.java:223)\ at org.eclipse.emf.ecore.util.EcoreUtil.resolve(EcoreUtil.java:209)\ at org.eclipse.emf.ecore.util.EcoreUtil.resolve(EcoreUtil.java:269)\ at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eResolveProxy(BasicEObjectImpl.java:1477)\ at org.eclipse.viatra.query.patternlanguage.emf.vql.impl.PatternCallImpl.getPatternRef(PatternCallImpl.java:98)\ at org.eclipse.viatra.query.patternlanguage.emf.validation.EMFPatternLanguageValidator.checkPatternImports(EMFPatternLanguageValidator.java:898)\ at sun.reflect.GeneratedMethodAccessor225.invoke(Unknown Source)\ at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)\ at java.lang.reflect.Method.invoke(Unknown Source)\ 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.xtext.xbase.validation.XbaseDiagnostician.validate(XbaseDiagnostician.java:42)\ 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.xbase.annotations.validation.DerivedStateAwareResourceValidator.validate(DerivedStateAwareResourceValidator.java:32)\ at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:90)\ at org.eclipse.xtext.ui.editor.validation.ValidationJob$1.exec(ValidationJob.java:91)\ at org.eclipse.xtext.ui.editor.validation.ValidationJob$1.exec(ValidationJob.java:1)\ at org.eclipse.xtext.util.concurrent.CancelableUnitOfWork.exec(CancelableUnitOfWork.java:26)\ at org.eclipse.xtext.util.concurrent.WrappingCancelableUnitOfWork.exec(WrappingCancelableUnitOfWork.java:57)\ at org.eclipse.xtext.util.concurrent.CancelableUnitOfWork.exec(CancelableUnitOfWork.java:26)\ at org.eclipse.xtext.resource.OutdatedStateManager.exec(OutdatedStateManager.java:91)\ at org.eclipse.xtext.ui.editor.model.XtextDocument$XtextDocumentLocker.internalReadOnly(XtextDocument.java:527)\ at org.eclipse.xtext.ui.editor.model.XtextDocument$XtextDocumentLocker.readOnly(XtextDocument.java:499)\ at org.eclipse.xtext.ui.editor.model.XtextDocument.readOnly(XtextDocument.java:138)\ at org.eclipse.xtext.util.concurrent.IReadAccess.tryReadOnly(IReadAccess.java:49)\ at org.eclipse.xtext.ui.editor.validation.ValidationJob.createIssues(ValidationJob.java:86)\ at org.eclipse.xtext.ui.editor.validation.ValidationJob.run(ValidationJob.java:67)\ at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)