Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 401226

Summary: Derived feature generator exception if eiqgen overrides plugin
Product: [Modeling] Viatra Reporter: Gabor Bergmann <gabor.bergmann>
Component: QueryAssignee: Abel Hegedus <abel.hegedus>
Status: RESOLVED FIXED QA Contact: Istvan Rath <istvanrath>
Severity: normal    
Priority: P3 CC: zoltan.ujhelyi
Version: oldinquery   
Target Milestone: 1.0 M3   
Hardware: PC   
OS: Windows 7   
Whiteboard:

Description Gabor Bergmann CLA 2013-02-19 14:43:09 EST
If .eiqgen overrides a plugin genmodel by a workspace genmodel, an exception is thrown in the background when recompiling an .eiq containing annotations for query-based derived features, and no code will be generated for the query-based derived features. (Generated pattern matchers, however, look OK.)
 
Here is the exception reproduced with matchrecord.eiq in testing.queries, when a duplicate of the project org.eclipse.incquery.snashot is checked out in the workspace: 

java.lang.IllegalArgumentException: Derived feature pattern org.eclipse.incquery.testing.queries.RecordRoleValue: Source EClass MatchRecord not found in GenPackage org.eclipse.emf.codegen.ecore.genmodel.impl.GenPackageImpl@5bf4e954 (prefix: EIQSnapshot, basePackage: org.eclipse.incquery.snapshot, resource: None, disposableProviderFactory: true, adapterFactory: true, loadInitialization: false, interfacePackageSuffix: , metaDataPackageSuffix: , classPackageSuffix: impl, utilityPackageSuffix: util, providerPackageSuffix: provider, presentationPackageSuffix: presentation, testsPackageSuffix: tests, generateExampleClass: true, literalsInterface: true, dataTypeConverters: false, multipleEditorPages: true, generateModelWizard: true, extensibleProviderFactory: false, childCreationExtenders: false, contentTypeIdentifier: null, fileExtensions: null)!
	at org.eclipse.incquery.querybasedfeatures.tooling.DerivedFeatureGenerator.findGenClassForSource(DerivedFeatureGenerator.java:359)
	at org.eclipse.incquery.querybasedfeatures.tooling.DerivedFeatureGenerator.processJavaFiles(DerivedFeatureGenerator.java:206)
	at org.eclipse.incquery.querybasedfeatures.tooling.DerivedFeatureGenerator.generateFiles(DerivedFeatureGenerator.java:187)
	at org.eclipse.incquery.tooling.core.generator.builder.EMFPatternLanguageBuilderParticipant.executeGeneratorFragment(EMFPatternLanguageBuilderParticipant.java:261)
	at org.eclipse.incquery.tooling.core.generator.builder.EMFPatternLanguageBuilderParticipant.executeGeneratorFragments(EMFPatternLanguageBuilderParticipant.java:247)
	at org.eclipse.incquery.tooling.core.generator.builder.EMFPatternLanguageBuilderParticipant.doPostGenerate(EMFPatternLanguageBuilderParticipant.java:190)
	at org.eclipse.incquery.tooling.core.generator.builder.EMFPatternLanguageBuilderParticipant.handleChangedContents(EMFPatternLanguageBuilderParticipant.java:153)
	at org.eclipse.xtext.builder.BuilderParticipant.build(BuilderParticipant.java:194)
	at org.eclipse.incquery.tooling.core.generator.builder.EMFPatternLanguageBuilderParticipant.build(EMFPatternLanguageBuilderParticipant.java:135)
	at org.eclipse.xtext.builder.impl.RegistryBuilderParticipant.build(RegistryBuilderParticipant.java:60)
	at org.eclipse.xtext.builder.impl.XtextBuilder.doBuild(XtextBuilder.java:161)
	at org.eclipse.xtext.builder.impl.XtextBuilder.incrementalBuild(XtextBuilder.java:141)
	at org.eclipse.xtext.builder.impl.XtextBuilder.build(XtextBuilder.java:91)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Comment 1 Zoltan Ujhelyi CLA 2013-02-20 03:32:59 EST
The issue seems like there are two ways to reach the ecore/genmodel instances, and the derived feature generator manages to use both. I will have a quick look.
Comment 2 Abel Hegedus CLA 2013-02-20 05:13:39 EST
The problem was that the EIQ editor used the package from the registry, while the generator received the genpackage from the metamodel provider. Therefore, the source EClass was not reachable from the GenPackage

Fixed in the latest commit by changing to name check.
Comment 3 Zoltan Ujhelyi CLA 2013-02-20 05:16:47 EST
Sorry, I would not close it until we make sure whether this duality of packages can be avoided. See also bug 398821 (override modifiers bug) in M2.
Comment 4 Istvan Rath CLA 2014-04-03 10:47:03 EDT
Moving simpler issues to 0.8-M3. please discuss if feasible, or needs to be pushed to future.
Comment 5 Istvan Rath CLA 2014-06-04 10:36:27 EDT
Pushing to RC.
Comment 6 Abel Hegedus CLA 2014-06-05 06:02:41 EDT
Moving this to 0.9 due to dependent issue.
Comment 7 Zoltan Ujhelyi CLA 2015-06-01 08:47:29 EDT
Closing as it makes no sense to wait for the other code.