Package: TypenameComparison

TypenameComparison

nameinstructionbranchcomplexitylinemethod
TypenameComparison(String[], IRInfo, String)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
isModuleViolation(ILexNameToken)
M: 0 C: 14
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
mustHandleLexIdentifierToken(LexIdentifierToken)
M: 0 C: 2
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
mustHandleNameToken(ILexNameToken)
M: 2 C: 46
96%
M: 1 C: 9
90%
M: 1 C: 5
83%
M: 0 C: 11
100%
M: 0 C: 1
100%

Coverage

1: /*
2: * #%~
3: * VDM Code Generator
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.codegen.analysis.violations;
23:
24: import org.overture.ast.definitions.ATypeDefinition;
25: import org.overture.ast.definitions.PDefinition;
26: import org.overture.ast.intf.lex.ILexNameToken;
27: import org.overture.ast.lex.LexIdentifierToken;
28: import org.overture.ast.statements.ACallStm;
29: import org.overture.codegen.assistant.TypeAssistantIR;
30: import org.overture.codegen.ir.IRInfo;
31: import org.overture.typechecker.assistant.definition.PDefinitionAssistantTC;
32:
33: public class TypenameComparison extends NamingComparison
34: {
35:         public TypenameComparison(String[] names, IRInfo irInfo,
36:                         String correctionPrefix)
37:         {
38:                 super(names, irInfo, correctionPrefix);
39:         }
40:
41:         @Override
42:         public boolean isModuleViolation(ILexNameToken nameToken)
43:         {
44:•                return nameToken.parent() instanceof ACallStm
45:•                                && this.getNames().contains(nameToken.getModule());
46:         }
47:
48:         @Override
49:         public boolean mustHandleNameToken(ILexNameToken nameToken)
50:         {
51:•                if (this.getNames().contains(nameToken.getName()))
52:                 {
53:                         PDefinitionAssistantTC defAssistant = irInfo.getTcFactory().createPDefinitionAssistant();
54:                         TypeAssistantIR typeAssistantCg = irInfo.getAssistantManager().getTypeAssistant();
55:
56:                         PDefinition def = typeAssistantCg.getTypeDef(nameToken, defAssistant);
57:
58:•                        if (def instanceof ATypeDefinition)
59:                         {
60:                                 ATypeDefinition typeDef = (ATypeDefinition) def;
61:•                                return typeDef.getInvType() == null;
62:                         }
63:
64:•                        return def != null;
65:•                } else if (isModuleViolation(nameToken))
66:                 {
67:                         return true;
68:                 }
69:
70:                 return false;
71:         }
72:
73:         @Override
74:         public boolean mustHandleLexIdentifierToken(LexIdentifierToken lexId)
75:         {
76:                 return false;
77:         }
78: }