Skip to content

Commit d8441f3

Browse files
Merge pull request #158 from moosetechnology/issue/124
fix #124
2 parents cacb32c + e341801 commit d8441f3

4 files changed

Lines changed: 28 additions & 4 deletions

File tree

app/src/main/java/fr/inria/verveine/extractor/java/EntityDictionary.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ public class EntityDictionary {
103103
*/
104104
public static final String CONSTRUCTOR_KIND_MARKER = "constructor";
105105

106+
/** name of the entity representing the "unknown" type 'var'
107+
* The entity is intended to be uniq, see {@link #ensureFamixUniqEntity(Class, IBinding, String)}
108+
*/
109+
public static final String IMPLICIT_VAR_TYPE_NAME = "<ImplicitVarType>";
110+
106111
/**
107112
* The FAMIX repository where all FAMIX entities are created and stored
108113
*/

app/src/main/java/fr/inria/verveine/extractor/java/visitors/refvisitors/AbstractRefVisitor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ protected TType referredType(ITypeBinding bnd, TNamedEntity ctxt, boolean isClas
126126
} else {
127127
fmxTyp = (ParametricClass) dico.ensureFamixClass(parameterizableBnd, name, /*owner*/null, /*isGeneric*/true, modifiers);
128128
}
129+
} else if ( (name != null) && name.equals("var") ) {
130+
fmxTyp = dico.ensureFamixUniqEntity(org.moosetechnology.model.famix.famixjavaentities.Type.class, /*binding*/null, EntityDictionary.IMPLICIT_VAR_TYPE_NAME);
129131
} else {
130132
fmxTyp = dico.ensureFamixType(bnd, name, /*owner*/null, (TWithTypes) ctxt, bnd.getModifiers());
131133
}

app/src/test/java/fr/inria/verveine/extractor/java/VerveineJTest_AdHoc.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,12 +363,27 @@ public void testClassVar() {
363363
assertTrue("ensureFamixEntity does not access <someClass>.class", classFieldFound);
364364
}
365365

366+
@Test
367+
public void testImplicitVarType() {
368+
parse(new String[]{"src/test/resources/ad_hoc/Bla.java"});
369+
370+
Type varType = detectFamixElement(Type.class, EntityDictionary.IMPLICIT_VAR_TYPE_NAME);
371+
assertNotNull(varType);
372+
373+
Collection<TEntityTyping> incomingTypings = varType.getIncomingTypings();
374+
assertEquals(1, incomingTypings.size());
375+
376+
assertEquals("str", ((TNamedEntity)firstElt(incomingTypings).getTypedEntity()).getName());
377+
}
378+
366379
@Test
367380
public void testArrayListMatthias() {
368381
parse(new String[]{"src/test/resources/ad_hoc/Bla.java"});
369382

370-
assertEquals(7, entitiesOfType(org.moosetechnology.model.famix.famixjavaentities.Class.class).size()); // Classes are : Bla, Object, String, ArrayList, Arrays, AbstractList, AbstractCollection
371-
assertEquals(3, entitiesOfType(ParametricClass.class).size()); // Parametric classes are : ArrayList, AbstractList, AbstractCollection
383+
// Classes are : Bla, Object, String, ArrayList, Arrays, AbstractList, AbstractCollection, TYPE_VAR_NAME
384+
assertEquals(7, entitiesOfType(org.moosetechnology.model.famix.famixjavaentities.Class.class).size());
385+
// Parametric classes are : ArrayList, AbstractList, AbstractCollection
386+
assertEquals(3, entitiesOfType(ParametricClass.class).size());
372387

373388
// compute all interfaces used by the 3 types String, ArrayList, Arrays
374389
Set<java.lang.Class<?>> allInterfaces = new HashSet<>();

app/src/test/resources/ad_hoc/Bla.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
public class Bla {
99

1010
public static void main(String[] arg){
11-
List<?> list = new ArrayList();
12-
Arrays.asList("abc");
11+
List<String> list = new ArrayList<>();
12+
for (var str : Arrays.asList("abc")) {
13+
list.add(str);
14+
};
1315
}
1416
}

0 commit comments

Comments
 (0)