/* * #%~ * The VDM Type Checker * %% * Copyright (C) 2008 - 2014 Overture * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #~% */ package org.overture.typechecker.assistant; import java.util.Collection; import java.util.LinkedList; import java.util.List; import org.overture.ast.analysis.AnalysisAdaptor; import org.overture.ast.analysis.AnswerAdaptor; import org.overture.ast.analysis.intf.IAnswer; import org.overture.ast.analysis.intf.IQuestion; import org.overture.ast.analysis.intf.IQuestionAnswer; import org.overture.ast.assistant.IAstAssistantFactory; import org.overture.ast.assistant.pattern.PTypeList; import org.overture.ast.definitions.PDefinition; import org.overture.ast.intf.lex.ILexNameToken; import org.overture.ast.lex.LexNameList; import org.overture.ast.modules.AModuleModules; import org.overture.ast.patterns.PMultipleBind; import org.overture.ast.types.AAccessSpecifierAccessSpecifier; import org.overture.ast.types.AClassType; import org.overture.ast.types.AFunctionType; import org.overture.ast.types.AOperationType; import org.overture.ast.types.AProductType; import org.overture.ast.types.ARecordInvariantType; import org.overture.ast.types.SSetType; import org.overture.ast.types.AUnionType; import org.overture.ast.types.PType; import org.overture.ast.types.SMapType; import org.overture.ast.types.SSeqType; import org.overture.ast.util.PTypeSet; import org.overture.typechecker.Environment; import org.overture.typechecker.LexNameTokenAssistant; import org.overture.typechecker.TypeCheckInfo; import org.overture.typechecker.TypeComparator; import org.overture.typechecker.assistant.definition.AExplicitFunctionDefinitionAssistantTC; import org.overture.typechecker.assistant.definition.AExplicitOperationDefinitionAssistantTC; import org.overture.typechecker.assistant.definition.AImplicitFunctionDefinitionAssistantTC; import org.overture.typechecker.assistant.definition.AImplicitOperationDefinitionAssistantTC; import org.overture.typechecker.assistant.definition.PAccessSpecifierAssistantTC; import org.overture.typechecker.assistant.definition.PDefinitionAssistantTC; import org.overture.typechecker.assistant.definition.PDefinitionListAssistantTC; import org.overture.typechecker.assistant.definition.PDefinitionSet; import org.overture.typechecker.assistant.definition.SClassDefinitionAssistantTC; import org.overture.typechecker.assistant.definition.SFunctionDefinitionAssistantTC; import org.overture.typechecker.assistant.module.AModuleExportsAssistantTC; import org.overture.typechecker.assistant.module.AModuleImportsAssistantTC; import org.overture.typechecker.assistant.module.AModuleModulesAssistantTC; import org.overture.typechecker.assistant.pattern.APatternTypePairAssistant; import org.overture.typechecker.assistant.pattern.ATypeBindAssistantTC; import org.overture.typechecker.assistant.pattern.PBindAssistantTC; import org.overture.typechecker.assistant.pattern.PMultipleBindAssistantTC; import org.overture.typechecker.assistant.pattern.PPatternAssistantTC; import org.overture.typechecker.assistant.pattern.PPatternListAssistantTC; import org.overture.typechecker.assistant.pattern.PatternListTC; import org.overture.typechecker.assistant.type.AClassTypeAssistantTC; import org.overture.typechecker.assistant.type.AFunctionTypeAssistantTC; import org.overture.typechecker.assistant.type.AOperationTypeAssistantTC; import org.overture.typechecker.assistant.type.ARecordInvariantTypeAssistantTC; import org.overture.typechecker.assistant.type.PTypeAssistantTC; import org.overture.typechecker.utilities.DefinitionFinder; import org.overture.typechecker.utilities.DefinitionTypeResolver; import org.overture.typechecker.utilities.NameFinder; import org.overture.typechecker.utilities.pattern.AllDefinitionLocator; import org.overture.typechecker.utilities.pattern.PatternResolver; import org.overture.typechecker.utilities.type.ConcreateTypeImplementor; import org.overture.typechecker.utilities.type.PTypeResolver; import org.overture.typechecker.utilities.type.QualifiedDefinition; //TODO Add assistant Javadoc /** * The Interface specifying what is offered by the Overture TC assistant functionalities. * * @author ldc */ public interface ITypeCheckerAssistantFactory extends IAstAssistantFactory { // ABusClassDefinitionAssistantTC createABusClassDefinitionAssistant(); // ACpuClassDefinitionAssistantTC createACpuClassDefinitionAssistant(); AExplicitFunctionDefinitionAssistantTC createAExplicitFunctionDefinitionAssistant(); AExplicitOperationDefinitionAssistantTC createAExplicitOperationDefinitionAssistant(); AImplicitFunctionDefinitionAssistantTC createAImplicitFunctionDefinitionAssistant(); AImplicitOperationDefinitionAssistantTC createAImplicitOperationDefinitionAssistant(); // AImportedDefinitionAssistantTC createAImportedDefinitionAssistant(); //AInstanceVariableDefinitionAssistantTC createAInstanceVariableDefinitionAssistant(); //ALocalDefinitionAssistantTC createALocalDefinitionAssistant(); //AStateDefinitionAssistantTC createAStateDefinitionAssistant(); // ASystemClassDefinitionAssistantTC createASystemClassDefinitionAssistant(); // AThreadDefinitionAssistantTC createAThreadDefinitionAssistant(); // ATypeDefinitionAssistantTC createATypeDefinitionAssistant(); // AValueDefinitionAssistantTC createAValueDefinitionAssistant(); PAccessSpecifierAssistantTC createPAccessSpecifierAssistant(); PDefinitionAssistantTC createPDefinitionAssistant(); PDefinitionListAssistantTC createPDefinitionListAssistant(); PDefinitionSet createPDefinitionSet(); // PTraceDefinitionAssistantTC createPTraceDefinitionAssistant(); SClassDefinitionAssistantTC createSClassDefinitionAssistant(); SFunctionDefinitionAssistantTC createSFunctionDefinitionAssistant(); // expression //AApplyExpAssistantTC createAApplyExpAssistant(); //ACaseAlternativeAssistantTC createACaseAlternativeAssistant(); //PExpAssistantTC createPExpAssistant(); // SBinaryExpAssistantTC createSBinaryExpAssistant(); // module //AFromModuleImportsAssistantTC createAFromModuleImportsAssistant(); //AModuleExportsAssistantTC createAModuleExportsAssistant(); AModuleImportsAssistantTC createAModuleImportsAssistant(); AModuleExportsAssistantTC createAModuleExportsAssistant(); AModuleModulesAssistantTC createAModuleModulesAssistant(); //PExportAssistantTC createPExportAssistant(); //PImportAssistantTC createPImportAssistant(); // pattern // ABooleanPatternAssistantTC createABooleanPatternAssistant(); // ACharacterPatternAssistantTC createACharacterPatternAssistant(); // AConcatenationPatternAssistantTC createAConcatenationPatternAssistant(); // AExpressionPatternAssistantTC createAExpressionPatternAssistant(); // AMapletPatternMapletAssistantTC createAMapletPatternMapletAssistant(); // AMapPatternAssistantTC createAMapPatternAssistant(); // AMapUnionPatternAssistantTC createAMapUnionPatternAssistant(); APatternTypePairAssistant createAPatternTypePairAssistant(); // ARecordPatternAssistantTC createARecordPatternAssistant(); // ASeqPatternAssistantTC createASeqPatternAssistant(); //ASetBindAssistantTC createASetBindAssistant(); // ASetPatternAssistantTC createASetPatternAssistant(); // ATuplePatternAssistantTC createATuplePatternAssistant(); ATypeBindAssistantTC createATypeBindAssistant(); // AUnionPatternAssistantTC createAUnionPatternAssistant(); PatternListTC createPatternList(); PBindAssistantTC createPBindAssistant(); PMultipleBindAssistantTC createPMultipleBindAssistant(); PPatternAssistantTC createPPatternAssistant(); //PPatternBindAssistantTC createPPatternBindAssistant(); PPatternListAssistantTC createPPatternListAssistant(); // statement // AAlwaysStmAssistantTC createAAlwaysStmAssistant(); // AAssignmentStmAssistantTC createAAssignmentStmAssistant(); // ABlockSimpleBlockStmAssistantTC createABlockSimpleBlockStmAssistant(); // ACallObjectStatementAssistantTC createACallObjectStatementAssistant(); // ACallStmAssistantTC createACallStmAssistant(); // ACaseAlternativeStmAssistantTC createACaseAlternativeStmAssistant(); // ACasesStmAssistantTC createACasesStmAssistant(); // AElseIfStmAssistantTC createAElseIfStmAssistant(); // AExitStmAssistantTC createAExitStmAssistant(); // AExternalClauseAssistantTC createAExternalClauseAssistant(); // AForAllStmAssistantTC createAForAllStmAssistant(); // AForIndexStmAssistantTC createAForIndexStmAssistant(); // AForPatternBindStmAssitantTC createAForPatternBindStmAssitant(); // AIfStmAssistantTC createAIfStmAssistant(); // ALetBeStStmAssistantTC createALetBeStStmAssistant(); // ANonDeterministicSimpleBlockStmAssistantTC createANonDeterministicSimpleBlockStmAssistant(); // AReturnStmAssistantTC createAReturnStmAssistant(); // ATixeStmAssistantTC createATixeStmAssistant(); // ATrapStmAssistantTC createATrapStmAssistant(); // AWhileStmAssistantTC createAWhileStmAssistant(); // PStateDesignatorAssistantTC createPStateDesignatorAssistant(); //PStmAssistantTC createPStmAssistant(); // SLetDefStmAssistantTC createSLetDefStmAssistant(); // SSimpleBlockStmAssistantTC createSSimpleBlockStmAssistant(); // Type // AApplyObjectDesignatorAssistantTC createAApplyObjectDesignatorAssistant(); // ABracketTypeAssistantTC createABracketTypeAssistant(); AClassTypeAssistantTC createAClassTypeAssistant(); AFunctionTypeAssistantTC createAFunctionTypeAssistant(); AOperationTypeAssistantTC createAOperationTypeAssistant(); // APatternListTypePairAssistantTC createAPatternListTypePairAssistant(); ARecordInvariantTypeAssistantTC createARecordInvariantTypeAssistant(); // AUnionTypeAssistantTC createAUnionTypeAssistant(); PTypeAssistantTC createPTypeAssistant(); // visitors // SSeqTypeAssistantTC createSSeqTypeAssistant(); // stuff to delete ends here // visitor getters that we will actually keep IAnswer<List<PDefinition>> getDefinitionCollector(); IAnswer<PType> getDefinitionTypeFinder(); IQuestionAnswer<Object, Boolean> getDefinitionEqualityChecker(); AnswerAdaptor<Boolean> getMapBasisChecker(); IAnswer<LexNameList> getVariableNameCollector(); IAnswer<PDefinition> getSelfDefinitionFinder(); IAnswer<PTypeSet> getExitTypeCollector(); IQuestionAnswer<DefinitionFinder.Newquestion, PDefinition> getDefinitionFinder(); IQuestionAnswer<NameFinder.Newquestion, PDefinition> getNameFinder(); AnswerAdaptor<Boolean> getFunctionChecker(); IAnswer<Boolean> getOperationChecker(); IAnswer<String> getKindFinder(); IAnswer<Boolean> getUpdatableChecker(); IAnswer<Boolean> getCallableOperationChecker(); AnalysisAdaptor getUsedMarker(); IQuestion<Environment> getImplicitDefinitionFinder(); IAnswer<Boolean> getUsedChecker(); IAnswer<Boolean> getPTypeFunctionChecker(); AnalysisAdaptor getUnusedChecker(); IAnswer<PDefinition> getDereferer(); IQuestion<DefinitionTypeResolver.NewQuestion> getDefinitionTypeResolver(); IAnswer<SMapType> getMapTypeFinder(); IAnswer<SSeqType> getSeqTypeFinder(); AnswerAdaptor<Boolean> getSeqBasisChecker(); IAnswer<AOperationType> getOperationTypeFinder(); AnswerAdaptor<Boolean> getOperationBasisChecker(); AnswerAdaptor<Boolean> getSetBasisChecker(); IAnswer<SSetType> getSetTypeFinder(); AnswerAdaptor<Boolean> getRecordBasisChecker(); AnswerAdaptor<Boolean> getTagBasisChecker(); IAnswer<ARecordInvariantType> getRecordTypeFinder(); AnswerAdaptor<Boolean> getClassBasisChecker(Environment env); IAnswer<AClassType> getClassTypeFinder(Environment env); IAnswer<AProductType> getProductTypeFinder(); AnswerAdaptor<Boolean> getProductBasisChecker(); IAnswer<String> getTypeDisplayer(); AnalysisAdaptor getTypeUnresolver(); IQuestionAnswer<AAccessSpecifierAccessSpecifier, Boolean> getNarrowerThanComparator(); IAnswer<AUnionType> getUnionTypeFinder(); IQuestionAnswer<Object, Boolean> getTypeEqualityChecker(); AnswerAdaptor<Boolean> getUnionBasisChecker(); IAnswer<AFunctionType> getFunctionTypeFinder(); IQuestionAnswer<PTypeResolver.Newquestion, PType> getPTypeResolver(); IQuestionAnswer<ConcreateTypeImplementor.Newquestion, PType> getConcreateTypeImplementor(); IQuestionAnswer<String, PType> getPTypeFinder(); IQuestionAnswer<Integer, Boolean> getProductExtendedChecker(); IQuestionAnswer<Integer, AProductType> getProductExtendedTypeFinder(); IQuestionAnswer<Class<? extends PType>, Boolean> getPTypeExtendedChecker(); IAnswer<Boolean> getVoidExistanceChecker(); IAnswer<Boolean> getVoidBasisChecker(); IAnswer<PType> getPossibleTypeFinder(); IAnswer<Boolean> getSimplePatternChecker(); IAnswer<Boolean> getAlwaysMatchingPatternChecker(); AnalysisAdaptor getPatternUnresolver(); IQuestion<PatternResolver.NewQuestion> getPatternResolver(); IQuestionAnswer<AllDefinitionLocator.NewQuestion, List<PDefinition>> getAllDefinitionLocator(); IAnswer<PType> getPossibleBindTypeFinder(); IAnswer<List<PMultipleBind>> getMultipleBindLister(); IAnswer<ILexNameToken> getPreNameFinder(); IQuestionAnswer<LinkedList<PDefinition>, Collection<? extends PDefinition>> getExportDefinitionFinder(); IAnswer<Collection<? extends PDefinition>> getExportDefinitionListFinder(); IQuestionAnswer<AModuleModules, List<PDefinition>> getImportDefinitionFinder(); IAnswer<PTypeList> getComposeTypeCollector(); TypeComparator getTypeComparator(); LexNameTokenAssistant getLexNameTokenAssistant(); IQuestionAnswer<TypeCheckInfo, List<QualifiedDefinition>> getQualificationVisitor(); IAnswer<Boolean> getInstanceVariableChecker(); }