diff options
author | Stephan Herrmann | 2020-06-07 12:08:26 +0000 |
---|---|---|
committer | Stephan Herrmann | 2020-06-07 12:08:26 +0000 |
commit | a5978721e25314c6121c4607ebd812aef346e397 (patch) | |
tree | b35978829dc8c5131a1cb228524e202e4dbcd8e6 | |
parent | 9a54c517896c043647214a8f30596386c6c0923d (diff) | |
download | org.eclipse.objectteams-a5978721e25314c6121c4607ebd812aef346e397.tar.gz org.eclipse.objectteams-a5978721e25314c6121c4607ebd812aef346e397.tar.xz org.eclipse.objectteams-a5978721e25314c6121c4607ebd812aef346e397.zip |
update jdt.core to S4_16_0_RC2
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); } /** |