Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2020-06-07 12:08:26 +0000
committerStephan Herrmann2020-06-07 12:08:26 +0000
commita5978721e25314c6121c4607ebd812aef346e397 (patch)
treeb35978829dc8c5131a1cb228524e202e4dbcd8e6
parent9a54c517896c043647214a8f30596386c6c0923d (diff)
downloadorg.eclipse.objectteams-a5978721e25314c6121c4607ebd812aef346e397.tar.gz
org.eclipse.objectteams-a5978721e25314c6121c4607ebd812aef346e397.tar.xz
org.eclipse.objectteams-a5978721e25314c6121c4607ebd812aef346e397.zip
update jdt.core to S4_16_0_RC2
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter13Test.java2
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter14Test.java42
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java69
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java1
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompilationUnitTests.java2
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CreateMembersTests.java53
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java2
-rw-r--r--org.eclipse.jdt.core.tests.model/workspace/CreateMembers/src/Outer.java2
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java1
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java16
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java2
-rw-r--r--org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java4
-rw-r--r--org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/LineBreaksPreparator.java37
-rw-r--r--org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java1
-rw-r--r--org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/linewrap/WrapExecutor.java26
-rw-r--r--org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java2
-rw-r--r--org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateTypeMemberOperation.java4
-rw-r--r--org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java2
18 files changed, 218 insertions, 50 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter13Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter13Test.java
index fde8f0897..2a99de1e3 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter13Test.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter13Test.java
@@ -68,6 +68,7 @@ public class ASTConverter13Test extends ConverterTestSetup {
return buildModelTestSuite(ASTConverter13Test.class);
}
+ @SuppressWarnings("deprecation")
static int getAST13() {
return AST.JLS13;
}
@@ -398,6 +399,7 @@ public class ASTConverter13Test extends ConverterTestSetup {
}
}
// Moved over from ASTConverter9Test
+ @SuppressWarnings("deprecation")
public void _testBug531714_015() throws CoreException {
// saw NPE in SwitchExpression.resolveType(SwitchExpression.java:423)
if (!isJRE13) {
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter14Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter14Test.java
index 02406b332..4baf68136 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter14Test.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter14Test.java
@@ -885,4 +885,46 @@ public class ASTConverter14Test extends ConverterTestSetup {
}
}
+ public void testRecord007() throws CoreException {
+ if (!isJRE14) {
+ System.err.println("Test "+getName()+" requires a JRE 14");
+ return;
+ }
+ String contents = "record X(int lo) {\n" +
+ " public int lo() {\n" +
+ " return this.lo;\n" +
+ " }\n" +
+ "\n" +
+ "}\n";
+ this.workingCopy = getWorkingCopy("/Converter14/src/X.java", true/*resolve*/);
+ IJavaProject javaProject = this.workingCopy.getJavaProject();
+ String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+ try {
+ javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+ javaProject.setOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
+ ASTNode node = buildAST(
+ contents,
+ this.workingCopy);
+ assertEquals("Not a compilation unit", ASTNode.COMPILATION_UNIT, node.getNodeType());
+ CompilationUnit compilationUnit = (CompilationUnit) node;
+ assertProblemsSize(compilationUnit, 0);
+ node = ((AbstractTypeDeclaration)compilationUnit.types().get(0));
+ assertEquals("Not a Record Declaration", ASTNode.RECORD_DECLARATION, node.getNodeType());
+ RecordDeclaration record = (RecordDeclaration)node;
+ List<SingleVariableDeclaration> recordComponents = record.recordComponents();
+ assertEquals("There should be 1 record component", 1, recordComponents.size());
+ SingleVariableDeclaration recordComponent = recordComponents.get(0);
+ SimpleName recordComponentName = recordComponent.getName();
+ assertEquals("Record component name should be lo","lo" , recordComponentName.toString());
+ ITypeBinding resolveTypeBinding = recordComponentName.resolveTypeBinding();
+ assertEquals("Record component type is int" , "int",resolveTypeBinding.getName() );
+ IVariableBinding resolveBinding = (IVariableBinding)recordComponentName.resolveBinding();
+ assertEquals("Record component binding" , true, resolveBinding.isRecordComponent());
+
+
+ } finally {
+ javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+ }
+ }
+
}
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
index 1fd9b9ac5..84dab8e48 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
@@ -13126,4 +13126,73 @@ public void testBug560889() {
" }\n" +
"}");
}
+public void testBug563487a() {
+ formatSource(
+ "class A {\n" +
+ " protected void f() {\n" +
+ " cccccccccccccc\n" +
+ " // \n" +
+ " .forEach(c -> {\n" +
+ " aaaaaa();\n" +
+ "[# bbbbbb();#]\n" +
+ " });\n" +
+ " }\n" +
+ "}",
+ "class A {\n" +
+ " protected void f() {\n" +
+ " cccccccccccccc\n" +
+ " // \n" +
+ " .forEach(c -> {\n" +
+ " aaaaaa();\n" +
+ " bbbbbb();\n" +
+ " });\n" +
+ " }\n" +
+ "}");
+}
+public void testBug563487b() {
+ formatSource(
+ "class A {\n" +
+ " protected void f() {\n" +
+ " cccccccccccccc\n" +
+ " // \n" +
+ " .forEach(c -> {\n" +
+ " aaaaaa();\n" +
+ "[# bbbbbb();#]\n" +
+ " });\n" +
+ " }\n" +
+ "}",
+ "class A {\n" +
+ " protected void f() {\n" +
+ " cccccccccccccc\n" +
+ " // \n" +
+ " .forEach(c -> {\n" +
+ " aaaaaa();\n" +
+ " bbbbbb();\n" +
+ " });\n" +
+ " }\n" +
+ "}");
+}
+public void testBug563487c() {
+ formatSource(
+ "class A {\n" +
+ "protected void f() {\n" +
+ "cccccccccccccc\n" +
+ " // \n" +
+ " .forEach(c -> {\n" +
+ " aaaaaa();\n" +
+ "[# bbbbbb();#]\n" +
+ " });\n" +
+ "}\n" +
+ "}",
+ "class A {\n" +
+ "protected void f() {\n" +
+ "cccccccccccccc\n" +
+ " // \n" +
+ " .forEach(c -> {\n" +
+ " aaaaaa();\n" +
+ " bbbbbb();\n" +
+ " });\n" +
+ "}\n" +
+ "}");
+}
}
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java
index be683c5bc..8b0968a2a 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java
@@ -156,6 +156,7 @@ public abstract class AbstractJavaModelTests extends SuiteOfTestCases {
/**
* Internal synonym for constant AST.JSL13
* to alleviate deprecation warnings once AST.JLS13 is deprecated in future.
+ * @deprecated
*/
protected static final int AST_INTERNAL_JLS13 = AST.JLS13;
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompilationUnitTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompilationUnitTests.java
index 2d3db19d7..0ae07590b 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompilationUnitTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompilationUnitTests.java
@@ -61,7 +61,7 @@ public void setUpSuite() throws Exception {
super.setUpSuite();
final String compliance = "1.5"; //$NON-NLS-1$
- this.testProject = createJavaProject("P", new String[] {"src"}, new String[] {getExternalJCLPathString(compliance)}, "bin", compliance); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ this.testProject = createJavaProject("P", new String[] {"src"}, new String[] {"JCL15_LIB"}, "bin", compliance); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
createFolder("/P/src/p");
createFile(
"/P/src/p/X.java",
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CreateMembersTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CreateMembersTests.java
index 4c1f69084..f84241d7f 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CreateMembersTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CreateMembersTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -18,8 +18,10 @@ import junit.framework.Test;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
public class CreateMembersTests extends AbstractJavaModelTests {
@@ -43,7 +45,7 @@ public class CreateMembersTests extends AbstractJavaModelTests {
@Override
public void setUpSuite() throws Exception {
super.setUpSuite();
- setUpJavaProject("CreateMembers", "1.5");
+ setUpJavaProject("CreateMembers", "14");
}
@Override
public void tearDownSuite() throws Exception {
@@ -171,4 +173,51 @@ public class CreateMembersTests extends AbstractJavaModelTests {
"Invalid sibling: E1 [in E [in E.java [in <default> [in src [in CreateMembers]]]]]",
expected);
}
+ public void testBug563622_1() throws JavaModelException {
+ IJavaProject javaProject = getJavaProject("CreateMembers");
+ String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+ javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+ try {
+ ICompilationUnit compilationUnit = getCompilationUnit("CreateMembers", "src", "", "Outer.java");
+ assertNotNull("No compilation unit", compilationUnit);
+ IType[] types = compilationUnit.getTypes();
+ assertNotNull("No types", types);
+ assertEquals("Wrong size", 1, types.length);
+ IType type = types[0];
+ type.createType("record Point() {}", null, true, null);
+ String expectedSource =
+ "public class Outer {\n" +
+ "\n" +
+ " record Point() {}\n" +
+ "}";
+ assertSourceEquals("Unexpected source", expectedSource, type.getSource());
+ } finally {
+ javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+ }
+ }
+ public void testBug563622_2() throws JavaModelException {
+ IJavaProject javaProject = getJavaProject("CreateMembers");
+ String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+ javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.DISABLED);
+ JavaModelException expected = null;
+ try {
+ ICompilationUnit compilationUnit = getCompilationUnit("CreateMembers", "src", "", "Outer.java");
+ assertNotNull("No compilation unit", compilationUnit);
+ IType[] types = compilationUnit.getTypes();
+ assertNotNull("No types", types);
+ assertEquals("Wrong size", 1, types.length);
+ IType type = types[0];
+ try {
+ type.createType("record Point() {}", null, true, null);
+ } catch (JavaModelException e) {
+ expected = e;
+ }
+ assertExceptionEquals(
+ "Unexpected exception",
+ "Invalid contents specified",
+ expected);
+ } finally {
+ javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+ }
+ }
}
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java
index 75f3d628d..355c4427e 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java
@@ -43,7 +43,7 @@ public class ReconcilerTests9 extends ModifyingResourceTests {
protected ICompilationUnit workingCopy;
protected ProblemRequestor problemRequestor;
- /*package*/ static final int JLS_LATEST = AST.JLS13;
+ /*package*/ static final int JLS_LATEST = AST.JLS14;
/**
*/
diff --git a/org.eclipse.jdt.core.tests.model/workspace/CreateMembers/src/Outer.java b/org.eclipse.jdt.core.tests.model/workspace/CreateMembers/src/Outer.java
new file mode 100644
index 000000000..2b076f392
--- /dev/null
+++ b/org.eclipse.jdt.core.tests.model/workspace/CreateMembers/src/Outer.java
@@ -0,0 +1,2 @@
+public class Outer {
+} \ No newline at end of file
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java
index e3f199f2c..895f5b8a6 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java
@@ -315,6 +315,7 @@ public final class AST {
* </p>
*
* @since 3.20
+ * @deprecated Clients should use the {@link #JLS_Latest} AST API instead.
*/
public static final int JLS13 = 13;
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java
index eb001ad22..af4c37449 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java
@@ -1423,6 +1423,10 @@ class DefaultBindingResolver extends BindingResolver {
LiftingTypeReference liftingTypeRef = (LiftingTypeReference)node;
return getTypeBinding(liftingTypeRef.resolvedType);
// SH}
+ } else if (node instanceof org.eclipse.jdt.internal.compiler.ast.RecordComponent) {
+ org.eclipse.jdt.internal.compiler.ast.RecordComponent recordComponent = (org.eclipse.jdt.internal.compiler.ast.RecordComponent) node;
+ org.eclipse.jdt.internal.compiler.lookup.TypeBinding recordComponentType = recordComponent.type.resolvedType;
+ return this.getTypeBinding(recordComponentType);
}
return null;
}
@@ -1712,10 +1716,8 @@ class DefaultBindingResolver extends BindingResolver {
} else if (node instanceof org.eclipse.jdt.internal.compiler.ast.ReferenceExpression) {
org.eclipse.jdt.internal.compiler.ast.ReferenceExpression referenceExpression = (org.eclipse.jdt.internal.compiler.ast.ReferenceExpression) node;
return getMethodBinding(referenceExpression.getMethodBinding());
- }
//{ObjectTeams: Resolve bindings for OT-specific elements
- else if (node instanceof MethodSpec)
- {
+ } else if (node instanceof MethodSpec) {
if (node instanceof FieldAccessSpec) {
FieldAccessSpec fieldAccessSpec = (FieldAccessSpec) node;
return getVariableBinding(fieldAccessSpec.resolvedField);
@@ -1724,12 +1726,14 @@ class DefaultBindingResolver extends BindingResolver {
return getMethodBinding(methodSpec.resolvedMethod);
}
}
- else if (node instanceof LiftingTypeReference)
- {
+ else if (node instanceof LiftingTypeReference) {
LiftingTypeReference liftingTypeRef = (LiftingTypeReference)node;
return getTypeBinding(liftingTypeRef.resolvedType);
- }
//jsv}
+ } else if (node instanceof org.eclipse.jdt.internal.compiler.ast.RecordComponent) {
+ org.eclipse.jdt.internal.compiler.ast.RecordComponent recordComponent = (org.eclipse.jdt.internal.compiler.ast.RecordComponent) node;
+ return this.getVariableBinding(recordComponent.binding);
+ }
return null;
}
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
index 886077af6..c48ce2ba2 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
@@ -1376,7 +1376,7 @@ public final class ImportRewrite {
CompilationUnit usedAstRoot= this.astRoot;
if (usedAstRoot == null) {
- ASTParser parser= ASTParser.newParser(AST.JLS13);
+ ASTParser parser= ASTParser.newParser(AST.JLS14);
parser.setSource(this.compilationUnit);
parser.setFocalPosition(0); // reduced AST
parser.setResolveBindings(false);
diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java
index 46db5fe9e..efbe1ae48 100644
--- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java
+++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2019 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -435,7 +435,7 @@ public class DefaultCodeFormatter extends CodeFormatter {
private void prepareLineBreaks() {
LineBreaksPreparator breaksPreparator = new LineBreaksPreparator(this.tokenManager, this.workingOptions);
this.astRoot.accept(breaksPreparator);
- breaksPreparator.finishUp(this.formatRegions);
+ breaksPreparator.finishUp();
this.astRoot.accept(new OneLineEnforcer(this.tokenManager, this.workingOptions));
}
diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/LineBreaksPreparator.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/LineBreaksPreparator.java
index 73aa0f66d..39b8df671 100644
--- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/LineBreaksPreparator.java
+++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/LineBreaksPreparator.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2014, 2019 Mateusz Matela and others.
+ * Copyright (c) 2014, 2020 Mateusz Matela and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -93,7 +93,6 @@ import org.eclipse.jdt.core.dom.AbstractMethodMappingDeclaration;
import org.eclipse.jdt.internal.formatter.DefaultCodeFormatterOptions.Alignment;
import org.eclipse.jdt.internal.formatter.Token.WrapMode;
import org.eclipse.jdt.internal.formatter.Token.WrapPolicy;
-import org.eclipse.jface.text.IRegion;
public class LineBreaksPreparator extends ASTVisitor {
final private TokenManager tm;
@@ -867,37 +866,13 @@ public class LineBreaksPreparator extends ASTVisitor {
this.tm.get(lastIndex + 1).unindent();
}
- public void finishUp(List<IRegion> regions) {
+ public void finishUp() {
// the visits only noted where indents increase and decrease,
- // now prepare actual indent values, preserving indents outside formatting regions
- int currentIndent = this.options.initial_indentation_level * this.options.indentation_size;
- Token previous = null;
+ // now prepare actual indent values
+ int currentIndent = this.options.initial_indentation_level;
for (Token token : this.tm) {
- if (isFixedLineStart(token, previous, regions)) {
- currentIndent = this.tm.findSourcePositionInLine(token.originalStart);
- } else {
- currentIndent = Math.max(currentIndent + token.getIndent() * this.options.indentation_size, 0);
- }
- token.setIndent(currentIndent);
- previous = token;
- }
- }
-
- private boolean isFixedLineStart(Token token, Token previous, List<IRegion> regions) {
- if (previous == null && this.options.initial_indentation_level >0)
- return false; // must be handling ast rewrite
- if (previous != null && this.tm.countLineBreaksBetween(previous, token) == 0)
- return false;
- if (token.getLineBreaksBefore() == 0 && (previous == null || previous.getLineBreaksAfter() == 0))
- return false;
- int lineStart = token.originalStart;
- char c;
- while (lineStart > 0 && (c = this.tm.charAt(lineStart - 1)) != '\r' && c != '\n')
- lineStart--;
- for (IRegion r : regions) {
- if (token.originalStart >= r.getOffset() && lineStart <= r.getOffset() + r.getLength())
- return false;
+ currentIndent += token.getIndent();
+ token.setIndent(currentIndent * this.options.indentation_size);
}
- return true;
}
}
diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
index 0641d1e7c..4181e61de 100644
--- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
+++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
@@ -443,6 +443,7 @@ public class SpacePreparator extends ASTVisitor {
return true;
}
+ @SuppressWarnings("deprecation")
@Override
public boolean visit(SwitchCase node) {
if (node.getAST().apiLevel() > AST.JLS13 && node.isSwitchLabeledRule()) {
diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/linewrap/WrapExecutor.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/linewrap/WrapExecutor.java
index 276da6c15..b347880f5 100644
--- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/linewrap/WrapExecutor.java
+++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/linewrap/WrapExecutor.java
@@ -232,6 +232,7 @@ public class WrapExecutor {
private ArrayDeque<Token> stack = new ArrayDeque<>();
private int initialIndent;
private int currentIndent;
+ private int fixedIndentDelta;
private WrapInfo nextWrap;
public WrapsApplier() {
@@ -297,7 +298,13 @@ public class WrapExecutor {
setIndent(token, getWrapIndent(token));
this.stack.push(token);
} else if (this.stack.isEmpty()) {
- this.initialIndent = token.getIndent();
+ if (isFixedLineStart(token, index)) {
+ int fixedIndent = this.tm2.findSourcePositionInLine(token.originalStart);
+ this.initialIndent = fixedIndent;
+ this.fixedIndentDelta = fixedIndent - token.getIndent();
+ } else {
+ this.initialIndent = Math.max(0, token.getIndent() + this.fixedIndentDelta);
+ }
WrapExecutor.this.wrapSearchResults.clear();
}
@@ -305,6 +312,21 @@ public class WrapExecutor {
setIndent(token, this.currentIndent);
this.nextWrap = findWrapsCached(index, this.currentIndent).nextWrap;
}
+
+ private boolean isFixedLineStart(Token token, int index) {
+ if (WrapExecutor.this.options.initial_indentation_level > 0)
+ return false; // must be handling ast rewrite
+ if (index > 0 && this.tm2.countLineBreaksBetween(getPrevious(), token) == 0)
+ return false;
+ if (isWrapInsideFormatRegion(index))
+ return false;
+ int start = token.originalStart;
+ boolean inDisableFormat = this.tm2.getDisableFormatTokenPairs().stream()
+ .anyMatch(p -> p[0].originalStart <= start && p[1].originalStart >= start);
+ if (inDisableFormat)
+ return false;
+ return true;
+ }
}
private class NLSTagHandler extends TokenTraverser {
@@ -679,7 +701,7 @@ public class WrapExecutor {
}
boolean isWrapInsideFormatRegion(int tokenIndex) {
- int pos1 = this.tm.get(tokenIndex - 1).originalEnd;
+ int pos1 = tokenIndex == 0 ? 0 : this.tm.get(tokenIndex - 1).originalEnd;
int pos2 = this.tm.get(tokenIndex).originalStart;
return this.regions.stream().anyMatch(r -> (pos1 >= r.getOffset() && pos1 < r.getOffset() + r.getLength())
|| (pos2 >= r.getOffset() && pos2 < r.getOffset() + r.getLength()));
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java
index 960c190a3..a11f552e6 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java
@@ -269,7 +269,7 @@ public abstract class CreateElementInCUOperation extends JavaModelOperation {
// ensure cu is consistent (noop if already consistent)
cu.makeConsistent(this.progressMonitor);
// create an AST for the compilation unit
- ASTParser parser = ASTParser.newParser(AST.JLS13);
+ ASTParser parser = ASTParser.newParser(AST.JLS14);
parser.setSource(cu);
return (CompilationUnit) parser.createAST(this.progressMonitor);
}
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateTypeMemberOperation.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateTypeMemberOperation.java
index 995579bf1..155da570c 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateTypeMemberOperation.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateTypeMemberOperation.java
@@ -96,7 +96,7 @@ protected StructuralPropertyDescriptor getChildPropertyDescriptor(ASTNode parent
protected ASTNode generateElementAST(ASTRewrite rewriter, ICompilationUnit cu) throws JavaModelException {
if (this.createdNode == null) {
this.source = removeIndentAndNewLines(this.source, cu);
- ASTParser parser = ASTParser.newParser(AST.JLS13);
+ ASTParser parser = ASTParser.newParser(AST.JLS14);
parser.setSource(this.source.toCharArray());
parser.setProject(getCompilationUnit().getJavaProject());
parser.setKind(ASTParser.K_CLASS_BODY_DECLARATIONS);
@@ -196,7 +196,7 @@ protected String generateSyntaxIncorrectAST() {
buff.append(lineSeparator + " public class A {" + lineSeparator); //$NON-NLS-1$
buff.append(this.source);
buff.append(lineSeparator).append('}');
- ASTParser parser = ASTParser.newParser(AST.JLS13);
+ ASTParser parser = ASTParser.newParser(AST.JLS14);
parser.setSource(buff.toString().toCharArray());
CompilationUnit compilationUnit = (CompilationUnit) parser.createAST(null);
TypeDeclaration typeDeclaration = (TypeDeclaration) compilationUnit.types().iterator().next();
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java
index a5a61f1e4..c119a55d2 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java
@@ -84,7 +84,7 @@ public class DeleteElementsOperation extends MultiOperation {
}
private void initASTParser() {
- this.parser = ASTParser.newParser(AST.JLS13);
+ this.parser = ASTParser.newParser(AST.JLS14);
}
/**

Back to the top