Apache Groovy

0 programs Taxonomy-only · no LLM program Evidence Report issue View issues
Aliases: —

Sources mentioning this language

2 sources · pl_id: pl/apache-groovy
WikipediaWikidata · Q504453

Wikipedia infobox

Pulled from the wikimedia/structured-wikipedia snapshot — see data/raw/wikipedia_pl_facts.*.jsonl and pl_fact.csv for the long-table provenance.

Paradigmsmulti-paradigm: object-oriented · imperative · functional · aspect-oriented · scripting
Typingdynamic, static, strong, duck
Designed byPaul King (PMC Chair) Jochen Theodorou (Tech Lead) Guillaume Laforge Cedric Champeau Daniel Sun Eric Milles · James Strachan
First appeared2003
Influenced byJava · Python · Ruby · Smalltalk · Perl
LicenseApache 2.0
Homepagehttps://groovy-lang.org

Extensions claimed by this language

4 claims. Each row is one upstream assertion with its strength. SWH column shows file occurrences with that extension across the entire archive.
ExtensionSourceStrengthSWH
.groovywikidataprimary7.8M files
.gshwikidataprimary3.6K files
.gvywikidataprimary1.8K files
.gywikidataprimary2.7K files

Programs

No programs recorded for this language yet.

Real programs from Software Heritage

1 sample mined from derived_datasets/<date>/contents/*.parquet, byte-verified against the SWH archive. Citation-grade qualified SWHIDs preserved.
WithXmlActionSpec.groovy · 8852 B · ext .groovy · seen 372× in SWH
via fallback
swh:1:cnt:f77b9535dfe7ded039134a6d7924ab99d30969c3;origin=https://github.com/fakeNetflix/indeedeng-repo-job-dsl-plugin;anchor=swh:1:rev:e60d9121cbb2e0b0497806c3109dc09f1a47d3b1;path=/job-dsl-core/src/test/groovy/javaposse/jobdsl/dsl/WithXmlActionSpec.groovy
Open in SWH · Raw bytes (SWH) · GitHub raw
Show source
package javaposse.jobdsl.dsl

import spock.lang.Specification

import java.util.logging.Handler
import java.util.logging.Level
import java.util.logging.LogManager
import java.util.logging.Logger

import static org.junit.Assert.assertNotNull
import static org.junit.Assert.assertTrue

/**
 * Work through the additional functionality we're offer over node
 */
class WithXmlActionSpec extends Specification {
    static final String XML = '''<?xml version="1.0" encoding="UTF-8"?>
<project>
  <actions/>
  <description></description>
  <keepDependencies>false</keepDependencies>
  <properties/>
  <scm class="hudson.scm.NullSCM"/>
  <canRoam>true</canRoam>
  <disabled>false</disabled>
  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
  <triggers class="vector"/>
  <concurrentBuild>false</concurrentBuild>
  <builders>
      <builder/>
  </builders>
  <publishers/>
  <buildWrappers/>
</project>
'''

    final Node root = new XmlParser().parse(new StringReader(XML))

    def setup() {
        Logger.getLogger('javaposse.jobdsl').setLevel(Level.ALL)

        // Our only choice to allow lower logging is to allow it for everyone since JUL puts the handler in one place
        // and sets a horrible default
        LogManager.logManager.getLogger('').handlers.each { Handler handler ->
            handler.setLevel(Level.ALL)
        }
    }

    def execute(Closure closure) {
        def withXmlAction = new WithXmlAction(closure)
        withXmlAction.execute(root)
    }

    def 'lookup with existent nodes'() {
        when:
        def builders = 'build'
        execute { project ->
            assertNotNull(project)
            assertTrue(project instanceof Node)

            project / builders / builder
        }

        then:
        noExceptionThrown()
    }

    def 'lookup with non-existent nodes'() {
        when:
        execute { project ->
            project / builders / 'hudson.security.AuthorizationMatrixProperty'
        }

        then:
        noExceptionThrown()
    }

    def 'add single child in left shift closure'() {
        when:
        execute { project ->
            def matrix = project / builders / 'hudson.security.AuthorizationMatrixProperty'
            matrix << permission('hudson.model.Item.Delete:jryan')
        }

        then:
        def builders = root.builders[0]
        builders.children().size() == 2
        NodeList matrixList = builders.'hudson.security.AuthorizationMatrixProperty'
        matrixList.size() == 1
        Node matrix = matrixList[0]
        NodeList permissions = matrix.permission
        permissions.size() == 1
        permissions[0].text() == 'hudson.model.Item.Delete:jryan'
    }

    def 'call Node multiple times to append'() {
        when:
        execute { project ->
            def matrix = project / builders / 'hudson.security.AuthorizationMatrixProperty'
            matrix << permission('hudson.model.Item.Delete:jryan')
            matrix << permission('hudson.model.Item.Configure:jryan')
        }

        then:
        NodeList permissions = root.builders[0].'hudson.security.AuthorizationMatrixProperty'[0].permission
        permissions.size() == 2
        permissions[0].text() == 'hudson.model.Item.Delete:jryan'
        permissions[1].text() == 'hudson.model.Item.Configure:jryan'
    }

    def 'use chained left shift'() {
        when:
        execute { project ->
            def matrix = project / builders / 'hudson.security.AuthorizationMatrixProperty'
            matrix << {
                permission('hudson.model.Item.Configure:jryan')
            } << {
                permission('hudson.model.Item.Configure:jack')
            }
        }

        then:
        NodeList permissions = root.builders[0].'hudson.security.AuthorizationMatrixProperty'[0].permission
        permissions.size() == 2
        permissions[0].text() == 'hudson.model.Item.Configure:jryan'
        permissions[1].text() == 'hudson.model.Item.Configure:jack'
    }

    def 'left shift chained with non-closures'() {
        when:
        execute { project ->
            def matrix = project / builders / 'hudson.security.AuthorizationMatrixProperty'
            matrix << permission('hudson.model.Item.Configure:jryan') << permission('hudson.model.Item.Configure:jack')
        }

        then:
        NodeList permissions = root.builders[0].'hudson.security.AuthorizationMatrixProperty'[0].permission
        permissions.size() == 2
        permissions[0].text() == 'hudson.model.Item.Configure:jryan'
        permissions[1].text() == 'hudson.model.Item.Configure:jack'
    }

    def 'left shift with multiple children in closure'() {
        when:
        execute { project ->
            def matrix = project / builders / 'hudson.security.AuthorizationMatrixProperty'
            matrix << {
                permission('hudson.model.Item.Configure:jill')
                permission('hudson.model.Item.Configure:jack')
            }
        }

        then:
        NodeList permissions = root.builders[0].'hudson.security.AuthorizationMatrixProperty'[0].permission
        permissions.size() == 2
        permissions[0].text() == 'hudson.model.Item.Configure:jill'
        permissions[1].text() == 'hudson.model.Item.Configure:jack'
    }

    def 'left shift with children having children'() {
        when:
        execute { project ->
            def matrix = project / builders / 'hudson.security.AuthorizationMatrixProperty'
            matrix << {
                permission('hudson.model.Item.Configure:jill') {
                    header('My Perm')
                }
                permission('hudson.model.Item.Configure:jack')
            }
        }

        then:
        NodeList permissions = root.builders[0].'hudson.security.AuthorizationMatrixProperty'[0].permission
        permissions.size() == 2
        permissions[0].text() == 'hudson.model.Item.Configure:jill'
        permissions[0].header.size() == 1
        permissions[0].header[0].text() == 'My Perm'
        permissions[1].text() == 'hudson.model.Item.Configure:jack'
    }

    def 'children with children without closure'() {
        when:
        execute { project ->
            def matrix = project / builders / 'hudson.security.AuthorizationMatrixProperty'
            matrix <<
                    permissions {
                        header('My document')
                    }
        }

        then:
        NodeList permissions = root.builders[0].'hudson.security.AuthorizationMatrixProperty'[0].permissions
        permissions.size() == 1
        permissions[0].header.size() == 1
        permissions[0].header[0].text() == 'My document'
    }

    void confirmBrowserUrl(Node scmNode) {
        assert scmNode.browser.size() == 1
        assert scmNode.browser[0].attributes()['class'] == 'hudson.plugins.git.browser.GithubWeb'
        assert scmNode.browser[0].url.size() == 1
        assert scmNode.browser[0].url[0].value() == 'https://github.com/foo/bar'
    }

    def 'Setup git browser node'() {
        when:
        execute { project ->
            // Find irrelevant of existing attributes
            def browserNode = project / scm / browser

            // Overwrite old value
            browserNode.attributes()['class'] = 'hudson.plugins.git.browser.GithubWeb'

            browserNode / url << 'https://github.com/foo/bar'
        }

        then:
        confirmBrowserUrl(root.scm[0])
    }

    def 'configuring nodes with attributes purely nested'() {
        when:
        execute {
            it / scm / browser(class: 'hudson.plugins.git.browser.GithubWeb') / url('https://github.com/foo/bar')
        }

        then:
        confirmBrowserUrl(root.scm[0])

        when: // Do it again with the same values, but hopefully the same thing
        execute {
            it / scm / browser(class: 'hudson.plugins.git.browser.GithubWeb') / url << 'https://github.com/foo/bar'
        }

        then:
        confirmBrowserUrl(root.scm[0])

        when: // Do it again with different values, but hopefully the same thing
        execute {
            it / scm / browser(class: 'hudson.plugins.git.browser.GitoriusWeb') / url << 'https://github.com/foo/baz'
        }

        then:
        def scmNode = root.scm[0]
        assert scmNode.browser.size() == 2
        assert scmNode.browser[0].attributes()['class'] == 'hudson.plugins.git.browser.GithubWeb'
        assert scmNode.browser[0].url.size() == 1
        assert scmNode.browser[0].url[0].value() == 'https://github.com/foo/bar'
        assert scmNode.browser[1].attributes()['class'] == 'hudson.plugins.git.browser.GitoriusWeb'
        assert scmNode.browser[1].url.size() == 1
        assert scmNode.browser[1].url[0].value() == 'https://github.com/foo/baz'

    }
}

Contribute — propose a file extension

Tell us where to find evidence about Apache Groovy (mapped to pl/apache-groovy). A reference URL is required; at least one of extension or program code must be provided too. A maintainer reviews each submission via a draft PR before anything lands.
Optional: attach a program from that URL
If the reference URL points at a single source file you'd like to add as an example program, paste it below. The workflow will write it under languages/Apache_Groovy/programs/<sha>/. Keep under ~200 lines.
(or open the pre-filled issue directly)
← apache Apache ORC →