List<File> (@Nullable @NonNls String s, ConvertContext context) { final GenericAttributeValue attribValue = context.getInvocationElement().getParentOfType(GenericAttributeValue.class, false); if (attribValue == null) { return null; } final String path = attribValue.getStringValue(); if (path == null) { return null; } final List<File> result = new ArrayList<>(); Computable<String> basedirComputable = null; final PathTokenizer pathTokenizer = new PathTokenizer(path); while (pathTokenizer.hasMoreTokens()) { File file = new File(pathTokenizer.nextToken()); if (!file.isAbsolute()) { if (basedirComputable == null) { basedirComputable = new Computable<>() { final String myBaseDir; { final AntDomProject antProject = getEffectiveAntProject(attribValue); myBaseDir = antProject != null ? antProject.getProjectBasedirPath() : null; } @Override public String compute() { return myBaseDir; } }; } final String baseDir = basedirComputable.compute(); if (baseDir == null) { continue; } file = new File(baseDir, path); } result.add(file); } return result; }