package generators;
import java.util.ArrayList;
import java.util.List;
import code.ast.CompilationUnit;
import code.ast.FieldDeclaration;
import code.ast.MethodDeclaration;
import code.ast.TypeDeclaration;
import code.ast.VariableDeclaration;
import models.algebra.Expression;
import models.algebra.Term;
import models.algebra.Type;
import models.dataFlowModel.DataTransferChannel.IResourceStateAccessor;
public interface ILanguageSpecific {
CompilationUnit newCompilationUnit(TypeDeclaration component);
TypeDeclaration newTypeDeclaration(String typeName);
VariableDeclaration newVariableDeclaration(Type type, String varName);
MethodDeclaration newMethodDeclaration(String methodName, Type returnType);
MethodDeclaration newMethodDeclaration(String methodName, boolean isConstructor, Type returnType, List<VariableDeclaration> parameters);
FieldDeclaration newFieldDeclaration(Type fieldType, String fieldName);
FieldDeclaration newFieldDeclaration(Type fieldType, String fieldName, String fieldInitializer);
Type newListType(String compTypeName);
Type newMapType(Type keyType, String compTypeName);
Type newTupleType(List<Type> compTypes);
String getVariableDeclaration(String typeName, String varName);
boolean declareField();
String getSelfExp();
String getFieldAccessor(String fieldName);
String getMethodInvocation(String methodName);
String getMethodInvocation(String receiverName, List<String> parameters);
String getMethodInvocation(String receiverName, String methodName);
String getMethodInvocation(String receiverName, String methodName, List<String> parameters);
String getConstructorInvocation(String componentName, List<String> parameters);
String getReturnStatement(String returnValue);
String getIfStatement(Term condition, String block);
String getForStatementForList(String varName, String list);
String getForStatementForCollection(String varName, String varType, String collection);
String getForStatementForMap(String varName, String varType, String map);
String getEndForStatement();
String getEndForStatement(String varName);
String toComponentName(String name);
String toVariableName(String name);
String getMainComponentName();
String getAssignment();
String getStatementDelimiter();
String getStringDelimiter();
String getOpeningScoreDelimiter();
String getClosingScoreDelimiter();
String getValueToStringExp(String typeName, String valueExp);
String getStringToValueExp(String typeName, String strExp);
String getPairExp(String first, String second);
String getFirstEntryFromMapExp(String map);
String getTupleGet(String tupleExp, int idx, int length);
String getDecomposedTuple(String tupleExp, VariableDeclaration tupleVar, List<VariableDeclaration> vars);
boolean isValueType(Type type);
boolean isVoidType(Type type);
}