Skip to main content

sherlock_io/patterns/
java.rs

1use regex::Regex;
2
3pub struct JavaPatterns {
4    external_patterns: Vec<Regex>,
5    cache_patterns: Vec<Regex>,
6    extensions: Vec<String>,
7}
8
9impl JavaPatterns {
10    pub fn new() -> Self {
11        let external_patterns = vec![
12            // Compiled bytecode
13            Regex::new(r"\.class$").unwrap(),
14            Regex::new(r"\.jar$").unwrap(),
15            Regex::new(r"\.war$").unwrap(),
16            Regex::new(r"\.ear$").unwrap(),
17            Regex::new(r"\.aar$").unwrap(),
18            
19            // Build directories
20            Regex::new(r"target/").unwrap(),
21            Regex::new(r"build/").unwrap(),
22            Regex::new(r"out/").unwrap(),
23            Regex::new(r"bin/").unwrap(),
24            Regex::new(r"classes/").unwrap(),
25            
26            // Maven
27            Regex::new(r"\.m2/").unwrap(),
28            Regex::new(r"\.mvn/").unwrap(),
29            
30            // Gradle
31            Regex::new(r"\.gradle/").unwrap(),
32            Regex::new(r"gradle-app\.setting").unwrap(),
33            Regex::new(r"gradlew").unwrap(),
34            Regex::new(r"gradlew\.bat").unwrap(),
35            
36            // SBT (Scala Build Tool)
37            Regex::new(r"\.sbt/").unwrap(),
38            Regex::new(r"project/target/").unwrap(),
39            
40            // Ivy
41            Regex::new(r"\.ivy2/").unwrap(),
42            
43            // Leiningen (Clojure)
44            Regex::new(r"\.lein-").unwrap(),
45            Regex::new(r"\.nrepl-port").unwrap(),
46            
47            // IDE generated files
48            Regex::new(r"\.idea/").unwrap(),
49            Regex::new(r"\.eclipse/").unwrap(),
50            Regex::new(r"\.metadata/").unwrap(),
51            Regex::new(r"\.settings/").unwrap(),
52            Regex::new(r"\.project").unwrap(),
53            Regex::new(r"\.classpath").unwrap(),
54            
55            // Android
56            Regex::new(r"\.apk$").unwrap(),
57            Regex::new(r"\.aab$").unwrap(),
58            Regex::new(r"\.dex$").unwrap(),
59            Regex::new(r"R\.java$").unwrap(),
60            Regex::new(r"proguard/").unwrap(),
61            
62            // Spring Boot
63            Regex::new(r"\.jar\.original$").unwrap(),
64            
65            // JVM crash dumps
66            Regex::new(r"hs_err_pid").unwrap(),
67            Regex::new(r"core\.\d+").unwrap(),
68            
69            // Native libraries
70            Regex::new(r"\.so$").unwrap(),
71            Regex::new(r"\.dll$").unwrap(),
72            Regex::new(r"\.dylib$").unwrap(),
73            Regex::new(r"\.jnilib$").unwrap(),
74        ];
75
76        let cache_patterns = vec![
77            // Maven caches
78            Regex::new(r"\.m2/repository").unwrap(),
79            Regex::new(r"target/maven-").unwrap(),
80            Regex::new(r"target/surefire-").unwrap(),
81            Regex::new(r"target/failsafe-").unwrap(),
82            
83            // Gradle caches
84            Regex::new(r"\.gradle/caches").unwrap(),
85            Regex::new(r"\.gradle/wrapper").unwrap(),
86            Regex::new(r"\.gradle/daemon").unwrap(),
87            Regex::new(r"\.gradle/native").unwrap(),
88            Regex::new(r"build/tmp/").unwrap(),
89            
90            // SBT caches
91            Regex::new(r"\.sbt/").unwrap(),
92            Regex::new(r"project/project/").unwrap(),
93            Regex::new(r"project/target/").unwrap(),
94            
95            // Ivy caches
96            Regex::new(r"\.ivy2/").unwrap(),
97            
98            // IDE caches
99            Regex::new(r"\.idea/caches/").unwrap(),
100            Regex::new(r"\.idea/libraries/").unwrap(),
101            Regex::new(r"\.idea/modules\.xml").unwrap(),
102            Regex::new(r"\.idea/compiler\.xml").unwrap(),
103            Regex::new(r"\.idea/jarRepositories\.xml").unwrap(),
104            
105            // Testing caches
106            Regex::new(r"target/test-").unwrap(),
107            Regex::new(r"build/test-").unwrap(),
108            Regex::new(r"\.jacoco").unwrap(),
109            Regex::new(r"jacoco\.exec").unwrap(),
110            
111            // Spring Boot DevTools
112            Regex::new(r"\.spring-boot-devtools-").unwrap(),
113            
114            // Kotlin compilation cache
115            Regex::new(r"\.kotlin/").unwrap(),
116            Regex::new(r"kotlin-build/").unwrap(),
117            
118            // Android caches
119            Regex::new(r"\.android/").unwrap(),
120            Regex::new(r"build/intermediates/").unwrap(),
121            Regex::new(r"build/generated/").unwrap(),
122            
123            // Temporary files
124            Regex::new(r"\.tmp").unwrap(),
125            Regex::new(r"\.temp").unwrap(),
126            Regex::new(r"\.log").unwrap(),
127            
128            // Documentation generation
129            Regex::new(r"target/site/").unwrap(),
130            Regex::new(r"build/docs/").unwrap(),
131            
132            // Profiling
133            Regex::new(r"\.hprof").unwrap(),
134            Regex::new(r"\.jfr").unwrap(),
135            
136            // Checkstyle
137            Regex::new(r"\.checkstyle").unwrap(),
138            Regex::new(r"checkstyle-").unwrap(),
139            
140            // PMD
141            Regex::new(r"\.pmd").unwrap(),
142            Regex::new(r"pmd\.xml").unwrap(),
143            
144            // SpotBugs
145            Regex::new(r"\.spotbugs").unwrap(),
146            Regex::new(r"spotbugsXml\.xml").unwrap(),
147        ];
148
149        let extensions = vec![
150            // Java
151            "java".to_string(),
152            
153            // Kotlin
154            "kt".to_string(), "kts".to_string(),
155            
156            // Scala
157            "scala".to_string(), "sc".to_string(),
158            
159            // Groovy
160            "groovy".to_string(), "gvy".to_string(), "gy".to_string(), "gsh".to_string(),
161            
162            // Clojure
163            "clj".to_string(), "cljs".to_string(), "cljc".to_string(), "edn".to_string(),
164            
165            // Build files
166            "gradle".to_string(),
167            
168            // Configuration files
169            "properties".to_string(),
170            
171            // Android
172            "aidl".to_string(),
173            
174            // AspectJ
175            "aj".to_string(),
176            
177            // Jython
178            "jy".to_string(),
179            
180            // JRuby
181            "jrb".to_string(),
182        ];
183
184        Self {
185            external_patterns,
186            cache_patterns,
187            extensions,
188        }
189    }
190
191    pub fn get_external_patterns(&self) -> &[Regex] {
192        &self.external_patterns
193    }
194
195    pub fn get_cache_patterns(&self) -> &[Regex] {
196        &self.cache_patterns
197    }
198
199    pub fn get_extensions(&self) -> &[String] {
200        &self.extensions
201    }
202
203    pub fn get_script_names() -> Vec<&'static str> {
204        vec![
205            // Maven
206            "pom.xml", "pom.properties", "settings.xml",
207            "mvnw", "mvnw.cmd", ".mvn/wrapper/maven-wrapper.properties",
208            
209            // Gradle
210            "build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts",
211            "gradle.properties", "gradlew", "gradlew.bat",
212            "gradle/wrapper/gradle-wrapper.properties",
213            
214            // SBT (Scala)
215            "build.sbt", "project/build.properties", "project/plugins.sbt",
216            "project/Dependencies.scala", "project/Settings.scala",
217            
218            // Leiningen (Clojure)
219            "project.clj", "profiles.clj", "lein-env",
220            
221            // Boot (Clojure)
222            "build.boot", "boot.properties",
223            
224            // Clojure CLI
225            "deps.edn", "bb.edn",
226            
227            // Ant
228            "build.xml", "ant.xml", "build.properties",
229            
230            // Ivy
231            "ivy.xml", "ivysettings.xml",
232            
233            // Spring Boot
234            "application.properties", "application.yml", "application.yaml",
235            "application-dev.properties", "application-prod.properties",
236            "bootstrap.properties", "bootstrap.yml",
237            
238            // Logging
239            "logback.xml", "logback-spring.xml", "log4j.properties",
240            "log4j2.xml", "log4j2.yml", "logging.properties",
241            
242            // Testing
243            "testng.xml", "junit-platform.properties",
244            
245            // IDE configuration
246            ".project", ".classpath", ".factorypath",
247            "*.iml", "*.ipr", "*.iws",
248            ".idea/", ".settings/", ".metadata/",
249            
250            // Android
251            "AndroidManifest.xml", "build.gradle", "gradle.properties",
252            "proguard-rules.pro", "proguard-android.txt",
253            "local.properties", "keystore.properties",
254            
255            // Web applications
256            "web.xml", "context.xml", "server.xml",
257            "faces-config.xml", "beans.xml",
258            
259            // Persistence
260            "persistence.xml", "hibernate.cfg.xml",
261            "mybatis-config.xml", "ehcache.xml",
262            
263            // Security
264            "security.xml", "shiro.ini", "jaas.conf",
265            
266            // CI/CD
267            ".github/workflows/java.yml", ".github/workflows/maven.yml",
268            ".github/workflows/gradle.yml", ".gitlab-ci.yml",
269            "Jenkinsfile", "azure-pipelines.yml", "bitbucket-pipelines.yml",
270            "circle.yml", ".circleci/config.yml", ".travis.yml",
271            
272            // Docker
273            "Dockerfile", "docker-compose.yml", "docker-compose.yaml",
274            ".dockerignore", "Dockerfile.jvm", "Dockerfile.native",
275            
276            // Deployment
277            "Procfile", "app.yaml", "appengine-web.xml",
278            "jboss-web.xml", "weblogic.xml", "glassfish-web.xml",
279            
280            // Code quality
281            "checkstyle.xml", "pmd.xml", "spotbugs.xml",
282            "findbugs.xml", "sonar-project.properties",
283            
284            // Documentation
285            "README.md", "CHANGELOG.md", "CONTRIBUTING.md",
286            "javadoc.xml", "overview.html",
287            
288            // License
289            "LICENSE", "LICENSE.txt", "COPYING", "NOTICE",
290            
291            // Environment
292            ".env", ".env.local", ".env.development", ".env.production",
293            
294            // Microservices
295            "docker-compose.yml", "kubernetes.yml", "helm/",
296            "service.yml", "deployment.yml",
297            
298            // Quarkus
299            "quarkus.properties", "native-image.properties",
300            
301            // Micronaut
302            "micronaut.properties", "bootstrap.yml",
303            
304            // Vert.x
305            "vertx.json", "vertx-options.json",
306            
307            // JMX
308            "jmx.properties", "management.properties",
309            
310            // JPA/Hibernate
311            "orm.xml", "persistence.xml", "hibernate.properties",
312            
313            // Flyway/Liquibase
314            "flyway.conf", "liquibase.properties",
315            
316            // Kafka
317            "kafka.properties", "consumer.properties", "producer.properties",
318            
319            // Elasticsearch
320            "elasticsearch.yml", "log4j2.properties",
321            
322            // Monitoring
323            "micrometer.properties", "actuator.properties",
324            
325            // Build tools configuration
326            "toolchains.xml", "extensions.xml", "lifecycle-mapping-metadata.xml",
327            
328            // Native compilation
329            "native-image.properties", "reflection-config.json",
330            "resource-config.json", "proxy-config.json",
331            "jni-config.json", "serialization-config.json",
332        ]
333    }
334}