Author: thimel Date: 2009-05-12 15:56:07 +0000 (Tue, 12 May 2009) New Revision: 501 Modified: eugene/trunk/src/main/java/org/nuiton/eugene/ImportsManager.java eugene/trunk/src/test/java/org/nuiton/eugene/ImportsManagerTest.java Log: Add state managment in imports and clearImports to reset ImportManager Modified: eugene/trunk/src/main/java/org/nuiton/eugene/ImportsManager.java =================================================================== --- eugene/trunk/src/main/java/org/nuiton/eugene/ImportsManager.java 2009-05-11 07:24:24 UTC (rev 500) +++ eugene/trunk/src/main/java/org/nuiton/eugene/ImportsManager.java 2009-05-12 15:56:07 UTC (rev 501) @@ -46,11 +46,12 @@ } private Map<String, String> imports = new HashMap<String, String>(); + private State state = State.FILLING; /** * From the given class, add it to the imports list. * @param clazz the class to import - * @return true if there is a conflict adding the import + * @return true if import add was successful * @see ImportsManager#addImport(String) */ public boolean addImport(Class<?> clazz) { @@ -59,25 +60,39 @@ /** * From the given fqn, add it to the imports list. If there is a confilct - * adding this import, will return true + * adding this import, will return false. + * If reading of the imports has started, this method will return false, + * unless type does not need to be imported. * @param fqn the fully qualified name to import - * @return true if there is a conflict adding the import + * @return true if import add was successful */ public boolean addImport(String fqn) { - if (fqn.startsWith("java.lang.") && fqn.lastIndexOf(".") == 9) { - return false; + // Exclude java.lang classes + if (fqn == null || + (fqn.startsWith("java.lang.") && fqn.lastIndexOf(".") == 9)) { + return true; } + // Exclude primitive types if (primitiveTypes.contains(fqn)) { + return true; + } + // Reject generics + if (fqn.indexOf("<") != -1 || fqn.indexOf(">") != -1) { return false; } String name = fqn.substring(fqn.lastIndexOf(".") + 1); String inPlaceFqn = imports.get(name); if (inPlaceFqn == null) { - imports.put(name, fqn); - return false; + // Someone has started to read imports, impossible to add some more + if (state == State.READING) { + return false; + } else { + imports.put(name, fqn); + return true; + } } - // if fqn is not the same, return true. Otherwise, no need to override. - return (!inPlaceFqn.equals(fqn)); + // if fqn is not the same, return false. Otherwise, no need to override. + return inPlaceFqn.equals(fqn); } /** @@ -89,7 +104,7 @@ */ public String getType(String fqn) { boolean importResult = addImport(fqn); - if (importResult) { + if (!importResult) { // There is a conflict, do not use simple name return fqn; } else { @@ -110,6 +125,7 @@ * @return the imports alphabeticaly sorted */ public List<String> getImports(String packageName) { + state = State.READING; List<String> result = new ArrayList<String>(); for (String fqn : imports.values()) { if (!(fqn.lastIndexOf(".") == packageName.length() && fqn @@ -121,4 +137,16 @@ return result; } + /** + * Method to reset imports list. If imports has been listed, it becomes back + * possible to add imports. + */ + public void clearImports() { + imports.clear(); + state = State.FILLING; + } + + private enum State { + FILLING, READING + } } Modified: eugene/trunk/src/test/java/org/nuiton/eugene/ImportsManagerTest.java =================================================================== --- eugene/trunk/src/test/java/org/nuiton/eugene/ImportsManagerTest.java 2009-05-11 07:24:24 UTC (rev 500) +++ eugene/trunk/src/test/java/org/nuiton/eugene/ImportsManagerTest.java 2009-05-12 15:56:07 UTC (rev 501) @@ -17,19 +17,19 @@ } public void testAddImport() throws Exception { - assertFalse(mgr.addImport("org.nuiton.eugene.Toto")); - assertFalse(mgr.addImport("org.nuiton.eugene.Toto")); //Repeat to test acceptance - assertFalse(mgr.addImport("org.nuiton.eugene.Tutu")); - assertTrue(mgr.addImport("org.chorem.eugene.Tutu")); //Conflict, package differs + assertTrue(mgr.addImport("org.nuiton.eugene.Toto")); + assertTrue(mgr.addImport("org.nuiton.eugene.Toto")); //Repeat to test acceptance + assertTrue(mgr.addImport("org.nuiton.eugene.Tutu")); + assertFalse(mgr.addImport("org.chorem.eugene.Tutu")); //Conflict, package differs - assertFalse(mgr.addImport("void")); - assertFalse(mgr.addImport("boolean")); - assertFalse(mgr.addImport("Byte")); - assertFalse(mgr.addImport("java.lang.Toto")); - assertTrue(mgr.addImport("java.lang.sub.Toto")); + assertTrue(mgr.addImport("void")); + assertTrue(mgr.addImport("boolean")); + assertTrue(mgr.addImport("Byte")); + assertTrue(mgr.addImport("java.lang.Toto")); + assertFalse(mgr.addImport("java.lang.sub.Toto")); - assertFalse(mgr.addImport(Serializable.class)); - assertTrue(mgr.addImport("org.nuiton.eugene.Serializable")); + assertTrue(mgr.addImport(Serializable.class)); + assertFalse(mgr.addImport("org.nuiton.eugene.Serializable")); } public void testGetType() throws Exception { @@ -46,9 +46,9 @@ } public void testGetImports() throws Exception { - mgr.addImport("org.nuiton.eugene.Toto"); - mgr.addImport("org.nuiton.eugene.Tutu"); - mgr.addImport("org.nuiton.eugene.subpackage.Tata"); + assertTrue(mgr.addImport("org.nuiton.eugene.Toto")); + assertTrue(mgr.addImport("org.nuiton.eugene.Tutu")); + assertTrue(mgr.addImport("org.nuiton.eugene.subpackage.Tata")); List<String> imports = mgr.getImports("org.nuiton.eugene"); assertEquals(1, imports.size()); assertEquals("org.nuiton.eugene.subpackage.Tata", imports.get(0)); @@ -68,17 +68,18 @@ assertEquals("org.nuiton.eugene.Toto", imports.get(0)); assertEquals("org.nuiton.eugene.Tutu", imports.get(1)); - mgr.addImport("java.lang.String"); + assertTrue(mgr.addImport("java.lang.String")); imports = mgr.getImports("org.nuiton.eugene.subpackage"); assertEquals(2, imports.size()); assertEquals("org.nuiton.eugene.Toto", imports.get(0)); assertEquals("org.nuiton.eugene.Tutu", imports.get(1)); - mgr.addImport("void"); - mgr.addImport("boolean"); - mgr.addImport("Byte"); - mgr.addImport("java.lang.Toto"); - mgr.addImport("java.lang.sub.Toto"); + assertTrue(mgr.addImport("void")); + assertTrue(mgr.addImport("boolean")); + assertTrue(mgr.addImport("Byte")); + assertTrue(mgr.addImport("java.lang.Toto")); + assertFalse(mgr.addImport("java.lang.sub.Titi")); // Read as started, import is refused + assertTrue(mgr.addImport("org.nuiton.eugene.Tutu")); //Already present, must not reject imports = mgr.getImports("org.nuiton.eugene.subpackage"); assertEquals(2, imports.size());