blob: 1848e0ac7b44cc18fb0fec05e60021993513c042 [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 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Florian Pirchner - Initial implementation
*/
package org.eclipse.osbp.xtext.oxtype.resource;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.osbp.xtext.oxtype.hooks.ExtensionsInferrerDelegate;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
public class ExtendedModelInferrer extends AbstractModelInferrer {
protected Logger log = LoggerFactory.getLogger(ExtendedModelInferrer.class);
private @Inject JvmAnnotationReferenceBuilder.Factory annotationRefBuilderFactory;
private @Inject JvmTypeReferenceBuilder.Factory typeRefBuilderFactory;
protected @Extension JvmAnnotationReferenceBuilder _annotationTypesBuilder;
protected @Extension JvmTypeReferenceBuilder _typeReferenceBuilder;
@Inject
private ExtensionsInferrerDelegate inferrerDelegate;
/**
* @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);
}
}