/*
* ******************************************************************************
* MontiCore Language Workbench
* Copyright (c) 2016, MontiCore, All rights reserved.
*
* This project is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this project. If not, see <http://www.gnu.org/licenses/>.
* ******************************************************************************
*/
package de.monticore.codegen.symboltable;
/**
* @author Pedram Mir Seyed Nazari
*/
public class SymbolTableGeneratorBuilder {
private ModelingLanguageGenerator modelingLanguageGenerator;
private ModelLoaderGenerator modelLoaderGenerator;
private ModelNameCalculatorGenerator modelNameCalculatorGenerator;
private ResolvingFilterGenerator resolvingFilterGenerator;
private SymbolGenerator symbolGenerator;
private SymbolKindGenerator symbolKindGenerator;
private ScopeSpanningSymbolGenerator scopeSpanningSymbolGenerator;
private SymbolReferenceGenerator symbolReferenceGenerator;
private SymbolTableCreatorGenerator symbolTableCreatorGenerator;
public SymbolTableGenerator build() {
if (modelingLanguageGenerator == null) {
modelingLanguageGenerator = new CommonModelingLanguageGenerator();
}
if (modelLoaderGenerator == null) {
modelLoaderGenerator = new CommonModelLoaderGenerator();
}
if (modelNameCalculatorGenerator == null) {
modelNameCalculatorGenerator = new CommonModelNameCalculatorGenerator();
}
if (resolvingFilterGenerator == null) {
resolvingFilterGenerator = new CommonResolvingFilterGenerator();
}
if (symbolGenerator == null) {
symbolGenerator = new CommonSymbolGenerator();
}
if (symbolKindGenerator == null) {
symbolKindGenerator = new CommonSymbolKindGenerator();
}
if (scopeSpanningSymbolGenerator == null) {
scopeSpanningSymbolGenerator = new CommonScopeSpanningSymbolGenerator();
}
if (symbolReferenceGenerator == null) {
symbolReferenceGenerator = new CommonSymbolReferenceGenerator();
}
if ( symbolTableCreatorGenerator == null) {
symbolTableCreatorGenerator = new CommonSymbolTableCreatorGenerator();
}
return new SymbolTableGenerator(modelingLanguageGenerator, modelLoaderGenerator,
modelNameCalculatorGenerator, resolvingFilterGenerator, symbolGenerator,
symbolKindGenerator, scopeSpanningSymbolGenerator, symbolReferenceGenerator,
symbolTableCreatorGenerator);
}
public SymbolTableGeneratorBuilder modelingLanguageGenerator(ModelingLanguageGenerator modelingLanguageGenerator) {
this.modelingLanguageGenerator = modelingLanguageGenerator;
return this;
}
public SymbolTableGeneratorBuilder modelLoaderGenerator(ModelLoaderGenerator modelLoaderGenerator) {
this.modelLoaderGenerator = modelLoaderGenerator;
return this;
}
public SymbolTableGeneratorBuilder modelNameCalculatorGenerator(ModelNameCalculatorGenerator modelNameCalculatorGenerator) {
this.modelNameCalculatorGenerator = modelNameCalculatorGenerator;
return this;
}
public SymbolTableGeneratorBuilder resolvingFilterGenerator(ResolvingFilterGenerator resolvingFilterGenerator) {
this.resolvingFilterGenerator = resolvingFilterGenerator;
return this;
}
public SymbolTableGeneratorBuilder symbolGenerator(SymbolGenerator symbolGenerator) {
this.symbolGenerator = symbolGenerator;
return this;
}
public SymbolTableGeneratorBuilder symbolKindGenerator(SymbolKindGenerator symbolKindGenerator) {
this.symbolKindGenerator = symbolKindGenerator;
return this;
}
public SymbolTableGeneratorBuilder scopeSpanningSymbolGenerator(ScopeSpanningSymbolGenerator scopeSpanningSymbolGenerator) {
this.scopeSpanningSymbolGenerator = scopeSpanningSymbolGenerator;
return this;
}
public SymbolTableGeneratorBuilder symbolReferenceGenerator(SymbolReferenceGenerator symbolReferenceGenerator) {
this.symbolReferenceGenerator = symbolReferenceGenerator;
return this;
}
public SymbolTableGeneratorBuilder symbolTableCreatorGenerator(SymbolTableCreatorGenerator symbolTableCreatorGenerator) {
this.symbolTableCreatorGenerator = symbolTableCreatorGenerator;
return this;
}
}