From 416bf3a0e081946ce5471db619be15fd016d3d9d Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Fri, 19 Dec 2008 12:19:16 +0000 Subject: [PATCH] Correcting IASTName.toCharArray(), bug 258054. --- .../parser/tests/ast2/AST2SpecBaseTest.java | 4 + .../parser/tests/ast2/AST2TemplateTests.java | 14 ++- .../tests/ast2/DOMSelectionParseTest.java | 7 +- .../parser/tests/ast2/QuickParser2Tests.java | 12 +- .../comenthandler/CommentHandlingTest.java | 15 ++- ...TWriterCommentedDeclarationTestSource.awts | 2 + .../ASTWriterDeclarationTestSource.awts | 1 + .../core/testplugin/util/BaseTestCase.java | 1 + .../internal/core/model/ASTStringUtil.java | 2 +- .../core/model/ext/CElementHandleFactory.java | 2 +- .../org/eclipse/cdt/core/dom/IName.java | 22 ++-- .../cdt/core/dom/ast/ASTNameCollector.java | 2 +- .../eclipse/cdt/core/dom/ast/ASTTypeUtil.java | 48 ++------ .../cdt/core/dom/ast/IASTDeclSpecifier.java | 14 +-- .../eclipse/cdt/core/dom/ast/IASTName.java | 26 ++-- .../cdt/core/dom/ast/cpp/ICPPNodeFactory.java | 2 +- .../cdt/internal/core/dom/parser/ASTNode.java | 11 +- .../parser/AbstractGNUSourceCodeParser.java | 6 +- .../dom/parser/FindNodeForOffsetAction.java | 4 +- .../parser/c/CASTCompositeTypeSpecifier.java | 14 +-- .../parser/c/CASTEnumerationSpecifier.java | 5 - .../internal/core/dom/parser/c/CASTName.java | 8 +- .../AbstractCPPClassSpecializationScope.java | 4 +- .../cpp/CPPASTCompositeTypeSpecifier.java | 5 - .../dom/parser/cpp/CPPASTConversionName.java | 52 +++++--- .../core/dom/parser/cpp/CPPASTDeclarator.java | 6 +- .../cpp/CPPASTEnumerationSpecifier.java | 5 - .../core/dom/parser/cpp/CPPASTName.java | 81 ++----------- .../core/dom/parser/cpp/CPPASTNameBase.java | 92 ++++++++++++++ .../dom/parser/cpp/CPPASTQualifiedName.java | 114 +++++------------- .../core/dom/parser/cpp/CPPASTTemplateId.java | 87 +++++++------ .../core/dom/parser/cpp/CPPClassScope.java | 45 ++++--- .../core/dom/parser/cpp/CPPClassType.java | 6 +- .../core/dom/parser/cpp/CPPEnumeration.java | 4 +- .../core/dom/parser/cpp/CPPEnumerator.java | 4 +- .../core/dom/parser/cpp/CPPField.java | 2 +- .../core/dom/parser/cpp/CPPFunction.java | 2 +- .../core/dom/parser/cpp/CPPFunctionScope.java | 2 +- .../dom/parser/cpp/CPPImplicitMethod.java | 2 +- .../core/dom/parser/cpp/CPPLabel.java | 4 +- .../core/dom/parser/cpp/CPPMethod.java | 4 +- .../dom/parser/cpp/CPPMethodTemplate.java | 4 +- .../core/dom/parser/cpp/CPPNamespace.java | 6 +- .../dom/parser/cpp/CPPNamespaceAlias.java | 4 +- .../dom/parser/cpp/CPPNamespaceScope.java | 2 +- .../core/dom/parser/cpp/CPPNodeFactory.java | 4 +- .../core/dom/parser/cpp/CPPParameter.java | 7 +- .../core/dom/parser/cpp/CPPScope.java | 47 +++----- .../core/dom/parser/cpp/CPPScopeMapper.java | 4 +- .../dom/parser/cpp/CPPTemplateDefinition.java | 4 +- .../dom/parser/cpp/CPPTemplateParameter.java | 4 +- .../core/dom/parser/cpp/CPPTypedef.java | 13 +- .../dom/parser/cpp/CPPUnknownBinding.java | 2 +- .../core/dom/parser/cpp/CPPUnknownScope.java | 2 +- .../dom/parser/cpp/CPPUsingDeclaration.java | 4 +- .../core/dom/parser/cpp/CPPVariable.java | 21 +--- .../dom/parser/cpp/GNUCPPSourceParser.java | 69 +++-------- .../parser/cpp/semantics/CPPSemantics.java | 8 +- .../parser/cpp/semantics/CPPTemplates.java | 6 +- .../dom/parser/cpp/semantics/CPPVisitor.java | 10 +- .../dom/parser/cpp/semantics/LookupData.java | 2 +- .../parser/scanner/ASTPreprocessorName.java | 4 + .../parser/scanner/ASTPreprocessorNode.java | 2 +- .../scanner/SingleMacroExpansionExplorer.java | 2 +- .../eclipse/cdt/internal/core/pdom/PDOM.java | 2 +- .../core/pdom/dom/PDOMASTAdapter.java | 7 +- .../cdt/internal/core/pdom/dom/PDOMFile.java | 6 +- .../internal/core/pdom/dom/PDOMInclude.java | 2 +- .../pdom/dom/PDOMMacroDefinitionName.java | 10 ++ .../core/pdom/dom/PDOMMacroReferenceName.java | 10 +- .../cdt/internal/core/pdom/dom/PDOMName.java | 23 ++-- .../core/pdom/dom/c/PDOMCLinkage.java | 2 +- .../core/pdom/dom/cpp/PDOMCPPClassScope.java | 4 +- .../core/pdom/dom/cpp/PDOMCPPLinkage.java | 5 - .../core/pdom/dom/cpp/PDOMCPPNamespace.java | 6 +- .../formatter/CodeFormatterVisitor.java | 2 +- .../cdt/ui/tests/DOMAST/DOMASTNodeLeaf.java | 36 +++++- .../extractfunction/TrailName.java | 4 +- .../search/actions/SelectionParseAction.java | 2 +- .../ui/text/c/hover/CSourceHover.java | 2 +- .../cdt/internal/ui/viewsupport/IndexUI.java | 2 +- .../action/cpp/CPPBuildASTParserAction.java | 56 ++++++++- 82 files changed, 588 insertions(+), 567 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java index 11a085921f7..290f74e795a 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java @@ -33,6 +33,7 @@ import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ScannerInfo; import org.eclipse.cdt.internal.core.dom.parser.c.CVisitor; import org.eclipse.cdt.internal.core.dom.parser.c.GNUCSourceParser; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNameBase; import org.eclipse.cdt.internal.core.dom.parser.cpp.GNUCPPSourceParser; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor; import org.eclipse.cdt.internal.core.parser.ParserException; @@ -127,6 +128,9 @@ public class AST2SpecBaseTest extends AST2BaseTest { NULL_LOG, config ); } + if (expectedProblemBindings > 0) + CPPASTNameBase.sAllowNameComputation= true; + IASTTranslationUnit tu = parser2.parse(); // resolve all bindings diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index 6a844012c8f..1aa009f8575 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -74,6 +74,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.util.ObjectMap; import org.eclipse.cdt.internal.core.dom.parser.Value; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNameBase; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalUnknownScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; @@ -463,6 +464,8 @@ public class AST2TemplateTests extends AST2BaseTest { // A a4; //uses #5, T is int, T2 is char, I is1 // A a5; //ambiguous, matches #3 & #5. public void test_14_5_4_1s2_MatchingTemplateSpecializations() throws Exception{ + CPPASTNameBase.sAllowNameComputation= true; + IASTTranslationUnit tu = parse(getAboveComment(), ParserLanguage.CPP); CPPNameCollector col = new CPPNameCollector(); tu.accept(col); @@ -1765,6 +1768,7 @@ public class AST2TemplateTests extends AST2BaseTest { } public void testBug98666() throws Exception { + CPPASTNameBase.sAllowNameComputation= true; IASTTranslationUnit tu = parse("A::template B b;", ParserLanguage.CPP); //$NON-NLS-1$ CPPNameCollector col = new CPPNameCollector(); tu.accept(col); @@ -1772,7 +1776,7 @@ public class AST2TemplateTests extends AST2BaseTest { ICPPASTQualifiedName qn = (ICPPASTQualifiedName) col.getName(0); IASTName[] ns = qn.getNames(); assertTrue(ns[1] instanceof ICPPASTTemplateId); - assertEquals(((ICPPASTTemplateId)ns[1]).toString(), "B"); //$NON-NLS-1$ + assertEquals(ns[1].toString(), "B"); //$NON-NLS-1$ } // template struct A{ @@ -2293,6 +2297,7 @@ public class AST2TemplateTests extends AST2BaseTest { // // void f(B::tb r) {} public void testTemplateTypedef_214447() throws Exception { + CPPASTNameBase.sAllowNameComputation= true; IASTTranslationUnit tu = parse(getAboveComment(), ParserLanguage.CPP, true, true); CPPNameCollector col = new CPPNameCollector(); @@ -2326,6 +2331,7 @@ public class AST2TemplateTests extends AST2BaseTest { // // void f(Vec::reference r) {} public void testRebindPattern_214447_1() throws Exception { + CPPASTNameBase.sAllowNameComputation= true; IASTTranslationUnit tu = parse(getAboveComment(), ParserLanguage.CPP, true, true); CPPNameCollector col = new CPPNameCollector(); @@ -2365,6 +2371,7 @@ public class AST2TemplateTests extends AST2BaseTest { // // void f(Vec::reference r) {} public void testRebindPattern_214447_2() throws Exception { + CPPASTNameBase.sAllowNameComputation= true; IASTTranslationUnit tu = parse(getAboveComment(), ParserLanguage.CPP, true, true); CPPNameCollector col = new CPPNameCollector(); @@ -2403,6 +2410,7 @@ public class AST2TemplateTests extends AST2BaseTest { // // void f(map::value_type r) {} public void testRebindPattern_236197() throws Exception { + CPPASTNameBase.sAllowNameComputation= true; IASTTranslationUnit tu = parse(getAboveComment(), ParserLanguage.CPP, true, true); CPPNameCollector col = new CPPNameCollector(); tu.accept(col); @@ -2434,6 +2442,7 @@ public class AST2TemplateTests extends AST2BaseTest { // // void main(Iter::iter_reference r); public void testSpecializationSelection_229218() throws Exception { + CPPASTNameBase.sAllowNameComputation= true; IASTTranslationUnit tu = parse(getAboveComment(), ParserLanguage.CPP, true, true); CPPNameCollector col = new CPPNameCollector(); tu.accept(col); @@ -2462,6 +2471,7 @@ public class AST2TemplateTests extends AST2BaseTest { // // B::b::a x; public void testDefaultTemplateParameter() throws Exception { + CPPASTNameBase.sAllowNameComputation= true; IASTTranslationUnit tu = parse(getAboveComment(), ParserLanguage.CPP, true, true); CPPNameCollector col = new CPPNameCollector(); @@ -2746,6 +2756,7 @@ public class AST2TemplateTests extends AST2BaseTest { // C c1; // C<> c2; // ok - default args public void testMissingTemplateArgumentLists() throws Exception { + CPPASTNameBase.sAllowNameComputation=true; BindingAssertionHelper ba=new BindingAssertionHelper(getAboveComment(), true); ba.assertProblem("B b1", 1); ba.assertNonProblem("B<> b2", 1, ICPPTemplateDefinition.class, ICPPClassType.class); @@ -2918,6 +2929,7 @@ public class AST2TemplateTests extends AST2BaseTest { // // A aint; // should be an error public void testTypeArgumentToNonTypeParameter() throws Exception { + CPPASTNameBase.sAllowNameComputation=true; BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), true); ba.assertProblem("A", 6); } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMSelectionParseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMSelectionParseTest.java index 7c09d764eef..1d47a06389b 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMSelectionParseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMSelectionParseTest.java @@ -37,6 +37,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance; import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNameBase; import org.eclipse.cdt.internal.core.model.CProject; import org.eclipse.core.resources.IFile; @@ -630,6 +631,8 @@ public class DOMSelectionParseTest extends DOMSelectionParseBaseTest { } public void testBug72814() throws Exception{ + CPPASTNameBase.sAllowNameComputation= true; + Writer writer = new StringWriter(); writer.write( "namespace N{ \n"); //$NON-NLS-1$ writer.write( " template < class T > class AAA { T _t; };\n"); //$NON-NLS-1$ @@ -653,7 +656,7 @@ public class DOMSelectionParseTest extends DOMSelectionParseBaseTest { assertTrue( node instanceof IASTName ); assertTrue( ((IASTName)node).resolveBinding() instanceof ICPPClassType ); - assertEquals( ((IASTName)node).toString(), "AAA" ); //$NON-NLS-1$ + assertEquals( ((IASTName)node).toString(), "AAA" ); //$NON-NLS-1$ decls = getDeclarationOffTU((IASTName)node); // TODO raised bug 92632 for below // assertEquals(decls.length, 1); @@ -1740,7 +1743,7 @@ public class DOMSelectionParseTest extends DOMSelectionParseBaseTest { assertNotNull( node ); assertTrue( node instanceof IASTName ); assertTrue( ((IASTName)node).resolveBinding() instanceof ICPPTemplateInstance ); - assertEquals( ((IASTName)node).toString(), "AAA" ); //$NON-NLS-1$ + assertEquals( ((IASTName)node).toString(), "AAA" ); //$NON-NLS-1$ IName[] decls = getDeclarationOffTU((IASTName)node); assertEquals(decls.length, 1); assertEquals( decls[0].toString(), "AAA" ); //$NON-NLS-1$ diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/QuickParser2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/QuickParser2Tests.java index 3824314f2c8..07564189be9 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/QuickParser2Tests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/QuickParser2Tests.java @@ -35,6 +35,7 @@ import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ScannerInfo; import org.eclipse.cdt.internal.core.dom.parser.c.CVisitor; import org.eclipse.cdt.internal.core.dom.parser.c.GNUCSourceParser; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNameBase; import org.eclipse.cdt.internal.core.dom.parser.cpp.GNUCPPSourceParser; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor; import org.eclipse.cdt.internal.core.parser.ParserException; @@ -60,7 +61,14 @@ public class QuickParser2Tests extends TestCase { super(name); } - /** + + @Override + protected void setUp() throws Exception { + CPPASTNameBase.sAllowRecursionBindings= false; + CPPASTNameBase.sAllowNameComputation= false; + } + + /** * Test code: int x = 5; Purpose: to test the simple decaration in it's * simplest form. */ @@ -549,6 +557,8 @@ public class QuickParser2Tests extends TestCase { public void testBug36704() throws Exception { Writer code = new StringWriter(); + code.write("template class Typelist;"); + code.write("template struct Length {};"); code.write("template \n"); code.write("struct Length< Typelist >\n"); code.write("{\n"); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/comenthandler/CommentHandlingTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/comenthandler/CommentHandlingTest.java index 77c49872189..63ac04f1a90 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/comenthandler/CommentHandlingTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/comenthandler/CommentHandlingTest.java @@ -21,6 +21,8 @@ import java.util.regex.Pattern; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ast.IASTComment; +import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier; +import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.model.ITranslationUnit; @@ -142,7 +144,7 @@ public class CommentHandlingTest extends RewriteBaseTest { for (IASTNode actNode : keyTree) { ArrayList comments = map.get(actNode); - output.append(actNode.getRawSignature() + " = "); //$NON-NLS-1$ + output.append(getSignature(actNode) + " = "); //$NON-NLS-1$ boolean first = true; for (IASTComment actComment : comments) { if (!first) { @@ -156,6 +158,17 @@ public class CommentHandlingTest extends RewriteBaseTest { return output.toString().trim(); } + private String getSignature(IASTNode actNode) { + if (actNode instanceof IASTCompositeTypeSpecifier) { + IASTCompositeTypeSpecifier comp = (IASTCompositeTypeSpecifier) actNode; + return comp.getName().toString(); + } else if (actNode instanceof IASTEnumerationSpecifier) { + IASTEnumerationSpecifier comp = (IASTEnumerationSpecifier) actNode; + return comp.getName().toString(); + } + return actNode.getRawSignature(); + } + private static String getSeparatingRegexp() { return LEADING_COMMENT_SEPARATOR + ANY_CHAR_REGEXP + TRAILING_COMMENT_SEPARATOR + ANY_CHAR_REGEXP + FREESTANDING_COMMENT_SEPARATOR + ANY_CHAR_REGEXP; } diff --git a/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterCommentedDeclarationTestSource.awts b/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterCommentedDeclarationTestSource.awts index dea92c8ef2e..8a28473db06 100644 --- a/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterCommentedDeclarationTestSource.awts +++ b/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterCommentedDeclarationTestSource.awts @@ -153,6 +153,7 @@ template