aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
blob: 7b37ffd6f4aa4857124618c02d64e4481856c829 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package org.eclipse.viatra.solver.language.resource;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.viatra.solver.language.model.problem.ReferenceDeclaration;
import org.eclipse.viatra.solver.language.model.problem.Variable;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.resource.impl.AliasedEObjectDescription;
import org.eclipse.xtext.resource.impl.DefaultResourceDescriptionStrategy;
import org.eclipse.xtext.util.IAcceptor;

import com.google.inject.Singleton;

@Singleton
public class ProblemResourceDescriptionStrategy extends DefaultResourceDescriptionStrategy {
	@Override
	public boolean createEObjectDescriptions(EObject eObject, IAcceptor<IEObjectDescription> acceptor) {
		IAcceptor<IEObjectDescription> wrappedAcceptor;
		if (eObject instanceof Variable) {
			return false;
		}
		if (eObject instanceof ReferenceDeclaration) {
			wrappedAcceptor = new IAcceptor<IEObjectDescription>() {
				public void accept(IEObjectDescription description) {
					acceptor.accept(description);
					QualifiedName qualifiedName = description.getQualifiedName();
					if (qualifiedName.getSegmentCount() >= 2) {
						QualifiedName simpleName = QualifiedName.create(qualifiedName.getLastSegment());
						IEObjectDescription aliasedDescription = new AliasedEObjectDescription(simpleName, description);
						acceptor.accept(aliasedDescription);
					}
				};
			};
		} else {
			wrappedAcceptor = acceptor;
		}
		return super.createEObjectDescriptions(eObject, wrappedAcceptor);
	}
}