package org.bndtools.core.editors; import org.bndtools.api.BndtoolsConstants; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.refactoring.CompilationUnitChange; import org.eclipse.jdt.ui.text.java.IInvocationContext; import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal; import org.eclipse.jdt.ui.text.java.IProblemLocation; import org.eclipse.jdt.ui.text.java.IQuickFixProcessor; import org.eclipse.jdt.ui.text.java.correction.ChangeCorrectionProposal; import org.eclipse.text.edits.ReplaceEdit; public class PackageInfoBaselineQuickFixProcessor implements IQuickFixProcessor { @Override public boolean hasCorrections(ICompilationUnit unit, int problemId) { return "package-info.java".equals(unit.getElementName()); } @Override public IJavaCompletionProposal[] getCorrections(IInvocationContext context, IProblemLocation[] locations) throws CoreException { ICompilationUnit compUnit = context.getCompilationUnit(); IResource resource = compUnit.getResource(); IMarker[] markers = resource.findMarkers(BndtoolsConstants.MARKER_JAVA_BASELINE, false, 1); for (IProblemLocation location : locations) { for (IMarker marker : markers) { int markerStart = marker.getAttribute(IMarker.CHAR_START, -1); int markerEnd = marker.getAttribute(IMarker.CHAR_END, -1); int markerLength = markerEnd - markerStart; if (location.getOffset() <= markerStart && markerStart < location.getOffset() + location.getLength()) { String newVersion = marker.getAttribute("suggestedVersion", null); if (newVersion != null) { StringBuilder quotedVersion = new StringBuilder(newVersion.trim()); if (quotedVersion.charAt(0) != '"') quotedVersion.insert(0, '"'); if (quotedVersion.charAt(quotedVersion.length() - 1) != '"') quotedVersion.append('"'); CompilationUnitChange change = new CompilationUnitChange("Change package-info.java", compUnit); change.setEdit(new ReplaceEdit(markerStart, markerLength, quotedVersion.toString())); return new IJavaCompletionProposal[] { new ChangeCorrectionProposal("Change package version to " + newVersion, change, 1000) }; } } } } return null; } }