3 changed files with 130 additions and 87 deletions
@ -1,85 +0,0 @@
@@ -1,85 +0,0 @@
|
||||
/* |
||||
* Copyright 2013 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.build.gradle |
||||
|
||||
class SplitPackageDetector { |
||||
|
||||
private static final String HIDDEN_DIRECTORY_PREFIX = "." |
||||
|
||||
private static final String JAVA_FILE_SUFFIX = ".java" |
||||
|
||||
private static final String SRC_MAIN_JAVA = "src" + File.separator + "main" + File.separator + "java" |
||||
|
||||
private final Map<File, Set<String>> pkgMap = [:] |
||||
|
||||
private final logger |
||||
|
||||
SplitPackageDetector(baseDir, logger) { |
||||
this.logger = logger |
||||
dirList(baseDir).each { File dir -> |
||||
def packages = getPackagesInDirectory(dir) |
||||
if (!packages.isEmpty()) { |
||||
pkgMap.put(dir, packages) |
||||
} |
||||
} |
||||
} |
||||
|
||||
private File[] dirList(String dir) { |
||||
dirList(new File(dir)) |
||||
} |
||||
|
||||
private File[] dirList(File dir) { |
||||
dir.listFiles({ file -> file.isDirectory() && !file.getName().startsWith(HIDDEN_DIRECTORY_PREFIX) } as FileFilter) |
||||
} |
||||
|
||||
private Set<String> getPackagesInDirectory(File dir) { |
||||
def pkgs = new HashSet<String>() |
||||
addPackagesInDirectory(pkgs, new File(dir, SRC_MAIN_JAVA), "") |
||||
return pkgs; |
||||
} |
||||
|
||||
boolean diagnoseSplitPackages() { |
||||
def splitFound = false; |
||||
def dirs = pkgMap.keySet().toArray() |
||||
def numDirs = dirs.length |
||||
for (int i = 0; i < numDirs - 1; i++) { |
||||
for (int j = i + 1; j < numDirs - 1; j++) { |
||||
def di = dirs[i] |
||||
def pi = new HashSet(pkgMap.get(di)) |
||||
def dj = dirs[j] |
||||
def pj = pkgMap.get(dj) |
||||
pi.retainAll(pj) |
||||
if (!pi.isEmpty()) { |
||||
logger.error("Packages $pi are split between directories '$di' and '$dj'") |
||||
splitFound = true |
||||
} |
||||
} |
||||
} |
||||
return splitFound |
||||
} |
||||
|
||||
private void addPackagesInDirectory(HashSet<String> packages, File dir, String pkg) { |
||||
def scanDir = new File(dir, pkg) |
||||
def File[] javaFiles = scanDir.listFiles({ file -> !file.isDirectory() && file.getName().endsWith(JAVA_FILE_SUFFIX) } as FileFilter) |
||||
if (javaFiles != null && javaFiles.length != 0) { |
||||
packages.add(pkg) |
||||
} |
||||
dirList(scanDir).each { File subDir -> |
||||
addPackagesInDirectory(packages, dir, pkg + File.separator + subDir.getName()) |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,125 @@
@@ -0,0 +1,125 @@
|
||||
/* |
||||
* Copyright 2002-2012 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.build.gradle |
||||
|
||||
import java.io.File; |
||||
import java.util.HashSet; |
||||
import java.util.Map; |
||||
import java.util.Set; |
||||
|
||||
import org.gradle.api.* |
||||
import org.gradle.api.artifacts.Configuration |
||||
import org.gradle.api.artifacts.ProjectDependency; |
||||
import org.gradle.api.artifacts.maven.Conf2ScopeMapping |
||||
import org.gradle.api.plugins.MavenPlugin |
||||
import org.gradle.api.tasks.* |
||||
import org.gradle.plugins.ide.eclipse.EclipsePlugin |
||||
import org.gradle.plugins.ide.eclipse.model.EclipseClasspath; |
||||
import org.gradle.plugins.ide.idea.IdeaPlugin |
||||
import org.gradle.api.invocation.* |
||||
|
||||
|
||||
class SplitPackageDetectorPlugin implements Plugin<Project> { |
||||
public void apply(Project project) { |
||||
Task diagnoseSplitPackages = project.tasks.add('diagnoseSplitPackages', SplitPackageDetectorTask.class) |
||||
diagnoseSplitPackages.setDescription('Detects split packages') |
||||
//project.tasks.findByName('build').dependsOn(diagnoseSplitPackages) |
||||
} |
||||
} |
||||
|
||||
public class SplitPackageDetectorTask extends DefaultTask { |
||||
@InputDirectory |
||||
File inputDir |
||||
|
||||
@TaskAction |
||||
public final void diagnoseSplitPackages() { |
||||
def projects = project.subprojects.findAll { it.plugins.findPlugin(org.springframework.build.gradle.MergePlugin) }.findAll { it.merge.into } |
||||
projects.each { p -> |
||||
println ' > The project directory '+ p.projectDir + ' will merge into ' + p.merge.into.projectDir |
||||
} |
||||
def splitFound = new org.springframework.build.gradle.SplitPackageDetector(inputDir.absolutePath, project.logger).diagnoseSplitPackages(); |
||||
assert !splitFound |
||||
} |
||||
} |
||||
|
||||
class SplitPackageDetector { |
||||
|
||||
private static final String HIDDEN_DIRECTORY_PREFIX = "." |
||||
|
||||
private static final String JAVA_FILE_SUFFIX = ".java" |
||||
|
||||
private static final String SRC_MAIN_JAVA = "src" + File.separator + "main" + File.separator + "java" |
||||
|
||||
private final Map<File, Set<String>> pkgMap = [:] |
||||
|
||||
private final logger |
||||
|
||||
SplitPackageDetector(baseDir, logger) { |
||||
this.logger = logger |
||||
dirList(baseDir).each { File dir -> |
||||
def packages = getPackagesInDirectory(dir) |
||||
if (!packages.isEmpty()) { |
||||
pkgMap.put(dir, packages) |
||||
} |
||||
} |
||||
} |
||||
|
||||
private File[] dirList(String dir) { |
||||
dirList(new File(dir)) |
||||
} |
||||
|
||||
private File[] dirList(File dir) { |
||||
dir.listFiles({ file -> file.isDirectory() && !file.getName().startsWith(HIDDEN_DIRECTORY_PREFIX) } as FileFilter) |
||||
} |
||||
|
||||
private Set<String> getPackagesInDirectory(File dir) { |
||||
def pkgs = new HashSet<String>() |
||||
addPackagesInDirectory(pkgs, new File(dir, SRC_MAIN_JAVA), "") |
||||
return pkgs; |
||||
} |
||||
|
||||
boolean diagnoseSplitPackages() { |
||||
def splitFound = false; |
||||
def dirs = pkgMap.keySet().toArray() |
||||
def numDirs = dirs.length |
||||
for (int i = 0; i < numDirs - 1; i++) { |
||||
for (int j = i + 1; j < numDirs - 1; j++) { |
||||
def di = dirs[i] |
||||
def pi = new HashSet(pkgMap.get(di)) |
||||
def dj = dirs[j] |
||||
def pj = pkgMap.get(dj) |
||||
pi.retainAll(pj) |
||||
if (!pi.isEmpty()) { |
||||
logger.error("Packages $pi are split between directories '$di' and '$dj'") |
||||
splitFound = true |
||||
} |
||||
} |
||||
} |
||||
return splitFound |
||||
} |
||||
|
||||
private void addPackagesInDirectory(HashSet<String> packages, File dir, String pkg) { |
||||
def scanDir = new File(dir, pkg) |
||||
def File[] javaFiles = scanDir.listFiles({ file -> !file.isDirectory() && file.getName().endsWith(JAVA_FILE_SUFFIX) } as FileFilter) |
||||
if (javaFiles != null && javaFiles.length != 0) { |
||||
packages.add(pkg) |
||||
} |
||||
dirList(scanDir).each { File subDir -> |
||||
addPackagesInDirectory(packages, dir, pkg + File.separator + subDir.getName()) |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue