/**
 * Copyright (c) 2011, 2016 - 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:
 * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 * 
 *  This copyright notice shows up in the generated Java code
 */
package org.eclipse.osbp.xtext.addons;

import javax.inject.Inject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.xtext.xbase.compiler.JvmModelGenerator;
import org.eclipse.xtext.xbase.jvmmodel.JvmAnnotationReferenceBuilder;
import org.eclipse.xtext.xbase.jvmmodel.JvmTypeReferenceBuilder;
import org.eclipse.xtext.xbase.lib.Extension;

@SuppressWarnings("all")
public class AdvancedJvmModelGenerator extends JvmModelGenerator {
  @Inject
  private JvmAnnotationReferenceBuilder.Factory annotationRefBuilderFactory;
  
  @Inject
  private JvmTypeReferenceBuilder.Factory typeRefBuilderFactory;
  
  @Extension
  protected JvmAnnotationReferenceBuilder _annotationTypesBuilder;
  
  @Extension
  protected JvmTypeReferenceBuilder _typeReferenceBuilder;
  
  public void setBuilder(final Resource resource) {
    ResourceSet _resourceSet = resource.getResourceSet();
    JvmAnnotationReferenceBuilder _create = this.annotationRefBuilderFactory.create(_resourceSet);
    this._annotationTypesBuilder = _create;
    ResourceSet _resourceSet_1 = resource.getResourceSet();
    JvmTypeReferenceBuilder _create_1 = this.typeRefBuilderFactory.create(_resourceSet_1);
    this._typeReferenceBuilder = _create_1;
  }
}
