• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.github.javaparser.utils;
2 
3 import java.io.File;
4 import java.net.URISyntaxException;
5 import java.nio.file.Path;
6 import java.nio.file.Paths;
7 
8 import static com.github.javaparser.utils.Utils.capitalize;
9 import static com.github.javaparser.utils.Utils.decapitalize;
10 
11 public final class CodeGenerationUtils {
CodeGenerationUtils()12     private CodeGenerationUtils() {
13     }
14 
getterName(Class<?> type, String name)15     public static String getterName(Class<?> type, String name) {
16         if (name.startsWith("is")) {
17             return name;
18         } else if (type.equals(Boolean.class)) {
19             return "is" + capitalize(name);
20         }
21         return "get" + capitalize(name);
22     }
23 
getterToPropertyName(String getterName)24     public static String getterToPropertyName(String getterName) {
25         if (getterName.startsWith("is")) {
26             return decapitalize(getterName.substring("is".length()));
27         } else if (getterName.startsWith("get")) {
28             return decapitalize(getterName.substring("get".length()));
29         } else if (getterName.startsWith("has")) {
30             return decapitalize(getterName.substring("has".length()));
31         }
32         throw new IllegalArgumentException("Unexpected getterName '" + getterName + "'");
33     }
34 
setterName(String fieldName)35     public static String setterName(String fieldName) {
36         if (fieldName.startsWith("is")) {
37             return "set" + fieldName.substring(2);
38         }
39         return "set" + capitalize(fieldName);
40     }
41 
optionalOf(String text, boolean isOptional)42     public static String optionalOf(String text, boolean isOptional) {
43         if (isOptional) {
44             return f("Optional.of(%s)", text);
45         } else {
46             return "Optional.empty()";
47         }
48     }
49 
50     /**
51      * A shortcut to String.format.
52      */
f(String format, Object... params)53     public static String f(String format, Object... params) {
54         return String.format(format, params);
55     }
56 
57     /**
58      * Calculates the path to a file in a package.
59      *
60      * @param root the root directory in which the package resides
61      * @param pkg the package in which the file resides, like "com.laamella.parser"
62      * @param file the filename of the file in the package.
63      */
fileInPackageAbsolutePath(String root, String pkg, String file)64     public static Path fileInPackageAbsolutePath(String root, String pkg, String file) {
65         pkg = packageToPath(pkg);
66         return Paths.get(root, pkg, file).normalize();
67     }
68 
fileInPackageAbsolutePath(Path root, String pkg, String file)69     public static Path fileInPackageAbsolutePath(Path root, String pkg, String file) {
70         return fileInPackageAbsolutePath(root.toString(), pkg, file);
71     }
72 
73     /**
74      * Turns a package and a file into a relative path. "com.laamella" and "Simple.java" will become
75      * "com/laamella/Simple.java"
76      */
fileInPackageRelativePath(String pkg, String file)77     public static Path fileInPackageRelativePath(String pkg, String file) {
78         pkg = packageToPath(pkg);
79         return Paths.get(pkg, file).normalize();
80     }
81 
82     /**
83      * Converts a package name like "com.laamella.parser" to a path like "com/laamella/parser"
84      */
packageToPath(String pkg)85     public static String packageToPath(String pkg) {
86         return pkg.replace(".", File.separator);
87     }
88 
89     /**
90      * Calculates the path of a package.
91      *
92      * @param root the root directory in which the package resides
93      * @param pkg the package, like "com.laamella.parser"
94      */
packageAbsolutePath(String root, String pkg)95     public static Path packageAbsolutePath(String root, String pkg) {
96         pkg = packageToPath(pkg);
97         return Paths.get(root, pkg).normalize();
98     }
99 
packageAbsolutePath(Path root, String pkg)100     public static Path packageAbsolutePath(Path root, String pkg) {
101         return packageAbsolutePath(root.toString(), pkg);
102     }
103 
104     /**
105      * @return the root directory of the classloader for class c.
106      */
classLoaderRoot(Class<?> c)107     public static Path classLoaderRoot(Class<?> c) {
108         try {
109             return Paths.get(c.getProtectionDomain().getCodeSource().getLocation().toURI());
110         } catch (URISyntaxException e) {
111             throw new AssertionError("Bug in JavaParser, please report.", e);
112         }
113     }
114 
115     /**
116      * Useful for locating source code in your Maven project. Finds the classpath for class c, then backs up out of
117      * "target/(test-)classes", giving the directory containing the pom.xml.
118      */
mavenModuleRoot(Class<?> c)119     public static Path mavenModuleRoot(Class<?> c) {
120         return classLoaderRoot(c).resolve(Paths.get("..", "..")).normalize();
121     }
122 
123     /**
124      * Shortens path "full" by cutting "difference" off the end of it.
125      */
subtractPaths(Path full, Path difference)126     public static Path subtractPaths(Path full, Path difference) {
127         while (difference != null) {
128             if (difference.getFileName().equals(full.getFileName())) {
129                 difference = difference.getParent();
130                 full = full.getParent();
131             } else {
132                 throw new RuntimeException(f("'%s' could not be subtracted from '%s'", difference, full));
133             }
134         }
135         return full;
136     }
137 }
138