@@ -31,101 +31,101 @@ import org.gradle.plugins.ide.eclipse.model.EclipseClasspath
3131import org.gradle.plugins.ide.idea.IdeaPlugin
3232
3333class SplitPackageDetectorPlugin implements Plugin<Project > {
34- public void apply (Project project ) {
35- Task diagnoseSplitPackages = project. tasks. add(' diagnoseSplitPackages' , SplitPackageDetectorTask . class)
36- diagnoseSplitPackages. setDescription(' Detects packages which will be split across JARs' )
37- }
34+ public void apply (Project project ) {
35+ Task diagnoseSplitPackages = project. tasks. add(' diagnoseSplitPackages' , SplitPackageDetectorTask . class)
36+ diagnoseSplitPackages. setDescription(' Detects packages which will be split across JARs' )
37+ }
3838}
3939
4040public class SplitPackageDetectorTask extends DefaultTask {
41- @Input
42- Set<Project > projectsToScan
43-
44- @TaskAction
45- public final void diagnoseSplitPackages () {
46- def Map<Project , Project > mergeMap = [:]
47- def projects = projectsToScan. findAll { it. plugins. findPlugin(org.springframework.build.gradle.MergePlugin ) }. findAll { it. merge. into }
48- projects. each { p ->
49- mergeMap. put(p, p. merge. into)
50- }
51- def splitFound = new org.springframework.build.gradle.SplitPackageDetector (projectsToScan, mergeMap, project. logger). diagnoseSplitPackages();
52- assert ! splitFound // see error log messages for details of split packages
53- }
41+ @Input
42+ Set<Project > projectsToScan
43+
44+ @TaskAction
45+ public final void diagnoseSplitPackages () {
46+ def Map<Project , Project > mergeMap = [:]
47+ def projects = projectsToScan. findAll { it. plugins. findPlugin(org.springframework.build.gradle.MergePlugin ) }. findAll { it. merge. into }
48+ projects. each { p ->
49+ mergeMap. put(p, p. merge. into)
50+ }
51+ def splitFound = new org.springframework.build.gradle.SplitPackageDetector (projectsToScan, mergeMap, project. logger). diagnoseSplitPackages();
52+ assert ! splitFound // see error log messages for details of split packages
53+ }
5454}
5555
5656class SplitPackageDetector {
5757
58- private static final String HIDDEN_DIRECTORY_PREFIX = " ."
59-
60- private static final String JAVA_FILE_SUFFIX = " .java"
61-
62- private static final String SRC_MAIN_JAVA = " src" + File . separator + " main" + File . separator + " java"
63-
64- private static final String PACKAGE_SEPARATOR = " ."
65-
66- private final Map<Project , Project > mergeMap
67-
68- private final Map<Project , Set<String > > pkgMap = [:]
69-
70- private final logger
71-
72- SplitPackageDetector (projectsToScan , mergeMap , logger ) {
73- this . mergeMap = mergeMap
74- this . logger = logger
75- projectsToScan. each { Project p ->
76- def dir = p. projectDir
77- def packages = getPackagesInDirectory(dir)
78- if (! packages. isEmpty()) {
79- pkgMap. put(p, packages)
80- }
81- }
82- }
83-
84- private File [] dirList (String dir ) {
85- dirList(new File (dir))
86- }
87-
88- private File [] dirList (File dir ) {
89- dir. listFiles({ file -> file. isDirectory() && ! file. getName(). startsWith(HIDDEN_DIRECTORY_PREFIX ) } as FileFilter )
90- }
91-
92- private Set<String > getPackagesInDirectory (File dir ) {
93- def pkgs = new HashSet<String > ()
94- addPackagesInDirectory(pkgs, new File (dir, SRC_MAIN_JAVA ), " " )
95- return pkgs;
96- }
97-
98- boolean diagnoseSplitPackages () {
99- def splitFound = false ;
100- def projs = pkgMap. keySet(). toArray()
101- def numProjects = projs. length
102- for (int i = 0 ; i < numProjects - 1 ; i++ ) {
103- for (int j = i + 1 ; j < numProjects - 1 ; j++ ) {
104- def pi = projs[i]
105- def pkgi = new HashSet (pkgMap. get(pi))
106- def pj = projs[j]
107- def pkgj = pkgMap. get(pj)
108- pkgi. retainAll(pkgj)
109- if (! pkgi. isEmpty() && mergeMap. get(pi) != pj && mergeMap. get(pj) != pi) {
110- pkgi. each { pkg ->
111- def readablePkg = pkg. substring(1 ). replaceAll(File . separator, PACKAGE_SEPARATOR )
112- logger. error(" Package '$readablePkg ' is split between $pi and $pj " )
113- }
114- splitFound = true
115- }
116- }
117- }
118- return splitFound
119- }
120-
121- private void addPackagesInDirectory (HashSet<String > packages , File dir , String pkg ) {
122- def scanDir = new File (dir, pkg)
123- def File [] javaFiles = scanDir. listFiles({ file -> ! file. isDirectory() && file. getName(). endsWith(JAVA_FILE_SUFFIX ) } as FileFilter )
124- if (javaFiles != null && javaFiles. length != 0 ) {
125- packages. add(pkg)
126- }
127- dirList(scanDir). each { File subDir ->
128- addPackagesInDirectory(packages, dir, pkg + File . separator + subDir. getName())
129- }
130- }
131- }
58+ private static final String HIDDEN_DIRECTORY_PREFIX = " ."
59+
60+ private static final String JAVA_FILE_SUFFIX = " .java"
61+
62+ private static final String SRC_MAIN_JAVA = " src" + File . separator + " main" + File . separator + " java"
63+
64+ private static final String PACKAGE_SEPARATOR = " ."
65+
66+ private final Map<Project , Project > mergeMap
67+
68+ private final Map<Project , Set<String > > pkgMap = [:]
69+
70+ private final logger
71+
72+ SplitPackageDetector (projectsToScan , mergeMap , logger ) {
73+ this . mergeMap = mergeMap
74+ this . logger = logger
75+ projectsToScan. each { Project p ->
76+ def dir = p. projectDir
77+ def packages = getPackagesInDirectory(dir)
78+ if (! packages. isEmpty()) {
79+ pkgMap. put(p, packages)
80+ }
81+ }
82+ }
83+
84+ private File [] dirList (String dir ) {
85+ dirList(new File (dir))
86+ }
87+
88+ private File [] dirList (File dir ) {
89+ dir. listFiles({ file -> file. isDirectory() && ! file. getName(). startsWith(HIDDEN_DIRECTORY_PREFIX ) } as FileFilter )
90+ }
91+
92+ private Set<String > getPackagesInDirectory (File dir ) {
93+ def pkgs = new HashSet<String > ()
94+ addPackagesInDirectory(pkgs, new File (dir, SRC_MAIN_JAVA ), " " )
95+ return pkgs;
96+ }
97+
98+ boolean diagnoseSplitPackages () {
99+ def splitFound = false ;
100+ def projs = pkgMap. keySet(). toArray()
101+ def numProjects = projs. length
102+ for (int i = 0 ; i < numProjects - 1 ; i++ ) {
103+ for (int j = i + 1 ; j < numProjects - 1 ; j++ ) {
104+ def pi = projs[i]
105+ def pkgi = new HashSet (pkgMap. get(pi))
106+ def pj = projs[j]
107+ def pkgj = pkgMap. get(pj)
108+ pkgi. retainAll(pkgj)
109+ if (! pkgi. isEmpty() && mergeMap. get(pi) != pj && mergeMap. get(pj) != pi) {
110+ pkgi. each { pkg ->
111+ def readablePkg = pkg. substring(1 ). replaceAll(File . separator, PACKAGE_SEPARATOR )
112+ logger. error(" Package '$readablePkg ' is split between $pi and $pj " )
113+ }
114+ splitFound = true
115+ }
116+ }
117+ }
118+ return splitFound
119+ }
120+
121+ private void addPackagesInDirectory (HashSet<String > packages , File dir , String pkg ) {
122+ def scanDir = new File (dir, pkg)
123+ def File [] javaFiles = scanDir. listFiles({ file -> ! file. isDirectory() && file. getName(). endsWith(JAVA_FILE_SUFFIX ) } as FileFilter )
124+ if (javaFiles != null && javaFiles. length != 0 ) {
125+ packages. add(pkg)
126+ }
127+ dirList(scanDir). each { File subDir ->
128+ addPackagesInDirectory(packages, dir, pkg + File . separator + subDir. getName())
129+ }
130+ }
131+ }
0 commit comments