diff options
| author | Markus Keller | 2017-02-09 19:11:00 +0000 |
|---|---|---|
| committer | Markus Keller | 2017-02-09 22:32:20 +0000 |
| commit | ddc31f9a30a6c50ebba45923165bb0ef193e3f32 (patch) | |
| tree | f4198c9d2b783bae17422a02dffe3b09707f2bde | |
| parent | 7c45f1ca681b3cf8b7407dd9334edf5fe79eaa66 (diff) | |
| download | eclipse.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
Change-Id: Id0227f962353566ff9d2c5afffd305f6f925c61a
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); } |
