diff --git a/src/effectivejava/cli.clj b/src/effectivejava/cli.clj index 177da14..cfbeae5 100644 --- a/src/effectivejava/cli.clj +++ b/src/effectivejava/cli.clj @@ -1,7 +1,6 @@ (ns effectivejava.cli - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) - (:use [effectivejava.javaparser.navigation]) + (:use [effectivejava.model.facade]) + (:use [effectivejava.javaparser.facade]) (:use [effectivejava.operations]) (:use [effectivejava.itemsOnLifecycle]) (:use [effectivejava.utils]) diff --git a/src/effectivejava/find.clj b/src/effectivejava/find.clj index ffec524..1d7c0b4 100644 --- a/src/effectivejava/find.clj +++ b/src/effectivejava/find.clj @@ -1,8 +1,7 @@ (ns effectivejava.find ^{:author "Federico Tomassetti" :doc "This namespace contains methods to find elements in a collection of compilation units"} - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) - (:use [effectivejava.javaparser.navigation]) + (:use [effectivejava.model.facade]) + (:use [effectivejava.javaparser.facade]) (:use [effectivejava.operations]) (:use [effectivejava.itemsOnLifecycle]) (:use [effectivejava.symbol_solver.type_solver]) diff --git a/src/effectivejava/interactive.clj b/src/effectivejava/interactive.clj index 9786a84..c890770 100644 --- a/src/effectivejava/interactive.clj +++ b/src/effectivejava/interactive.clj @@ -1,7 +1,7 @@ (ns effectivejava.interactive (:use [effectivejava.model.protocols] [effectivejava.model.javaparser] - [effectivejava.javaparser.navigation] + [effectivejava.javaparser.facade] [effectivejava.operations] [effectivejava.itemsOnLifecycle] [effectivejava.utils]) diff --git a/src/effectivejava/itemsOnLifecycle.clj b/src/effectivejava/itemsOnLifecycle.clj index 09f45b8..5c97389 100644 --- a/src/effectivejava/itemsOnLifecycle.clj +++ b/src/effectivejava/itemsOnLifecycle.clj @@ -1,9 +1,8 @@ (ns effectivejava.itemsOnLifecycle - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) + (:use [effectivejava.model.facade]) (:use [effectivejava.operations]) (:use [effectivejava.utils]) - (:use [effectivejava.javaparser.navigation]) + (:use [effectivejava.javaparser.facade]) (:use [effectivejava.symbol_solver.funcs]) (:use [effectivejava.symbol_solver.type_solver]) (:import [effectivejava.operations Operation])) diff --git a/src/effectivejava/jarloading.clj b/src/effectivejava/jarloading.clj index 7cffc5c..64e2a16 100644 --- a/src/effectivejava/jarloading.clj +++ b/src/effectivejava/jarloading.clj @@ -1,6 +1,5 @@ (ns effectivejava.jarloading - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) + (:use [effectivejava.model.facade]) (:use [effectivejava.operations]) (:use [effectivejava.utils]) (:import [effectivejava.operations Operation])) diff --git a/src/effectivejava/javaparser/facade.clj b/src/effectivejava/javaparser/facade.clj index f858d2a..70d3d80 100644 --- a/src/effectivejava/javaparser/facade.clj +++ b/src/effectivejava/javaparser/facade.clj @@ -3,5 +3,5 @@ (:import [effectivejava.javaparser.navigation]) (:import [effectivejava.javaparser.parsing])) -(import-vars [effectivejava.javaparser.navigation allTypes allClasses allInterfaces allEnums allClassesForCus cus topLevelTypes getConstructors allConstructorsForCus getMethodDeclaration getNameExprFor getImports getVariableDeclarators getBlockStmts]) +(import-vars [effectivejava.javaparser.navigation allTypes allClasses allInterfaces allEnums allClassesForCus cus topLevelTypes getConstructors allConstructorsForCus getMethodDeclaration getNameExprFor getImports getVariableDeclarators getBlockStmts getCu getClassPackage getMethods nNotPrivateConstructors getParameters getMethodCallExprs]) (import-vars [effectivejava.javaparser.parsing parseFile parseString parseFileByName]) \ No newline at end of file diff --git a/src/effectivejava/javaparser/navigation.clj b/src/effectivejava/javaparser/navigation.clj index f164193..552966c 100644 --- a/src/effectivejava/javaparser/navigation.clj +++ b/src/effectivejava/javaparser/navigation.clj @@ -1,6 +1,5 @@ (ns effectivejava.javaparser.navigation (:use [effectivejava.utils]) - (:use [effectivejava.model.protocols]) (:use [effectivejava.javaparser.parsing])) (import com.github.javaparser.JavaParser) @@ -23,6 +22,26 @@ (import com.github.javaparser.ast.body.VariableDeclarator) (import com.github.javaparser.ast.body.VariableDeclaratorId) + +(defn javaparser-is-class? [node] + (and + (instance? com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node) + (not (.isInterface node)))) + +(defn javaparser-is-interface? [node] + (and + (instance? com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node) + (.isInterface node))) + +(defn javaparser-is-enum? [node] + (instance? EnumDeclaration node)) + +(defn javaparser-is-private? [node] + (ModifierSet/isPrivate (.getModifiers node))) + +(defn javaparser-is-not-private? [node] + (complement javaparser-is-private?)) + ; ============================================ ; Access type declarations ; ============================================ @@ -54,15 +73,15 @@ (defn allClasses "All non-anonymous classes defined in the CU, including annidated types at all levels" [cu] - (filter isClass? (allTypes cu))) + (filter javaparser-is-class? (allTypes cu))) (defn allInterfaces [cu] "All non-anonymous interfaces defined in the CU, including annidated types at all levels" - (filter isInterface? (allTypes cu))) + (filter javaparser-is-interface? (allTypes cu))) (defn allEnums [cu] "All non-anonymous enums defined in the CU, including annidated types at all levels" - (filter isEnum? (allTypes cu))) + (filter javaparser-is-enum? (allTypes cu))) (defn allClassesForCus "Get all classes, at all levels of annidation for all the given compilation units" @@ -92,7 +111,7 @@ (getConstructors cl)))) (defn getNotPrivateConstructors [cl] - (filter isNotPrivate? (getConstructors cl))) + (filter javaparser-is-not-private? (getConstructors cl))) (defn nConstructors [cl] (.size (getConstructors cl))) @@ -173,3 +192,15 @@ (defn getMethodDeclaration [root name] {:pre [root]} (first (filter (fn [ne] (= name (.getName ne))) (getMethodDeclarations root)))) + +(defn getCu [node] + (if (instance? com.github.javaparser.ast.CompilationUnit node) + node + (let [pn (.getParentNode node)] + (if pn + (getCu pn) + (throw (IllegalStateException. "The root is not a CU")))))) + +(defn getClassPackage [classDecl] + (let [cu (getCu classDecl)] + (.getPackage cu))) diff --git a/src/effectivejava/javaparser/parsing.clj b/src/effectivejava/javaparser/parsing.clj index 6ece8c6..3a24eb0 100644 --- a/src/effectivejava/javaparser/parsing.clj +++ b/src/effectivejava/javaparser/parsing.clj @@ -1,6 +1,5 @@ (ns effectivejava.javaparser.parsing - (:use [effectivejava.utils]) - (:use [effectivejava.model.protocols])) + (:use [effectivejava.utils])) (import com.github.javaparser.JavaParser) (import com.github.javaparser.ast.CompilationUnit) diff --git a/src/effectivejava/linter.clj b/src/effectivejava/linter.clj index bcce1f2..a62da17 100644 --- a/src/effectivejava/linter.clj +++ b/src/effectivejava/linter.clj @@ -1,7 +1,6 @@ (ns effectivejava.linter - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) - (:use [effectivejava.javaparser.navigation]) + (:use [effectivejava.model.facade]) + (:use [effectivejava.javaparser.facade]) (:use [effectivejava.operations]) (:use [effectivejava.itemsOnLifecycle]) (:use [effectivejava.utils]) diff --git a/src/effectivejava/model/facade.clj b/src/effectivejava/model/facade.clj new file mode 100644 index 0000000..cb28a8c --- /dev/null +++ b/src/effectivejava/model/facade.clj @@ -0,0 +1,9 @@ +(ns effectivejava.model.facade + (:use [potemkin]) + (:import [effectivejava.model.protocols]) + (:import [effectivejava.model.javaparser]) + (:import [effectivejava.model.reflection]) + (:import [effectivejava.model.javassist])) + +(import-vars [effectivejava.model.protocols isClass? isInterface? isEnum? isNotPrivate? getName getQName packageName allFields fieldName isInDefaultPackage? array? primitive? reference-type? typeName context baseType isPublicOrHasPackageLevelAccess? isStatic? isPrivate? isAbstract? getType localVarRef? fieldRef? parameterRef?]) +(import-vars [effectivejava.model.javaparser getFieldsVariablesTuples]) diff --git a/src/effectivejava/model/javaparser.clj b/src/effectivejava/model/javaparser.clj index 0f497e5..45a478d 100644 --- a/src/effectivejava/model/javaparser.clj +++ b/src/effectivejava/model/javaparser.clj @@ -313,14 +313,3 @@ ; Misc ; ============================================ -(defn getCu [node] - (if (instance? com.github.javaparser.ast.CompilationUnit node) - node - (let [pn (.getParentNode node)] - (if pn - (getCu pn) - (throw (IllegalStateException. "The root is not a CU")))))) - -(defn getClassPackage [classDecl] - (let [cu (getCu classDecl)] - (.getPackage cu))) \ No newline at end of file diff --git a/src/effectivejava/model/reflection.clj b/src/effectivejava/model/reflection.clj index a4633bb..b305870 100644 --- a/src/effectivejava/model/reflection.clj +++ b/src/effectivejava/model/reflection.clj @@ -1,8 +1,7 @@ (ns effectivejava.model.reflection (:use [effectivejava.utils]) (:use [effectivejava.model.protocols]) - (:use [effectivejava.javaparser.parsing]) - (:use [effectivejava.javaparser.navigation])) + (:use [effectivejava.javaparser.facade])) ; Needed only for system classes diff --git a/src/effectivejava/operations.clj b/src/effectivejava/operations.clj index db20eb5..65d7d05 100644 --- a/src/effectivejava/operations.clj +++ b/src/effectivejava/operations.clj @@ -1,6 +1,5 @@ (ns effectivejava.operations - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser])) + (:use [effectivejava.model.facade])) (import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration) (import com.github.javaparser.ast.body.ConstructorDeclaration) diff --git a/src/effectivejava/symbol_solver/facade.clj b/src/effectivejava/symbol_solver/facade.clj new file mode 100644 index 0000000..6813150 --- /dev/null +++ b/src/effectivejava/symbol_solver/facade.clj @@ -0,0 +1,10 @@ +(ns effectivejava.symbol_solver.facade + (:use [potemkin]) + (:import [effectivejava.symbol_solver.funcs]) + (:import [effectivejava.symbol_solver.scope]) + (:import [effectivejava.symbol_solver.type_solver])) + +;(import-vars [effectivejava.model.protocols isClass? isInterface? isEnum? isNotPrivate? getName getQName packageName allFields fieldName isInDefaultPackage? array? primitive? reference-type? typeName context baseType isPublicOrHasPackageLevelAccess? isStatic? isPrivate? isAbstract? getType localVarRef? fieldRef? parameterRef?]) +(import-vars [effectivejava.symbol_solver.scope solveSymbol solveClass solveAmongVariableDeclarator solve-among-parameters]) +(import-vars [effectivejava.symbol_solver.funcs solveNameExpr solveImportStmt solveSuperclass getAllSuperclasses]) +(import-vars [effectivejava.symbol_solver.type_solver typeSolver typeSolverOnJar typeSolverOnList jreTypeSolver]) diff --git a/src/effectivejava/symbol_solver/funcs.clj b/src/effectivejava/symbol_solver/funcs.clj index 17c36e9..cf5245c 100644 --- a/src/effectivejava/symbol_solver/funcs.clj +++ b/src/effectivejava/symbol_solver/funcs.clj @@ -1,8 +1,6 @@ (ns effectivejava.symbol_solver.funcs - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) - (:use [effectivejava.javaparser.navigation]) - (:use [effectivejava.utils]) + (:use [effectivejava.model.facade]) + (:use [effectivejava.javaparser.facade]) (:use [effectivejava.symbol_solver.scope])) (defn solveNameExpr diff --git a/src/effectivejava/symbol_solver/scope.clj b/src/effectivejava/symbol_solver/scope.clj index cceea5d..7d19a84 100644 --- a/src/effectivejava/symbol_solver/scope.clj +++ b/src/effectivejava/symbol_solver/scope.clj @@ -1,7 +1,6 @@ (ns effectivejava.symbol_solver.scope - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) - (:use [effectivejava.javaparser.navigation]) + (:use [effectivejava.model.facade]) + (:use [effectivejava.javaparser.facade]) (:use [effectivejava.operations]) (:use [effectivejava.utils]) (:use [effectivejava.symbol_solver.type_solver]) diff --git a/src/effectivejava/symbol_solver/type_solver.clj b/src/effectivejava/symbol_solver/type_solver.clj index aa6cffe..fb77191 100644 --- a/src/effectivejava/symbol_solver/type_solver.clj +++ b/src/effectivejava/symbol_solver/type_solver.clj @@ -1,6 +1,5 @@ (ns effectivejava.symbol_solver.type_solver - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) + (:use [effectivejava.model.facade]) (:use [effectivejava.operations]) (:use [effectivejava.jarloading]) (:use [effectivejava.utils]) diff --git a/test/effectivejava/test/javaparser/navigation_test.clj b/test/effectivejava/test/javaparser/navigation_test.clj index 743b59b..ef34a1d 100644 --- a/test/effectivejava/test/javaparser/navigation_test.clj +++ b/test/effectivejava/test/javaparser/navigation_test.clj @@ -1,7 +1,6 @@ (ns effectivejava.test.javaparser.navigation_test (:use [effectivejava.itemsOnLifecycle]) - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) + (:use [effectivejava.model.facade]) (:use [effectivejava.javaparser.facade]) (:use [effectivejava.test.helper]) (:use [clojure.test])) diff --git a/test/effectivejava/test/model/javaparser_test.clj b/test/effectivejava/test/model/javaparser_test.clj index ff61351..54ab33f 100644 --- a/test/effectivejava/test/model/javaparser_test.clj +++ b/test/effectivejava/test/model/javaparser_test.clj @@ -1,7 +1,6 @@ (ns effectivejava.test.model.javaparser_test (:use [effectivejava.itemsOnLifecycle]) - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) + (:use [effectivejava.model.facade]) (:use [effectivejava.javaparser.facade]) (:use [effectivejava.test.helper]) (:use [clojure.test])) diff --git a/test/effectivejava/test/symbol_solver/funcs_test.clj b/test/effectivejava/test/symbol_solver/funcs_test.clj index a9a8484..02a4f8d 100644 --- a/test/effectivejava/test/symbol_solver/funcs_test.clj +++ b/test/effectivejava/test/symbol_solver/funcs_test.clj @@ -1,7 +1,6 @@ (ns effectivejava.test.symbol_solver.funcs_test (:use [effectivejava.jarloading]) - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) + (:use [effectivejava.model.facade]) (:use [effectivejava.javaparser.facade]) (:use [effectivejava.symbol_solver.funcs]) (:use [effectivejava.symbol_solver.type_solver]) diff --git a/test/effectivejava/test/symbol_solver/scope_test.clj b/test/effectivejava/test/symbol_solver/scope_test.clj index 4b50cb4..1bb7c2b 100644 --- a/test/effectivejava/test/symbol_solver/scope_test.clj +++ b/test/effectivejava/test/symbol_solver/scope_test.clj @@ -1,7 +1,6 @@ (ns effectivejava.test.symbol_solver.scope_test (:use [effectivejava.jarloading]) - (:use [effectivejava.model.protocols]) - (:use [effectivejava.model.javaparser]) + (:use [effectivejava.model.facade]) (:use [effectivejava.javaparser.facade]) (:use [effectivejava.symbol_solver.funcs]) (:use [effectivejava.symbol_solver.type_solver])