• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wurstscript / WurstScript / 228

29 Nov 2023 05:00PM UTC coverage: 62.48% (-0.09%) from 62.574%
228

push

circleci

web-flow
Show dialog for choosing game path, cleanup (#1083)

* show dialog for choosing game path

* cleanup code

* remove logs and refactor

* remove confusing mpq error, make some mpq loads readonly

17295 of 27681 relevant lines covered (62.48%)

0.62 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

82.89
de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateClassMemberUsage.java
1
package de.peeeq.wurstscript.validation;
2

3
import de.peeeq.wurstscript.ast.*;
4

5
import java.util.Collection;
6
import java.util.HashSet;
7
import java.util.Set;
8

9
/**
10
 *
11
 */
12
public class ValidateClassMemberUsage {
×
13
    public static void checkClassMembers(Collection<CompilationUnit> toCheck) {
14
        for (CompilationUnit cu : toCheck) {
1✔
15
            for (WPackage p : cu.getPackages()) {
1✔
16
                checkVarUsage(p);
1✔
17
                checkFuncUsage(p);
1✔
18
            }
1✔
19
        }
1✔
20
    }
1✔
21

22
    private static void checkVarUsage(WPackage p) {
23
        Set<VarDef> definedVars = new HashSet<>();
1✔
24

25
        p.accept(new WPackage.DefaultVisitor() {
1✔
26

27
            @Override
28
            public void visit(ClassDef c) {
29
                super.visit(c);
1✔
30
                definedVars.addAll(c.getVars());
1✔
31
            }
1✔
32

33
        });
34

35
        p.accept(new WPackage.DefaultVisitor() {
1✔
36

37
            @Override
38
            public void visit(ExprVarAccess e) {
39
                super.visit(e);
1✔
40
                NameDef nameDef = e.attrNameDef();
1✔
41
                if (nameDef instanceof VarDef) {
1✔
42
                    definedVars.remove(nameDef);
1✔
43
                }
44
            }
1✔
45

46
            @Override
47
            public void visit(ExprVarArrayAccess e) {
48
                super.visit(e);
1✔
49
                NameDef nameDef = e.attrNameDef();
1✔
50
                if (nameDef instanceof VarDef) {
1✔
51
                    definedVars.remove(nameDef);
1✔
52
                }
53
            }
1✔
54

55
            @Override
56
            public void visit(ExprMemberVarDot e) {
57
                super.visit(e);
1✔
58
                NameDef nameDef = e.attrNameDef();
1✔
59
                if (nameDef instanceof VarDef) {
1✔
60
                    definedVars.remove(nameDef);
1✔
61
                }
62
            }
1✔
63

64
            @Override
65
            public void visit(ExprMemberVarDotDot e) {
66
                super.visit(e);
×
67
                NameDef nameDef = e.attrNameDef();
×
68
                if (nameDef instanceof VarDef) {
×
69
                    definedVars.remove(nameDef);
×
70
                }
71
            }
×
72

73
            @Override
74
            public void visit(ExprMemberArrayVarDot e) {
75
                super.visit(e);
1✔
76
                NameDef nameDef = e.attrNameDef();
1✔
77
                if (nameDef instanceof VarDef) {
1✔
78
                    definedVars.remove(nameDef);
1✔
79
                }
80
            }
1✔
81

82
            @Override
83
            public void visit(ExprMemberArrayVarDotDot e) {
84
                super.visit(e);
×
85
                NameDef nameDef = e.attrNameDef();
×
86
                if (nameDef instanceof VarDef) {
×
87
                    definedVars.remove(nameDef);
×
88
                }
89
            }
×
90

91
        });
92

93
        definedVars.forEach(var -> {
1✔
94
            if (var.attrIsPrivate()) {
1✔
95
                var.addWarning("Private variable <" + var.getName() + "> is never read.");
×
96
            }
97
        });
1✔
98

99
    }
1✔
100

101
    private static void checkFuncUsage(WPackage p) {
102
        Set<FunctionDefinition> definedFuncs = new HashSet<>();
1✔
103

104
        p.accept(new WPackage.DefaultVisitor() {
1✔
105

106
            @Override
107
            public void visit(ClassDef c) {
108
                super.visit(c);
1✔
109
                definedFuncs.addAll(c.getMethods());
1✔
110
            }
1✔
111

112
        });
113

114
        p.accept(new WPackage.DefaultVisitor() {
1✔
115

116
            @Override
117
            public void visit(ExprFunctionCall e) {
118
                super.visit(e);
1✔
119
                definedFuncs.remove(e.attrFuncDef());
1✔
120
            }
1✔
121

122
            @Override
123
            public void visit(ExprFuncRef e) {
124
                super.visit(e);
1✔
125
                definedFuncs.remove(e.attrFuncDef());
1✔
126
            }
1✔
127

128
            @Override
129
            public void visit(ExprMemberMethodDot e) {
130
                super.visit(e);
1✔
131
                NameDef nameDef = e.attrFuncDef();
1✔
132
                if (nameDef != null) {
1✔
133
                    definedFuncs.remove(nameDef);
1✔
134
                }
135
            }
1✔
136

137
            @Override
138
            public void visit(ExprMemberMethodDotDot e) {
139
                super.visit(e);
1✔
140
                NameDef nameDef = e.attrFuncDef();
1✔
141
                if (nameDef != null) {
1✔
142
                    definedFuncs.remove(nameDef);
1✔
143
                }
144
            }
1✔
145

146
        });
147

148
        definedFuncs.forEach(funcDef -> {
1✔
149
            if (funcDef.attrIsPrivate() && !(funcDef.attrIsStatic() && funcDef.hasAnnotation("@compiletime"))) {
1✔
150
                funcDef.addWarning("Private function <" + funcDef.getName() + "> is never used.");
×
151
            }
152
        });
1✔
153

154
    }
1✔
155
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc