Skip to content

Commit cc1c664

Browse files
Neha Burnwalnburnwal09
authored andcommitted
quick fix for invalid characters in MANIFEST header
1 parent 5dc5f26 commit cc1c664

File tree

6 files changed

+75
-1
lines changed

6 files changed

+75
-1
lines changed

ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/JarManifestErrorReporter.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Map;
2020

2121
import org.eclipse.core.resources.IFile;
22+
import org.eclipse.core.resources.IMarker;
2223
import org.eclipse.core.runtime.IProgressMonitor;
2324
import org.eclipse.core.runtime.OperationCanceledException;
2425
import org.eclipse.jface.text.BadLocationException;
@@ -61,6 +62,15 @@ private String getHeaderName(String line) {
6162
return null;
6263
}
6364

65+
private boolean isInvalidHeader(String line) {
66+
int colonInd = line.indexOf(':');
67+
if (colonInd > 0) {
68+
String headerPart = line.substring(0, colonInd);
69+
return headerPart != null && headerPart.matches(".*[^a-zA-Z0-9-_].*"); //$NON-NLS-1$
70+
}
71+
return false;
72+
}
73+
6474
protected int getPackageLine(IHeader header, ManifestElement element) {
6575
String packageName = element.getValue();
6676
if (element.getDirectiveKeys() != null || element.getKeys() != null) {
@@ -172,9 +182,18 @@ protected void parseManifest(IDocument document, IProgressMonitor monitor) {
172182
report(PDECoreMessages.BundleErrorReporter_noColon, lineNumber, CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL);
173183
return;
174184
}
185+
175186
String headerName = getHeaderName(line);
176187
if (headerName == null) {
177-
report(PDECoreMessages.BundleErrorReporter_invalidHeaderName, lineNumber, CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL);
188+
boolean hasInvalidChars = isInvalidHeader(line);
189+
if (hasInvalidChars) {
190+
VirtualMarker marker = report(PDECoreMessages.BundleErrorReporter_invalidHeaderName, lineNumber,
191+
CompilerFlags.ERROR, PDEMarkerFactory.M_HEADER_INCORRECT, PDEMarkerFactory.CAT_FATAL);
192+
marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
193+
return;
194+
}
195+
report(PDECoreMessages.BundleErrorReporter_invalidHeaderName, lineNumber, CompilerFlags.ERROR,
196+
PDEMarkerFactory.CAT_FATAL);
178197
return;
179198
}
180199
if (line.length() < colon + 2 || line.charAt(colon + 1) != ' ') {

ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/PDEMarkerFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ public class PDEMarkerFactory {
7676
public static final int M_EXEC_ENV_TOO_LOW = 0x1029; // other problem
7777
public static final int M_CONFLICTING_AUTOMATIC_MODULE = 0x1030; // other
7878
// problem
79+
public static final int M_HEADER_INCORRECT = 0x1031; // other problem
7980

8081
// build properties fixes
8182
public static final int B_APPEND_SLASH_FOLDER_ENTRY = 0x2001;

ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,7 @@ public class PDEUIMessages extends NLS {
693693

694694
public static String UpdateClasspathResolution_label;
695695
public static String UpdateExecutionEnvironment_label;
696+
public static String RemoveInvalidCharacters;
696697

697698
//
698699
// PDE resource strings

ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ public IMarkerResolution[] getNonConfigSevResolutions(IMarker marker) {
147147
case PDEMarkerFactory.M_CONFLICTING_AUTOMATIC_MODULE:
148148
return new IMarkerResolution[] {
149149
new RemoveRedundantAutomaticModuleHeader(AbstractPDEMarkerResolution.REMOVE_TYPE, marker) };
150+
case PDEMarkerFactory.M_HEADER_INCORRECT:
151+
return new IMarkerResolution[] {
152+
new UpdateCorrectHeaderName(AbstractPDEMarkerResolution.RENAME_TYPE, marker) };
150153
}
151154
return NO_RESOLUTIONS;
152155
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.eclipse.pde.internal.ui.correction;
2+
3+
import org.eclipse.core.resources.IMarker;
4+
import org.eclipse.jface.text.IDocument;
5+
import org.eclipse.jface.text.IRegion;
6+
import org.eclipse.pde.internal.core.text.bundle.BundleModel;
7+
import org.eclipse.pde.internal.ui.PDEUIMessages;
8+
9+
public class UpdateCorrectHeaderName extends AbstractManifestMarkerResolution {
10+
11+
public UpdateCorrectHeaderName(int type, IMarker marker) {
12+
super(type, marker);
13+
}
14+
15+
@Override
16+
public String getLabel() {
17+
return PDEUIMessages.RemoveInvalidCharacters;
18+
}
19+
20+
private String removeInvalidChars(String userHeader) {
21+
return userHeader.replaceAll("[^a-zA-Z0-9-_]", ""); //$NON-NLS-1$ //$NON-NLS-2$
22+
}
23+
24+
@Override
25+
protected void createChange(BundleModel model) {
26+
model.getBundle();
27+
IDocument doc = model.getDocument();
28+
try {
29+
int lineNum = (int) marker.getAttribute(IMarker.LINE_NUMBER);
30+
IRegion lineInfo = doc.getLineInformation(lineNum - 1);
31+
int offset = lineInfo.getOffset();
32+
int length = lineInfo.getLength();
33+
34+
String getLine = doc.get(offset, length);
35+
int colonInd = getLine.indexOf(':');
36+
37+
if (colonInd > 0) {
38+
String userHeader = getLine.substring(0, colonInd);
39+
String correctHeader = removeInvalidChars(userHeader);
40+
doc.replace(offset, colonInd, correctHeader);
41+
}
42+
43+
} catch (Exception e) {
44+
45+
}
46+
47+
}
48+
49+
}

ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2422,6 +2422,7 @@ LocationSection_0=&Locations
24222422
AppendSeperatorBuildEntryResolution_label=Append a trailing separator to {0}.
24232423
AddExportPackageResolution_Label=Add missing packages
24242424
AddExportPackageInternalDirectiveResolution_Label=Add missing packages with x-internal directive
2425+
RemoveInvalidCharacters=Remove invalid characters from header
24252426

24262427
DependencyManagementSection_jobName=Analyzing Code
24272428
DescriptionSection_nameLabel=Name:

0 commit comments

Comments
 (0)