You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2009/04/28 10:25:39 UTC
svn commit: r769285 - in /felix/sandbox/clement/Project-Checker: ./
src/org/apache/felix/project/checker/
Author: clement
Date: Tue Apr 28 08:25:38 2009
New Revision: 769285
URL: http://svn.apache.org/viewvc?rev=769285&view=rev
Log:
Add Java import checker
Added:
felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/JavaImportChecker.java
Modified:
felix/sandbox/clement/Project-Checker/README.txt
felix/sandbox/clement/Project-Checker/project-checker.jar
felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/Notice.java
felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/Project.java
felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/UsedLicenseChecker.java
Modified: felix/sandbox/clement/Project-Checker/README.txt
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Project-Checker/README.txt?rev=769285&r1=769284&r2=769285&view=diff
==============================================================================
--- felix/sandbox/clement/Project-Checker/README.txt (original)
+++ felix/sandbox/clement/Project-Checker/README.txt Tue Apr 28 08:25:38 2009
@@ -68,6 +68,20 @@
-d ~/workspaces/felix-trunk/ipojo/arch/
-n org.apache.felix.ipojo.arch
-v 1.3.0-SNAPSHOT
+
+ java \
+ -cp bin:libs/commons-cli-1.1.jar:libs/commons-collections-3.2.1.jar:libs/commons-lang-2.4.jar:libs/dom4j-1.6.1.jar:libs/apache-rat-0.7-SNAPSHOT.jar:libs/apache-rat-core-0.7-SNAPSHOT.jar \
+ org.apache.felix.project.checker.Project \
+ -n org.apache.felix.main \
+ -v 1.6.1 \
+ -u http://people.apache.org/~pauls/1.6.1/
+
+ java \
+ -cp bin:libs/commons-cli-1.1.jar:libs/commons-collections-3.2.1.jar:libs/commons-lang-2.4.jar:libs/dom4j-1.6.1.jar:libs/apache-rat-0.7-SNAPSHOT.jar:libs/apache-rat-core-0.7-SNAPSHOT.jar \
+ org.apache.felix.project.checker.Project \
+ -n org.apache.felix.framework \
+ -v 1.6.1 \
+ -u http://people.apache.org/~pauls/1.6.1/
C] Release Mode
@@ -100,3 +114,4 @@
- Changelog checker should see if all Jira issues are mentioned
- Changelog checker should checks that the changelog contains an entry for the current version
- Allow to write the report in a file (right know, output can be redirected)
+- Nexus support
Modified: felix/sandbox/clement/Project-Checker/project-checker.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Project-Checker/project-checker.jar?rev=769285&r1=769284&r2=769285&view=diff
==============================================================================
Binary files - no diff available.
Added: felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/JavaImportChecker.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/JavaImportChecker.java?rev=769285&view=auto
==============================================================================
--- felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/JavaImportChecker.java (added)
+++ felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/JavaImportChecker.java Tue Apr 28 08:25:38 2009
@@ -0,0 +1,170 @@
+package org.apache.felix.project.checker;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class JavaImportChecker implements Checker {
+
+ Project project;
+ List<String> packages;
+
+ public static final String IMPORT_STATEMENT = "import (static )?(.*);";
+ public static final Pattern IMPORT_STATEMENT_PATTERN = Pattern.compile(IMPORT_STATEMENT);
+
+
+ public void check() throws Exception {
+ check(packages);
+ }
+
+ public void clean() { }
+
+ public String getCheckerName() {
+ return "Java Import Checker";
+ }
+
+ public boolean prepare(Project release) throws Exception {
+ project = release;
+
+ File root = project.getProjectRoot();
+ List<File> classes = new ArrayList<File>();
+ traverse(root, classes);
+
+ packages = analyse(classes);
+ filter(packages);
+
+ System.out.println(packages);
+
+ return ! packages.isEmpty();
+
+ }
+
+ private void filter(List<String> packages) {
+ List<String> toRemove = new ArrayList<String>();
+
+ // Remove everything beginning by java.
+ for (String s: packages) {
+ if (s.startsWith("java.")) {
+ toRemove.add(s);
+ }
+ }
+
+ // Remove inner classes references
+ for (String s : packages) {
+ int index = s.lastIndexOf('.');
+ int c = s.charAt(index + 1);
+ // if c is a UPPERCASE
+ if (Character.isUpperCase(c)) {
+ toRemove.add(s);
+ }
+ }
+
+ packages.removeAll(toRemove);
+
+ // Remove ignored packages
+ packages.removeAll(Utils.ignoredPackages(project));
+
+ }
+
+ private List<String> analyse(List<File> classes) throws IOException {
+ List<String> packages = new ArrayList<String>();
+ Set<String> set = new HashSet<String>();
+ for (File classe : classes) {
+ BufferedReader input = new BufferedReader(new FileReader(classe));
+
+ String line = null;
+ while (( line = input.readLine()) != null) {
+ Matcher matcher = IMPORT_STATEMENT_PATTERN.matcher(line);
+ if (matcher.matches()) {
+ // It's an import statement.
+ String clause = matcher.group(2);
+ if (clause.endsWith("*")) {
+ set.add(clause.substring(0, clause.length() - 2));
+ } else {
+ int index = clause.lastIndexOf('.');
+ set.add(clause.substring(0, index));
+ }
+ }
+ }
+ }
+
+ packages.addAll(set);
+ return packages;
+ }
+
+ private void check(List<String> referred) {
+ List<String> toRemove = new ArrayList<String>();
+ for (String s : referred) {
+ if (toRemove.contains(s)) {
+ continue; // Already checked.
+ }
+
+ License checker = getLicenseByPrefix(s);
+
+ if (checker != null) {
+ try {
+ License found = getLicenseByKeyword(checker.getKeyword());
+ checker.check(this, project, found);
+ // Remove package.
+ for (String x : referred) {
+ if (x.startsWith(s)) {
+ toRemove.add(x);
+ }
+ }
+ } catch (Exception e) {
+ project.error(this, "Java Import Clause does not have an appropriate licence " + s, e.getMessage());
+ }
+ }
+
+ }
+ referred.removeAll(toRemove);
+ }
+
+ public License getLicenseByPrefix(String packagename) {
+ for (License checker : project.getKnownLicense()) {
+ for (int i = 0; i < checker.getPackages().length; i++) {
+ if (packagename.startsWith(checker.getPackages()[i])) {
+ return checker;
+ }
+ }
+
+ }
+ return null;
+ }
+
+ public License getLicenseByKeyword(String key) {
+ Notice notice = project.getNotice();
+ License found = null;
+ List<License> lics = notice.getAll();
+ for (License lic : lics) {
+ if (lic.getText().contains(key)) {
+ if (found == null) {
+ found = lic;
+ }
+ }
+ }
+ return found;
+ }
+
+ private void traverse(File dir, List<File> classes) {
+ File[] files = dir.listFiles();
+ for (int i = 0;i < files.length; i++) {
+ if (files[i].isDirectory() && ! files[i].getAbsolutePath().contains("/test/")) { // Ignore test folder
+ traverse(files[i], classes);
+ } else {
+ if (files[i].getName().endsWith(".java")) {
+ classes.add(files[i]);
+ }
+ }
+ }
+
+ }
+
+}
Modified: felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/Notice.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/Notice.java?rev=769285&r1=769284&r2=769285&view=diff
==============================================================================
--- felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/Notice.java (original)
+++ felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/Notice.java Tue Apr 28 08:25:38 2009
@@ -33,6 +33,13 @@
public List<License> getUsed() {
return used;
}
+
+ public List<License> getAll() {
+ List<License> licences = new ArrayList<License>();
+ licences.addAll(included);
+ licences.addAll(used);
+ return licences;
+ }
public List<String> getSummary() {
return summary;
Modified: felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/Project.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/Project.java?rev=769285&r1=769284&r2=769285&view=diff
==============================================================================
--- felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/Project.java (original)
+++ felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/Project.java Tue Apr 28 08:25:38 2009
@@ -103,6 +103,8 @@
checkers.add(new IncludedApacheLicence());
checkers.add(new IncludedLicenseChecker());
checkers.add(new UsedLicenseChecker());
+ checkers.add(new JavaImportChecker());
+
// if release mode, create the temporary directory
Modified: felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/UsedLicenseChecker.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/UsedLicenseChecker.java?rev=769285&r1=769284&r2=769285&view=diff
==============================================================================
--- felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/UsedLicenseChecker.java (original)
+++ felix/sandbox/clement/Project-Checker/src/org/apache/felix/project/checker/UsedLicenseChecker.java Tue Apr 28 08:25:38 2009
@@ -120,6 +120,10 @@
private void processImports(String imports) {
// Remove '\n'
+ if (imports == null) {
+ packages = new ArrayList<String>();
+ return;
+ }
imports = imports.replaceAll("\n", "");
// Remove spaces
imports = imports.replaceAll(" ", "");
@@ -158,8 +162,6 @@
// Remove ignored packages
packages.removeAll(Utils.ignoredPackages(release));
-
-
}
}