diff options
| author | Markus Keller | 2017-02-09 19:11:00 +0000 |
|---|---|---|
| committer | Manoj Palat | 2017-02-13 09:11:19 +0000 |
| commit | 90ccad423c857f1832cbed409cc6c5881df7f284 (patch) | |
| tree | 13a891ff05b0024b955422dede91ba5f1eadaab3 | |
| parent | 0377d21a8c7bb1802c891ea7b57f0b010b66afba (diff) | |
| download | eclipse.jdt.core-90ccad423c857f1832cbed409cc6c5881df7f284.tar.gz eclipse.jdt.core-90ccad423c857f1832cbed409cc6c5881df7f284.tar.xz eclipse.jdt.core-90ccad423c857f1832cbed409cc6c5881df7f284.zip | |
Bug 494691: [import rewrite] must not delete text adjacent to import containerS4_6_3_RC3S4_6_3_RC2M20170228-0545M20170222-0400M20170215-0400M20170214-1550M20170214-0330M20170213-1455M20170213-0955
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); } |
