eclipse-viatra / org.eclipse.viatra

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

Avoid loading metamodels during import scoping #103

Open eclipse-viatra-bot opened 4 months ago

eclipse-viatra-bot commented 4 months ago

| --- | --- | | Bugzilla Link | 544439 | | Status | NEW | | Importance | P3 normal | | Reported | Feb 14, 2019 07:01 EDT | | Modified | Nov 23, 2020 08:30 EDT | | Version | 2.1.0 | | Blocks | 459482 | | Reporter | Zoltan Ujhelyi |

Description

As of now, the VQL parser tries to resolve the concrete metamodel instances for scoping, regardless whether it is opened or not that could result in bad performance when there are a lot of metamodels available.

An example that shows this case was found while looking at a test failure (unrelated to the performance aspects) caused by unnecessary loading:

53189 [main] WARN org.eclipse.viatra.query - Error while loading genmodel 'platform:/plugin/org.eclipse.xtext.ui.codetemplates/model/generated/Codetemplates.genmodel' for EPackage 'http://www.eclipse.org/xtext/codetemplate/Codetemplates'. Check corresponding plugin.xml declaration.\ org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1DiagnosticWrappedException: org.eclipse.emf.ecore.xmi.IllegalValueException: Value '2.12' is not legal. (platform:/plugin/org.eclipse.xtext.ui.codetemplates/model/generated/Codetemplates.genmodel, 6, 239)\ at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:319)\ at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:278)\ at org.eclipse.xtext.resource.XtextResourceSet.getResource(XtextResourceSet.java:265)\ at org.eclipse.xtext.resource.SynchronizedXtextResourceSet.getResource(SynchronizedXtextResourceSet.java:25)\ at org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelsIndex$TargetPlatformMetamodel.loadGenModel(TargetPlatformMetamodelsIndex.java:223)\ at org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelsIndex$TargetPlatformMetamodel.loadGenPackage(TargetPlatformMetamodelsIndex.java:235)\ at org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelsIndex$TargetPlatformMetamodel.loadPackage(TargetPlatformMetamodelsIndex.java:259)\ at org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelsIndex.lambda$4(TargetPlatformMetamodelsIndex.java:304)\ at java.util.Optional.map(Optional.java:215)\ at org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelsIndex.loadPackage(TargetPlatformMetamodelsIndex.java:304)\ at org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelProviderService.getAllMetamodelObjects(TargetPlatformMetamodelProviderService.java:78)\ at org.eclipse.viatra.query.patternlanguage.emf.scoping.CompoundMetamodelProviderService.getAllMetamodelObjects(CompoundMetamodelProviderService.java:51)\ at org.eclipse.viatra.query.patternlanguage.emf.scoping.EMFPatternLanguageDeclarativeScopeProvider.scope_EPackage(EMFPatternLanguageDeclarativeScopeProvider.java:148)\ at org.eclipse.viatra.query.patternlanguage.emf.scoping.EMFPatternLanguageDeclarativeScopeProvider.getScope(EMFPatternLanguageDeclarativeScopeProvider.java:83)\ at org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider$ReferenceProposalCreator.lookupCrossReference(AbstractJavaBasedContentProposalProvider.java:132)\ at org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider.lookupCrossReference(AbstractJavaBasedContentProposalProvider.java:261)\ at org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider.lookupCrossReference(AbstractJavaBasedContentProposalProvider.java:255)\ at org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider.lookupCrossReference(AbstractJavaBasedContentProposalProvider.java:233)\ at org.eclipse.xtext.xbase.ui.contentassist.XbaseProposalProvider.lookupCrossReference(XbaseProposalProvider.java:431)\ at org.eclipse.viatra.query.patternlanguage.emf.ui.contentassist.AbstractEMFPatternLanguageProposalProvider.completePackageImport_EPackage(AbstractEMFPatternLanguageProposalProvider.java:46)\ at org.eclipse.viatra.query.patternlanguage.emf.ui.contentassist.EMFPatternLanguageProposalProvider.completePackageImport_EPackage(EMFPatternLanguageProposalProvider.java:283)\ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\ at java.lang.reflect.Method.invoke(Method.java:498)\ at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:302)\ at org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider.invokeMethod(AbstractJavaBasedContentProposalProvider.java:300)\ at org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider.completeAssignment(AbstractJavaBasedContentProposalProvider.java:205)\ at org.eclipse.xtext.ui.editor.contentassist.AbstractContentProposalProvider$DefaultContentAssistProcessorSwitch.caseAssignment(AbstractContentProposalProvider.java:66)\ at org.eclipse.xtext.ui.editor.contentassist.AbstractContentProposalProvider$DefaultContentAssistProcessorSwitch.caseAssignment(AbstractContentProposalProvider.java:1)\ at org.eclipse.xtext.util.XtextSwitch.doSwitch(XtextSwitch.java:144)\ at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:53)\ at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:69)\ at org.eclipse.xtext.ui.editor.contentassist.AbstractContentProposalProvider$DefaultContentAssistProcessorSwitch.accept(AbstractContentProposalProvider.java:72)\ at org.eclipse.xtext.ui.editor.contentassist.AbstractContentProposalProvider.createProposals(AbstractContentProposalProvider.java:104)\ at org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider.createProposals(AbstractJavaBasedContentProposalProvider.java:275)\ at org.eclipse.viatra.query.patternlanguage.emf.ui.contentassist.EMFPatternLanguageProposalProvider.createProposals(EMFPatternLanguageProposalProvider.java:107)\ at org.eclipse.xtext.ui.editor.contentassist.CompletionProposalComputer.exec(CompletionProposalComputer.java:52)\ at org.eclipse.xtext.ui.editor.contentassist.CompletionProposalComputer.exec(CompletionProposalComputer.java:1)\ 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.priorityReadOnly(XtextDocument.java:491)\ at org.eclipse.xtext.ui.editor.model.XtextDocument.priorityReadOnly(XtextDocument.java:147)\ at org.eclipse.xtext.ui.editor.contentassist.RepeatedContentAssistProcessor.computeCompletionProposals(RepeatedContentAssistProcessor.java:111)\ at org.eclipse.xtext.ui.editor.contentassist.RepeatedContentAssistProcessor.computeCompletionProposals(RepeatedContentAssistProcessor.java:80)\ at org.eclipse.xtext.ui.testing.ContentAssistProcessorTestBuilder.computeCompletionProposals(ContentAssistProcessorTestBuilder.java:510)\ at org.eclipse.xtext.ui.testing.ContentAssistProcessorTestBuilder.computeCompletionProposals(ContentAssistProcessorTestBuilder.java:501)\ at org.eclipse.xtext.ui.testing.ContentAssistProcessorTestBuilder.applyProposal(ContentAssistProcessorTestBuilder.java:189)\ at org.eclipse.xtext.ui.testing.ContentAssistProcessorTestBuilder.applyProposal(ContentAssistProcessorTestBuilder.java:178)\ at org.eclipse.viatra.query.patternlanguage.emf.tests.contentassist.ImportAssistTest.testEPackageImportWithMissingEndApostrophe(ImportAssistTest.java:43)\ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\ at java.lang.reflect.Method.invoke(Method.java:498)\ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)\ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)\ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\ at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)\ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)\ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)\ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)\ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)\ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)\ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)\ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)\ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)\ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\ at org.junit.runners.ParentRunner.run(ParentRunner.java:363)\ at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:367)\ at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274)\ at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)\ at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161)\ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\ at java.lang.reflect.Method.invoke(Method.java:498)\ at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:202)\ at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:155)\ at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:81)\ at org.eclipse.tycho.surefire.osgibooter.OsgiSurefireBooter.run(OsgiSurefireBooter.java:107)\ at org.eclipse.tycho.surefire.osgibooter.AbstractUITestApplication$1.run(AbstractUITestApplication.java:35)\ at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:37)\ at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)\ at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4577)\ at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4186)\ at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1150)\ at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)\ at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1039)\ at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)\ at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680)\ at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)\ at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)\ at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)\ at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)\ at org.eclipse.tycho.surefire.osgibooter.UITestApplication.runApplication(UITestApplication.java:31)\ at org.eclipse.tycho.surefire.osgibooter.AbstractUITestApplication.run(AbstractUITestApplication.java:120)\ at org.eclipse.tycho.surefire.osgibooter.UITestApplication.start(UITestApplication.java:37)\ at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)\ at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)\ at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)\ at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)\ at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)\ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\ at java.lang.reflect.Method.invoke(Method.java:498)\ at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)\ at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)\ at org.eclipse.equinox.launcher.Main.run(Main.java:1499)\ at org.eclipse.equinox.launcher.Main.main(Main.java:1472)\ Caused by: org.eclipse.emf.ecore.xmi.IllegalValueException: Value '2.12' is not legal. (platform:/plugin/org.eclipse.xtext.ui.codetemplates/model/generated/Codetemplates.genmodel, 6, 239)\ at org.eclipse.emf.ecore.xmi.impl.XMLHandler.setFeatureValue(XMLHandler.java:2697)\ at org.eclipse.emf.ecore.xmi.impl.XMLHandler.setAttribValue(XMLHandler.java:2751)\ at org.eclipse.emf.ecore.xmi.impl.SAXXMIHandler.handleObjectAttribs(SAXXMIHandler.java:79)\ at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createObjectFromFactory(XMLHandler.java:2229)\ at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createObjectByType(XMLHandler.java:1366)\ at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createTopObject(XMLHandler.java:1504)\ at org.eclipse.emf.ecore.xmi.impl.XMLHandler.processElement(XMLHandler.java:1026)\ at org.eclipse.emf.ecore.xmi.impl.XMIHandler.processElement(XMIHandler.java:77)\ at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:1008)\ at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:719)\ at org.eclipse.emf.ecore.xmi.impl.XMIHandler.startElement(XMIHandler.java:163)\ at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)\ at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:745)\ at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1359)\ at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1289)\ at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3132)\ at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:852)\ at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)\ at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)\ at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842)\ at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)\ at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)\ at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)\ at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)\ at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:327)\ at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java:175)\ at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(XMLResourceImpl.java:261)\ at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1518)\ at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1297)\ at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:259)\ at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274) ... 109 more\ Caused by: java.lang.IllegalArgumentException: The value '2.12' is not a valid enumerator of 'GenRuntimeVersion'\ at org.eclipse.emf.codegen.ecore.genmodel.impl.GenModelFactoryImpl.createGenRuntimeVersionFromString(GenModelFactoryImpl.java:394)\ at org.eclipse.emf.codegen.ecore.genmodel.impl.GenModelFactoryImpl.createFromString(GenModelFactoryImpl.java:114)\ at org.eclipse.emf.ecore.xmi.impl.XMLHelperImpl.createFromString(XMLHelperImpl.java:1615)\ at org.eclipse.emf.ecore.xmi.impl.XMLHelperImpl.setValue(XMLHelperImpl.java:1156)\ at org.eclipse.emf.ecore.xmi.impl.XMLHandler.setFeatureValue(XMLHandler.java:2692) ... 139 more\ \ The problematic part is in EMFPatternLanguageDeclarativeScopeProvider#scope_EPackage line 148 where the IMetamodelProvider#getAllMetamodelObjects() method is called instead of something that returns unresolved EObjectDescriptions.

Note that fixing this issue will not solve all performance bottlenecks related to EPackage resolution, but it is of limited scope and does not require changing the import semantics of the language.

eclipse-viatra-bot commented 4 months ago

By Zoltan Ujhelyi on May 27, 2019 07:49

Bugzilla cleanup.

eclipse-viatra-bot commented 4 months ago

By Zoltan Ujhelyi on Nov 20, 2019 05:51

Postponing issues to the next release.

eclipse-viatra-bot commented 4 months ago

By Zoltan Ujhelyi on May 18, 2020 13:04

Postponing issues that will not be solved for version 2.5.

eclipse-viatra-bot commented 4 months ago

By Zoltan Ujhelyi on Nov 23, 2020 08:30

Mass postponing of issues to the 2.6 timeframe.