Lines 61-66
Link Here
|
61 |
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; |
61 |
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; |
62 |
import org.eclipse.cdt.core.dom.ast.cpp.ICPPReferenceType; |
62 |
import org.eclipse.cdt.core.dom.ast.cpp.ICPPReferenceType; |
63 |
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration; |
63 |
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration; |
|
|
64 |
import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable; |
64 |
import org.eclipse.cdt.core.parser.CodeReader; |
65 |
import org.eclipse.cdt.core.parser.CodeReader; |
65 |
import org.eclipse.cdt.core.parser.IScanner; |
66 |
import org.eclipse.cdt.core.parser.IScanner; |
66 |
import org.eclipse.cdt.core.parser.NullLogService; |
67 |
import org.eclipse.cdt.core.parser.NullLogService; |
Lines 2575-2580
Link Here
|
2575 |
writer.write("#define A( a, b ) a ## b \n"); //$NON-NLS-1$ |
2576 |
writer.write("#define A( a, b ) a ## b \n"); //$NON-NLS-1$ |
2576 |
writer.write("#define FOOBAR 1 \n"); //$NON-NLS-1$ |
2577 |
writer.write("#define FOOBAR 1 \n"); //$NON-NLS-1$ |
2577 |
writer.write("int i = A( FOO, BAR ); \n"); //$NON-NLS-1$ |
2578 |
writer.write("int i = A( FOO, BAR ); \n"); //$NON-NLS-1$ |
2578 |
parse( writer.toString() ); |
2579 |
parse( writer.toString(), true, ParserLanguage.CPP ); |
|
|
2580 |
} |
2581 |
|
2582 |
public void test158192_declspec_on_class() throws Exception { |
2583 |
Writer writer = new StringWriter(); |
2584 |
writer.write("class __declspec(foobar) Foo1 {};\n"); |
2585 |
writer.write("union __declspec(foobar) Foo2 {};\n"); |
2586 |
writer.write("struct __declspec(foobar) Foo3 {};\n"); |
2587 |
IASTTranslationUnit tu = parse( writer.toString(), true, ParserLanguage.CPP, true ); |
2588 |
|
2589 |
CPPNameCollector col = new CPPNameCollector(); |
2590 |
tu.accept( col ); |
2591 |
|
2592 |
assertEquals( 3, col.size()); |
2593 |
ICompositeType fooClass = (ICompositeType) col.getName(0).resolveBinding(); |
2594 |
ICompositeType fooUnion = (ICompositeType) col.getName(1).resolveBinding(); |
2595 |
ICompositeType fooStruct = (ICompositeType) col.getName(2).resolveBinding(); |
2596 |
|
2597 |
assertEquals(ICPPClassType.k_class, fooClass.getKey()); |
2598 |
assertEquals(ICompositeType.k_union, fooUnion.getKey()); |
2599 |
assertEquals(ICompositeType.k_struct, fooStruct.getKey()); |
2600 |
|
2601 |
assertInstances(col, fooClass, 1); |
2602 |
assertInstances(col, fooUnion, 1); |
2603 |
assertInstances(col, fooStruct, 1); |
2579 |
} |
2604 |
} |
|
|
2605 |
|
2606 |
public void test158192_declspec_on_variable() throws Exception { |
2607 |
Writer writer = new StringWriter(); |
2608 |
writer.write("__declspec(foobar) class Foo {} bar;\n"); |
2609 |
IASTTranslationUnit tu = parse( writer.toString(), true, ParserLanguage.CPP, true); |
2610 |
|
2611 |
CPPNameCollector col = new CPPNameCollector(); |
2612 |
tu.accept( col ); |
2613 |
|
2614 |
assertEquals( 2, col.size()); |
2615 |
ICompositeType fooClass = (ICompositeType) col.getName(0).resolveBinding(); |
2616 |
ICPPVariable bar = (ICPPVariable) col.getName(1).resolveBinding(); |
2617 |
|
2618 |
assertInstances(col, fooClass, 1); |
2619 |
assertInstances(col, bar, 1); |
2620 |
} |
2621 |
|
2622 |
// public void test158192_false_positive() throws Exception { |
2623 |
// Writer writer = new StringWriter(); |
2624 |
// writer.write("int * __declspec(foo) bar = 0;\n"); |
2625 |
// IASTTranslationUnit tu = parse( writer.toString(), true, ParserLanguage.CPP, true); |
2626 |
// |
2627 |
// IASTProblem [] problems = CPPVisitor.getProblems(tu); |
2628 |
// assertTrue( problems.length>0 ); |
2629 |
// |
2630 |
// CPPNameCollector col = new CPPNameCollector(); |
2631 |
// tu.accept( col ); |
2632 |
// |
2633 |
// assertEquals( 1, col.size()); |
2634 |
// ICPPVariable bar = (ICPPVariable) col.getName(0).resolveBinding(); |
2635 |
// |
2636 |
// assertInstances(col, bar, 1); |
2637 |
// } |
2580 |
} |
2638 |
} |