use regex::Regex;
pub struct JavaPatterns {
external_patterns: Vec<Regex>,
cache_patterns: Vec<Regex>,
extensions: Vec<String>,
}
impl JavaPatterns {
pub fn new() -> Self {
let external_patterns = vec![
Regex::new(r"\.class$").unwrap(),
Regex::new(r"\.jar$").unwrap(),
Regex::new(r"\.war$").unwrap(),
Regex::new(r"\.ear$").unwrap(),
Regex::new(r"\.aar$").unwrap(),
Regex::new(r"target/").unwrap(),
Regex::new(r"build/").unwrap(),
Regex::new(r"out/").unwrap(),
Regex::new(r"bin/").unwrap(),
Regex::new(r"classes/").unwrap(),
Regex::new(r"\.m2/").unwrap(),
Regex::new(r"\.mvn/").unwrap(),
Regex::new(r"\.gradle/").unwrap(),
Regex::new(r"gradle-app\.setting").unwrap(),
Regex::new(r"gradlew").unwrap(),
Regex::new(r"gradlew\.bat").unwrap(),
Regex::new(r"\.sbt/").unwrap(),
Regex::new(r"project/target/").unwrap(),
Regex::new(r"\.ivy2/").unwrap(),
Regex::new(r"\.lein-").unwrap(),
Regex::new(r"\.nrepl-port").unwrap(),
Regex::new(r"\.idea/").unwrap(),
Regex::new(r"\.eclipse/").unwrap(),
Regex::new(r"\.metadata/").unwrap(),
Regex::new(r"\.settings/").unwrap(),
Regex::new(r"\.project").unwrap(),
Regex::new(r"\.classpath").unwrap(),
Regex::new(r"\.apk$").unwrap(),
Regex::new(r"\.aab$").unwrap(),
Regex::new(r"\.dex$").unwrap(),
Regex::new(r"R\.java$").unwrap(),
Regex::new(r"proguard/").unwrap(),
Regex::new(r"\.jar\.original$").unwrap(),
Regex::new(r"hs_err_pid").unwrap(),
Regex::new(r"core\.\d+").unwrap(),
Regex::new(r"\.so$").unwrap(),
Regex::new(r"\.dll$").unwrap(),
Regex::new(r"\.dylib$").unwrap(),
Regex::new(r"\.jnilib$").unwrap(),
];
let cache_patterns = vec![
Regex::new(r"\.m2/repository").unwrap(),
Regex::new(r"target/maven-").unwrap(),
Regex::new(r"target/surefire-").unwrap(),
Regex::new(r"target/failsafe-").unwrap(),
Regex::new(r"\.gradle/caches").unwrap(),
Regex::new(r"\.gradle/wrapper").unwrap(),
Regex::new(r"\.gradle/daemon").unwrap(),
Regex::new(r"\.gradle/native").unwrap(),
Regex::new(r"build/tmp/").unwrap(),
Regex::new(r"\.sbt/").unwrap(),
Regex::new(r"project/project/").unwrap(),
Regex::new(r"project/target/").unwrap(),
Regex::new(r"\.ivy2/").unwrap(),
Regex::new(r"\.idea/caches/").unwrap(),
Regex::new(r"\.idea/libraries/").unwrap(),
Regex::new(r"\.idea/modules\.xml").unwrap(),
Regex::new(r"\.idea/compiler\.xml").unwrap(),
Regex::new(r"\.idea/jarRepositories\.xml").unwrap(),
Regex::new(r"target/test-").unwrap(),
Regex::new(r"build/test-").unwrap(),
Regex::new(r"\.jacoco").unwrap(),
Regex::new(r"jacoco\.exec").unwrap(),
Regex::new(r"\.spring-boot-devtools-").unwrap(),
Regex::new(r"\.kotlin/").unwrap(),
Regex::new(r"kotlin-build/").unwrap(),
Regex::new(r"\.android/").unwrap(),
Regex::new(r"build/intermediates/").unwrap(),
Regex::new(r"build/generated/").unwrap(),
Regex::new(r"\.tmp").unwrap(),
Regex::new(r"\.temp").unwrap(),
Regex::new(r"\.log").unwrap(),
Regex::new(r"target/site/").unwrap(),
Regex::new(r"build/docs/").unwrap(),
Regex::new(r"\.hprof").unwrap(),
Regex::new(r"\.jfr").unwrap(),
Regex::new(r"\.checkstyle").unwrap(),
Regex::new(r"checkstyle-").unwrap(),
Regex::new(r"\.pmd").unwrap(),
Regex::new(r"pmd\.xml").unwrap(),
Regex::new(r"\.spotbugs").unwrap(),
Regex::new(r"spotbugsXml\.xml").unwrap(),
];
let extensions = vec![
"java".to_string(),
"kt".to_string(), "kts".to_string(),
"scala".to_string(), "sc".to_string(),
"groovy".to_string(), "gvy".to_string(), "gy".to_string(), "gsh".to_string(),
"clj".to_string(), "cljs".to_string(), "cljc".to_string(), "edn".to_string(),
"gradle".to_string(),
"properties".to_string(),
"aidl".to_string(),
"aj".to_string(),
"jy".to_string(),
"jrb".to_string(),
];
Self {
external_patterns,
cache_patterns,
extensions,
}
}
pub fn get_external_patterns(&self) -> &[Regex] {
&self.external_patterns
}
pub fn get_cache_patterns(&self) -> &[Regex] {
&self.cache_patterns
}
pub fn get_extensions(&self) -> &[String] {
&self.extensions
}
pub fn get_script_names() -> Vec<&'static str> {
vec![
"pom.xml", "pom.properties", "settings.xml",
"mvnw", "mvnw.cmd", ".mvn/wrapper/maven-wrapper.properties",
"build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts",
"gradle.properties", "gradlew", "gradlew.bat",
"gradle/wrapper/gradle-wrapper.properties",
"build.sbt", "project/build.properties", "project/plugins.sbt",
"project/Dependencies.scala", "project/Settings.scala",
"project.clj", "profiles.clj", "lein-env",
"build.boot", "boot.properties",
"deps.edn", "bb.edn",
"build.xml", "ant.xml", "build.properties",
"ivy.xml", "ivysettings.xml",
"application.properties", "application.yml", "application.yaml",
"application-dev.properties", "application-prod.properties",
"bootstrap.properties", "bootstrap.yml",
"logback.xml", "logback-spring.xml", "log4j.properties",
"log4j2.xml", "log4j2.yml", "logging.properties",
"testng.xml", "junit-platform.properties",
".project", ".classpath", ".factorypath",
"*.iml", "*.ipr", "*.iws",
".idea/", ".settings/", ".metadata/",
"AndroidManifest.xml", "build.gradle", "gradle.properties",
"proguard-rules.pro", "proguard-android.txt",
"local.properties", "keystore.properties",
"web.xml", "context.xml", "server.xml",
"faces-config.xml", "beans.xml",
"persistence.xml", "hibernate.cfg.xml",
"mybatis-config.xml", "ehcache.xml",
"security.xml", "shiro.ini", "jaas.conf",
".github/workflows/java.yml", ".github/workflows/maven.yml",
".github/workflows/gradle.yml", ".gitlab-ci.yml",
"Jenkinsfile", "azure-pipelines.yml", "bitbucket-pipelines.yml",
"circle.yml", ".circleci/config.yml", ".travis.yml",
"Dockerfile", "docker-compose.yml", "docker-compose.yaml",
".dockerignore", "Dockerfile.jvm", "Dockerfile.native",
"Procfile", "app.yaml", "appengine-web.xml",
"jboss-web.xml", "weblogic.xml", "glassfish-web.xml",
"checkstyle.xml", "pmd.xml", "spotbugs.xml",
"findbugs.xml", "sonar-project.properties",
"README.md", "CHANGELOG.md", "CONTRIBUTING.md",
"javadoc.xml", "overview.html",
"LICENSE", "LICENSE.txt", "COPYING", "NOTICE",
".env", ".env.local", ".env.development", ".env.production",
"docker-compose.yml", "kubernetes.yml", "helm/",
"service.yml", "deployment.yml",
"quarkus.properties", "native-image.properties",
"micronaut.properties", "bootstrap.yml",
"vertx.json", "vertx-options.json",
"jmx.properties", "management.properties",
"orm.xml", "persistence.xml", "hibernate.properties",
"flyway.conf", "liquibase.properties",
"kafka.properties", "consumer.properties", "producer.properties",
"elasticsearch.yml", "log4j2.properties",
"micrometer.properties", "actuator.properties",
"toolchains.xml", "extensions.xml", "lifecycle-mapping-metadata.xml",
"native-image.properties", "reflection-config.json",
"resource-config.json", "proxy-config.json",
"jni-config.json", "serialization-config.json",
]
}
}