├── .config ├── checkstyle │ ├── checkstyle.xml │ └── suppressions.xml └── pmd │ └── java │ └── ruleset.xml ├── .gitattributes ├── .github ├── .lycheeignore ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ ├── enhancement.yml │ └── question.yml ├── labels.yml └── workflows │ ├── broken-links.yml │ ├── check-build.yml │ ├── check-ide-compatibility.yml │ ├── release.yml │ ├── sonar.yml │ ├── sync-labels.yml │ ├── test-deploy.yml │ └── update-from-template.yml ├── .gitignore ├── .idea ├── checkstyle-idea.xml ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── externalDependencies.xml ├── inspectionProfiles │ └── Project_Default.xml └── saveactions_settings.xml ├── .run ├── Run Plugin.run.xml ├── Run Tests.run.xml └── Run Verifications.run.xml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SECURITY.md ├── USAGE.md ├── assets ├── intellij-save-actions-plugin-settings-page-java.png └── intellij-save-actions-plugin-settings-page.png ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── renovate.json5 └── src ├── main ├── java │ └── software │ │ └── xdev │ │ └── saveactions │ │ ├── core │ │ ├── ExecutionMode.java │ │ ├── action │ │ │ ├── BatchAction.java │ │ │ ├── ShortcutAction.java │ │ │ └── ToggleAnAction.java │ │ ├── component │ │ │ └── Engine.java │ │ ├── listener │ │ │ └── SaveActionsDocumentManagerListener.java │ │ └── service │ │ │ ├── SaveActionsService.java │ │ │ ├── SaveActionsServiceManager.java │ │ │ └── impl │ │ │ ├── AbstractSaveActionsService.java │ │ │ ├── SaveActionsDefaultService.java │ │ │ └── SaveActionsJavaService.java │ │ ├── model │ │ ├── Action.java │ │ ├── ActionType.java │ │ ├── Storage.java │ │ ├── StorageFactory.java │ │ └── java │ │ │ ├── EpfAction.java │ │ │ ├── EpfKey.java │ │ │ └── EpfStorage.java │ │ ├── processors │ │ ├── BuildProcessor.java │ │ ├── GlobalProcessor.java │ │ ├── Processor.java │ │ ├── Result.java │ │ ├── ResultCode.java │ │ ├── SaveCommand.java │ │ ├── SaveReadCommand.java │ │ ├── SaveWriteCommand.java │ │ └── java │ │ │ ├── InspectionRunnable.java │ │ │ ├── JavaProcessor.java │ │ │ └── inspection │ │ │ ├── AccessibleVisibilityInspection.java │ │ │ ├── CustomAccessCanBeTightenedInspection.java │ │ │ ├── CustomLocalCanBeFinal.java │ │ │ ├── CustomSerializableHasSerialVersionUidFieldInspection.java │ │ │ ├── SerializableHasSerialVersionUIDFieldInspectionWrapper.java │ │ │ └── style │ │ │ └── CustomUnqualifiedStaticUsageInspection.java │ │ ├── ui │ │ ├── BuildPanel.java │ │ ├── Configuration.java │ │ ├── FileMaskExclusionPanel.java │ │ ├── FileMaskInclusionPanel.java │ │ ├── FileMaskPanel.java │ │ ├── FormattingPanel.java │ │ ├── GeneralPanel.java │ │ └── java │ │ │ ├── IdeSupportPanel.java │ │ │ └── InspectionPanel.java │ │ └── utils │ │ └── Helper.java └── resources │ └── META-INF │ ├── plugin-java.xml │ ├── plugin.xml │ ├── pluginIcon.svg │ └── pluginIcon_dark.svg └── test ├── java ├── junit │ └── framework │ │ ├── AssertionFailedError.java │ │ └── TestCase.java ├── org │ └── junit │ │ ├── Assert.java │ │ ├── AssumptionViolatedException.java │ │ ├── ComparisonFailure.java │ │ ├── rules │ │ ├── ExternalResource.java │ │ └── TestRule.java │ │ └── runners │ │ └── model │ │ └── Statement.java └── software │ └── xdev │ └── saveactions │ ├── core │ ├── action │ │ ├── BatchActionConstants.java │ │ └── ShortcutActionConstants.java │ └── component │ │ ├── PsiFileTest.java │ │ └── SaveActionManagerConstants.java │ ├── integration │ ├── ActionTestFile.java │ ├── GlobalIntegrationTest.java │ ├── IntegrationTest.java │ └── JavaIntegrationTest.java │ ├── junit │ └── JUnit5Utils.java │ ├── model │ └── java │ │ ├── EpfActionTest.java │ │ ├── EpfKeyTest.java │ │ ├── EpfStorageTest.java │ │ └── EpfTestConstants.java │ └── processors │ ├── BuildProcessorTest.java │ ├── GlobalProcessorTest.java │ └── java │ └── JavaProcessorTest.java └── resources └── software └── xdev └── saveactions ├── integration ├── AccessCanBeTightened_KO.java ├── AccessCanBeTightened_OK.java ├── CustomUnqualifiedStaticMemberAccess_KO.java ├── CustomUnqualifiedStaticMemberAccess_OK.java ├── ExplicitTypeCanBeDiamond_KO.java ├── ExplicitTypeCanBeDiamond_OK.java ├── FieldCanBeFinal_KO.java ├── FieldCanBeFinal_OK.java ├── FinalPrivateMethod_KO.java ├── FinalPrivateMethod_OK.java ├── GenerateSerialVersionUID_KO.java ├── GenerateSerialVersionUID_OK.java ├── InspectionsAll_KO.java ├── InspectionsAll_OK.java ├── LocalCanBeFinalExceptImplicit_KO.java ├── LocalCanBeFinalExceptImplicit_OK.java ├── LocalCanBeFinal_KO.java ├── LocalCanBeFinal_OK.java ├── MethodMayBeStatic_KO.java ├── MethodMayBeStatic_OK.java ├── MissingOverrideAnnotation_KO.java ├── MissingOverrideAnnotation_OK.java ├── Reformat_KO_Import_KO.java ├── Reformat_KO_Import_OK.java ├── Reformat_KO_Rearrange_KO.java ├── Reformat_KO_Rearrange_OK.java ├── Reformat_OK_Import_KO.java ├── Reformat_OK_Import_OK.java ├── Reformat_OK_Rearrange_OK.java ├── SingleStatementInBlock_KO.java ├── SingleStatementInBlock_OK.java ├── SuppressAnnotation_KO.java ├── SuppressAnnotation_OK.java ├── UnnecessaryFinalOnLocalVariableOrParameter_KO.java ├── UnnecessaryFinalOnLocalVariableOrParameter_OK.java ├── UnnecessarySemicolon_KO.java ├── UnnecessarySemicolon_OK.java ├── UnnecessaryThis_KO.java ├── UnnecessaryThis_OK.java ├── UnqualifiedFieldAccess_KO.java ├── UnqualifiedFieldAccess_OK.java ├── UnqualifiedMethodAccess_KO.java ├── UnqualifiedMethodAccess_OK.java ├── UnqualifiedStaticMemberAccess_KO.java ├── UnqualifiedStaticMemberAccess_OK.java ├── UseBlocks_KO.java └── UseBlocks_OK.java └── model ├── example0.epf ├── example1.epf └── example2.epf /.config/checkstyle/suppressions.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Force sh files to have LF 5 | *.sh text eol=lf 6 | -------------------------------------------------------------------------------- /.github/.lycheeignore: -------------------------------------------------------------------------------- 1 | # Ignorefile for broken link check 2 | localhost 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: 🐞 Bug 2 | description: Create a bug report for something that is broken 3 | labels: [bug] 4 | type: bug 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thank you for reporting a bug. 10 | 11 | Please fill in as much information as possible about your bug so that we don't have to play "information ping-pong" and can help you immediately. 12 | 13 | - type: checkboxes 14 | id: checklist 15 | attributes: 16 | label: "Checklist" 17 | options: 18 | - label: "I am able to reproduce the bug with the [latest version](https://github.com/xdev-software/intellij-plugin-save-actions/releases/latest)" 19 | required: true 20 | - label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/intellij-plugin-save-actions/issues) or [closed](https://github.com/xdev-software/intellij-plugin-save-actions/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to." 21 | required: true 22 | - label: "I have taken the time to fill in all the required details. I understand that the bug report will be dismissed otherwise." 23 | required: true 24 | - label: "This issue contains only one bug." 25 | required: true 26 | 27 | - type: input 28 | id: app-version 29 | attributes: 30 | label: Affected version 31 | description: "In which version did you encounter the bug?" 32 | placeholder: "x.x.x" 33 | validations: 34 | required: true 35 | 36 | - type: textarea 37 | id: description 38 | attributes: 39 | label: Description of the problem 40 | description: | 41 | Describe as exactly as possible what is not working. 42 | validations: 43 | required: true 44 | 45 | - type: textarea 46 | id: steps-to-reproduce 47 | attributes: 48 | label: Steps to reproduce the bug 49 | description: | 50 | What did you do for the bug to show up? 51 | 52 | If you can't cause the bug to show up again reliably (and hence don't have a proper set of steps to give us), please still try to give as many details as possible on how you think you encountered the bug. 53 | placeholder: | 54 | 1. Use '...' 55 | 2. Do '...' 56 | validations: 57 | required: true 58 | 59 | - type: textarea 60 | id: additional-information 61 | attributes: 62 | label: Additional information 63 | description: | 64 | Any other relevant information you'd like to include 65 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: 💬 Contact support 3 | url: https://xdev.software/en/services/support 4 | about: "If you need support as soon as possible or/and you can't wait for any pull request" 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/enhancement.yml: -------------------------------------------------------------------------------- 1 | name: ✨ Feature/Enhancement 2 | description: Suggest a new feature or enhancement 3 | labels: [enhancement] 4 | type: feature 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thank you for suggesting a new feature/enhancement. 10 | 11 | - type: checkboxes 12 | id: checklist 13 | attributes: 14 | label: "Checklist" 15 | options: 16 | - label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/intellij-plugin-save-actions/issues) or [closed](https://github.com/xdev-software/intellij-plugin-save-actions/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to." 17 | required: true 18 | - label: "I have taken the time to fill in all the required details. I understand that the feature request will be dismissed otherwise." 19 | required: true 20 | - label: "This issue contains only one feature request/enhancement." 21 | required: true 22 | 23 | - type: textarea 24 | id: description 25 | attributes: 26 | label: Description 27 | validations: 28 | required: true 29 | 30 | - type: textarea 31 | id: additional-information 32 | attributes: 33 | label: Additional information 34 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.yml: -------------------------------------------------------------------------------- 1 | name: ❓ Question 2 | description: Ask a question 3 | labels: [question] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thanks for taking the time to fill out this form! 9 | 10 | - type: checkboxes 11 | id: checklist 12 | attributes: 13 | label: "Checklist" 14 | options: 15 | - label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/intellij-plugin-save-actions/issues) or [closed](https://github.com/xdev-software/intellij-plugin-save-actions/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to." 16 | required: true 17 | - label: "I have taken the time to fill in all the required details. I understand that the question will be dismissed otherwise." 18 | required: true 19 | 20 | - type: textarea 21 | id: what-is-the-question 22 | attributes: 23 | label: What is/are your question(s)? 24 | validations: 25 | required: true 26 | 27 | - type: textarea 28 | id: additional-information 29 | attributes: 30 | label: Additional information 31 | description: "Any other information you'd like to include - for instance logs, screenshots, etc." 32 | -------------------------------------------------------------------------------- /.github/labels.yml: -------------------------------------------------------------------------------- 1 | # Default 2 | ## Required for template 3 | - name: bug 4 | description: "Something isn't working" 5 | color: 'd73a4a' 6 | - name: enhancement 7 | description: New feature or request 8 | color: '#a2eeef' 9 | - name: question 10 | description: Information is requested 11 | color: '#d876e3' 12 | ## Others 13 | - name: duplicate 14 | description: This already exists 15 | color: '#cfd3d7' 16 | - name: good first issue 17 | description: Good for newcomers 18 | color: '#7057ff' 19 | - name: help wanted 20 | description: Extra attention is needed 21 | color: '#008672' 22 | - name: invalid 23 | description: "This doesn't seem right" 24 | color: '#e4e669' 25 | # Custom 26 | - name: automated 27 | description: Created by an automation 28 | color: '#000000' 29 | - name: "can't reproduce" 30 | color: '#e95f2c' 31 | - name: customer-requested 32 | description: Was requested by a customer of us 33 | color: '#068374' 34 | - name: stale 35 | color: '#ededed' 36 | - name: waiting-for-response 37 | description: If no response is received after a certain time the issue will be closed 38 | color: '#202020' 39 | -------------------------------------------------------------------------------- /.github/workflows/broken-links.yml: -------------------------------------------------------------------------------- 1 | name: Broken links 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: "23 23 * * 0" 7 | 8 | permissions: 9 | issues: write 10 | 11 | jobs: 12 | link-checker: 13 | runs-on: ubuntu-latest 14 | timeout-minutes: 15 15 | steps: 16 | - uses: actions/checkout@v4 17 | 18 | - run: mv .github/.lycheeignore .lycheeignore 19 | 20 | - name: Link Checker 21 | id: lychee 22 | uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332 # v2 23 | with: 24 | fail: false # Don't fail on broken links, create an issue instead 25 | 26 | - name: Find already existing issue 27 | id: find-issue 28 | run: | 29 | echo "number=$(gh issue list -l 'bug' -l 'automated' -L 1 -S 'in:title \"Link Checker Report\"' -s 'open' --json 'number' --jq '.[].number')" >> $GITHUB_OUTPUT 30 | env: 31 | GH_TOKEN: ${{ github.token }} 32 | 33 | - name: Close issue if everything is fine 34 | if: env.lychee_exit_code == 0 && steps.find-issue.outputs.number != '' 35 | run: gh issue close -r 'not planned' ${{ steps.find-issue.outputs.number }} 36 | env: 37 | GH_TOKEN: ${{ github.token }} 38 | 39 | - name: Create Issue From File 40 | if: env.lychee_exit_code != 0 41 | uses: peter-evans/create-issue-from-file@e8ef132d6df98ed982188e460ebb3b5d4ef3a9cd # v5 42 | with: 43 | issue-number: ${{ steps.find-issue.outputs.number }} 44 | title: Link Checker Report 45 | content-filepath: ./lychee/out.md 46 | labels: bug, automated 47 | -------------------------------------------------------------------------------- /.github/workflows/check-build.yml: -------------------------------------------------------------------------------- 1 | name: Check Build 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: [ develop ] 7 | paths-ignore: 8 | - '**.md' 9 | - '.config/**' 10 | - '.github/**' 11 | - '.idea/**' 12 | - 'assets/**' 13 | pull_request: 14 | branches: [ develop ] 15 | paths-ignore: 16 | - '**.md' 17 | - '.config/**' 18 | - '.github/**' 19 | - '.idea/**' 20 | - 'assets/**' 21 | 22 | jobs: 23 | build: 24 | runs-on: ubuntu-latest 25 | timeout-minutes: 30 26 | 27 | strategy: 28 | matrix: 29 | java: [21] 30 | distribution: [temurin] 31 | 32 | steps: 33 | - uses: actions/checkout@v4 34 | 35 | - name: Set up JDK 36 | uses: actions/setup-java@v4 37 | with: 38 | distribution: ${{ matrix.distribution }} 39 | java-version: ${{ matrix.java }} 40 | cache: 'gradle' 41 | 42 | - name: Build 43 | run: ./gradlew build buildPlugin --info --stacktrace 44 | 45 | - name: Try upload test reports when failure occurs 46 | uses: actions/upload-artifact@v4 47 | if: failure() 48 | with: 49 | name: test-reports-${{ matrix.java }} 50 | path: build/reports/tests/test/** 51 | 52 | - name: Check for uncommited changes 53 | run: | 54 | if [[ "$(git status --porcelain)" != "" ]]; then 55 | echo ---------------------------------------- 56 | echo git status 57 | echo ---------------------------------------- 58 | git status 59 | echo ---------------------------------------- 60 | echo git diff 61 | echo ---------------------------------------- 62 | git diff 63 | echo ---------------------------------------- 64 | echo Troubleshooting 65 | echo ---------------------------------------- 66 | echo "::error::Unstaged changes detected. Locally try running: git clean -ffdx && mvn -B clean package" 67 | exit 1 68 | fi 69 | 70 | - name: Upload plugin files 71 | uses: actions/upload-artifact@v4 72 | with: 73 | name: plugin-files-java-${{ matrix.java }} 74 | path: build/libs/intellij-plugin-save-actions-*.jar 75 | if-no-files-found: error 76 | 77 | checkstyle: 78 | runs-on: ubuntu-latest 79 | if: ${{ github.event_name != 'pull_request' || !startsWith(github.head_ref, 'renovate/') }} 80 | timeout-minutes: 15 81 | 82 | strategy: 83 | matrix: 84 | java: [21] 85 | distribution: [temurin] 86 | 87 | steps: 88 | - uses: actions/checkout@v4 89 | 90 | - name: Set up JDK 91 | uses: actions/setup-java@v4 92 | with: 93 | distribution: ${{ matrix.distribution }} 94 | java-version: ${{ matrix.java }} 95 | cache: 'gradle' 96 | 97 | - name: Run Checkstyle 98 | run: ./gradlew checkstyleMain checkstyleTest -PcheckstyleEnabled --stacktrace 99 | 100 | pmd: 101 | runs-on: ubuntu-latest 102 | if: ${{ github.event_name != 'pull_request' || !startsWith(github.head_ref, 'renovate/') }} 103 | timeout-minutes: 15 104 | 105 | strategy: 106 | matrix: 107 | java: [21] 108 | distribution: [temurin] 109 | 110 | steps: 111 | - uses: actions/checkout@v4 112 | 113 | - name: Set up JDK 114 | uses: actions/setup-java@v4 115 | with: 116 | distribution: ${{ matrix.distribution }} 117 | java-version: ${{ matrix.java }} 118 | cache: 'gradle' 119 | 120 | - name: Run PMD 121 | run: ./gradlew pmdMain pmdTest -PpmdEnabled --stacktrace 122 | 123 | - name: Upload report 124 | if: always() 125 | uses: actions/upload-artifact@v4 126 | with: 127 | name: pmd-report 128 | if-no-files-found: ignore 129 | path: | 130 | build/reports/pmd/*.html 131 | -------------------------------------------------------------------------------- /.github/workflows/check-ide-compatibility.yml: -------------------------------------------------------------------------------- 1 | name: Check IDE Compatibility 2 | 3 | on: 4 | schedule: 5 | - cron: '55 2 * * 1' 6 | workflow_dispatch: 7 | 8 | jobs: 9 | check-ide-compatibility: 10 | runs-on: ubuntu-latest 11 | timeout-minutes: 45 12 | steps: 13 | - name: Free up disk space 14 | run: | 15 | sudo df -h 16 | sudo docker system prune -af || true 17 | sudo rm -rf /usr/share/dotnet \ 18 | /usr/local/.ghcup \ 19 | /usr/local/swift \ 20 | /usr/share/swift \ 21 | /usr/lib/jvm \ 22 | /usr/local/lib/android \ 23 | /usr/lib/google-cloud-sdk \ 24 | /usr/local/share/boost \ 25 | /usr/local/share/powershell \ 26 | /usr/local/share/chromium \ 27 | /usr/local/lib/node_modules \ 28 | /usr/lib/mono \ 29 | /usr/lib/heroku \ 30 | /usr/lib/firefox \ 31 | /usr/share/miniconda \ 32 | /opt/microsoft \ 33 | /opt/chrome \ 34 | /opt/pipx \ 35 | "$AGENT_TOOLSDIRECTORY" || true 36 | sudo df -h 37 | 38 | - uses: actions/checkout@v4 39 | 40 | - name: Set up JDK 41 | uses: actions/setup-java@v4 42 | with: 43 | distribution: 'temurin' 44 | java-version: 21 45 | 46 | - name: Check compatibility 47 | run: ./gradlew verifyPlugin --info --stacktrace 48 | 49 | - name: Upload report 50 | uses: actions/upload-artifact@v4 51 | with: 52 | name: plugin-verifier-reports 53 | path: build/reports/pluginVerifier/** 54 | if-no-files-found: warn 55 | -------------------------------------------------------------------------------- /.github/workflows/sonar.yml: -------------------------------------------------------------------------------- 1 | name: Sonar 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: [ develop ] 7 | paths-ignore: 8 | - '**.md' 9 | - '.config/**' 10 | - '.github/**' 11 | - '.idea/**' 12 | - 'assets/**' 13 | pull_request: 14 | branches: [ develop ] 15 | paths-ignore: 16 | - '**.md' 17 | - '.config/**' 18 | - '.github/**' 19 | - '.idea/**' 20 | - 'assets/**' 21 | 22 | env: 23 | SONARCLOUD_ORG: ${{ github.event.organization.login }} 24 | SONARCLOUD_HOST: https://sonarcloud.io 25 | 26 | jobs: 27 | token-check: 28 | runs-on: ubuntu-latest 29 | if: ${{ !(github.event_name == 'pull_request' && startsWith(github.head_ref, 'renovate/')) }} 30 | timeout-minutes: 5 31 | outputs: 32 | hasToken: ${{ steps.check-token.outputs.has }} 33 | steps: 34 | - id: check-token 35 | run: | 36 | [ -z $SONAR_TOKEN ] && echo "has=false" || echo "has=true" >> "$GITHUB_OUTPUT" 37 | env: 38 | SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} 39 | 40 | sonar-scan: 41 | runs-on: ubuntu-latest 42 | needs: token-check 43 | if: ${{ needs.token-check.outputs.hasToken }} 44 | timeout-minutes: 30 45 | steps: 46 | - uses: actions/checkout@v4 47 | with: 48 | fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis 49 | 50 | - name: Set up JDK 51 | uses: actions/setup-java@v4 52 | with: 53 | distribution: 'temurin' 54 | java-version: 21 55 | 56 | - name: Cache SonarCloud packages 57 | uses: actions/cache@v4 58 | with: 59 | path: ~/.sonar/cache 60 | key: ${{ runner.os }}-sonar 61 | restore-keys: ${{ runner.os }}-sonar 62 | 63 | - name: Cache Gradle packages 64 | uses: actions/cache@v4 65 | with: 66 | path: ~/.gradle/caches 67 | key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} 68 | restore-keys: ${{ runner.os }}-gradle 69 | 70 | - name: Build 71 | run: | 72 | ./gradlew build sonar -x test --info --stacktrace \ 73 | -Dsonar.projectKey=${{ env.SONARCLOUD_ORG }}_${{ github.event.repository.name }} \ 74 | -Dsonar.organization=${{ env.SONARCLOUD_ORG }} \ 75 | -Dsonar.host.url=${{ env.SONARCLOUD_HOST }} 76 | env: 77 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any 78 | SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} 79 | -------------------------------------------------------------------------------- /.github/workflows/sync-labels.yml: -------------------------------------------------------------------------------- 1 | name: Sync labels 2 | 3 | on: 4 | push: 5 | branches: develop 6 | paths: 7 | - .github/labels.yml 8 | 9 | workflow_dispatch: 10 | 11 | permissions: 12 | issues: write 13 | 14 | jobs: 15 | labels: 16 | runs-on: ubuntu-latest 17 | timeout-minutes: 10 18 | steps: 19 | - uses: actions/checkout@v4 20 | with: 21 | sparse-checkout: .github/labels.yml 22 | 23 | - uses: EndBug/label-sync@52074158190acb45f3077f9099fea818aa43f97a # v2 24 | with: 25 | config-file: .github/labels.yml 26 | -------------------------------------------------------------------------------- /.github/workflows/test-deploy.yml: -------------------------------------------------------------------------------- 1 | name: Test Deployment 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | publish: 8 | runs-on: ubuntu-latest 9 | timeout-minutes: 60 10 | steps: 11 | - uses: actions/checkout@v4 12 | 13 | - name: Set up JDK 14 | uses: actions/setup-java@v4 15 | with: 16 | distribution: 'temurin' 17 | java-version: 21 18 | cache: 'gradle' 19 | 20 | - name: Update/Generify version 21 | run: | 22 | originalVersion=$(grep -Po 'pluginVersion=\K.*' gradle.properties) 23 | newVersion="$(echo $originalVersion | cut -d '-' -f1).$( date -u '+%Y%m%d%H%M%S')-SNAPSHOT" 24 | echo "New version: $newVersion" 25 | sed -i "s/pluginVersion=$originalVersion/pluginVersion=$newVersion/" gradle.properties 26 | 27 | echo "Contents of gradle.properties" 28 | cat gradle.properties 29 | 30 | - name: Publish Plugin 31 | env: 32 | PUBLISH_TOKEN: ${{ secrets.JETBRAINS_MARKETPLACE_PUBLISH_TOKEN }} 33 | CERTIFICATE_CHAIN: ${{ secrets.JETBRAINS_MARKETPLACE_CERTIFICATE_CHAIN }} 34 | PRIVATE_KEY: ${{ secrets.JETBRAINS_MARKETPLACE_PRIVATE_KEY }} 35 | PRIVATE_KEY_PASSWORD: ${{ secrets.JETBRAINS_MARKETPLACE_PRIVATE_KEY_PASSWORD }} 36 | run: ./gradlew publishPlugin --info --stacktrace 37 | 38 | - name: Upload plugin files 39 | uses: actions/upload-artifact@v4 40 | with: 41 | name: plugin-files-java-${{ matrix.java }} 42 | path: build/distributions/* 43 | if-no-files-found: error 44 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Intellij 2 | .idea/* 3 | *.iml 4 | *.ipr 5 | *.iws 6 | 7 | # Generated java classes 8 | out 9 | classes 10 | 11 | # Vim 12 | *.swp 13 | 14 | # Plugins 15 | *.idea/checkstyle-idea.xml 16 | 17 | # Gradle 18 | .gradle/ 19 | build/ 20 | 21 | # IntelliJ Platform Plugin 22 | .intellijPlatform 23 | 24 | 25 | # Some files are user/installation independent and are used for configuring the IDE 26 | # See also https://stackoverflow.com/a/35279076 27 | 28 | .idea/* 29 | !.idea/saveactions_settings.xml 30 | !.idea/checkstyle-idea.xml 31 | !.idea/externalDependencies.xml 32 | 33 | !.idea/inspectionProfiles/ 34 | .idea/inspectionProfiles/* 35 | !.idea/inspectionProfiles/Project_Default.xml 36 | 37 | !.idea/codeStyles/ 38 | .idea/codeStyles/* 39 | !.idea/codeStyles/codeStyleConfig.xml 40 | !.idea/codeStyles/Project.xml 41 | -------------------------------------------------------------------------------- /.idea/checkstyle-idea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10.21.0 5 | JavaOnlyWithTests 6 | true 7 | true 8 | 12 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 99 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/externalDependencies.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/saveactions_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 26 | 27 | -------------------------------------------------------------------------------- /.run/Run Plugin.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 17 | 19 | true 20 | true 21 | false 22 | 23 | 24 | -------------------------------------------------------------------------------- /.run/Run Tests.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 17 | 19 | true 20 | true 21 | false 22 | false 23 | 24 | 25 | -------------------------------------------------------------------------------- /.run/Run Verifications.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 17 | 19 | true 20 | true 21 | false 22 | false 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.4.0 2 | * Dropped support for IntelliJ versions < 2024.3 3 | * This is required to fix a few deprecations and remove some workarounds #171 4 | 5 | ## 1.3.1 6 | * Fix IDE hang when projects with different "Process files asynchronously" are open #160 7 | 8 | ## 1.3.0 9 | * Make it possible to run processors asynchronously #130 10 | * This way the UI should be more responsive when processing a lot of files 11 | * May break processors that interact with the UI e.g. when showing dialogs 12 | * Don't process files during project load #145 13 | * This should cause less race conditions due to partial project initialization 14 | * Only active on IntelliJ < 2024.3 as [the underlying problem was fixed in IntelliJ 2024.3](https://github.com/JetBrains/intellij-community/commit/765caa71175d0a67a54836cf840fae829da590d9) 15 | 16 | ## 1.2.4 17 | * Dropped support for IntelliJ versions < 2024.2 18 | * Removed deprecated code that was only required for older IDE versions 19 | 20 | ## 1.2.3 21 | * Fix "run on multiple files" not working when the file is not a text file #129 22 | 23 | ## 1.2.2 24 | * Workaround scaling problem on "New UI" [#26](https://github.com/xdev-software/intellij-plugin-template/issues/26) 25 | 26 | ## 1.2.1 27 | * Fixed ``ToggleAnAction must override getActionUpdateThread`` warning inside IntelliJ 2024+ 28 | * Dropped support for IntelliJ versions < 2023.2 29 | 30 | ## 1.2.0 31 | * Run GlobalProcessors (e.g. Reformat) last so that code is formatted correctly #90 32 | * Dropped support for IntelliJ versions < 2023 33 | 34 | ## 1.1.1 35 | * Shortened plugin name - new name: "Save Actions X" 36 | * Updated assets 37 | 38 | ## 1.1.0 39 | * Removed "Remove unused suppress warning annotation" 40 | * This option never worked #64 41 | * Allows usage of the plugin with IntelliJ IDEA 2024+ #63 42 | * If you used this option you should remove the line ``