Skip to content

Commit

Permalink
Add log4j, static code analyzer + Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
ChelloX committed May 7, 2020
1 parent c7b5730 commit 736289d
Show file tree
Hide file tree
Showing 15 changed files with 437 additions and 102 deletions.
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,11 @@
<version>3.15.21</version>
</dependency>

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

</dependencies>
</project>
13 changes: 10 additions & 3 deletions src/main/java/woped_dependency_visualizer/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,24 @@

import java.util.ArrayList;

import woped_dependency_visualizer.analyzer.StaticAnalyzer;
import org.apache.log4j.Logger;

import woped_dependency_visualizer.analyzer.WopedStaticAnalyzer;
import woped_dependency_visualizer.analyzer.WopedProjectAnalyzer;
import woped_dependency_visualizer.utils.WopedProjectFolder;
import woped_dependency_visualizer.data.WopedProjectFolder;
import woped_dependency_visualizer.visualizer.WopedVisualizer;

public class App {
private static Logger LOGGER = Logger.getLogger(App.class);
public static void main(String args[]) {
LOGGER.debug("Start App");
WopedProjectAnalyzer a = new WopedProjectAnalyzer();
ArrayList<WopedProjectFolder> projects = a.analyze(""); //Woped Project-Folder

WopedVisualizer v = new WopedVisualizer();
v.visualize(projects);
v.visualize(projects);

WopedStaticAnalyzer s = new WopedStaticAnalyzer();
s.addDependencyCountToDependencies(projects);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,18 @@
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import woped_dependency_visualizer.utils.WopedProjectFolder;
import woped_dependency_visualizer.data.WopedProjectFolder;
import woped_dependency_visualizer.data.WopedProjectFolderDependency;

public class WopedProjectAnalyzer {
private static Logger LOGGER = Logger.getLogger(WopedProjectAnalyzer.class);

private ArrayList<String> foldersToIgnore;

public WopedProjectAnalyzer() {
Expand All @@ -31,8 +35,10 @@ public WopedProjectAnalyzer() {
}

public ArrayList<WopedProjectFolder> analyze(String wopedProjectDir) {
LOGGER.debug("Start analyze: " + wopedProjectDir);
ArrayList<WopedProjectFolder> wopedProjects = createWopedProjects(wopedProjectDir);
addDependenciesToProjects(wopedProjects);
LOGGER.debug("End analyze");
return wopedProjects;
}

Expand All @@ -45,6 +51,7 @@ private ArrayList<WopedProjectFolder> createWopedProjects(String wopedProjectDir
if (f.isDirectory()) {
WopedProjectFolder wpf = new WopedProjectFolder(f);
wopedProjects.add(wpf);
LOGGER.debug("Add Folder " + f.getAbsolutePath() + " as " + wpf.getName());
}
}
}
Expand All @@ -54,7 +61,7 @@ private ArrayList<WopedProjectFolder> createWopedProjects(String wopedProjectDir
private ArrayList<WopedProjectFolder> addDependenciesToProjects(ArrayList<WopedProjectFolder> wopedProjects) {
for (WopedProjectFolder wpf : wopedProjects) {

File pwfIml = new File(wpf.getFile().getAbsoluteFile() + "\\" + wpf.getName() + ".iml");
File pwfIml = new File(wpf.getFolder().getAbsoluteFile() + "\\" + wpf.getName() + ".iml");

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
Expand All @@ -68,8 +75,9 @@ private ArrayList<WopedProjectFolder> addDependenciesToProjects(ArrayList<WopedP
if (orderEntry.getAttributes().getNamedItem("type").getTextContent().equals("module")) {
if (getWopedProjectFolderForName(wopedProjects,
orderEntry.getAttributes().getNamedItem("module-name").getTextContent()) != null) {
wpf.addDependenciesIntern(getWopedProjectFolderForName(wopedProjects,
orderEntry.getAttributes().getNamedItem("module-name").getTextContent()));
LOGGER.debug("Add module " + orderEntry.getAttributes().getNamedItem("module-name").getTextContent() + " as dependency to " + wpf.getName());
wpf.addDependenciesIntern(new WopedProjectFolderDependency(getWopedProjectFolderForName(wopedProjects,
orderEntry.getAttributes().getNamedItem("module-name").getTextContent())));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package woped_dependency_visualizer.analyzer;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.ImportDeclaration;

import woped_dependency_visualizer.data.WopedProjectPackage;
import woped_dependency_visualizer.utils.WopedJavaUtil;
import woped_dependency_visualizer.data.WopedProjectFolder;
import woped_dependency_visualizer.data.WopedProjectFolderDependency;

public class WopedStaticAnalyzer {
private static Logger LOGGER = Logger.getLogger(WopedStaticAnalyzer.class);

public void addDependencyCountToDependencies(ArrayList<WopedProjectFolder> projects) {
for (WopedProjectFolder wpf : projects) {
LOGGER.debug("Static analyze " + wpf.getName());
File srcFolder = new File(wpf.getFolder() + "\\src");
if (srcFolder.exists()) {
LOGGER.debug("Build package structure for: " + wpf.getName());

for (File firstSrcLevel : srcFolder.listFiles()) {
if (firstSrcLevel.isDirectory()) {
wpf.addProjectPackage(buildPackageAndFileStructure(firstSrcLevel, null));
} else {
LOGGER.debug("Found non-directory file in /src/ for " + wpf.getName());
}
}

} else {
LOGGER.debug("SrcFolder does not exits for: " + wpf.getName());
}
}

WopedJavaUtil javaUtil = new WopedJavaUtil(projects);

for (WopedProjectFolder wpf : projects) {
if (javaUtil.getClassesForFolder(wpf) != null) {
for (String classPath : javaUtil.getClassesForFolder(wpf)) {
try {

String sourcePath = wpf.getFolder().getAbsolutePath() + "\\src\\" + classPath.replace(".", "\\")
+ ".java";

CompilationUnit cu = StaticJavaParser.parse(new File(sourcePath));
List<ImportDeclaration> imports = cu.findAll(ImportDeclaration.class);
for (ImportDeclaration i : imports) {
WopedProjectFolder importProjectFolder = javaUtil
.getProjectFolderForClass(i.getNameAsString());

if (importProjectFolder != null) {
if (!importProjectFolder.equals(wpf)) {
WopedProjectFolderDependency dependency = wpf
.getDependencyToProjectFolder(importProjectFolder);

if (dependency == null) {
LOGGER.error("Found import but no dependency");
} else {
dependency.setCount(dependency.getCount() + 1);
LOGGER.debug("Increment dependency count from " + wpf.getName() + " to "
+ dependency.getDependency().getName() + " Now: "
+ dependency.getCount());
}
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}
printOnConsole(projects);
}

private void printOnConsole(ArrayList<WopedProjectFolder> projects) {
for(WopedProjectFolder wpf : projects) {
for(WopedProjectFolderDependency dep : wpf.getDependenciesIntern()) {
LOGGER.info("Dependency from " + wpf.getName() + " to " + dep.getDependency().getName() + " with count: " + dep.getCount());
}
}
}

private WopedProjectPackage buildPackageAndFileStructure(File file, WopedProjectPackage parent) {
WopedProjectPackage p = new WopedProjectPackage(file, file.getName());
LOGGER.debug("Created package " + p.getName());
if (parent != null) {
LOGGER.debug("Set " + parent.getName() + " as parent for " + p.getName());
p.setParentPackage(parent);
}
for (File child : file.listFiles()) {
if (child.isFile()) {
if (child.getName().endsWith(".java")) {
LOGGER.debug("Add " + child.getName() + " as Java-File to " + p.getName());
p.addJavaFile(child);
} else {
LOGGER.debug("Add " + child.getName() + " as non-Java-File to " + p.getName());
p.addNonJavaFiles(child);
}
} else if (child.isDirectory()) {
p.addSubPackage(buildPackageAndFileStructure(child, p));
} else {
LOGGER.debug("Found strange file/folder in " + file.getAbsolutePath());
}
}

return p;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package woped_dependency_visualizer.data;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class WopedProjectFolder {
private List<WopedProjectFolderDependency> dependenciesIntern;
private List<String> dependenciesExtern;
private String name;
private File folder;
private List<WopedProjectPackage> projectPackages;

public WopedProjectFolder(File folder) {
dependenciesIntern = new ArrayList<WopedProjectFolderDependency>();
dependenciesExtern = new ArrayList<String>();
projectPackages = new ArrayList<WopedProjectPackage>();
this.name = folder.getName();
this.folder = folder;
}

public WopedProjectFolderDependency getDependencyToProjectFolder(WopedProjectFolder wpf) {
for (WopedProjectFolderDependency dep : dependenciesIntern) {
if (dep.getDependency().equals(wpf)) {
return dep;
}
}
return null;
}

public File getFolder() {
return this.folder;
}

public List<WopedProjectFolderDependency> getDependenciesIntern() {
return dependenciesIntern;
}

public void addDependenciesIntern(WopedProjectFolderDependency dependencyIntern) {
this.dependenciesIntern.add(dependencyIntern);
}

public List<String> getDependenciesExtern() {
return dependenciesExtern;
}

public void addDependenciesExtern(String dependencyExtern) {
this.dependenciesExtern.add(dependencyExtern);
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String toString() {
return "WopedProjectFolder: " + getName();
}

public List<WopedProjectPackage> getProjectPackages() {
return projectPackages;
}

public void addProjectPackage(WopedProjectPackage projectPackage) {
this.projectPackages.add(projectPackage);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package woped_dependency_visualizer.data;

public class WopedProjectFolderDependency {
private WopedProjectFolder dependency;
private int importCount;

public WopedProjectFolderDependency(WopedProjectFolder dependency) {
this.dependency = dependency;
}

public WopedProjectFolder getDependency() {
return dependency;
}
public void setDependency(WopedProjectFolder dependency) {
this.dependency = dependency;
}
public int getCount() {
return importCount;
}
public void setCount(int count) {
this.importCount = count;
}

public String toString() {
return dependency.getName() + " Count: " + getCount();
}
}
Loading

0 comments on commit 736289d

Please sign in to comment.