diff options
| author | M N Palat | 2013-11-07 12:51:52 +0000 |
|---|---|---|
| committer | M N Palat | 2013-11-07 12:51:52 +0000 |
| commit | ba2b33c0750d6d7311c1eadcadc15015d0ae8f36 (patch) | |
| tree | edacbbdb243814ad0a39437f370fed7376dcebd7 | |
| parent | 2077a29bc8cfe42c01e5c07aa5d0c90e2eceb36b (diff) | |
| download | eclipse.jdt.core-ba2b33c0750d6d7311c1eadcadc15015d0ae8f36.tar.gz eclipse.jdt.core-ba2b33c0750d6d7311c1eadcadc15015d0ae8f36.tar.xz eclipse.jdt.core-ba2b33c0750d6d7311c1eadcadc15015d0ae8f36.zip | |
417659 Bug 417659 Fix for 417659 - [dom][ast][1.8] test failures - ast
structure - when
debug tracing is on (see comment )
3 files changed, 36 insertions, 13 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeAnnotationsConverterTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeAnnotationsConverterTest.java index f8015cc5d4..c7efeb04bd 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeAnnotationsConverterTest.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeAnnotationsConverterTest.java @@ -110,7 +110,7 @@ public class TypeAnnotationsConverterTest extends ConverterTestSetup { assertASTNodeEquals(expectedOutput, node); } // Test ParameterizedQualifiedReference - public void _test0003() throws JavaModelException { + public void test0003() throws JavaModelException { String contents = "public class X<T> {\n" + " class Y<R> {\n" + @@ -139,7 +139,7 @@ public class TypeAnnotationsConverterTest extends ConverterTestSetup { assertASTNodeEquals(expectedOutput, node); } // Test ParameterizedQualifiedReference with arrays. - public void _test0004() throws JavaModelException { + public void test0004() throws JavaModelException { String contents = "public class X<T> {\n" + " class Y<R> {\n" + @@ -168,7 +168,7 @@ public class TypeAnnotationsConverterTest extends ConverterTestSetup { assertASTNodeEquals(expectedOutput, node); } // Test ParameterizedQualifiedReference with arrays. - public void _test0005() throws JavaModelException { + public void test0005() throws JavaModelException { String contents = "public class X<T> {\n" + " class Y<R> {\n" + diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeBindingTests308.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeBindingTests308.java index 538acb97fe..6744ce3c3e 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeBindingTests308.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeBindingTests308.java @@ -699,7 +699,7 @@ public class TypeBindingTests308 extends ConverterTestSetup { InstanceofExpression expression = (InstanceofExpression) operand.getExpression();
verifyAnnotationOnType(expression.getRightOperand(), new String[]{"@Marker()"});
}
- public void _test018() throws Exception {
+ public void test018() throws Exception {
String contents =
"interface I {\n" +
" void foo(Y<String>.Z z, int x);\n" +
@@ -732,6 +732,9 @@ public class TypeBindingTests308 extends ConverterTestSetup { VariableDeclarationFragment fragment = (VariableDeclarationFragment) statement.fragments().get(0);
TypeMethodReference initializer = (TypeMethodReference) fragment.getInitializer();
Type type = initializer.getType();
+ assertTrue(type.isQualifiedType());
+ QualifiedType qualifiedType = (QualifiedType) type;
+ checkSourceRange(qualifiedType.getName(), "Z", contents);
verifyAnnotationOnType(type, new String[]{"@Marker()"});
assertEquals("Should be a qualified type", ASTNode.QUALIFIED_TYPE, type.getNodeType());
verifyAnnotationOnType(((QualifiedType) type).getQualifier() , new String[]{});
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java index 40a9ba0876..c117db5caa 100644 --- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java +++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java @@ -3440,7 +3440,8 @@ class ASTConverter { return variableDeclarationStatement; } - private void annotateType(AnnotatableType type, org.eclipse.jdt.internal.compiler.ast.Annotation[] annotations) { + private int annotateType(AnnotatableType type, org.eclipse.jdt.internal.compiler.ast.Annotation[] annotations) { + int annotationsEnd = 0; switch(this.ast.apiLevel) { case AST.JLS2_INTERNAL : case AST.JLS3_INTERNAL : @@ -3457,6 +3458,7 @@ class ASTConverter { if (typeAnnotation != null) { Annotation annotation = convert(typeAnnotation); type.annotations().add(annotation); + annotationsEnd = annotation.getStartPosition() + annotation.getLength(); } } int annotationsStart; @@ -3466,6 +3468,7 @@ class ASTConverter { } type.setSourceRange(start, length); } + return annotationsEnd; } private void annotateTypeParameter(TypeParameter typeParameter, org.eclipse.jdt.internal.compiler.ast.Annotation[] annotations) { switch(this.ast.apiLevel) { @@ -3718,7 +3721,11 @@ class ASTConverter { end = simpleName.getStartPosition() + simpleName.getLength() - 1; qualifiedType.setSourceRange(start, end - start + 1); if (typeAnnotations != null && (annotations = typeAnnotations[i]) != null) { - annotateType(qualifiedType, annotations); + int nextPosition = annotateType(qualifiedType, annotations); + if (simpleName.getStartPosition() < nextPosition && nextPosition <= end) { + simpleName.setSourceRange(nextPosition, end - nextPosition + 1); + trimWhiteSpacesAndComments(simpleName); + } } if (this.resolveBindings) { recordNodes(simpleName, typeReference); @@ -4442,11 +4449,23 @@ class ASTConverter { * Remove whitespaces and comments before and after the expression. */ private void trimWhiteSpacesAndComments(org.eclipse.jdt.internal.compiler.ast.Expression expression) { - int start = expression.sourceStart; - int end = expression.sourceEnd; + int[] positions = trimWhiteSpacesAndComments(expression.sourceStart, expression.sourceEnd); + expression.sourceStart = positions[0]; + expression.sourceEnd = positions[1]; + } + private void trimWhiteSpacesAndComments(ASTNode node) { + int start = node.getStartPosition(); + int end = start + node.getLength() - 1; + int[] positions = trimWhiteSpacesAndComments(start, end); + start = positions[0]; + end = positions[1]; + node.setSourceRange(start, end - start + 1); + } + private int [] trimWhiteSpacesAndComments(int start, int end) { + int [] positions = new int[]{start, end}; int token; - int trimLeftPosition = expression.sourceStart; - int trimRightPosition = expression.sourceEnd; + int trimLeftPosition = start; + int trimRightPosition = end; boolean first = true; Scanner removeBlankScanner = this.ast.scanner; try { @@ -4468,9 +4487,9 @@ class ASTConverter { } break; case TerminalTokens.TokenNameEOF : - expression.sourceStart = trimLeftPosition; - expression.sourceEnd = trimRightPosition; - return; + positions[0] = trimLeftPosition; + positions[1] = trimRightPosition; + return positions; default : /* * if we find something else than a whitespace or a comment, @@ -4484,6 +4503,7 @@ class ASTConverter { } catch (InvalidInputException e){ // ignore } + return positions; } /** |
