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

moosetechnology / VerveineJ / 20030831789

08 Dec 2025 02:05PM UTC coverage: 50.923% (-0.07%) from 50.991%
20030831789

Pull #178

github

web-flow
Merge 6433323b6 into ccd766c89
Pull Request #178: Some cleanings

1898 of 3934 branches covered (48.25%)

Branch coverage included in aggregate %.

90 of 105 new or added lines in 7 files covered. (85.71%)

2 existing lines in 2 files now uncovered.

4255 of 8149 relevant lines covered (52.21%)

2.11 hits per line

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

33.33
/app/src/main/java/fr/inria/verveine/extractor/java/utils/StubBinding.java
1
package fr.inria.verveine.extractor.java.utils;
2

3
import fr.inria.verveine.extractor.java.EntityDictionary;
4
import org.eclipse.jdt.core.IJavaElement;
5
import org.eclipse.jdt.core.dom.*;
6

7
import java.util.HashMap;
8
import java.util.List;
9
import java.util.Map;
10

11

12
/**
13
 * This is an {@link IBinding} implementor to serve as key for unresolved entities.
14
 * <p>The Famix dictionary needs an IBinding as entity key.
15
 * But some entities not fully resolved (eg a class inheriting from an unknown superclass)
16
 * don't have binding even though we have their declaration.
17
 * So we create this class that will implement a fake IBinding for such cases.</p>
18
 * <p>Only used for entities that may contain other entities (ie types and methods)</p>
19
 * @author Anquetil
20
 */
21
public class StubBinding implements ITypeBinding, IMethodBinding {
22
    public final static int UNKNOWN_KIND = 0;  // not used in IBinding
23

24

25
        /**
26
         * A map of key/instances to make sure the same StubBinding instance is always associated to a given node
27
         */
28
        protected static Map<String,StubBinding> instances = new HashMap<String, StubBinding>();
5✔
29

30
    private int kind;
31

32
    private String key = null;
3✔
33

34
    private String name = null;
3✔
35
    
36
    /**
37
     * List of type bindings representing the formal parameter types, in declaration order, of a MethodDeclaration.
38
     * <p>This might be needed to compute the method's signature when creating it in Famix</p>
39
     */
40
    private ITypeBinding[] params = null;
3✔
41

42
    /**
43
     * returns the real binding of the node (a method or type declaration) or creates a stub one
44
     */
45
    public static  IBinding getDeclarationBinding(AbstractTypeDeclaration node) {
46
        IBinding bnd = node.resolveBinding();
3✔
47

48
        if (bnd == null) {
2!
49
            bnd = StubBinding.getBinding(node);
×
50
        }
51

52
        return bnd;
2✔
53
    }
54

55
    public static  IBinding getDeclarationBinding(AnonymousClassDeclaration node) {
56
        IBinding bnd = node.resolveBinding();
3✔
57

58
        if (bnd == null) {
2✔
59
            bnd = StubBinding.getBinding(node);
3✔
60
        }
61

62
        return bnd;
2✔
63
    }
64

65
    public static  IBinding getDeclarationBinding(MethodDeclaration node) {
66
        IBinding bnd = node.resolveBinding();
3✔
67

68
        if (bnd == null) {
2✔
69
            bnd = StubBinding.getBinding(node);
3✔
70
        }
71

72
        return bnd;
2✔
73
    }
74

75
    /**
76
     * returns the StubBinding of the node (a method or type declaration)
77
     */
78
    public static  StubBinding getBinding(ASTNode node) {
79
                String key = bindingKey(node);
3✔
80
;
81
        StubBinding inst;
82

83
                inst = instances.get(key);
5✔
84
                if (inst == null) {
2✔
85
                        inst = new StubBinding(node, key);
6✔
86
                        instances.put(key, inst);
5✔
87
                }
88
                return inst;
2✔
89
        }
90

91
    private static String bindingKey(ASTNode node) {
92
        String file = (String) ((CompilationUnit)node.getRoot()).getProperty(EntityDictionary.SOURCE_FILENAME_PROPERTY);
7✔
93
        int pos = node.getStartPosition();
3✔
94
        return file + ":" + pos;
4✔
95
    }
96

97
    private StubBinding(AbstractTypeDeclaration node, String key) {
×
98
        this.key = key;
×
99
        kind = IBinding.TYPE;
×
100
        name = node.getName().getIdentifier();
×
101
        params = new ITypeBinding[0];
×
102
    }
×
103

104
    private StubBinding(AnonymousClassDeclaration node, String key) {
×
105
        this.key = key;
×
106
        kind = IBinding.TYPE;
×
107
        name = "*anonymous*";
×
108
        params = new ITypeBinding[0];
×
109
    }
×
110

111
    private StubBinding(MethodDeclaration node, String key) {
×
112
        this.key = key;
×
113
        kind = IBinding.METHOD;
×
114
        name = node.getName().getIdentifier();
×
115
        List<SingleVariableDeclaration> lparams = node.parameters();
×
116
        params = new ITypeBinding[lparams.size()];
×
117
        int i=0;
×
118
        for (SingleVariableDeclaration paramDecl : lparams) {
×
119
                params[i] = paramDecl.getType().resolveBinding();
×
120
                i++;
×
121
        }
×
122
    }
×
123

124
    /**
125
     * Fallback constructor, should not be needed
126
     */
127
    private StubBinding(ASTNode node, String key) {
2✔
128
        this.key = key;
3✔
129
        kind = UNKNOWN_KIND;
3✔
130
        name = "*no_name*";
3✔
131
        params = new ITypeBinding[0];
4✔
132
    }
1✔
133

134
    // IBinding methods
135

136
    @Override
137
    public IAnnotationBinding[] getAnnotations() {
138
        return new IAnnotationBinding[0];
×
139
    }
140

141
    @Override
142
    public int getKind() {
143
        return kind;
×
144
    }
145

146
    @Override
147
    public String getName() {
148
        return name;
3✔
149
    }
150

151
    @Override
152
    public int getModifiers() {
153
        return EntityDictionary.UNKNOWN_MODIFIERS;
2✔
154
    }
155

156
    @Override
157
    public boolean isDeprecated() {
158
        return false;
×
159
    }
160

161
    @Override
162
    public boolean isRecovered() {
163
        return false;
×
164
    }
165

166
    @Override
167
    public boolean isSynthetic() {
168
        return false;
×
169
    }
170

171
    @Override
172
    public IJavaElement getJavaElement() {
173
        return null;
×
174
    }
175

176
    @Override
177
    public String getKey() {
178
        return key;
×
179
    }
180

181
    @Override
182
    public boolean isEqualTo(IBinding that) {
183
        return this == that;
×
184
    }
185

186
    // ITypeBinding methods
187

188
    @Override
189
    public boolean isRecord() { return false; }
×
190

191
    @Override
192
    public IPackageBinding getPackage() {
193
        return null;
×
194
    }
195

196
    @Override
197
    public String getQualifiedName() {
198
        return getName();
3✔
199
    }
200

201
    @Override
202
    public ITypeBinding getSuperclass() {
203
        return null;
2✔
204
    }
205

206
    @Override
207
    public IAnnotationBinding[] getTypeAnnotations() {
208
        return new IAnnotationBinding[0];
×
209
    }
210

211
    @Override
212
    public ITypeBinding[] getTypeArguments() {
213
        return new ITypeBinding[0];
×
214
    }
215

216
    @Override
217
    public ITypeBinding[] getTypeBounds() {
218
        return new ITypeBinding[0];
×
219
    }
220

221
    @Override
222
    public ITypeBinding getTypeDeclaration() {
223
        return null;
×
224
    }
225

226
    @Override
227
    public ITypeBinding[] getTypeParameters() {
228
        return new ITypeBinding[0];
×
229
    }
230

231
    @Override
232
    public ITypeBinding getWildcard() {
233
        return null;
×
234
    }
235

236
    @Override
237
    public boolean isAnnotation() {
238
        return false;
×
239
    }
240

241
    @Override
242
    public boolean isAnonymous() {
243
        return false;
×
244
    }
245

246
    @Override
247
    public boolean isArray() {
248
        return false;
2✔
249
    }
250

251
    @Override
252
    public boolean isAssignmentCompatible(ITypeBinding iTypeBinding) {
253
        return false;
×
254
    }
255

256
    @Override
257
    public boolean isCapture() {
258
        return false;
×
259
    }
260

261
    @Override
262
    public boolean isCastCompatible(ITypeBinding iTypeBinding) {
263
        return false;
×
264
    }
265

266
    @Override
267
    public boolean isClass() {
268
        return false;
×
269
    }
270

271
    @Override
272
    public boolean isEnum() {
273
        return false;
×
274
    }
275

276

277
    @Override
278
    public boolean isFromSource() {
279
        return false;
×
280
    }
281

282
    @Override
283
    public boolean isGenericType() {
284
        return false;
×
285
    }
286

287
    @Override
288
    public boolean isInterface() {
289
        return false;
2✔
290
    }
291

292
    @Override
293
    public boolean isIntersectionType() {
294
        return false;
×
295
    }
296

297
    @Override
298
    public boolean isLocal() {
299
        return false;
×
300
    }
301

302
    @Override
303
    public boolean isMember() {
304
        return false;
×
305
    }
306

307
    @Override
308
    public boolean isNested() {
309
        return false;
×
310
    }
311

312
    @Override
313
    public boolean isNullType() {
314
        return false;
×
315
    }
316

317
    @Override
318
    public boolean isParameterizedType() {
319
        return false;
×
320
    }
321

322
    @Override
323
    public boolean isPrimitive() {
324
        return false;
×
325
    }
326

327
    @Override
328
    public boolean isRawType() {
329
        return false;
×
330
    }
331

332
    @Override
333
    public boolean isSubTypeCompatible(ITypeBinding iTypeBinding) {
334
        return false;
×
335
    }
336

337
    @Override
338
    public boolean isTopLevel() {
339
        return false;
×
340
    }
341

342
    @Override
343
    public boolean isTypeVariable() {
344
        return false;
×
345
    }
346

347
    @Override
348
    public boolean isUpperbound() {
349
        return false;
×
350
    }
351

352
    @Override
353
    public boolean isWildcardType() {
354
        return false;
×
355
    }
356

357
    @Override
358
    public ITypeBinding createArrayType(int i) {
359
        return null;
×
360
    }
361

362
    @Override
363
    public String getBinaryName() {
364
        return null;
×
365
    }
366

367
    @Override
368
    public ITypeBinding getBound() {
369
        return null;
×
370
    }
371

372
    @Override
373
    public ITypeBinding getGenericTypeOfWildcardType() {
374
        return null;
×
375
    }
376

377
    @Override
378
    public int getRank() {
379
        return 0;
×
380
    }
381

382
    @Override
383
    public ITypeBinding getComponentType() {
384
        return null;
×
385
    }
386

387
    @Override
388
    public IVariableBinding[] getDeclaredFields() {
389
        return new IVariableBinding[0];
×
390
    }
391

392
    @Override
393
    public IMethodBinding[] getDeclaredMethods() {
394
        return new IMethodBinding[0];
×
395
    }
396

397
    @Override
398
    public int getDeclaredModifiers() {
399
        return 0;
2✔
400
    }
401

402
    @Override
403
    public ITypeBinding[] getDeclaredTypes() {
404
        return new ITypeBinding[0];
×
405
    }
406

407
    @Override
408
    public ITypeBinding getDeclaringClass() {
409
        return null;
×
410
    }
411

412
    @Override
413
    public IMethodBinding getDeclaringMethod() {
414
        return null;
×
415
    }
416

417
    @Override
418
    public IBinding getDeclaringMember() {
419
        return null;
×
420
    }
421

422
    @Override
423
    public int getDimensions() {
424
        return 0;
×
425
    }
426

427
    @Override
428
    public ITypeBinding getElementType() {
429
        return null;
×
430
    }
431

432
    @Override
433
    public ITypeBinding getErasure() {
434
        return this;
2✔
435
    }
436

437
    @Override
438
    public IMethodBinding getFunctionalInterfaceMethod() {
439
        return null;
×
440
    }
441

442
    @Override
443
    public ITypeBinding[] getInterfaces() {
444
        return new ITypeBinding[0];
3✔
445
    }
446

447
    // IMethodBinding methods
448

449
    @Override
450
    public String[] getParameterNames() {
451
        return new String[0];
×
452
    }
453

454
    @Override
455
    public boolean isSyntheticRecordMethod() { return false; }
×
456

457

458
    @Override
459
    public IVariableBinding[] getSyntheticOuterLocals() {
460
        return new IVariableBinding[0];
×
461
    }
462

463
    @Override
464
    public boolean    isCanonicalConstructor() {
465
        return false;
×
466
    }
467

468
    @Override
469
    public boolean    isCompactConstructor() { return false;}
×
470

471
    @Override
472
    public boolean isConstructor() {
UNCOV
473
        return false;
×
474
    }
475

476
    @Override
477
    public boolean isDefaultConstructor() {
478
        return false;
×
479
    }
480

481
    @Override
482
    public IMethodBinding getMethodDeclaration() {
483
        return null;
×
484
    }
485

486
    @Override
487
    public boolean isRawMethod() {
488
        return false;
×
489
    }
490

491
    @Override
492
    public boolean isSubsignature(IMethodBinding iMethodBinding) {
493
        return false;
×
494
    }
495

496
    @Override
497
    public boolean isVarargs() {
498
        return false;
×
499
    }
500

501
    @Override
502
    public boolean overrides(IMethodBinding iMethodBinding) {
503
        return false;
×
504
    }
505

506
    @Override
507
    public boolean isAnnotationMember() {
508
        return false;
×
509
    }
510

511
    @Override
512
    public boolean isGenericMethod() {
513
        return false;
2✔
514
    }
515

516
    @Override
517
    public boolean isParameterizedMethod() {
518
        return false;
2✔
519
    }
520

521
    @Override
522
    public Object getDefaultValue() {
523
        return null;
×
524
    }
525

526
    @Override
527
    public IAnnotationBinding[] getParameterAnnotations(int i) {
528
        return new IAnnotationBinding[0];
×
529
    }
530

531
    @Override
532
    public ITypeBinding[] getParameterTypes() {
533
        return params;
3✔
534
    }
535

536
    @Override
537
    public ITypeBinding getDeclaredReceiverType() {
538
        return null;
×
539
    }
540

541
    @Override
542
    public ITypeBinding getReturnType() {
543
        return null;
2✔
544
    }
545

546
    @Override
547
    public ITypeBinding[] getExceptionTypes() {
548
        return new ITypeBinding[0];
×
549
    }
550

551
}
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