This repository was archived by the owner on Jan 30, 2023. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +60
-10
lines changed
main/scala/org/scalastyle
test/scala/org/scalastyle Expand file tree Collapse file tree 2 files changed +60
-10
lines changed Original file line number Diff line number Diff line change @@ -64,16 +64,27 @@ object Directory {
64
64
files : Iterable [File ],
65
65
excludeFilter : Option [FileFilter ] = None
66
66
): Seq [FileSpec ] = {
67
- files.flatMap { f =>
68
- if (excludeFilter.exists(_.accept(f))) {
69
- Nil
70
- } else if (f.isDirectory) {
71
- privateGetFiles(encoding, f.listFiles, excludeFilter)
72
- } else if (scalaFileFilter.accept(f)) {
73
- Seq (new DirectoryFileSpec (f.getAbsolutePath, encoding, f.getAbsoluteFile))
74
- } else {
75
- Nil
67
+
68
+ def getFilesHelper (currentFiles : Iterable [File ], acc : Set [File ]): Set [File ] = {
69
+ currentFiles.headOption match {
70
+ case Some (f) =>
71
+ if (excludeFilter.exists(_.accept(f))) {
72
+ getFilesHelper(currentFiles.tail, acc)
73
+ } else if (f.isDirectory) {
74
+ val newCurrentFiles = currentFiles.tail ++ f.listFiles
75
+ getFilesHelper(newCurrentFiles, acc)
76
+ } else if (scalaFileFilter.accept(f) && ! acc(f)) {
77
+ val newAcc = acc + f
78
+ getFilesHelper(currentFiles.tail, newAcc)
79
+ } else {
80
+ getFilesHelper(currentFiles.tail, acc)
81
+ }
82
+ case None => acc
76
83
}
77
- }.toSeq
84
+ }
85
+
86
+ val uniqueFiles = getFilesHelper(files, Set .empty)
87
+ uniqueFiles.toSeq.map(f => new DirectoryFileSpec (f.getAbsolutePath, encoding, f.getAbsoluteFile))
78
88
}
89
+
79
90
}
Original file line number Diff line number Diff line change
1
+ package org .scalastyle
2
+
3
+ import java .io .File
4
+
5
+ import org .junit .{Assert , Test }
6
+ import org .scalatestplus .junit .AssertionsForJUnit
7
+
8
+ class DirectoryTest extends AssertionsForJUnit {
9
+
10
+ private def toFile (s : String ) = {
11
+ val base = " src/test/resources/testDir/"
12
+ new File (base + s)
13
+ }
14
+
15
+ @ Test
16
+ def processSingleFileOnlyOnce (): Unit = {
17
+ val duplicatedFile = List (" dirA/X.scala" , " dirA/X.scala" )
18
+ assertGetFiles(1 , duplicatedFile)
19
+ }
20
+
21
+ @ Test
22
+ def processDirectoryOnlyOnce (): Unit = {
23
+ val duplicatedDir = List (" dirA" , " dirA" )
24
+ assertGetFiles(1 , duplicatedDir)
25
+ }
26
+
27
+ @ Test
28
+ def processFileInProcessDirOnlyOnce (): Unit = {
29
+ val duplicatedFileInDir = List (" dirB" , " dirB/Y.scala" )
30
+ assertGetFiles(2 , duplicatedFileInDir)
31
+ }
32
+
33
+
34
+ private def assertGetFiles (nrExpectedFiles : Int , inputFiles : Seq [String ]): Unit = {
35
+ val files = Directory .getFiles(None , inputFiles.map(toFile))
36
+ Assert .assertEquals(nrExpectedFiles, files.size)
37
+ }
38
+
39
+ }
You can’t perform that action at this time.
0 commit comments