-
Notifications
You must be signed in to change notification settings - Fork 31
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Code Actions for Managed Dependency Version override
This PR adds Maven project validation for managed dependency version element values override/duplication Also this adds Code Actions for the removal of the duplicating/overriding dependency version elements and according JUnit test cases
- Loading branch information
Showing
10 changed files
with
270 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
73 changes: 73 additions & 0 deletions
73
...emminx/extensions/maven/participants/codeaction/MavenManagedVersionRemovalCodeAction.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2023 Red Hat Inc. and others. | ||
* This program and the accompanying materials are made | ||
* available under the terms of the Eclipse Public License 2.0 | ||
* which is available at https://www.eclipse.org/legal/epl-2.0/ | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
*******************************************************************************/ | ||
package org.eclipse.lemminx.extensions.maven.participants.codeaction; | ||
|
||
import java.util.List; | ||
import java.util.logging.Level; | ||
import java.util.logging.Logger; | ||
|
||
import org.eclipse.lemminx.commons.BadLocationException; | ||
import org.eclipse.lemminx.commons.CodeActionFactory; | ||
import org.eclipse.lemminx.commons.TextDocument; | ||
import org.eclipse.lemminx.dom.DOMDocument; | ||
import org.eclipse.lemminx.dom.DOMNode; | ||
import org.eclipse.lemminx.extensions.maven.MavenSyntaxErrorCode; | ||
import org.eclipse.lemminx.extensions.maven.utils.ParticipantUtils; | ||
import org.eclipse.lemminx.services.extensions.codeaction.ICodeActionParticipant; | ||
import org.eclipse.lemminx.services.extensions.codeaction.ICodeActionRequest; | ||
import org.eclipse.lsp4j.CodeAction; | ||
import org.eclipse.lsp4j.Diagnostic; | ||
import org.eclipse.lsp4j.Range; | ||
import org.eclipse.lsp4j.jsonrpc.CancelChecker; | ||
|
||
public class MavenManagedVersionRemovalCodeAction implements ICodeActionParticipant { | ||
private static final Logger LOGGER = Logger.getLogger(MavenIdPartRemovalCodeAction.class.getName()); | ||
|
||
/** | ||
* string that gets included in pom.xml file comments and makes the marker | ||
* manager to ignore the managed version override marker | ||
*/ | ||
String MARKER_IGNORE_MANAGED = "$NO-MVN-MAN-VER$";//$NON-NLS-1$ | ||
|
||
public MavenManagedVersionRemovalCodeAction() { | ||
} | ||
|
||
@Override | ||
public void doCodeAction(ICodeActionRequest request, List<CodeAction> codeActions, CancelChecker cancelChecker) { | ||
Diagnostic diagnostic = request.getDiagnostic(); | ||
if (!ParticipantUtils.match(diagnostic, MavenSyntaxErrorCode.OverridingOfManagedDependency.getCode())) { | ||
return; | ||
} | ||
|
||
DOMDocument document = request.getDocument(); | ||
Range diagnosticRange = diagnostic.getRange(); | ||
|
||
TextDocument textDocument = document.getTextDocument(); | ||
try { | ||
int startOffset = document.offsetAt(diagnosticRange.getStart()); | ||
DOMNode version = document.findNodeAt(startOffset); | ||
if (version != null) { | ||
// "Adds comment markup next to the affected element. No longer shows the warning afterwards | ||
Range valueRange = new Range(textDocument.positionAt(version.getEnd()), textDocument.positionAt(version.getEnd())); | ||
CodeAction addIgnoreMarkup = CodeActionFactory.insert("Ignore this warning", valueRange.getEnd(), | ||
"<!--" + MARKER_IGNORE_MANAGED + "-->", document.getTextDocument(), diagnostic); | ||
codeActions.add(addIgnoreMarkup); | ||
|
||
// It removes the current definition to rely on value inherited from parent | ||
valueRange = new Range(textDocument.positionAt(version.getStart()), textDocument.positionAt(version.getEnd())); | ||
CodeAction addSchemaAction = CodeActionFactory.remove( | ||
"Remove version declaration", | ||
valueRange, document.getTextDocument(), diagnostic); | ||
codeActions.add(addSchemaAction); | ||
} | ||
} catch (BadLocationException e) { | ||
LOGGER.log(Level.SEVERE, "Unable to remove specified element", e); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
lemminx-maven/src/test/resources/codeactions-test/pom-duplication-of-managed-version.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
<parent> | ||
<groupId>org.eclipse.test</groupId> | ||
<artifactId>just-a-parent</artifactId> | ||
<version>1.0.0</version> | ||
<relativePath>parent/pom.xml</relativePath> | ||
</parent> | ||
<artifactId>just-a-pom</artifactId> | ||
<packaging>pom</packaging> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>org.apache.commons</groupId> | ||
<artifactId>commons-lang3</artifactId> | ||
<version>3.12.0</version> | ||
</dependency> | ||
</dependencies> | ||
</project> |
21 changes: 21 additions & 0 deletions
21
lemminx-maven/src/test/resources/codeactions-test/pom-overriding-of-managed-version.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
<parent> | ||
<groupId>org.eclipse.test</groupId> | ||
<artifactId>just-a-parent</artifactId> | ||
<version>1.0.0</version> | ||
<relativePath>parent/pom.xml</relativePath> | ||
</parent> | ||
<artifactId>just-a-pom</artifactId> | ||
<packaging>pom</packaging> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>org.apache.commons</groupId> | ||
<artifactId>commons-lang3</artifactId> | ||
<version>3.12.1</version> | ||
</dependency> | ||
</dependencies> | ||
</project> |