function Language.Java {
[ValidatePattern('\.(?>java)$')]
param()
$this = $myInvocation.MyCommand
if (-not $this.Self) {
$languageDefinition = New-Module {
param()
# Java files are named `.java`.
$FilePattern = '\.(?>java)$'
# Java Projects can be pom.xml (Maven) or Gradle
$ProjectFilePattern = '(?>pom.xml|\.gradle$)'
# Java is case sensitive.
$CaseSensitive = $true
# We start off by declaring a number of regular expressions:
$startComment = '/\*' # * Start Comments ```\*```
$endComment = '\*/' # * End Comments ```/*```
$Whitespace = '[\s\n\r]{0,}'
# * IgnoredContext ```String.empty```, ```null```, blank strings and characters
$IgnoredContext = "(?(?>$("null", '""', "''" -join '|'))\s{0,}){0,1}"
$StartPattern = "(?${IgnoredContext}${startComment}\{$Whitespace)"
$EndPattern = "(?$Whitespace\}${endComment}\s{0,}${IgnoredContext})"
# Java's compiler is "javac" (if found)
$Compiler = 'javac'
$LanguageName = 'Java'
Export-ModuleMember -Variable * -Function * -Alias *
} -AsCustomObject
$languageDefinition.pstypenames.clear()
$languageDefinition.pstypenames.add("Language")
$languageDefinition.pstypenames.add("Language.Java")
$this.psobject.properties.add([PSNoteProperty]::new('Self',$languageDefinition))
}
$this.Self
}