Package: CallableOperationChecker

CallableOperationChecker

nameinstructionbranchcomplexitylinemethod
CallableOperationChecker(ITypeCheckerAssistantFactory)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
caseAExplicitOperationDefinition(AExplicitOperationDefinition)
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
caseAImplicitOperationDefinition(AImplicitOperationDefinition)
M: 8 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
caseAImportedDefinition(AImportedDefinition)
M: 7 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
caseAInheritedDefinition(AInheritedDefinition)
M: 0 C: 7
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
caseARenamedDefinition(ARenamedDefinition)
M: 7 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
createNewReturnValue(INode)
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
createNewReturnValue(Object)
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
defaultPDefinition(PDefinition)
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: /*
2: * #%~
3: * The VDM Type Checker
4: * %%
5: * Copyright (C) 2008 - 2014 Overture
6: * %%
7: * This program is free software: you can redistribute it and/or modify
8: * it under the terms of the GNU General Public License as
9: * published by the Free Software Foundation, either version 3 of the
10: * License, or (at your option) any later version.
11: *
12: * This program is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15: * GNU General Public License for more details.
16: *
17: * You should have received a copy of the GNU General Public
18: * License along with this program. If not, see
19: * <http://www.gnu.org/licenses/gpl-3.0.html>.
20: * #~%
21: */
22: package org.overture.typechecker.utilities;
23:
24: import org.overture.ast.analysis.AnalysisException;
25: import org.overture.ast.analysis.AnswerAdaptor;
26: import org.overture.ast.definitions.AExplicitOperationDefinition;
27: import org.overture.ast.definitions.AImplicitOperationDefinition;
28: import org.overture.ast.definitions.AImportedDefinition;
29: import org.overture.ast.definitions.AInheritedDefinition;
30: import org.overture.ast.definitions.ARenamedDefinition;
31: import org.overture.ast.definitions.PDefinition;
32: import org.overture.ast.node.INode;
33: import org.overture.typechecker.assistant.ITypeCheckerAssistantFactory;
34:
35: /**
36: * This class implements a way to check if an operation is callable from a node in the AST
37: *
38: * @author kel
39: */
40: public class CallableOperationChecker extends AnswerAdaptor<Boolean>
41: {
42:
43:         protected ITypeCheckerAssistantFactory af;
44:
45:         public CallableOperationChecker(ITypeCheckerAssistantFactory af)
46:         {
47:                 this.af = af;
48:         }
49:
50:         @Override
51:         public Boolean caseAExplicitOperationDefinition(
52:                         AExplicitOperationDefinition node) throws AnalysisException
53:         {
54:                 return true;
55:         }
56:
57:         @Override
58:         public Boolean caseAImplicitOperationDefinition(
59:                         AImplicitOperationDefinition node) throws AnalysisException
60:         {
61:•                return node.getBody() != null;
62:         }
63:
64:         @Override
65:         public Boolean caseAImportedDefinition(AImportedDefinition node)
66:                         throws AnalysisException
67:         {
68:                 return node.getDef().apply(THIS);
69:         }
70:
71:         @Override
72:         public Boolean caseAInheritedDefinition(AInheritedDefinition node)
73:                         throws AnalysisException
74:         {
75:                 return node.getSuperdef().apply(THIS);
76:         }
77:
78:         @Override
79:         public Boolean caseARenamedDefinition(ARenamedDefinition node)
80:                         throws AnalysisException
81:         {
82:                 return node.getDef().apply(THIS);
83:         }
84:
85:         @Override
86:         public Boolean defaultPDefinition(PDefinition node)
87:                         throws AnalysisException
88:         {
89:                 return false;
90:         }
91:
92:         @Override
93:         public Boolean createNewReturnValue(INode node)
94:         {
95:                 return false;
96:         }
97:
98:         @Override
99:         public Boolean createNewReturnValue(Object node)
100:         {
101:                 return false;
102:         }
103: }