blob: b162542fed51708bfd7223a5a313054f66531fa0 [file] [log] [blame]
/**
* Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Florian Pirchner - Initial implementation
*/
package org.eclipse.osbp.dsl.xtext.lazyresolver;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.common.types.JvmDeclaredType;
import org.eclipse.xtext.common.types.JvmType;
import org.eclipse.xtext.xbase.jvmmodel.AbstractModelInferrer;
import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor;
import org.eclipse.xtext.xbase.jvmmodel.JvmAnnotationReferenceBuilder;
import org.eclipse.xtext.xbase.jvmmodel.JvmTypeReferenceBuilder;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.osbp.dsl.xtext.lazyresolver.hook.ExtensionsInferrerDelegate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
public class IndexModelInferrer extends AbstractModelInferrer {
protected Logger log = LoggerFactory.getLogger(IndexModelInferrer.class);
private @Inject JvmAnnotationReferenceBuilder.Factory annotationRefBuilderFactory;
private @Inject JvmTypeReferenceBuilder.Factory typeRefBuilderFactory;
protected @Extension JvmAnnotationReferenceBuilder _annotationTypesBuilder;
protected @Extension JvmTypeReferenceBuilder _typeReferenceBuilder;
@Inject
private ExtensionsInferrerDelegate inferrerDelegate;
@Inject
private IndexDerivedStateHelper helper;
/**
* @noreference This method is called by the framework
* @nooverride
*/
void setContext(Resource resource) {
_annotationTypesBuilder = annotationRefBuilderFactory.create(resource
.getResourceSet());
_typeReferenceBuilder = typeRefBuilderFactory.create(resource
.getResourceSet());
}
public void infer(EObject e,
final/* @NonNull */IJvmDeclaredTypeAcceptor acceptor,
boolean preIndexingPhase) {
_infer(e, acceptor, preIndexingPhase);
}
public void _infer(EObject e, /* @NonNull */
IJvmDeclaredTypeAcceptor acceptor, boolean preIndexingPhase) {
for (EObject child : e.eContents()) {
infer(child, acceptor, preIndexingPhase);
}
}
public void inferTypesOnly(EObject e,
final/* @NonNull */IJvmDeclaredTypeAcceptor acceptor,
boolean preIndexingPhase) {
// then iterate the contents
_inferTypesOnly(e, acceptor, preIndexingPhase);
}
public void _inferTypesOnly(EObject e, IJvmDeclaredTypeAcceptor acceptor,
boolean preIndexingPhase) {
// pass inferring to delegates first
inferTypesOnlyByDelegates(e, acceptor, preIndexingPhase);
for (EObject child : e.eContents()) {
inferTypesOnly(child, acceptor, preIndexingPhase);
}
}
/**
* Delegates the inferTypes call to the delegates.
*
* @param semanticElement
* @param acceptor
* @param preIndexingPhase
*/
protected void inferTypesOnlyByDelegates(EObject semanticElement,
IJvmDeclaredTypeAcceptor acceptor, boolean preIndexingPhase) {
inferrerDelegate.inferTypesOnly(semanticElement, acceptor,
preIndexingPhase);
}
public void inferFullState(JvmType type, EObject e,
IJvmDeclaredTypeAcceptor acceptor, boolean preIndexingPhase,
String selector) {
}
/**
* Delegates the inferTypes call to the delegates.
*
* @param jvmType
* @param semanticElement
* @param acceptor
* @param preIndexingPhase
* @param selector
*/
public void inferFullStateByDelegates(JvmType jvmType,
EObject semanticElement, IJvmDeclaredTypeAcceptor acceptor,
boolean preIndexingPhase, String selector) {
inferrerDelegate.inferFullState((JvmDeclaredType) jvmType,
semanticElement, acceptor, preIndexingPhase, selector);
}
protected void markAsToBeDerivedLater(JvmDeclaredType type,
EObject context, boolean isPrelinkingPhase) {
helper.markAsToBeDerivedLater(type, context, isPrelinkingPhase, "");
}
protected void markAsToBeDerivedLater(JvmDeclaredType type,
EObject context, boolean isPrelinkingPhase, String selector) {
helper.markAsToBeDerivedLater(type, context, isPrelinkingPhase,
selector);
}
protected void markAsDerived(JvmDeclaredType type) {
helper.markAsDerived(type);
}
}