Add config files
Headless CI Tests / build (push) Has been cancelled
Run LinkedWarrantTest / build (push) Has been cancelled
Run Separate Tests / build (push) Has been cancelled
Static Analysis Java25 / build (push) Has been cancelled
Static Analysis / build (push) Has been cancelled
Typescript Check / tsc (push) Has been cancelled
Windows Java25 CI Tests / build (push) Has been cancelled
Windows CI Tests / build (push) Has been cancelled

This commit is contained in:
Serge NOEL
2026-06-17 14:17:22 +02:00
parent efdf1683af
commit 2c45fc244e
41 changed files with 2229 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
<local-check-config name="JMRI" location="checkstyle.xml" type="project" description="">
<additional-data name="protect-config-file" value="false"/>
</local-check-config>
<fileset name="all" enabled="true" check-config-name="JMRI" local="true">
<file-match-pattern match-pattern="." include-pattern="true"/>
</fileset>
<filter name="DerivedFiles" enabled="true"/>
</fileset-config>
+75
View File
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry including="**/*.java" kind="src" output="target/classes" path="java/src">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="java/test">
<attributes>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**/Thumbs.db" kind="src" path="resources"/>
<classpathentry kind="src" path="target/generated-sources/jjtree">
<attributes>
<attribute name="ignore_optional_problems" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="target/generated-sources/javacc">
<attributes>
<attribute name="ignore_optional_problems" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path=".apt_generated">
<attributes>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path=".apt_generated_tests">
<attributes>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
<attributes>
<attribute name="module" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="java/template">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="java/acceptancetest/step_definitions">
<attributes>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="target/generated-sources/annotations">
<attributes>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
<attributes>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry exported="true" kind="lib" path="lib/jlfgr-1_0.jar"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
+38
View File
@@ -0,0 +1,38 @@
version: "2" # CodeClimate API version is a string, not a number
checks:
argument-count:
config:
threshold: 5 # CodeClimate default
complex-logic:
config:
threshold: 5 # CodeClimate default
file-lines:
config:
threshold: 300 # CodeClimate default
method-complexity:
config:
threshold: 20 # AKA Cognitive Complexity. 5 is CodeClimate default
method-count:
config:
threshold: 20 # CodeClimate default
method-lines:
config:
threshold: 25 # CodeClimate default
nested-control-flow:
config:
threshold: 6 # CodeClimate default
return-statements:
config:
threshold: 6 # CodeClimate default
similar-code:
config:
threshold: 40 # language-specific defaults. an override will affect all languages.
# Java default is documented at 40, but seems smaller
exclude_patterns:
- "**/Bundle.java"
identical-code:
config:
threshold: 40 # language-specific defaults. an override will affect all languages.
# Java default is documented at 40, but seems smaller
exclude_patterns:
- "**/Bundle.java"
+75
View File
@@ -0,0 +1,75 @@
# Common Git rules for JMRI/JMRI repository
#
# See also the JMRI/website repository file of the same name
#
# Initially from https://github.com/Danimoth/gitattributes/blob/master/Java.gitattributes
# see also http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/
# Handle line endings automatically for files detected as text
# and leave all files detected as binary untouched.
* text=auto
#
# The above will handle all files NOT found below
#
# These files are text and should be normalized (Convert crlf => lf)
# This list should be kept consistent with the one in the build.xml ant "fixlineends" target
#
*.csh text
*.css text
*.df text
*.dtd text
*.htm text
*.html text
*.java text
*.js text
*.json text
*.jsp text
*.jspf text
*.md text
*.php text
*.pl text
*.plist text
*.policy text
*.prefs text
*.properties text
*.project text
*.py text
*.sh text
*.shtml text
*.svg text
*.tld text
*.txt text
*.xml text
*.xsd text
*.xsl text
COPYING text
Footer text
README text
Header text
Sidebar text
TODO text
.classpath text
# These files are binary and should be left untouched
# (binary is a macro for -text -diff)
*.app binary
*.bat binary
*.class binary
*.dll binary
*.dylib binary
*.ear binary
*.gif binary
*.GIF binary
*.ico binary
*.jar binary
*.jnilib binary
*.jpg binary
*.jpeg binary
*.pdf binary
*.png binary
*.so binary
*.vsd binary
*.war binary
*.wav binary
*.zip binary
+182
View File
@@ -0,0 +1,182 @@
# Copilot Instructions for JMRI
Use this file as the default operating guide for repository work. Trust these instructions first, and only search further if the information here is incomplete or proven wrong.
## What this repository is
- **JMRI** is model railroad software with desktop apps, scripting, web UI assets, and large automated test coverage.
- **Project type:** large, long-lived Java monorepo (plus scripts and web assets).
- **Primary languages:** Java, XML, shell, Python/Jython, TypeScript/JavaScript.
- **Build systems in use:** Ant (`build.xml`) and Maven (`pom.xml`) in combination.
- **Runtime targets:** desktop Java apps (`DecoderPro`, `PanelPro`), tests, tooling scripts.
## Repo scale and structure (high signal map)
- `build.xml` — canonical Ant targets (compile, run apps, tests, lint-ish checks, packaging).
- `pom.xml` — Maven config, profiles, dependency graph, CI-oriented plugin orchestration.
- `.github/workflows/` — required CI definitions you should mirror locally.
- `java/src/` — main Java sources.
- `java/test/` — JUnit tests.
- `java/acceptancetest/` — Cucumber acceptance tests.
- `jython/` — Jython scripts and script-related checks.
- `web/ts/` and `web/js/` — TypeScript source and compiled JS output.
- `scripts/` — helper scripts used by CI and maintainers.
- `checkstyle.xml`, `.spotbugs-check.xml`, `archunit.properties`, `archunit_ignore_patterns.txt` — static/architecture gates.
- `archunit_store/` — frozen architecture baseline (do not expand casually).
## Toolchain and environment (validated locally in this workspace)
Verified on this machine:
- Java: `openjdk 17.0.18`
- Maven: `3.6.3`
- Ant: `1.10.7`
- Node: `v12.22.9`
- Yarn: **not installed** (command missing)
Repository docs indicate:
- Ant requires **>= 1.10.6** (`help/en/html/doc/Technical/Ant.shtml`).
- CI workflows use **JDK 11** and separate jobs for **JDK 25**.
- TypeScript CI uses **Node 20 + yarn install**, then `ant typescript`.
Practical guidance:
- For CI parity, prefer JDK 11 (and sometimes 25) even if local JDK 17 works for many tasks.
- TypeScript checks require `tsc` available in PATH (normally via yarn-installed dependencies).
## Build/test/lint/run command playbook
Run from repo root.
### 1) Bootstrap (always first in a fresh environment)
```bash
ant clean
```
Observed:
- Works and removes `target/`, `temp/`, and `tests.log`.
### 2) Compile/build
Preferred fast compile path used by workflows:
```bash
mvn antrun:run -Danttarget=debug -DskipTests
```
Observed:
- First run may take a long time due to dependency download.
- Re-run succeeded cleanly after dependency bootstrap.
### 3) Focused tests (fast local validation)
```bash
mvn -q -Dtest=jmri.util.FileUtilTest test -Djmri.skipTestsRequiringSeparateRunning=true -Djava.awt.headless=true
```
Observed:
- Passed in this environment.
### 4) Static-analysis subset (high-value pre-PR checks)
```bash
mvn -q antrun:run -Danttarget=tests-warnings-check
./scripts/test_stale_sources.sh
./scripts/test_BOM_and_tab.sh
./scripts/test_default_lcf.sh
```
Observed:
- All commands succeeded here.
- `tests-warnings-check` emitted a Graal-related warning but still returned success.
### 5) TypeScript consistency check (only when touching web/ts or web/js)
CI-equivalent flow:
```bash
yarn install
ant typescript
git diff --exit-code web/js
```
Observed in this environment:
- `ant typescript` **failed** because `tsc` is missing (`Cannot run program "tsc"`).
- `yarn` is not installed locally here, so TypeScript CI parity is currently unavailable without setup.
### 6) Running apps and single-class runs
Ant app launch:
```bash
ant decoderpro
ant panelpro
```
Single-class/test launcher:
```bash
./runtest.csh --help
```
Observed:
- `runtest.csh --help` works and auto-generates `.run.sh` if needed.
## CI pipelines to mirror before opening PR
Mandatory workflow behavior is defined in `.github/workflows/`:
- `windows-test.yml` / `windows-java25-test.yml` — broad test suite on Windows.
- `headless-test.yml` — headless Maven tests on Linux.
- `run-separate.yml` (+ `run-separate-LinkedWarrantTest.yml`) — separately flagged tests on macOS.
- `static-analysis.yml` / `static-analysis-25.yml` — ECJ warnings, SpotBugs, Checkstyle, Javadoc, help scan, architecture tests, and repository scripts.
- `typescript-check.yml` — Node 20 + yarn + `ant typescript` + diff check on `web/js`.
When changes are non-trivial, prioritize local replication in this order:
1. Compile (`debug` target via Maven antrun)
2. Focused tests for changed areas
3. Static-analysis subset scripts
4. TypeScript check if web files changed
## Architecture and quality guardrails
- Architecture tests rely on ArchUnit with store updates disabled by default (`archunit.properties`).
- Avoid updating `archunit_store/` as a workaround; fix violations instead.
- Checkstyle policy is in `checkstyle.xml` (includes line endings and tab checks).
- SpotBugs CI gate uses `.spotbugs-check.xml` suppressions; do not add suppressions without strong justification.
- Keep line endings LF; keep Python files tab-free (enforced by script).
## Common failure patterns and mitigations
- **Huge first Maven run:** expected due downloads; retry after dependencies populate local cache.
- **TypeScript build fails with missing `tsc`:** install Node/Yarn dependencies first (CI uses Node 20 + yarn).
- **Intermittent/flagged tests:** use `./scripts/run_flagged_tests_separately` after test compile (`mvn antrun:run -Danttarget=tests`).
- **Local environment mismatch vs CI JDK:** if odd failures appear on JDK 17, retry on JDK 11 (and optionally 25) to match workflows.
## Important files in repo root (quick reference)
High-priority root files:
- `build.xml`, `pom.xml`
- `checkstyle.xml`, `archunit.properties`, `archunit_ignore_patterns.txt`, `.spotbugs-check.xml`
- `project.properties`, `release.properties`, `jmri.conf`
- `README.md`
- `runtest.csh`
- `tests_lcf.xml`, `tests_jacoco_lcf.xml`, `default_lcf.xml`
## Working style for coding agents
- Prefer **small, surgical changes** in existing patterns over broad refactors.
- Always run at least one compile command and targeted tests relevant to changed code.
- If you cannot run a required check locally (for example TypeScript tooling missing), state that clearly in PR notes and list exact missing preconditions.
- Do not rely on discovery-heavy searching unless this file is insufficient or stale.
+99
View File
@@ -0,0 +1,99 @@
version: 2
mergeable: # see https://github.com/mergeability/mergeable
- when: pull_request.opened, pull_request.assigned, pull_request.unassiged
name: 'Attempt to assign author'
validate:
- do: assignee
min:
count: 1 # Should be assigned to somebody; if not, assign author
pass:
- do: checks
status: 'success'
fail:
- do: assign
assignees: [ '@author' ] # this is not assigning if author not a project member see mergeability/mergeable#359
- do: checks
status: 'success' # Supply the default actions, as if this passed.
payload:
title: 'Author assigned'
- when: pull_request.opened
name: 'Check for release note if help, java/src, jython, resources, xml, or web'
validate:
- do: changeset
or: # passes if no lib files or is a release note
- and:
- must_exclude:
regex: "^help/"
- must_exclude:
regex: "^java/src/"
- must_exclude:
regex: "^jython/"
- must_exclude:
regex: "^resources/"
- must_exclude:
regex: "^web/"
- must_exclude:
regex: "^xml/"
- must_include:
regex: "help/en/releasenotes/current-draft-note.shtml"
pass:
- do: checks
status: 'success'
fail:
- do: comment
payload:
body: >
Thanks for the PR. Please consider adding a release note in the help/en/releasenotes/current-draft-note.shtml file.
- do: checks
status: 'success'
- when: pull_request.opened
name: 'Add label if any .properties file modified'
validate:
- do: changeset
must_exclude:
regex: '\.properties$'
pass:
- do: checks
status: 'success'
fail:
- do: comment
payload:
body: >
Thanks for the PR. It includes changes to properties files, so the 'Needs L10N' label has been added"
- do: labels
labels: [ 'Needs L10N' ]
mode: 'add'
- do: checks
status: 'success'
- when: pull_request.opened
name: 'Add label for documentation changes'
validate:
- do: changeset
must_include:
regex: '^help/en/((?!releasenotes).)*$' # Require at least one help page not in releasenotes
pass:
- do: comment
payload:
body: >
This PR includes files in the help hierarchy so the 'Documentation' label has been added. Other labels may also be applied."
- do: labels
labels: [ 'Documentation' ]
mode: 'add'
- do: checks
status: 'success'
fail:
- do: checks
status: 'success'
- when: pull_request.*, pull_request_review.*
name: 'Approved after last commit, no changes requested'
validate:
- do: approvals
min:
count: 1 # Number of minimum reviewers. In this case 1.
message: 'Must have at least one review.'
block:
changes_requested: true # If true, block all approvals when one of the reviewers gave 'changes_requested' review
message: 'Merge blocked by request for changes.'
#limit:
# teams: ['org/team_slug'] # when the option is present, only the approvals from the team members will count
# owners: true # Optional boolean. When true, the file .github/CODEOWNER is read and only owners approval will count
+28
View File
@@ -0,0 +1,28 @@
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Headless CI Tests
on: [ push, pull_request ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Set up JDK 11
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- name: Cache Maven packages
uses: actions/cache@v5
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Run HeadLessTest with Maven
run: |
# run tests using maven with graphics suppressed
mvn test "-Djmri.skipTestsRequiringSeparateRunning=true" "-Djava.awt.headless=true" "-Dsurefire.printSummary=false"
+87
View File
@@ -0,0 +1,87 @@
name: New PR
permissions:
issues: write
pull-requests: write
on:
pull_request_target:
types: [opened, reopened, labeled, unlabeled, synchronize]
jobs:
check-pr:
runs-on: ubuntu-latest
env:
PR_LABEL: 'New PR'
BLOCK_HOURS: '24' # use e.g. 0.25 for testing
steps:
- name: Check PR age, label if recent, and block merging if labeled
uses: actions/github-script@v8
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const { owner, repo } = context.repo;
const pr = context.payload.pull_request;
const prNumber = pr.number;
const labelName = process.env.PR_LABEL;
const hoursLimit = parseFloat(process.env.BLOCK_HOURS);
// Helper function to get current labels on a PR
async function getPrLabels(owner, repo, prNumber) {
const labelsResp = await github.rest.issues.listLabelsOnIssue({
owner,
repo,
issue_number: prNumber
});
return labelsResp.data.map(l => l.name);
}
// Fetch PR details and labels
const { data: prDetails } = await github.rest.pulls.get({
owner,
repo,
pull_number: prNumber
});
var labelNames = await getPrLabels(owner, repo, prNumber);
// 1. Add or remove label based on age
const now = new Date();
const createdAt = new Date(prDetails.created_at);
const ageInHours = (now - createdAt) / (1000 * 60 * 60);
console.log(`️ PR #${prNumber} is ${ageInHours.toFixed(2)}h old.`);
if (ageInHours <= hoursLimit && !labelNames.includes(labelName)) {
console.log(`🔖 Adding label "${labelName}" to PR #${prNumber} as less than ${hoursLimit}h old.`);
try {
await github.rest.issues.addLabels({
owner,
repo,
issue_number: prNumber,
labels: [labelName]
});
labelNames.push(labelName); // Keep local list in sync
} catch (error) {
console.log(`⚠️ Could not add label "${labelName}": ${error.message}`);
}
} else if (ageInHours > hoursLimit && labelNames.includes(labelName)) {
console.log(`🔖 Removing label "${labelName}", PR age ${ageInHours.toFixed(2)}h.`);
try {
await github.rest.issues.removeLabel({
owner,
repo,
issue_number: prNumber,
name: labelName
});
labelNames = labelNames.filter(e => e !== labelName); // Update local array
} catch (error) {
console.log(`⚠️ Could not remove label "${labelName}": ${error.message}`);
}
}
// 2. Block merging if label still present
if (labelNames.includes(labelName)) {
core.setFailed(`❌ This pull request is a "${labelName}" and cannot be merged until ${hoursLimit} hours after creation.`);
} else {
console.log('✅ PR is mergeable.');
}
@@ -0,0 +1,35 @@
# This workflow will build a Java project with Maven-Ant then run LinkedWarrantTest
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Run LinkedWarrantTest
on: [ push, pull_request ]
# push:
# branches: [ master ]
# pull_request:
# branches: [ master ]
jobs:
build:
runs-on: macos-14
steps:
- uses: actions/checkout@v5
- name: Set up JDK 11
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- name: Cache Maven packages
uses: actions/cache@v5
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build and Run
run: |
# compile code and tests
mvn antrun:run -Danttarget=tests
# run individual tests
./scripts/run_linked_warrant_test jmri/jmrit/logix/LinkedWarrantTest.java
+39
View File
@@ -0,0 +1,39 @@
# This workflow will build a Java project with Maven-Ant then run individually-flagged tests
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Run Separate Tests
on: [ push, pull_request ]
# push:
# branches: [ master ]
# pull_request:
# branches: [ master ]
jobs:
build:
runs-on: macos-14
steps:
- uses: actions/checkout@v5
- name: Set up JDK 11
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- name: Cache Maven packages
uses: actions/cache@v5
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build and Run
run: |
# compile code and tests
mvn antrun:run -Danttarget=tests
# run individual tests
./scripts/run_flagged_tests_separately
- name: Check Line Ends
run: |
# reuses previous compile and tests targets
ant checklineends
+28
View File
@@ -0,0 +1,28 @@
name: Close inactive issues and PRs
on:
schedule:
- cron: "21 1 * * 1"
jobs:
close-issues:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
with:
days-before-issue-stale: 45
days-before-issue-close: 30
stale-issue-label: "Pending closure"
close-issue-label: "Closed due to inactivity"
stale-issue-message: "This issue is stale because it has been open for 45 days with no activity."
close-issue-message: "This issue was closed because it has been inactive for 30 days since being marked as stale."
exempt-all-issue-assignees: true
days-before-pr-stale: 45
days-before-pr-close: 30
stale-pr-label: "Pending closure"
close-pr-label: "Closed due to inactivity"
stale-pr-message: "This PR is stale because it has been open for 45 days with no activity."
close-pr-message: "This PR was closed because it has been inactive for 30 days since being marked as stale."
repo-token: ${{ secrets.GITHUB_TOKEN }}
+51
View File
@@ -0,0 +1,51 @@
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Static Analysis Java25
on: [ push, pull_request ]
# push:
# branches: [ master ]
# pull_request:
# branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 25
- name: Cache Maven packages
uses: actions/cache@v5
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build with Maven
run: |
# compile with ECJ for warnings or errors
mvn antrun:run -Danttarget=tests-warnings-check
# run Spotbugs and Checkstyle
mvn clean test -U -P travis-spotbugs --batch-mode --file=pom.xml
# run Javadoc
mvn javadoc:javadoc -U --batch-mode --file=pom.xml
# check html
mvn exec:exec -P travis-scanhelp --file=pom.xml
# check properties
mvn antrun:run -Danttarget=checkPropertiesFiles
#run Architecture tests
mvn -Dtest=jmri.ArchitectureTest,jmri.TestArchitectureTest,jmri.util.FileLineEndingsCheck test --file=pom.xml
# Test if stale sources exists
./scripts/test_stale_sources.sh
# Test if if there are any files with with multiple UTF-8 Byte-Order-Marks (BOM) or TABs
./scripts/test_BOM_and_tab.sh
# Check that the default_lcf.xml and scripts/default.xml files are in synch.
./scripts/test_default_lcf.sh
# Check XSLT transformations
./scripts/test_decoder_XSLT_transforms.sh
+51
View File
@@ -0,0 +1,51 @@
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Static Analysis
on: [ push, pull_request ]
# push:
# branches: [ master ]
# pull_request:
# branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Set up JDK 11
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- name: Cache Maven packages
uses: actions/cache@v5
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build with Maven
run: |
# compile with ECJ for warnings or errors
mvn antrun:run -Danttarget=tests-warnings-check
# run Spotbugs and Checkstyle
mvn clean test -U -P travis-spotbugs --batch-mode --file=pom.xml
# run Javadoc
mvn javadoc:javadoc -U --batch-mode --file=pom.xml
# check html
mvn exec:exec -P travis-scanhelp --file=pom.xml
# check properties
mvn antrun:run -Danttarget=checkPropertiesFiles
#run Architecture tests
mvn -Dtest=jmri.ArchitectureTest,jmri.TestArchitectureTest,jmri.util.FileLineEndingsCheck test --file=pom.xml
# Test if stale sources exists
./scripts/test_stale_sources.sh
# Test if if there are any files with with multiple UTF-8 Byte-Order-Marks (BOM) or TABs
./scripts/test_BOM_and_tab.sh
# Check that the default_lcf.xml and scripts/default.xml files are in synch.
./scripts/test_default_lcf.sh
# Check XSLT transformations
./scripts/test_decoder_XSLT_transforms.sh
+25
View File
@@ -0,0 +1,25 @@
# This workflow checks that Typescript code has been properly compiled
name: Typescript Check
on:
push:
pull_request:
jobs:
tsc:
name: tsc
runs-on: ubuntu-latest
steps:
# see https://github.com/marketplace/actions/typescript-compiler
- uses: actions/checkout@v5
- name: install node v24
uses: actions/setup-node@v6
with:
node-version: 24
- name: yarn install
run:
yarn install
- name: check changes
run: |
ant typescript
git diff --exit-code web/js
+41
View File
@@ -0,0 +1,41 @@
# This workflow will build a Java project with Maven
# For more information see: https://docs.github.com/en/actions/tutorials/build-and-test-code/java-with-maven
name: Windows Java25 CI Tests
on: [ push, pull_request ]
# push:
# branches: [ master ]
# pull_request:
# branches: [ master ]
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v5
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 25
- name: Change screen resolution
run: Set-DisplayResolution -Width 1600 -Height 1200 -Force
shell: pwsh
- name: Cache Maven packages
uses: actions/cache@v5
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Test with Maven
run: |
# run all tests using maven
mvn test "-Djmri.skipTestsRequiringSeparateRunning=true" "-Dsurefire.printSummary=true"
- name: Upload generated screenshots artifact
uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: screenshots
path: temp/temp/*
+41
View File
@@ -0,0 +1,41 @@
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Windows CI Tests
on: [ push, pull_request ]
# push:
# branches: [ master ]
# pull_request:
# branches: [ master ]
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v5
- name: Set up JDK 11
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- name: Change screen resolution
run: Set-DisplayResolution -Width 1600 -Height 1200 -Force
shell: pwsh
- name: Cache Maven packages
uses: actions/cache@v5
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Test with Maven
run: |
# run all tests using maven
mvn test "-Djmri.skipTestsRequiringSeparateRunning=true" "-Dsurefire.printSummary=false"
- name: Upload generated screenshots artifact
uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: screenshots
path: temp/temp/*
+81
View File
@@ -0,0 +1,81 @@
# build artifacts
jmri.jar
jmri-tests.jar
/dist
java/docs
/target
# test artifacts
junit-results.xml
junit*.properties
findbugs.xml
findbugs.html
spotbugs.xml
spotbugs-check.xml
spotbugs.html
spotbugs-check.html
tests-spotbugs.xml
tests-spotbugs-check.xml
tests-spotbugs.html
tests-spotbugs-check.html
jacoco.exec
jmri-fb.html
coveragereport
tests.log
cucumber-results.xml
cucumber-results.json
failed_files.txt
# runtime artifacts
messages.log*
session.log
# transient artifacts
.ant-targets-build.xml
/java/classes
/java/test-classes
/java/tmp
/java/doc
/java/test-classes/
/scripts/HOWTO-distribution.md.bak
*.class
/temp
.pydevproject
*.swp
*.swo
/lib/cachedir
/xml/XSLT/DTD
/xml/XSLT/properties
/xml/XSLT/xml
/xml/XSLT/pages
.run.sh
hs_err_pid*.log
nohup.out
# private / per-user configuration files
/nbproject
/web/app/nbproject/private
/scripts/config-portable/nbproject/private
/.idea/workspace.xml
/.idea/modules.xml
local.properties
/test
/test/jmri.conf
*.original~
.metadata
RemoteSystemsTempFiles
.idea/codeStyles/Project.xml
.idea/jarRepositories.xml
.idea/libraries/**
.idea/sonarlint/issuestore
.factorypath
# user-installed components
/web/TrainCrew
# CATS source, sometimes present for test
/java/src/cats
# OS junk files
[Tt]humbs.db
*.DS_Store
+3
View File
@@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/qaplug_profiles.xml
Generated
+1
View File
@@ -0,0 +1 @@
JMRI
+57
View File
@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="5">
<component name="CheckStyle-IDEA-Module">
<option name="configuration">
<map />
</option>
</component>
<component name="FacetManager">
<facet type="Python" name="Python">
<configuration sdkName="Python 2.7" />
</facet>
</component>
<component name="NewModuleRootManager">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/java/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/java/test" isTestSource="true" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library" exported="">
<library>
<CLASSES>
<root url="file://$MODULE_DIR$/target/classes" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
<library>
<CLASSES>
<root url="file://$MODULE_DIR$/lib" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="file://$MODULE_DIR$/lib" />
</SOURCES>
<jarDirectory url="file://$MODULE_DIR$/lib" recursive="false" />
<jarDirectory url="file://$MODULE_DIR$/lib" recursive="false" type="SOURCES" />
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="lib" level="project" />
<orderEntry type="library" name="Python 2.7 interpreter library" level="application" />
</component>
</module>
Generated
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="5">
<component name="AntConfiguration">
<buildFile url="file://$PROJECT_DIR$/help/en/build.xml" />
<buildFile url="file://$PROJECT_DIR$/help/fr/build.xml" />
<buildFile url="file://$PROJECT_DIR$/build.xml" />
</component>
</project>
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="5">
<component name="CheckStyle-IDEA">
<option name="configuration">
<map>
<entry key="active-configuration" value="PROJECT_RELATIVE:$PROJECT_DIR$/checkstyle.xml:JMRI" />
<entry key="checkstyle-version" value="8.24" />
<entry key="copy-libs" value="false" />
<entry key="location-0" value="BUNDLED:(bundled):Sun Checks" />
<entry key="location-1" value="BUNDLED:(bundled):Google Checks" />
<entry key="location-2" value="PROJECT_RELATIVE:$PROJECT_DIR$/checkstyle.xml:JMRI" />
<entry key="scan-before-checkin" value="false" />
<entry key="scanscope" value="JavaOnlyWithTests" />
<entry key="suppress-errors" value="false" />
</map>
</option>
</component>
</project>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="5">
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value />
</option>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</component>
</project>
+5
View File
@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>
+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="5">
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Eclipse" />
<bytecodeTargetLevel target="11" />
</component>
</project>
+3
View File
@@ -0,0 +1,3 @@
<component name="CopyrightManager">
<settings default="" />
</component>
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="5">
<component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8">
<file url="PROJECT" charset="UTF-8" />
</component>
</project>
+53
View File
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="5">
<component name="CheckstyleConfigurable">
<option name="suppFilterFilename" value="" />
<option name="suppCommentFilter" value="false" />
<option name="offComment" value="CHECKSTYLE\:OFF" />
<option name="onComment" value="CHECKSTYLE\:ON" />
<option name="checkFormat" value=".*" />
<option name="messageFormat" value="" />
<option name="checkCPP" value="true" />
<option name="checkC" value="true" />
<option name="suppNearbyCommentFilter" value="false" />
<option name="snCommentFormat" value="SUPPRESS CHECKSTYLE (\w+)" />
<option name="snCheckFormat" value="$1" />
<option name="snMessageFormat" value="" />
<option name="snInfluenceFormat" value="0" />
<option name="snCheckCPP" value="true" />
<option name="snCheckC" value="true" />
<option name="pathToUserRulesConfiguration" value="" />
<option name="pathToJarWithRules" value="" />
</component>
<component name="FindBugsConfigurable">
<option name="make" value="true" />
<option name="effort" value="default" />
<option name="priority" value="Medium" />
<option name="excludeFilter" value="" />
</component>
<component name="JavadocGenerationManager">
<option name="OUTPUT_DIRECTORY" />
<option name="OPTION_SCOPE" value="protected" />
<option name="OPTION_HIERARCHY" value="true" />
<option name="OPTION_NAVIGATOR" value="true" />
<option name="OPTION_INDEX" value="true" />
<option name="OPTION_SEPARATE_INDEX" value="true" />
<option name="OPTION_DOCUMENT_TAG_USE" value="true" />
<option name="OPTION_DOCUMENT_TAG_AUTHOR" value="true" />
<option name="OPTION_DOCUMENT_TAG_VERSION" value="true" />
<option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
<option name="OPTION_DEPRECATED_LIST" value="true" />
<option name="OTHER_OPTIONS" />
<option name="HEAP_SIZE" value="2000" />
<option name="LOCALE" />
<option name="OPEN_IN_BROWSER" value="true" />
<option name="OPTION_INCLUDE_LIBS" value="false" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="azul-11" project-jdk-type="JavaSDK" />
<component name="QAPlugAnalysisUIOptions">
<option name="SHOW_STRUCTURE" value="true" />
</component>
<component name="SuppressionsComponent">
<option name="suppComments" value="[]" />
</component>
</project>
+124
View File
@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="5">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
Generated
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="5">
<component name="CommitMessageInspectionProfile">
<profile version="1.0">
<inspection_tool class="SubjectLimit" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
+49
View File
@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>jmri</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.python.pydev.PyDevBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.python.pydev.pythonNature</nature>
</natures>
<filteredResources>
<filter>
<id>1551662639376</id>
<name></name>
<type>10</type>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-name-matches-false-false-nbproject</arguments>
</matcher>
</filter>
<filter>
<id>1599077280157</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>
@@ -0,0 +1,6 @@
eclipse.preferences.version=1
encoding//java/acceptancetest/step_definitions=UTF-8
encoding//java/src=UTF-8
encoding//java/template=UTF-8
encoding//java/test=UTF-8
encoding/<project>=UTF-8
+4
View File
@@ -0,0 +1,4 @@
eclipse.preferences.version=1
org.eclipse.jdt.apt.aptEnabled=true
org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations
org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations
+514
View File
@@ -0,0 +1,514 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
org.eclipse.jdt.core.builder.duplicateResourceTask=warning
org.eclipse.jdt.core.builder.invalidClasspath=abort
org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
org.eclipse.jdt.core.circularClasspath=error
org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
org.eclipse.jdt.core.codeComplete.argumentPrefixes=
org.eclipse.jdt.core.codeComplete.argumentSuffixes=
org.eclipse.jdt.core.codeComplete.fieldPrefixes=
org.eclipse.jdt.core.codeComplete.fieldSuffixes=
org.eclipse.jdt.core.codeComplete.localPrefixes=
org.eclipse.jdt.core.codeComplete.localSuffixes=
org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=enabled
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull
org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.CheckForNull
org.eclipse.jdt.core.compiler.annotation.nullable.secondary=javax.annotation.Nullable
org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=11
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.doc.comment.support=enabled
org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
org.eclipse.jdt.core.compiler.problem.APILeak=warning
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
org.eclipse.jdt.core.compiler.problem.deadCode=ignore
org.eclipse.jdt.core.compiler.problem.deprecation=warning
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=default
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=default
org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=enabled
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=default
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=ignore
org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=ignore
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning
org.eclipse.jdt.core.compiler.problem.nullReference=warning
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=ignore
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.processAnnotations=enabled
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=11
org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
org.eclipse.jdt.core.formatter.align_with_spaces=false
org.eclipse.jdt.core.formatter.alignment_for_additive_operator=48
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_assignment=16
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=48
org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=48
org.eclipse.jdt.core.formatter.alignment_for_compact_if=17
org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=16
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=17
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
org.eclipse.jdt.core.formatter.alignment_for_logical_operator=48
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=48
org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=16
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=48
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=17
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
org.eclipse.jdt.core.formatter.comment.format_header=true
org.eclipse.jdt.core.formatter.comment.format_html=true
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
org.eclipse.jdt.core.formatter.comment.format_line_comments=false
org.eclipse.jdt.core.formatter.comment.format_source_code=true
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
org.eclipse.jdt.core.formatter.comment.line_length=80
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
org.eclipse.jdt.core.formatter.compact_else_if=true
org.eclipse.jdt.core.formatter.continuation_indentation=2
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_empty_lines=false
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
org.eclipse.jdt.core.formatter.indentation.size=4
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert
org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert
org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
org.eclipse.jdt.core.formatter.join_wrapped_lines=false
org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
org.eclipse.jdt.core.formatter.lineSplit=120
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=space
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_on_off_tags=false
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
org.eclipse.jdt.core.formatter.wrap_before_additive_operator=false
org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=false
org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=false
org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
org.eclipse.jdt.core.formatter.wrap_before_logical_operator=false
org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=false
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=false
org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=false
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
org.eclipse.jdt.core.incompatibleJDKLevel=warning
org.eclipse.jdt.core.incompleteClasspath=error
org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
+8
View File
@@ -0,0 +1,8 @@
eclipse.preferences.version=1
formatter_profile=_JMRI
formatter_settings_version=16
org.eclipse.jdt.ui.exception.name=e
org.eclipse.jdt.ui.gettersetter.use.is=true
org.eclipse.jdt.ui.keywordthis=false
org.eclipse.jdt.ui.overrideannotation=true
org.eclipse.jdt.ui.text.custom_code_templates=
+4
View File
@@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
+146
View File
@@ -0,0 +1,146 @@
<FindBugsFilter>
<!-- This first section is used to fail CI if any unexpected bugs appear.
We accept certain types of bugs at certain levels until we get them
all cleared out. -->
<!-- Suppress medium bugs which we _don't_ want to fail CI until we can get them removed -->
<Match>
<Confidence value="2" /> <!-- 3 is low priority, 2 is medium priority, 1 is high priority -->
<Or>
<!-- Temporary disable these until we have decided what to do about them -->
<Bug pattern="CT_CONSTRUCTOR_THROW" /> <!-- 318 cases -->
<Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE" /> <!-- 25 cases -->
<Bug pattern="PA_PUBLIC_PRIMITIVE_ATTRIBUTE" /> <!-- 190 cases -->
<Bug pattern="SING_SINGLETON_GETTER_NOT_SYNCHRONIZED" /> <!-- 6 cases -->
<Bug pattern="SS_SHOULD_BE_STATIC" /> <!-- 211 cases -->
<Bug pattern="UWF_NULL_FIELD" /> <!-- 4 cases -->
<!-- Temporary disable these until we have decided what to do about them -->
<Bug pattern="IS2_INCONSISTENT_SYNC" />
<Bug pattern="DCN_NULLPOINTER_EXCEPTION" /> <!-- 327 cases -->
<Bug pattern="SSD_DO_NOT_USE_INSTANCE_LOCK_ON_SHARED_STATIC_DATA" />
</Or>
</Match>
<!-- Suppress low priority bugs which we _don't_ want to fail CI until we can get them removed -->
<Match>
<Confidence value="3" /> <!-- 3 is low priority, 2 is medium priority, 1 is high priority -->
<Or>
<!-- Temporary disable these until we have decided what to do about them -->
<Bug pattern="AA_ASSERTION_OF_ARGUMENTS" /> <!-- 16 cases -->
<Bug pattern="PA_PUBLIC_MUTABLE_OBJECT_ATTRIBUTE" /> <!-- 93 cases -->
<Bug pattern="URF_UNREAD_FIELD" /> <!-- 112 cases -->
<Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" /> <!-- 50 cases -->
<Bug pattern="UUF_UNUSED_FIELD" /> <!-- 19 cases -->
<Bug pattern="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD" /> <!-- 4 cases -->
<Bug pattern="UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR" /> <!-- 141 cases -->
<Bug pattern="UWF_UNWRITTEN_FIELD" /> <!-- 6 cases -->
<Bug pattern="UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD" /> <!-- 1 case -->
<Bug pattern="UWF_NULL_FIELD" /> <!-- 6 cases -->
<!-- Temporary disable these until we have decided what to do about them -->
<Bug pattern="IS2_INCONSISTENT_SYNC" />
<Bug pattern="NO_NOTIFY_NOT_NOTIFYALL" />
<Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
<Bug pattern="UW_UNCOND_WAIT" />
<Bug pattern="WA_NOT_IN_LOOP" />
</Or>
</Match>
<!-- New reports from SpoBugs 4.9.8 that haven't been addressed (yet) -->
<Match>
<Confidence value="2" /> <!-- 3 is low priority, 2 is medium priority, 1 is high priority -->
<Or>
<!-- Temporary disable these until we have decided what to do about them -->
<Bug pattern="HSM_HIDING_METHOD" /> <!-- 8 cases -->
<Bug pattern="AT_NONATOMIC_64BIT_PRIMITIVE" />
<Bug pattern="NN_NAKED_NOTIFY" />
<Bug pattern="AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE" />
<Bug pattern="AT_STALE_THREAD_WRITE_OF_PRIMITIVE" />
<Bug pattern="US_USELESS_SUPPRESSION_ON_METHOD" />
<Bug pattern="US_USELESS_SUPPRESSION_ON_FIELD" />
<Bug pattern="US_USELESS_SUPPRESSION_ON_CLASS" />
<Bug pattern="SF_SWITCH_FALLTHROUGH" />
</Or>
</Match>
<Match>
<Confidence value="3" /> <!-- 3 is low priority, 2 is medium priority, 1 is high priority -->
<Or>
<!-- Temporary disable these until we have decided what to do about them -->
<Bug pattern="THROWS_METHOD_THROWS_RUNTIMEEXCEPTION" />
<Bug pattern="THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION" />
<Bug pattern="AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD" />
<Bug pattern="OS_OPEN_STREAM_EXCEPTION_PATH" />
</Or>
</Match>
<!-- what follows should be kept in sync with .spotbugs.xml -->
<!-- The following section is used to suppress notifications about
specific bugs and categories that we don't think are
worth the effort -->
<Match>
<!-- Minor clarity issue -->
<Bug pattern="RI_REDUNDANT_INTERFACES" />
</Match>
<Match>
<!-- Design issue -->
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON" />
</Match>
<Match>
<!-- Design issue -->
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS" />
</Match>
<Match>
<!-- Most of these are non-I18N, internal changes of case.
We should find the I18N ones, but it seems excessive
to track down and annotate all the others first thing -->
<Bug pattern="DM_CONVERT_CASE" />
</Match>
<Match>
<!-- Most of these are non-I18N, JMRI-specific file operations.
We should find the I18N ones, but it seems excessive
to track down and annotate all the others first thing.
Suppressed for now to focus attention on
other high-priority items. -->
<Bug pattern="DM_DEFAULT_ENCODING" />
</Match>
<!-- Suppress SLF4J bug which has many false positives due to ?: operator -->
<Match>
<Bug pattern="SLF4J_UNKNOWN_ARRAY" />
</Match>
<!-- Very high-frequency "malicious code" warnings can't yet be checked -->
<!-- but we keep some others to improve code robustness and containment -->
<Match>
<Or>
<Bug pattern="EI_EXPOSE_REP" />
<Bug pattern="EI_EXPOSE_REP2" />
<Bug pattern="MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR" />
<Bug pattern="MS_MUTABLE_ARRAY" />
<Bug pattern="MS_EXPOSE_REP" />
<Bug pattern="MS_SHOULD_BE_FINAL" /><!-- we expose various constants for scripts -->
</Or>
</Match>
<!-- items we're unlikely to restore -->
<Match>
<!-- JMRI does not use serialization, permanently ignore -->
<Bug code="Se,SnVI" />
</Match>
<Match>
<!-- JMRI code is written with static final loggers. -->
<Bug pattern="SLF4J_LOGGER_SHOULD_BE_NON_STATIC" />
</Match>
</FindBugsFilter>
+75
View File
@@ -0,0 +1,75 @@
<FindBugsFilter>
<!-- The following section is used to suppress notifications about
specific bugs and categories that we don't think are
worth the effort -->
<!-- what follows should be kept in sync with .spotbugs-check.xml -->
<!-- The following section is used to suppress notifications about
specific bugs and categories that we don't think are
worth the effort -->
<Match>
<!-- Minor clarity issue -->
<Bug pattern="RI_REDUNDANT_INTERFACES" />
</Match>
<Match>
<!-- Design issue -->
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON" />
</Match>
<Match>
<!-- Design issue -->
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS" />
</Match>
<Match>
<!-- Most of these are non-I18N, internal changes of case.
We should find the I18N ones, but it seems excessive
to track down and annotate all the others first thing -->
<Bug pattern="DM_CONVERT_CASE" />
</Match>
<Match>
<!-- Most of these are non-I18N, JMRI-specific file operations.
We should find the I18N ones, but it seems excessive
to track down and annotate all the others first thing.
Suppressed for now to focus attention on
other high-priority items. -->
<Bug pattern="DM_DEFAULT_ENCODING" />
</Match>
<!-- Suppress SLF4J bug which has many false positives due to ?: operator -->
<Match>
<Bug pattern="SLF4J_UNKNOWN_ARRAY" />
</Match>
<!-- Very high-frequency "malicious code" warnings can't yet be checked -->
<!-- but we keep some others to improve code robustness and containment -->
<Match>
<Or>
<Bug pattern="EI_EXPOSE_REP" />
<Bug pattern="EI_EXPOSE_REP2" />
<Bug pattern="MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR" />
<Bug pattern="MS_MUTABLE_ARRAY" />
<Bug pattern="MS_EXPOSE_REP" />
<Bug pattern="MS_SHOULD_BE_FINAL" /><!-- we expose various constants for scripts -->
</Or>
</Match>
<!-- items we're unlikely to restore -->
<Match>
<!-- JMRI does not use serialization, permanently ignore -->
<Bug code="Se,SnVI" />
</Match>
<Match>
<!-- JMRI code is written with static final loggers. -->
<Bug pattern="SLF4J_LOGGER_SHOULD_BE_NON_STATIC" />
</Match>
</FindBugsFilter>
+81
View File
@@ -0,0 +1,81 @@
language: java
jdk:
- openjdk8
addons:
apt:
update: true
packages:
- graphviz
- libalut0
- pulseaudio
- tidy
firefox: latest
chrome: stable
services:
- xvfb
before_install:
# uncomment next line dump Travis CI environment variables into log
# - set | grep '^[A-Z].*='
# ensure no unwanted defaults are set
# see https://github.com/travis-ci/travis-ci/issues/4613#issuecomment-181845546
- export MAVEN_SKIP_RC="true"
# install graphviz on macOS
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install graphviz ; fi
install:
- mvn verify -DskipTests=true -Dmaven.javadoc.skip=true -B -V
before_script:
# start audio services
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then start-pulseaudio-x11 ; fi
# silence errors from firefox about dbus.
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then dbus-launch ; fi
# install Code Climate test coverage reporter
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-darwin-amd64 > ./cc-test-reporter ; fi
- chmod +x ./cc-test-reporter
- ./cc-test-reporter before-build
script:
- if [[ "$PRINT_SUMMARY" == "false" ]] ; then ./scripts/travis.sh ; else ./scripts/travis.sh ; fi
cache:
directories:
- $HOME/.m2
os:
- linux
dist: bionic
env:
global:
# false to silence most maven output; true to catch tests that do not complete
- PRINT_SUMMARY=true
- MAVEN_OPTS=-Xmx1536m
# see http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#runOrder for valid values
- RUN_ORDER=alphabetical
- CC_TEST_REPORTER_ID=1d1326c4dfaeede878b46588cda440432d1dd6ec605d2c99af7b240ac7db0477
- SKIPINTERMITTENT=true
jobs:
include:
- name: GUI Tests
os: linux
env: HEADLESS=false STATIC=false
- name: Headless Tests
os: linux
env: HEADLESS=true STATIC=false
- name: Intermittently Failing GUI Tests
os: linux
env: HEADLESS=false SKIPINTERMITTENT=false STATIC=true
after_success:
- if [[ "$TRAVIS_OS_NAME" == "linux" && "$HEADLESS" == "false" ]] ; then mvn jacoco:report coveralls:report -U -P travis-coverage ; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" && "$HEADLESS" == "false" ]] ; then JACOCO_SOURCE_PATH=java/src ./cc-test-reporter format-coverage target/site/jacoco/jacoco.xml --input-type jacoco ; ./cc-test-reporter upload-coverage ; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" && "$HEADLESS" == "false" ]] ; then bash <(curl -s https://codecov.io/bash) ; fi
+25
View File
@@ -0,0 +1,25 @@
{
"java.configuration.updateBuildConfiguration": "automatic",
"java.dependency.packagePresentation": "hierarchical",
"java.test.config": [
{
"name": "JMRI",
"workingDirectory": "${workspaceFolder}",
"vmargs": [
"-Duser.language=en",
"-Duser.region=US",
"-Djmri.prefsdir=${workspaceFolder}/temp",
"-Djmri.shutdownmanager=jmri.util.MockShutDownManager"
]
}
],
"java.test.defaultConfig": "JMRI",
"java.format.settings.profile": "JMRI",
"java.format.settings.url": ".settings/org.eclipse.jdt.core.prefs",
"files.exclude": {
"**/.classpath": true,
"**/.project": true,
"**/.settings": true,
"**/.factorypath": true
}
}
+25
View File
@@ -0,0 +1,25 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "verify",
"type": "shell",
"command": "mvn -B verify",
"group": "build"
},
{
"label": "test",
"type": "shell",
"command": "mvn -B test",
"group": "test"
},
{
"label": "compile",
"type": "shell",
"command": "mvn -B test-compile",
"group": "build"
}
]
}