Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Keller2017-02-09 19:11:00 +0000
committerMarkus Keller2017-02-09 22:32:20 +0000
commitddc31f9a30a6c50ebba45923165bb0ef193e3f32 (patch)
treef4198c9d2b783bae17422a02dffe3b09707f2bde
parent7c45f1ca681b3cf8b7407dd9334edf5fe79eaa66 (diff)
downloadeclipse.jdt.core-ddc31f9a30a6c50ebba45923165bb0ef193e3f32.tar.gz
eclipse.jdt.core-ddc31f9a30a6c50ebba45923165bb0ef193e3f32.tar.xz
eclipse.jdt.core-ddc31f9a30a6c50ebba45923165bb0ef193e3f32.zip
Bug 494691: [import rewrite] must not delete text adjacent to import containerI20170209-2000
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java29
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/imports/ImportRewriteAnalyzer.java13
2 files changed, 37 insertions, 5 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java
index 1afdbda126..1aae1d6c6a 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -2085,6 +2085,33 @@ public class ImportRewriteTest extends AbstractJavaModelTests {
assertEqualString(cuT.getSource(), buf.toString());
}
+ public void testRemoveImportWithSyntaxError_bug494691() throws Exception {
+
+ IPackageFragment pack1= this.sourceFolder.createPackageFragment("pack1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package pack1;\n");
+ buf.append("\n");
+ buf.append("import java.util.*;\n");
+ buf.append("\n");
+ buf.append("syntaxError\n");
+ buf.append("public class C {\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("C.java", buf.toString(), false, null);
+
+ ImportRewrite imports= newImportsRewrite(cu, new String[0], 2, 2, true);
+ imports.removeImport("java.util.*");
+
+ apply(imports);
+
+ buf= new StringBuffer();
+ buf.append("package pack1;\n");
+ buf.append("\n");
+ buf.append("syntaxError\n");
+ buf.append("public class C {\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
public void testAddImports_bug23078() throws Exception {
IPackageFragment pack1= this.sourceFolder.createPackageFragment("pack1", false, null);
StringBuffer buf= new StringBuffer();
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/imports/ImportRewriteAnalyzer.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/imports/ImportRewriteAnalyzer.java
index 86f3c252a4..82679ade1d 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/imports/ImportRewriteAnalyzer.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/imports/ImportRewriteAnalyzer.java
@@ -28,6 +28,7 @@ import java.util.TreeMap;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.core.IBuffer;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
@@ -257,7 +258,7 @@ public final class ImportRewriteAnalyzer {
}
private static RewriteSite determineRewriteSite(
- CompilationUnit compilationUnit, List<OriginalImportEntry> originalImports) {
+ CompilationUnit compilationUnit, List<OriginalImportEntry> originalImports) throws JavaModelException {
IRegion importsRegion = determineImportsRegion(originalImports);
IRegion surroundingRegion = determineSurroundingRegion(compilationUnit, importsRegion);
@@ -298,7 +299,7 @@ public final class ImportRewriteAnalyzer {
* Determines the region to be occupied by imports, their associated comments, and surrounding
* whitespace.
*/
- private static IRegion determineSurroundingRegion(CompilationUnit compilationUnit, IRegion importsRegion) {
+ private static IRegion determineSurroundingRegion(CompilationUnit compilationUnit, IRegion importsRegion) throws JavaModelException {
NavigableMap<Integer, ASTNode> nodesTreeMap = mapTopLevelNodes(compilationUnit);
int surroundingStart;
@@ -326,8 +327,12 @@ public final class ImportRewriteAnalyzer {
positionAfterImports = importsRegion.getOffset() + importsRegion.getLength();
}
- Integer ceilingKey = nodesTreeMap.ceilingKey(positionAfterImports);
- int surroundingEnd = ceilingKey != null ? ceilingKey : compilationUnit.getLength();
+ int surroundingEnd = positionAfterImports;
+ IBuffer buffer = compilationUnit.getTypeRoot().getBuffer();
+ int length = buffer.getLength();
+ while (surroundingEnd < length && Character.isWhitespace(buffer.getChar(surroundingEnd))) {
+ surroundingEnd++;
+ }
return new Region(surroundingStart, surroundingEnd - surroundingStart);
}

Back to the top