| --- | --- |
| 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)
| --- | --- | | 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)